From 16ad65607275b661bbbbc0f10e8852c31623a4a4 Mon Sep 17 00:00:00 2001 From: Mathias Markl Date: Tue, 15 May 2018 20:37:48 +0200 Subject: [PATCH] 2.0 --- muk_web_preview_msoffice/README.md | 22 - muk_web_preview_msoffice/__init__.py | 2 - muk_web_preview_msoffice/__manifest__.py | 22 +- .../controllers/__init__.py | 2 - muk_web_preview_msoffice/controllers/main.py | 109 +- muk_web_preview_msoffice/demo/demo.xml | 29 + .../demo/preview_office_demo.xml | 13 - muk_web_preview_msoffice/doc/changelog.rst | 6 + muk_web_preview_msoffice/doc/index.rst | 51 + .../static/description/index.html | 38 +- .../static/lib/SheetJS/xlsx.js | 19 - .../static/lib/handsontable/handsontable.css | 1491 - .../static/lib/handsontable/handsontable.js | 48095 ---------------- .../jquery-binarytransport.js | 52 - .../static/lib/numbro/LICENSE | 22 - .../static/lib/numbro/languages.js | 2937 - .../static/lib/numbro/languages/bg.min.js | 10 - .../static/lib/numbro/languages/cs-CZ.min.js | 11 - .../static/lib/numbro/languages/da-DK.min.js | 11 - .../static/lib/numbro/languages/de-AT.min.js | 11 - .../static/lib/numbro/languages/de-CH.min.js | 11 - .../static/lib/numbro/languages/de-DE.min.js | 13 - .../static/lib/numbro/languages/de-LI.min.js | 11 - .../static/lib/numbro/languages/el.min.js | 10 - .../static/lib/numbro/languages/en-AU.min.js | 11 - .../static/lib/numbro/languages/en-GB.min.js | 11 - .../static/lib/numbro/languages/en-IE.min.js | 11 - .../static/lib/numbro/languages/en-NZ.min.js | 11 - .../static/lib/numbro/languages/en-ZA.min.js | 11 - .../static/lib/numbro/languages/es-AR.min.js | 11 - .../static/lib/numbro/languages/es-CL.min.js | 11 - .../static/lib/numbro/languages/es-CO.min.js | 11 - .../static/lib/numbro/languages/es-CR.min.js | 11 - .../static/lib/numbro/languages/es-ES.min.js | 11 - .../static/lib/numbro/languages/es-NI.min.js | 11 - .../static/lib/numbro/languages/es-PE.min.js | 11 - .../static/lib/numbro/languages/es-PR.min.js | 11 - .../static/lib/numbro/languages/es-SV.min.js | 11 - .../static/lib/numbro/languages/et-EE.min.js | 14 - .../static/lib/numbro/languages/fa-IR.min.js | 11 - .../static/lib/numbro/languages/fi-FI.min.js | 11 - .../static/lib/numbro/languages/fil-PH.min.js | 11 - .../static/lib/numbro/languages/fr-CA.min.js | 11 - .../static/lib/numbro/languages/fr-CH.min.js | 11 - .../static/lib/numbro/languages/fr-FR.min.js | 11 - .../static/lib/numbro/languages/he-IL.min.js | 11 - .../static/lib/numbro/languages/hu-HU.min.js | 14 - .../static/lib/numbro/languages/id.min.js | 10 - .../static/lib/numbro/languages/index.min.js | 2 - .../static/lib/numbro/languages/it-CH.min.js | 11 - .../static/lib/numbro/languages/it-IT.min.js | 11 - .../static/lib/numbro/languages/ja-JP.min.js | 11 - .../static/lib/numbro/languages/ko-KR.min.js | 11 - .../static/lib/numbro/languages/lv-LV.min.js | 11 - .../static/lib/numbro/languages/nb-NO.min.js | 11 - .../static/lib/numbro/languages/nb.min.js | 10 - .../static/lib/numbro/languages/nl-BE.min.js | 11 - .../static/lib/numbro/languages/nl-NL.min.js | 11 - .../static/lib/numbro/languages/nn.min.js | 10 - .../static/lib/numbro/languages/pl-PL.min.js | 11 - .../static/lib/numbro/languages/pt-BR.min.js | 11 - .../static/lib/numbro/languages/pt-PT.min.js | 11 - .../static/lib/numbro/languages/ro-RO.min.js | 10 - .../static/lib/numbro/languages/ro.min.js | 10 - .../static/lib/numbro/languages/ru-RU.min.js | 15 - .../static/lib/numbro/languages/ru-UA.min.js | 15 - .../static/lib/numbro/languages/sk-SK.min.js | 11 - .../static/lib/numbro/languages/sl.min.js | 11 - .../lib/numbro/languages/sr-Cyrl-RS.min.js | 11 - .../static/lib/numbro/languages/sv-SE.min.js | 11 - .../static/lib/numbro/languages/th-TH.min.js | 11 - .../static/lib/numbro/languages/tr-TR.min.js | 14 - .../static/lib/numbro/languages/uk-UA.min.js | 15 - .../static/lib/numbro/languages/zh-CN.min.js | 11 - .../lib/numbro/languages/zh-HANS.min.js | 10 - .../lib/numbro/languages/zh-HANT.min.js | 10 - .../static/lib/numbro/languages/zh-MO.min.js | 11 - .../static/lib/numbro/languages/zh-SG.min.js | 11 - .../static/lib/numbro/languages/zh-TW.min.js | 11 - .../static/lib/numbro/numbro.js | 1293 - .../static/lib/pikaday/LICENSE | 36 - .../static/lib/pikaday/pikaday.css | 222 - .../static/lib/pikaday/pikaday.js | 1193 - .../static/src/js/preview_handler.js | 14 +- muk_web_preview_msoffice/tests/__init__.py | 3 - .../tests/test_msoffice_parse.py | 16 +- 86 files changed, 162 insertions(+), 56223 deletions(-) delete mode 100644 muk_web_preview_msoffice/README.md create mode 100644 muk_web_preview_msoffice/demo/demo.xml delete mode 100644 muk_web_preview_msoffice/demo/preview_office_demo.xml create mode 100644 muk_web_preview_msoffice/doc/index.rst delete mode 100644 muk_web_preview_msoffice/static/lib/SheetJS/xlsx.js delete mode 100644 muk_web_preview_msoffice/static/lib/handsontable/handsontable.css delete mode 100644 muk_web_preview_msoffice/static/lib/handsontable/handsontable.js delete mode 100644 muk_web_preview_msoffice/static/lib/jQueryBinaryTransport/jquery-binarytransport.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/LICENSE delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/bg.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/cs-CZ.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/da-DK.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/de-AT.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/de-CH.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/de-DE.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/de-LI.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/el.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/en-AU.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/en-GB.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/en-IE.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/en-NZ.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/en-ZA.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/es-AR.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/es-CL.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/es-CO.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/es-CR.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/es-ES.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/es-NI.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/es-PE.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/es-PR.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/es-SV.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/et-EE.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/fa-IR.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/fi-FI.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/fil-PH.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/fr-CA.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/fr-CH.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/fr-FR.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/he-IL.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/hu-HU.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/id.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/index.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/it-CH.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/it-IT.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/ja-JP.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/ko-KR.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/lv-LV.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/nb-NO.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/nb.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/nl-BE.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/nl-NL.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/nn.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/pl-PL.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/pt-BR.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/pt-PT.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/ro-RO.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/ro.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/ru-RU.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/ru-UA.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/sk-SK.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/sl.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/sr-Cyrl-RS.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/sv-SE.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/th-TH.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/tr-TR.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/uk-UA.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/zh-CN.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/zh-HANS.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/zh-HANT.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/zh-MO.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/zh-SG.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/languages/zh-TW.min.js delete mode 100644 muk_web_preview_msoffice/static/lib/numbro/numbro.js delete mode 100644 muk_web_preview_msoffice/static/lib/pikaday/LICENSE delete mode 100644 muk_web_preview_msoffice/static/lib/pikaday/pikaday.css delete mode 100644 muk_web_preview_msoffice/static/lib/pikaday/pikaday.js diff --git a/muk_web_preview_msoffice/README.md b/muk_web_preview_msoffice/README.md deleted file mode 100644 index 861f57c..0000000 --- a/muk_web_preview_msoffice/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# MuK Preview MS Office - -Extendes the Preview Dialog to support MS Office files. Currently the following file extensions are supported: - -* Word (*.doc | *.docx, application/msword) -* Excel (*.xls | *.xlsx, application/msexcel) -* PowerPoint (*.ppt | *.pptx, application/mspowerpoint) - -## Dependencies - -### PDF Converter ([pdfconv](https://github.com/keshrath/pdfconv)) - -The Python library pdfconv can be used to convert a variety of different file types to PDF. It can be used on Windows as well as Linux. - -### Windows - -* MS Office [comtypes](http://starship.python.net/crew/theller/comtypes/) -* LibreOffice [unoconv](https://github.com/dagwieers/unoconv) - -### Linux - -* LibreOffice [unoconv](https://github.com/dagwieers/unoconv) diff --git a/muk_web_preview_msoffice/__init__.py b/muk_web_preview_msoffice/__init__.py index 8cfb4c9..6d2ecf5 100644 --- a/muk_web_preview_msoffice/__init__.py +++ b/muk_web_preview_msoffice/__init__.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - ################################################################################### # # Copyright (C) 2017 MuK IT GmbH diff --git a/muk_web_preview_msoffice/__manifest__.py b/muk_web_preview_msoffice/__manifest__.py index b430637..123ecb9 100644 --- a/muk_web_preview_msoffice/__manifest__.py +++ b/muk_web_preview_msoffice/__manifest__.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - ################################################################################### # # Copyright (C) 2017 MuK IT GmbH @@ -22,29 +20,25 @@ { "name": "MuK Preview MS Office", "summary": """MS Office Preview""", - "description": """ - Extendes the Preview Dialog to support MS Office files. - Currently the following file extensions are supported: - - Word (*.doc | *.docx, application/msword) - - Excel (*.xls | *.xlsx, application/msexcel) - - PowerPoint (*.ppt | *.pptx, application/mspowerpoint) - """, - "version": "11.0.1.1.0", + "version": "11.0.2.0.0", "category": "Extra Tools", "license": "AGPL-3", "website": "http://www.mukit.at", + "live_test_url": "https://demo.mukit.at/web/login", "author": "MuK IT", "contributors": [ "Mathias Markl ", ], "depends": [ + "muk_utils", + "muk_converter", "muk_web_preview", ], "data": [ "template/assets.xml", ], "demo": [ - "demo/preview_office_demo.xml", + "demo/demo.xml", ], "qweb": [ "static/src/xml/*.xml", @@ -53,11 +47,7 @@ 'static/description/banner.png' ], "external_dependencies": { - "python": [ - 'requests', - 'cachetools', - 'pdfconv' - ], + "python": [], "bin": [], }, "application": False, diff --git a/muk_web_preview_msoffice/controllers/__init__.py b/muk_web_preview_msoffice/controllers/__init__.py index fa6e444..4b71c01 100644 --- a/muk_web_preview_msoffice/controllers/__init__.py +++ b/muk_web_preview_msoffice/controllers/__init__.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - ################################################################################### # # Copyright (C) 2017 MuK IT GmbH diff --git a/muk_web_preview_msoffice/controllers/main.py b/muk_web_preview_msoffice/controllers/main.py index c600fa3..ae43454 100644 --- a/muk_web_preview_msoffice/controllers/main.py +++ b/muk_web_preview_msoffice/controllers/main.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - ################################################################################### # # Copyright (C) 2017 MuK IT GmbH @@ -19,104 +17,47 @@ # ################################################################################### -import os -import sys -import json import uuid -import base64 -import urllib import logging -import tempfile import mimetypes -import collections -import werkzeug.exceptions -from contextlib import closing -from urllib.parse import urlparse -from urllib.parse import parse_qsl +import werkzeug -from odoo import _ -from odoo import tools -from odoo import http +from odoo import _, http from odoo.http import request -from odoo.http import Response -_logger = logging.getLogger(__name__) +from odoo.addons.muk_utils.http import get_response +from odoo.addons.muk_utils.http import make_error_response -try: - import requests -except ImportError: - _logger.warn('Cannot `import requests`.') +_logger = logging.getLogger(__name__) -try: - from cachetools import TTLCache - pdf_cache = TTLCache(maxsize=25, ttl=1200) -except ImportError: - _logger.warn('Cannot `import cachetools`.') +MIMETPYES = [ + 'application/msword', 'application/ms-word', 'application/vnd.ms-word.document.macroEnabled.12', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.mspowerpoint', + 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' +] -try: - import pdfconv -except ImportError: - _logger.warn('Cannot `import pdfconv`.') - class MSOfficeParserController(http.Controller): - @http.route('/web/preview/converter/msoffice', auth="user", type='http') - def convert_msoffice(self, url, export_filename=None, force_compute=False, **kw): - try: - response = pdf_cache[url] if pdf_cache and not force_compute else None - except KeyError: - response = None - if not response: - return self._get_response(url, export_filename) - return response - - def _get_response(self, url, export_filename): - if not bool(urlparse(url).netloc): - method, params = self._get_route(url) - response = method(**params) - if not response.status_code == 200: - return self._make_error_response(response.status_code,response.description if hasattr(response, 'description') else _("Unknown Error")) - else: - content_type = response.headers['content-type'] - data = response.data + @http.route('/web/preview/msoffice', auth="user", type='http') + def preview_msoffice(self, url, **kw): + status, headers, content = get_response(url) + if status != 200: + return make_error_response(status, content or _("Unknown Error")) + elif headers['content-type'] not in MIMETPYES: + return werkzeug.exceptions.UnsupportedMediaType() else: try: - response = requests.get(url) - content_type = response.headers['content-type'] - data = response.content - except requests.exceptions.RequestException as exception: - return self._make_error_response(exception.response.status_code, exception.response.reason or _("Unknown Error")) - try: - response = self._make_pdf_response(pdfconv.converter.convert_binary2pdf(data, content_type, None, format='binary'), export_filename or uuid.uuid4()) - pdf_cache[url] = response - return response - except KeyError: - return werkzeug.exceptions.UnsupportedMediaType(_("The file couldn't be converted. Unsupported mine type.")) - except (ImportError, IOError, OSError) as error: - _logger.error(error) - return werkzeug.exceptions.InternalServerError(_("An error occurred during the process. Please contact your system administrator.")) - - def _get_route(self, url): - url_parts = url.split('?') - path = url_parts[0] - query_string = url_parts[1] if len(url_parts) > 1 else None - router = request.httprequest.app.get_db_router(request.db).bind('') - match = router.match(path, query_args=query_string) - method = router.match(path, query_args=query_string)[0] - params = dict(parse_qsl(query_string)) - if len(match) > 1: - params.update(match[1]) - return method, params - - def _make_error_response(self, status, message): - exception = werkzeug.exceptions.HTTPException() - exception.code = status - exception.description = message - return exception + filename = "%s%s" % (uuid.uuid4(), mimetypes.guess_extension(headers['content-type'])) + output = request.env['muk_converter.converter'].convert(filename, content) + return self._make_pdf_response(output, "%s.pdf" % filename) + except Exception: + _logger.exception("Error while convert the file.") + return werkzeug.exceptions.InternalServerError() def _make_pdf_response(self, file, filename): headers = [('Content-Type', 'application/pdf'), - ('Content-Disposition', 'attachment;filename="{}";'.format(filename)), + ('Content-Disposition', 'attachment; filename="{}";'.format(filename)), ('Content-Length', len(file))] return request.make_response(file, headers) \ No newline at end of file diff --git a/muk_web_preview_msoffice/demo/demo.xml b/muk_web_preview_msoffice/demo/demo.xml new file mode 100644 index 0000000..f3ed960 --- /dev/null +++ b/muk_web_preview_msoffice/demo/demo.xml @@ -0,0 +1,29 @@ + + + + + + + + sample.doc + sample.doc + application/msword + + + + \ No newline at end of file diff --git a/muk_web_preview_msoffice/demo/preview_office_demo.xml b/muk_web_preview_msoffice/demo/preview_office_demo.xml deleted file mode 100644 index e5105b6..0000000 --- a/muk_web_preview_msoffice/demo/preview_office_demo.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - sample.doc - sample.doc - application/msword - - - - - \ No newline at end of file diff --git a/muk_web_preview_msoffice/doc/changelog.rst b/muk_web_preview_msoffice/doc/changelog.rst index 0a9ed4b..e30788b 100644 --- a/muk_web_preview_msoffice/doc/changelog.rst +++ b/muk_web_preview_msoffice/doc/changelog.rst @@ -1,3 +1,9 @@ +`2.0.0` +------- + +- Migrated to Python 3 +- Removed support for comtypes + `1.1.0` ------- diff --git a/muk_web_preview_msoffice/doc/index.rst b/muk_web_preview_msoffice/doc/index.rst new file mode 100644 index 0000000..1224828 --- /dev/null +++ b/muk_web_preview_msoffice/doc/index.rst @@ -0,0 +1,51 @@ +===================== +MuK Preview MS Office +===================== + +Extendes the Preview Dialog to support MS Office files. Currently the following +file extensions are supported: + +* Word (\*.doc | \*.docx, application/msword) +* Excel (\*.xls | \*.xlsx, application/msexcel) +* PowerPoint (\*.ppt | \*.pptx, application/mspowerpoint) + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug modus and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Configuration +============= + +No additional configuration is needed to use this module. + +Usage +============= + +Go to a binary that contains a office document and open the preview dialog +to view the preview. + +Credits +======= + +Contributors +------------ + +* Mathias Markl + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH `_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/muk_web_preview_msoffice/static/description/index.html b/muk_web_preview_msoffice/static/description/index.html index 2773195..5c3105c 100644 --- a/muk_web_preview_msoffice/static/description/index.html +++ b/muk_web_preview_msoffice/static/description/index.html @@ -5,15 +5,15 @@ Odoo.

MuK IT GmbH - www.mukit.at

-
+
-
+
-
+

Overview

Extendes the Preview Dialog to support MS Office files. Currently the following file extensions are supported:

@@ -26,14 +26,46 @@
+
+

Demo

+
+
+
User:
+
+
+
apps
+
+
+
Password:
+
+
+
demo
+
+
+ +
+

Help and Support

+
Feel free to + contact us, if you need any help with your Odoo integration or + addiontal features.
>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}output=output+_keyStr.charAt(enc1)+_keyStr.charAt(enc2)+_keyStr.charAt(enc3)+_keyStr.charAt(enc4)}return output};exports.decode=function(input,utf8){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}return output}},{}],2:[function(_dereq_,module,exports){"use strict";function CompressedObject(){this.compressedSize=0;this.uncompressedSize=0;this.crc32=0;this.compressionMethod=null;this.compressedContent=null}CompressedObject.prototype={getContent:function(){return null},getCompressedContent:function(){return null}};module.exports=CompressedObject},{}],3:[function(_dereq_,module,exports){"use strict";exports.STORE={magic:"\0\0",compress:function(content){return content},uncompress:function(content){return content},compressInputType:null,uncompressInputType:null};exports.DEFLATE=_dereq_("./flate")},{"./flate":8}],4:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var table=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];module.exports=function crc32(input,crc){if(typeof input==="undefined"||!input.length){return 0}var isArray=utils.getTypeOf(input)!=="string";if(typeof crc=="undefined"){crc=0}var x=0;var y=0;var b=0;crc=crc^-1;for(var i=0,iTop=input.length;i>>8^x}return crc^-1}},{"./utils":21}],5:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");function DataReader(data){this.data=null;this.length=0;this.index=0}DataReader.prototype={checkOffset:function(offset){this.checkIndex(this.index+offset)},checkIndex:function(newIndex){if(this.length=this.index;i--){result=(result<<8)+this.byteAt(i)}this.index+=size;return result},readString:function(size){return utils.transformTo("string",this.readData(size))},readData:function(size){},lastIndexOfSignature:function(sig){},readDate:function(){var dostime=this.readInt(4);return new Date((dostime>>25&127)+1980,(dostime>>21&15)-1,dostime>>16&31,dostime>>11&31,dostime>>5&63,(dostime&31)<<1)}};module.exports=DataReader},{"./utils":21}],6:[function(_dereq_,module,exports){"use strict";exports.base64=false;exports.binary=false;exports.dir=false;exports.createFolders=false;exports.date=null;exports.compression=null;exports.comment=null},{}],7:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");exports.string2binary=function(str){return utils.string2binary(str)};exports.string2Uint8Array=function(str){return utils.transformTo("uint8array",str)};exports.uint8Array2String=function(array){return utils.transformTo("string",array)};exports.string2Blob=function(str){var buffer=utils.transformTo("arraybuffer",str);return utils.arrayBuffer2Blob(buffer)};exports.arrayBuffer2Blob=function(buffer){return utils.arrayBuffer2Blob(buffer)};exports.transformTo=function(outputType,input){return utils.transformTo(outputType,input)};exports.getTypeOf=function(input){return utils.getTypeOf(input)};exports.checkSupport=function(type){return utils.checkSupport(type)};exports.MAX_VALUE_16BITS=utils.MAX_VALUE_16BITS;exports.MAX_VALUE_32BITS=utils.MAX_VALUE_32BITS;exports.pretty=function(str){return utils.pretty(str)};exports.findCompression=function(compressionMethod){return utils.findCompression(compressionMethod)};exports.isRegExp=function(object){return utils.isRegExp(object)}},{"./utils":21}],8:[function(_dereq_,module,exports){"use strict";var USE_TYPEDARRAY=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Uint32Array!=="undefined";var pako=_dereq_("pako");exports.uncompressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.compressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.magic="\b\0";exports.compress=function(input){return pako.deflateRaw(input)};exports.uncompress=function(input){return pako.inflateRaw(input)}},{pako:24}],9:[function(_dereq_,module,exports){"use strict";var base64=_dereq_("./base64");function JSZip(data,options){if(!(this instanceof JSZip))return new JSZip(data,options);this.files={};this.comment=null;this.root="";if(data){this.load(data,options)}this.clone=function(){var newObj=new JSZip;for(var i in this){if(typeof this[i]!=="function"){newObj[i]=this[i]}}return newObj}}JSZip.prototype=_dereq_("./object");JSZip.prototype.load=_dereq_("./load");JSZip.support=_dereq_("./support");JSZip.defaults=_dereq_("./defaults");JSZip.utils=_dereq_("./deprecatedPublicUtils");JSZip.base64={encode:function(input){return base64.encode(input)},decode:function(input){return base64.decode(input)}};JSZip.compressions=_dereq_("./compressions");module.exports=JSZip},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(_dereq_,module,exports){"use strict";var base64=_dereq_("./base64");var ZipEntries=_dereq_("./zipEntries");module.exports=function(data,options){var files,zipEntries,i,input;options=options||{};if(options.base64){data=base64.decode(data)}zipEntries=new ZipEntries(data,options);files=zipEntries.files;for(i=0;i>>8}return hex};var extend=function(){var result={},i,attr;for(i=0;i0?path.substring(0,lastSlash):""};var folderAdd=function(name,createFolders){if(name.slice(-1)!="/"){name+="/"}createFolders=typeof createFolders!=="undefined"?createFolders:false;if(!this.files[name]){fileAdd.call(this,name,null,{dir:true,createFolders:createFolders})}return this.files[name]};var generateCompressedObjectFrom=function(file,compression){var result=new CompressedObject,content;if(file._data instanceof CompressedObject){result.uncompressedSize=file._data.uncompressedSize;result.crc32=file._data.crc32;if(result.uncompressedSize===0||file.dir){compression=compressions["STORE"];result.compressedContent="";result.crc32=0}else if(file._data.compressionMethod===compression.magic){result.compressedContent=file._data.getCompressedContent()}else{content=file._data.getContent();result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}}else{content=getBinaryData(file);if(!content||content.length===0||file.dir){compression=compressions["STORE"];content=""}result.uncompressedSize=content.length;result.crc32=crc32(content);result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}result.compressedSize=result.compressedContent.length;result.compressionMethod=compression.magic;return result};var generateZipParts=function(name,file,compressedObject,offset){var data=compressedObject.compressedContent,utfEncodedFileName=utils.transformTo("string",utf8.utf8encode(file.name)),comment=file.comment||"",utfEncodedComment=utils.transformTo("string",utf8.utf8encode(comment)),useUTF8ForFileName=utfEncodedFileName.length!==file.name.length,useUTF8ForComment=utfEncodedComment.length!==comment.length,o=file.options,dosTime,dosDate,extraFields="",unicodePathExtraField="",unicodeCommentExtraField="",dir,date;if(file._initialMetadata.dir!==file.dir){dir=file.dir}else{dir=o.dir}if(file._initialMetadata.date!==file.date){date=file.date}else{date=o.date}dosTime=date.getHours();dosTime=dosTime<<6;dosTime=dosTime|date.getMinutes();dosTime=dosTime<<5;dosTime=dosTime|date.getSeconds()/2;dosDate=date.getFullYear()-1980;dosDate=dosDate<<4;dosDate=dosDate|date.getMonth()+1;dosDate=dosDate<<5;dosDate=dosDate|date.getDate();if(useUTF8ForFileName){unicodePathExtraField=decToHex(1,1)+decToHex(crc32(utfEncodedFileName),4)+utfEncodedFileName;extraFields+="up"+decToHex(unicodePathExtraField.length,2)+unicodePathExtraField}if(useUTF8ForComment){unicodeCommentExtraField=decToHex(1,1)+decToHex(this.crc32(utfEncodedComment),4)+utfEncodedComment;extraFields+="uc"+decToHex(unicodeCommentExtraField.length,2)+unicodeCommentExtraField}var header="";header+="\n\0";header+=useUTF8ForFileName||useUTF8ForComment?"\0\b":"\0\0";header+=compressedObject.compressionMethod;header+=decToHex(dosTime,2);header+=decToHex(dosDate,2);header+=decToHex(compressedObject.crc32,4);header+=decToHex(compressedObject.compressedSize,4);header+=decToHex(compressedObject.uncompressedSize,4);header+=decToHex(utfEncodedFileName.length,2);header+=decToHex(extraFields.length,2);var fileRecord=signature.LOCAL_FILE_HEADER+header+utfEncodedFileName+extraFields;var dirRecord=signature.CENTRAL_FILE_HEADER+"\0"+header+decToHex(utfEncodedComment.length,2)+"\0\0"+"\0\0"+(dir===true?"\0\0\0":"\0\0\0\0")+decToHex(offset,4)+utfEncodedFileName+extraFields+utfEncodedComment;return{fileRecord:fileRecord,dirRecord:dirRecord,compressedObject:compressedObject}};var out={load:function(stream,options){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(search){var result=[],filename,relativePath,file,fileClone;for(filename in this.files){if(!this.files.hasOwnProperty(filename)){continue}file=this.files[filename];fileClone=new ZipObject(file.name,file._data,extend(file.options));relativePath=filename.slice(this.root.length,filename.length);if(filename.slice(0,this.root.length)===this.root&&search(relativePath,fileClone)){result.push(fileClone)}}return result},file:function(name,data,o){if(arguments.length===1){if(utils.isRegExp(name)){var regexp=name;return this.filter(function(relativePath,file){return!file.dir&®exp.test(relativePath)})}else{return this.filter(function(relativePath,file){return!file.dir&&relativePath===name})[0]||null}}else{name=this.root+name;fileAdd.call(this,name,data,o)}return this},folder:function(arg){if(!arg){return this}if(utils.isRegExp(arg)){return this.filter(function(relativePath,file){return file.dir&&arg.test(relativePath)})}var name=this.root+arg;var newFolder=folderAdd.call(this,name);var ret=this.clone();ret.root=newFolder.name;return ret},remove:function(name){name=this.root+name;var file=this.files[name];if(!file){if(name.slice(-1)!="/"){name+="/"}file=this.files[name]}if(file&&!file.dir){delete this.files[name]}else{var kids=this.filter(function(relativePath,file){return file.name.slice(0,name.length)===name});for(var i=0;i=0;--i){if(this.data[i]===sig0&&this.data[i+1]===sig1&&this.data[i+2]===sig2&&this.data[i+3]===sig3){return i}}return-1};Uint8ArrayReader.prototype.readData=function(size){this.checkOffset(size);if(size===0){return new Uint8Array(0)}var result=this.data.subarray(this.index,this.index+size);this.index+=size;return result};module.exports=Uint8ArrayReader},{"./dataReader":5}],19:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var Uint8ArrayWriter=function(length){this.data=new Uint8Array(length);this.index=0};Uint8ArrayWriter.prototype={append:function(input){if(input.length!==0){input=utils.transformTo("uint8array",input);this.data.set(input,this.index);this.index+=input.length}},finalize:function(){return this.data}};module.exports=Uint8ArrayWriter},{"./utils":21}],20:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var support=_dereq_("./support");var nodeBuffer=_dereq_("./nodeBuffer");var _utf8len=new Array(256);for(var i=0;i<256;i++){_utf8len[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1}_utf8len[254]=_utf8len[254]=1;var string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};var utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max};var buf2string=function(buf){var str,i,out,c,c_len;var len=buf.length;var utf16buf=new Array(len*2);for(out=0,i=0;i4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}if(utf16buf.length!==out){if(utf16buf.subarray){utf16buf=utf16buf.subarray(0,out)}else{utf16buf.length=out}}return utils.applyFromCharCode(utf16buf)};exports.utf8encode=function utf8encode(str){if(support.nodebuffer){return nodeBuffer(str,"utf-8")}return string2buf(str)};exports.utf8decode=function utf8decode(buf){if(support.nodebuffer){return utils.transformTo("nodebuffer",buf).toString("utf-8")}buf=utils.transformTo(support.uint8array?"uint8array":"array",buf);var result=[],k=0,len=buf.length,chunk=65536;while(k1){try{if(type==="array"||type==="nodebuffer"){result.push(String.fromCharCode.apply(null,array.slice(k,Math.min(k+chunk,len))))}else{result.push(String.fromCharCode.apply(null,array.subarray(k,Math.min(k+chunk,len))))}k+=chunk}catch(e){chunk=Math.floor(chunk/2)}}return result.join("")}exports.applyFromCharCode=arrayLikeToString;function arrayLikeToArrayLike(arrayFrom,arrayTo){for(var i=0;i1){throw new Error("Multi-volumes zip are not supported")}},readLocalFiles:function(){var i,file;for(i=0;i0){opt.windowBits=-opt.windowBits}else if(opt.gzip&&opt.windowBits>0&&opt.windowBits<16){opt.windowBits+=16}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_deflate.deflateInit2(this.strm,opt.level,opt.method,opt.windowBits,opt.memLevel,opt.strategy);if(status!==Z_OK){throw new Error(msg[status])}if(opt.header){zlib_deflate.deflateSetHeader(this.strm,opt.header)}};Deflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?Z_FINISH:Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.string2buf(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_deflate.deflate(strm,_mode);if(status!==Z_STREAM_END&&status!==Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.avail_out===0||strm.avail_in===0&&_mode===Z_FINISH){if(this.options.to==="string"){this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output,strm.next_out)))}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}while((strm.avail_in>0||strm.avail_out===0)&&status!==Z_STREAM_END);if(_mode===Z_FINISH){status=zlib_deflate.deflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===Z_OK}return true};Deflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Deflate.prototype.onEnd=function(status){if(status===Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function deflate(input,options){var deflator=new Deflate(options);deflator.push(input,true);if(deflator.err){throw deflator.msg}return deflator.result}function deflateRaw(input,options){options=options||{};options.raw=true;return deflate(input,options)}function gzip(input,options){options=options||{};options.gzip=true;return deflate(input,options)}exports.Deflate=Deflate;exports.deflate=deflate;exports.deflateRaw=deflateRaw;exports.gzip=gzip},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(_dereq_,module,exports){"use strict";var zlib_inflate=_dereq_("./zlib/inflate.js");var utils=_dereq_("./utils/common");var strings=_dereq_("./utils/strings");var c=_dereq_("./zlib/constants");var msg=_dereq_("./zlib/messages");var zstream=_dereq_("./zlib/zstream");var gzheader=_dereq_("./zlib/gzheader");var Inflate=function(options){this.options=utils.assign({chunkSize:16384,windowBits:0,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>=0&&opt.windowBits<16){opt.windowBits=-opt.windowBits;if(opt.windowBits===0){opt.windowBits=-15}}if(opt.windowBits>=0&&opt.windowBits<16&&!(options&&options.windowBits)){opt.windowBits+=32}if(opt.windowBits>15&&opt.windowBits<48){if((opt.windowBits&15)===0){opt.windowBits|=15}}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_inflate.inflateInit2(this.strm,opt.windowBits);if(status!==c.Z_OK){throw new Error(msg[status])}this.header=new gzheader;zlib_inflate.inflateGetHeader(this.strm,this.header)};Inflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;var next_out_utf8,tail,utf8str;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?c.Z_FINISH:c.Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.binstring2buf(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_inflate.inflate(strm,c.Z_NO_FLUSH);if(status!==c.Z_STREAM_END&&status!==c.Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.next_out){if(strm.avail_out===0||status===c.Z_STREAM_END||strm.avail_in===0&&_mode===c.Z_FINISH){if(this.options.to==="string"){next_out_utf8=strings.utf8border(strm.output,strm.next_out);tail=strm.next_out-next_out_utf8;utf8str=strings.buf2string(strm.output,next_out_utf8);strm.next_out=tail;strm.avail_out=chunkSize-tail;if(tail){utils.arraySet(strm.output,strm.output,next_out_utf8,tail,0)}this.onData(utf8str)}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}}while(strm.avail_in>0&&status!==c.Z_STREAM_END);if(status===c.Z_STREAM_END){_mode=c.Z_FINISH}if(_mode===c.Z_FINISH){status=zlib_inflate.inflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===c.Z_OK}return true};Inflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Inflate.prototype.onEnd=function(status){if(status===c.Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function inflate(input,options){var inflator=new Inflate(options);inflator.push(input,true);if(inflator.err){throw inflator.msg}return inflator.result}function inflateRaw(input,options){options=options||{};options.raw=true;return inflate(input,options)}exports.Inflate=Inflate;exports.inflate=inflate;exports.inflateRaw=inflateRaw;exports.ungzip=inflate},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(_dereq_,module,exports){"use strict";var TYPED_OK=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Int32Array!=="undefined";exports.assign=function(obj){var sources=Array.prototype.slice.call(arguments,1);while(sources.length){var source=sources.shift();if(!source){continue}if(typeof source!=="object"){throw new TypeError(source+"must be non-object")}for(var p in source){if(source.hasOwnProperty(p)){obj[p]=source[p]}}}return obj};exports.shrinkBuf=function(buf,size){if(buf.length===size){return buf}if(buf.subarray){return buf.subarray(0,size)}buf.length=size;return buf};var fnTyped={arraySet:function(dest,src,src_offs,len,dest_offs){if(src.subarray&&dest.subarray){dest.set(src.subarray(src_offs,src_offs+len),dest_offs);return}for(var i=0;i=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1}_utf8len[254]=_utf8len[254]=1;exports.string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};function buf2binstring(buf,len){if(len<65537){if(buf.subarray&&STR_APPLY_UIA_OK||!buf.subarray&&STR_APPLY_OK){return String.fromCharCode.apply(null,utils.shrinkBuf(buf,len))}}var result="";for(var i=0;i4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}return buf2binstring(utf16buf,out)};exports.utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max}},{"./common":27}],29:[function(_dereq_,module,exports){"use strict";function adler32(adler,buf,len,pos){var s1=adler&65535|0,s2=adler>>>16&65535|0,n=0;while(len!==0){n=len>2e3?2e3:len;len-=n;do{s1=s1+buf[pos++]|0;s2=s2+s1|0}while(--n);s1%=65521;s2%=65521}return s1|s2<<16|0}module.exports=adler32},{}],30:[function(_dereq_,module,exports){module.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(_dereq_,module,exports){"use strict";function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++){c=c&1?3988292384^c>>>1:c>>>1}table[n]=c}return table}var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc=crc^-1;for(var i=pos;i>>8^t[(crc^buf[i])&255]}return crc^-1}module.exports=crc32},{}],32:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var trees=_dereq_("./trees");var adler32=_dereq_("./adler32");var crc32=_dereq_("./crc32");var msg=_dereq_("./messages");var Z_NO_FLUSH=0;var Z_PARTIAL_FLUSH=1;var Z_FULL_FLUSH=3;var Z_FINISH=4;var Z_BLOCK=5;var Z_OK=0;var Z_STREAM_END=1;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_BUF_ERROR=-5;var Z_DEFAULT_COMPRESSION=-1;var Z_FILTERED=1;var Z_HUFFMAN_ONLY=2;var Z_RLE=3;var Z_FIXED=4;var Z_DEFAULT_STRATEGY=0;var Z_UNKNOWN=2;var Z_DEFLATED=8;var MAX_MEM_LEVEL=9;var MAX_WBITS=15;var DEF_MEM_LEVEL=8;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var MIN_MATCH=3;var MAX_MATCH=258;var MIN_LOOKAHEAD=MAX_MATCH+MIN_MATCH+1;var PRESET_DICT=32;var INIT_STATE=42;var EXTRA_STATE=69;var NAME_STATE=73;var COMMENT_STATE=91;var HCRC_STATE=103;var BUSY_STATE=113;var FINISH_STATE=666;var BS_NEED_MORE=1;var BS_BLOCK_DONE=2;var BS_FINISH_STARTED=3;var BS_FINISH_DONE=4;var OS_CODE=3;function err(strm,errorCode){strm.msg=msg[errorCode];return errorCode}function rank(f){return(f<<1)-(f>4?9:0)}function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}function flush_pending(strm){var s=strm.state;var len=s.pending;if(len>strm.avail_out){len=strm.avail_out}if(len===0){return}utils.arraySet(strm.output,s.pending_buf,s.pending_out,len,strm.next_out);strm.next_out+=len;s.pending_out+=len;strm.total_out+=len;strm.avail_out-=len;s.pending-=len;if(s.pending===0){s.pending_out=0}}function flush_block_only(s,last){trees._tr_flush_block(s,s.block_start>=0?s.block_start:-1,s.strstart-s.block_start,last);s.block_start=s.strstart;flush_pending(s.strm)}function put_byte(s,b){s.pending_buf[s.pending++]=b}function putShortMSB(s,b){s.pending_buf[s.pending++]=b>>>8&255;s.pending_buf[s.pending++]=b&255}function read_buf(strm,buf,start,size){var len=strm.avail_in;if(len>size){len=size}if(len===0){return 0}strm.avail_in-=len;utils.arraySet(buf,strm.input,strm.next_in,len,start);if(strm.state.wrap===1){strm.adler=adler32(strm.adler,buf,len,start)}else if(strm.state.wrap===2){strm.adler=crc32(strm.adler,buf,len,start)}strm.next_in+=len;strm.total_in+=len;return len}function longest_match(s,cur_match){var chain_length=s.max_chain_length;var scan=s.strstart;var match;var len;var best_len=s.prev_length;var nice_match=s.nice_match;var limit=s.strstart>s.w_size-MIN_LOOKAHEAD?s.strstart-(s.w_size-MIN_LOOKAHEAD):0;var _win=s.window;var wmask=s.w_mask;var prev=s.prev;var strend=s.strstart+MAX_MATCH;var scan_end1=_win[scan+best_len-1];var scan_end=_win[scan+best_len];if(s.prev_length>=s.good_match){chain_length>>=2}if(nice_match>s.lookahead){nice_match=s.lookahead}do{match=cur_match;if(_win[match+best_len]!==scan_end||_win[match+best_len-1]!==scan_end1||_win[match]!==_win[scan]||_win[++match]!==_win[scan+1]){continue}scan+=2;match++;do{}while(_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&scanbest_len){s.match_start=cur_match;best_len=len;if(len>=nice_match){break}scan_end1=_win[scan+best_len-1];scan_end=_win[scan+best_len]}}while((cur_match=prev[cur_match&wmask])>limit&&--chain_length!==0);if(best_len<=s.lookahead){return best_len}return s.lookahead}function fill_window(s){var _w_size=s.w_size;var p,n,m,more,str;do{more=s.window_size-s.lookahead-s.strstart;if(s.strstart>=_w_size+(_w_size-MIN_LOOKAHEAD)){utils.arraySet(s.window,s.window,_w_size,_w_size,0);s.match_start-=_w_size;s.strstart-=_w_size;s.block_start-=_w_size;n=s.hash_size;p=n;do{m=s.head[--p];s.head[p]=m>=_w_size?m-_w_size:0}while(--n);n=_w_size;p=n;do{m=s.prev[--p];s.prev[p]=m>=_w_size?m-_w_size:0}while(--n);more+=_w_size}if(s.strm.avail_in===0){break}n=read_buf(s.strm,s.window,s.strstart+s.lookahead,more);s.lookahead+=n;if(s.lookahead+s.insert>=MIN_MATCH){str=s.strstart-s.insert;s.ins_h=s.window[str];s.ins_h=(s.ins_h<s.pending_buf_size-5){max_block_size=s.pending_buf_size-5}for(;;){if(s.lookahead<=1){fill_window(s);if(s.lookahead===0&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.strstart+=s.lookahead;s.lookahead=0;var max_start=s.block_start+max_block_size;if(s.strstart===0||s.strstart>=max_start){s.lookahead=s.strstart-max_start;s.strstart=max_start;flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}if(s.strstart-s.block_start>=s.w_size-MIN_LOOKAHEAD){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.strstart>s.block_start){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_NEED_MORE}function deflate_fast(s,flush){var hash_head;var bflush;for(;;){if(s.lookahead=MIN_MATCH){s.ins_h=(s.ins_h<=MIN_MATCH){bflush=trees._tr_tally(s,s.strstart-s.match_start,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;if(s.match_length<=s.max_lazy_match&&s.lookahead>=MIN_MATCH){s.match_length--;do{s.strstart++;s.ins_h=(s.ins_h<=MIN_MATCH){s.ins_h=(s.ins_h<4096)){s.match_length=MIN_MATCH-1}}if(s.prev_length>=MIN_MATCH&&s.match_length<=s.prev_length){max_insert=s.strstart+s.lookahead-MIN_MATCH;bflush=trees._tr_tally(s,s.strstart-1-s.prev_match,s.prev_length-MIN_MATCH);s.lookahead-=s.prev_length-1;s.prev_length-=2;do{if(++s.strstart<=max_insert){s.ins_h=(s.ins_h<=MIN_MATCH&&s.strstart>0){scan=s.strstart-1;prev=_win[scan];if(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]){strend=s.strstart+MAX_MATCH;do{}while(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&scans.lookahead){s.match_length=s.lookahead}}}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,1,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;s.strstart+=s.match_length;s.match_length=0}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_huff(s,flush){ -var bflush;for(;;){if(s.lookahead===0){fill_window(s);if(s.lookahead===0){if(flush===Z_NO_FLUSH){return BS_NEED_MORE}break}}s.match_length=0;bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}var Config=function(good_length,max_lazy,nice_length,max_chain,func){this.good_length=good_length;this.max_lazy=max_lazy;this.nice_length=nice_length;this.max_chain=max_chain;this.func=func};var configuration_table;configuration_table=[new Config(0,0,0,0,deflate_stored),new Config(4,4,8,4,deflate_fast),new Config(4,5,16,8,deflate_fast),new Config(4,6,32,32,deflate_fast),new Config(4,4,16,16,deflate_slow),new Config(8,16,32,32,deflate_slow),new Config(8,16,128,128,deflate_slow),new Config(8,32,128,256,deflate_slow),new Config(32,128,258,1024,deflate_slow),new Config(32,258,258,4096,deflate_slow)];function lm_init(s){s.window_size=2*s.w_size;zero(s.head);s.max_lazy_match=configuration_table[s.level].max_lazy;s.good_match=configuration_table[s.level].good_length;s.nice_match=configuration_table[s.level].nice_length;s.max_chain_length=configuration_table[s.level].max_chain;s.strstart=0;s.block_start=0;s.lookahead=0;s.insert=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;s.ins_h=0}function DeflateState(){this.strm=null;this.status=0;this.pending_buf=null;this.pending_buf_size=0;this.pending_out=0;this.pending=0;this.wrap=0;this.gzhead=null;this.gzindex=0;this.method=Z_DEFLATED;this.last_flush=-1;this.w_size=0;this.w_bits=0;this.w_mask=0;this.window=null;this.window_size=0;this.prev=null;this.head=null;this.ins_h=0;this.hash_size=0;this.hash_bits=0;this.hash_mask=0;this.hash_shift=0;this.block_start=0;this.match_length=0;this.prev_match=0;this.match_available=0;this.strstart=0;this.match_start=0;this.lookahead=0;this.prev_length=0;this.max_chain_length=0;this.max_lazy_match=0;this.level=0;this.strategy=0;this.good_match=0;this.nice_match=0;this.dyn_ltree=new utils.Buf16(HEAP_SIZE*2);this.dyn_dtree=new utils.Buf16((2*D_CODES+1)*2);this.bl_tree=new utils.Buf16((2*BL_CODES+1)*2);zero(this.dyn_ltree);zero(this.dyn_dtree);zero(this.bl_tree);this.l_desc=null;this.d_desc=null;this.bl_desc=null;this.bl_count=new utils.Buf16(MAX_BITS+1);this.heap=new utils.Buf16(2*L_CODES+1);zero(this.heap);this.heap_len=0;this.heap_max=0;this.depth=new utils.Buf16(2*L_CODES+1);zero(this.depth);this.l_buf=0;this.lit_bufsize=0;this.last_lit=0;this.d_buf=0;this.opt_len=0;this.static_len=0;this.matches=0;this.insert=0;this.bi_buf=0;this.bi_valid=0}function deflateResetKeep(strm){var s;if(!strm||!strm.state){return err(strm,Z_STREAM_ERROR)}strm.total_in=strm.total_out=0;strm.data_type=Z_UNKNOWN;s=strm.state;s.pending=0;s.pending_out=0;if(s.wrap<0){s.wrap=-s.wrap}s.status=s.wrap?INIT_STATE:BUSY_STATE;strm.adler=s.wrap===2?0:1;s.last_flush=Z_NO_FLUSH;trees._tr_init(s);return Z_OK}function deflateReset(strm){var ret=deflateResetKeep(strm);if(ret===Z_OK){lm_init(strm.state)}return ret}function deflateSetHeader(strm,head){if(!strm||!strm.state){return Z_STREAM_ERROR}if(strm.state.wrap!==2){return Z_STREAM_ERROR}strm.state.gzhead=head;return Z_OK}function deflateInit2(strm,level,method,windowBits,memLevel,strategy){if(!strm){return Z_STREAM_ERROR}var wrap=1;if(level===Z_DEFAULT_COMPRESSION){level=6}if(windowBits<0){wrap=0;windowBits=-windowBits}else if(windowBits>15){wrap=2;windowBits-=16}if(memLevel<1||memLevel>MAX_MEM_LEVEL||method!==Z_DEFLATED||windowBits<8||windowBits>15||level<0||level>9||strategy<0||strategy>Z_FIXED){return err(strm,Z_STREAM_ERROR)}if(windowBits===8){windowBits=9}var s=new DeflateState;strm.state=s;s.strm=strm;s.wrap=wrap;s.gzhead=null;s.w_bits=windowBits;s.w_size=1<>1;s.l_buf=(1+2)*s.lit_bufsize;s.level=level;s.strategy=strategy;s.method=method;return deflateReset(strm)}function deflateInit(strm,level){return deflateInit2(strm,level,Z_DEFLATED,MAX_WBITS,DEF_MEM_LEVEL,Z_DEFAULT_STRATEGY)}function deflate(strm,flush){var old_flush,s;var beg,val;if(!strm||!strm.state||flush>Z_BLOCK||flush<0){return strm?err(strm,Z_STREAM_ERROR):Z_STREAM_ERROR}s=strm.state;if(!strm.output||!strm.input&&strm.avail_in!==0||s.status===FINISH_STATE&&flush!==Z_FINISH){return err(strm,strm.avail_out===0?Z_BUF_ERROR:Z_STREAM_ERROR)}s.strm=strm;old_flush=s.last_flush;s.last_flush=flush;if(s.status===INIT_STATE){if(s.wrap===2){strm.adler=0;put_byte(s,31);put_byte(s,139);put_byte(s,8);if(!s.gzhead){put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,OS_CODE);s.status=BUSY_STATE}else{put_byte(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(!s.gzhead.extra?0:4)+(!s.gzhead.name?0:8)+(!s.gzhead.comment?0:16));put_byte(s,s.gzhead.time&255);put_byte(s,s.gzhead.time>>8&255);put_byte(s,s.gzhead.time>>16&255);put_byte(s,s.gzhead.time>>24&255);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,s.gzhead.os&255);if(s.gzhead.extra&&s.gzhead.extra.length){put_byte(s,s.gzhead.extra.length&255);put_byte(s,s.gzhead.extra.length>>8&255)}if(s.gzhead.hcrc){strm.adler=crc32(strm.adler,s.pending_buf,s.pending,0)}s.gzindex=0;s.status=EXTRA_STATE}}else{var header=Z_DEFLATED+(s.w_bits-8<<4)<<8;var level_flags=-1;if(s.strategy>=Z_HUFFMAN_ONLY||s.level<2){level_flags=0}else if(s.level<6){level_flags=1}else if(s.level===6){level_flags=2}else{level_flags=3}header|=level_flags<<6;if(s.strstart!==0){header|=PRESET_DICT}header+=31-header%31;s.status=BUSY_STATE;putShortMSB(s,header);if(s.strstart!==0){putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}strm.adler=1}}if(s.status===EXTRA_STATE){if(s.gzhead.extra){beg=s.pending;while(s.gzindex<(s.gzhead.extra.length&65535)){if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){break}}put_byte(s,s.gzhead.extra[s.gzindex]&255);s.gzindex++}if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(s.gzindex===s.gzhead.extra.length){s.gzindex=0;s.status=NAME_STATE}}else{s.status=NAME_STATE}}if(s.status===NAME_STATE){if(s.gzhead.name){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindexbeg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.gzindex=0;s.status=COMMENT_STATE}}else{s.status=COMMENT_STATE}}if(s.status===COMMENT_STATE){if(s.gzhead.comment){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindexbeg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.status=HCRC_STATE}}else{s.status=HCRC_STATE}}if(s.status===HCRC_STATE){if(s.gzhead.hcrc){if(s.pending+2>s.pending_buf_size){flush_pending(strm)}if(s.pending+2<=s.pending_buf_size){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);strm.adler=0;s.status=BUSY_STATE}}else{s.status=BUSY_STATE}}if(s.pending!==0){flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}else if(strm.avail_in===0&&rank(flush)<=rank(old_flush)&&flush!==Z_FINISH){return err(strm,Z_BUF_ERROR)}if(s.status===FINISH_STATE&&strm.avail_in!==0){return err(strm,Z_BUF_ERROR)}if(strm.avail_in!==0||s.lookahead!==0||flush!==Z_NO_FLUSH&&s.status!==FINISH_STATE){var bstate=s.strategy===Z_HUFFMAN_ONLY?deflate_huff(s,flush):s.strategy===Z_RLE?deflate_rle(s,flush):configuration_table[s.level].func(s,flush);if(bstate===BS_FINISH_STARTED||bstate===BS_FINISH_DONE){s.status=FINISH_STATE}if(bstate===BS_NEED_MORE||bstate===BS_FINISH_STARTED){if(strm.avail_out===0){s.last_flush=-1}return Z_OK}if(bstate===BS_BLOCK_DONE){if(flush===Z_PARTIAL_FLUSH){trees._tr_align(s)}else if(flush!==Z_BLOCK){trees._tr_stored_block(s,0,0,false);if(flush===Z_FULL_FLUSH){zero(s.head);if(s.lookahead===0){s.strstart=0;s.block_start=0;s.insert=0}}}flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}}if(flush!==Z_FINISH){return Z_OK}if(s.wrap<=0){return Z_STREAM_END}if(s.wrap===2){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);put_byte(s,strm.adler>>16&255);put_byte(s,strm.adler>>24&255);put_byte(s,strm.total_in&255);put_byte(s,strm.total_in>>8&255);put_byte(s,strm.total_in>>16&255);put_byte(s,strm.total_in>>24&255)}else{putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}flush_pending(strm);if(s.wrap>0){s.wrap=-s.wrap}return s.pending!==0?Z_OK:Z_STREAM_END}function deflateEnd(strm){var status;if(!strm||!strm.state){return Z_STREAM_ERROR}status=strm.state.status;if(status!==INIT_STATE&&status!==EXTRA_STATE&&status!==NAME_STATE&&status!==COMMENT_STATE&&status!==HCRC_STATE&&status!==BUSY_STATE&&status!==FINISH_STATE){return err(strm,Z_STREAM_ERROR)}strm.state=null;return status===BUSY_STATE?err(strm,Z_DATA_ERROR):Z_OK}exports.deflateInit=deflateInit;exports.deflateInit2=deflateInit2;exports.deflateReset=deflateReset;exports.deflateResetKeep=deflateResetKeep;exports.deflateSetHeader=deflateSetHeader;exports.deflate=deflate;exports.deflateEnd=deflateEnd;exports.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(_dereq_,module,exports){"use strict";function GZheader(){this.text=0;this.time=0;this.xflags=0;this.os=0;this.extra=null;this.extra_len=0;this.name="";this.comment="";this.hcrc=0;this.done=false}module.exports=GZheader},{}],34:[function(_dereq_,module,exports){"use strict";var BAD=30;var TYPE=12;module.exports=function inflate_fast(strm,start){var state;var _in;var last;var _out;var beg;var end;var dmax;var wsize;var whave;var wnext;var window;var hold;var bits;var lcode;var dcode;var lmask;var dmask;var here;var op;var len;var dist;var from;var from_source;var input,output;state=strm.state;_in=strm.next_in;input=strm.input;last=_in+(strm.avail_in-5);_out=strm.next_out;output=strm.output;beg=_out-(start-strm.avail_out);end=_out+(strm.avail_out-257);dmax=state.dmax;wsize=state.wsize;whave=state.whave;wnext=state.wnext;window=state.window;hold=state.hold;bits=state.bits;lcode=state.lencode;dcode=state.distcode;lmask=(1<>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op===0){output[_out++]=here&65535}else if(op&16){len=here&65535;op&=15;if(op){if(bits>>=op;bits-=op}if(bits<15){hold+=input[_in++]<>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op&16){dist=here&65535;op&=15;if(bitsdmax){strm.msg="invalid distance too far back";state.mode=BAD;break top}hold>>>=op;bits-=op;op=_out-beg;if(dist>op){op=dist-op;if(op>whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break top}}from=0;from_source=window;if(wnext===0){from+=wsize-op;if(op2){output[_out++]=from_source[from++];output[_out++]=from_source[from++];output[_out++]=from_source[from++];len-=3}if(len){output[_out++]=from_source[from++];if(len>1){output[_out++]=from_source[from++]}}}else{from=_out-dist;do{output[_out++]=output[from++];output[_out++]=output[from++];output[_out++]=output[from++];len-=3}while(len>2);if(len){output[_out++]=output[from++];if(len>1){output[_out++]=output[from++]}}}}else if((op&64)===0){here=dcode[(here&65535)+(hold&(1<>3;_in-=len;bits-=len<<3;hold&=(1<>>24&255)+(q>>>8&65280)+((q&65280)<<8)+((q&255)<<24)}function InflateState(){this.mode=0;this.last=false;this.wrap=0;this.havedict=false;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset=0;this.extra=0;this.lencode=null;this.distcode=null;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.next=null;this.lens=new utils.Buf16(320);this.work=new utils.Buf16(288);this.lendyn=null;this.distdyn=null;this.sane=0;this.back=0;this.was=0}function inflateResetKeep(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;strm.total_in=strm.total_out=state.total=0;strm.msg="";if(state.wrap){strm.adler=state.wrap&1}state.mode=HEAD;state.last=0;state.havedict=0;state.dmax=32768;state.head=null;state.hold=0;state.bits=0;state.lencode=state.lendyn=new utils.Buf32(ENOUGH_LENS);state.distcode=state.distdyn=new utils.Buf32(ENOUGH_DISTS);state.sane=1;state.back=-1;return Z_OK}function inflateReset(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;state.wsize=0;state.whave=0;state.wnext=0;return inflateResetKeep(strm)}function inflateReset2(strm,windowBits){var wrap;var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if(windowBits<0){wrap=0;windowBits=-windowBits}else{wrap=(windowBits>>4)+1;if(windowBits<48){windowBits&=15}}if(windowBits&&(windowBits<8||windowBits>15)){return Z_STREAM_ERROR}if(state.window!==null&&state.wbits!==windowBits){state.window=null}state.wrap=wrap;state.wbits=windowBits;return inflateReset(strm)}function inflateInit2(strm,windowBits){var ret;var state;if(!strm){return Z_STREAM_ERROR}state=new InflateState;strm.state=state;state.window=null;ret=inflateReset2(strm,windowBits);if(ret!==Z_OK){strm.state=null}return ret}function inflateInit(strm){return inflateInit2(strm,DEF_WBITS)}var virgin=true;var lenfix,distfix;function fixedtables(state){if(virgin){var sym;lenfix=new utils.Buf32(512);distfix=new utils.Buf32(32);sym=0;while(sym<144){state.lens[sym++]=8}while(sym<256){state.lens[sym++]=9}while(sym<280){state.lens[sym++]=7}while(sym<288){state.lens[sym++]=8}inflate_table(LENS,state.lens,0,288,lenfix,0,state.work,{bits:9});sym=0;while(sym<32){state.lens[sym++]=5}inflate_table(DISTS,state.lens,0,32,distfix,0,state.work,{bits:5});virgin=false}state.lencode=lenfix;state.lenbits=9;state.distcode=distfix;state.distbits=5}function updatewindow(strm,src,end,copy){var dist;var state=strm.state;if(state.window===null){state.wsize=1<=state.wsize){utils.arraySet(state.window,src,end-state.wsize,state.wsize,0);state.wnext=0;state.whave=state.wsize}else{dist=state.wsize-state.wnext;if(dist>copy){dist=copy}utils.arraySet(state.window,src,end-copy,dist,state.wnext);copy-=dist;if(copy){utils.arraySet(state.window,src,end-copy,copy,0);state.wnext=copy;state.whave=state.wsize}else{state.wnext+=dist;if(state.wnext===state.wsize){state.wnext=0}if(state.whave>>8&255;state.check=crc32(state.check,hbuf,2,0);hold=0;bits=0;state.mode=FLAGS;break}state.flags=0;if(state.head){state.head.done=false}if(!(state.wrap&1)||(((hold&255)<<8)+(hold>>8))%31){strm.msg="incorrect header check";state.mode=BAD;break}if((hold&15)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}hold>>>=4;bits-=4;len=(hold&15)+8;if(state.wbits===0){state.wbits=len}else if(len>state.wbits){strm.msg="invalid window size";state.mode=BAD;break}state.dmax=1<>8&1}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=TIME;case TIME:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<>>8&255;hbuf[2]=hold>>>16&255;hbuf[3]=hold>>>24&255;state.check=crc32(state.check,hbuf,4,0)}hold=0;bits=0;state.mode=OS;case OS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<>8}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=EXLEN;case EXLEN:if(state.flags&1024){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0}else if(state.head){state.head.extra=null}state.mode=EXTRA;case EXTRA:if(state.flags&1024){copy=state.length;if(copy>have){copy=have}if(copy){if(state.head){len=state.head.extra_len-state.length;if(!state.head.extra){state.head.extra=new Array(state.head.extra_len)}utils.arraySet(state.head.extra,input,next,copy,len)}if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;state.length-=copy}if(state.length){break inf_leave}}state.length=0;state.mode=NAME;case NAME:if(state.flags&2048){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.name+=String.fromCharCode(len)}}while(len&©>9&1;state.head.done=true}strm.adler=state.check=0;state.mode=TYPE;break;case DICTID:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<>>=bits&7;bits-=bits&7;state.mode=CHECK;break}while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<>>=1;bits-=1;switch(hold&3){case 0:state.mode=STORED;break;case 1:fixedtables(state);state.mode=LEN_;if(flush===Z_TREES){hold>>>=2;bits-=2;break inf_leave}break;case 2:state.mode=TABLE;break;case 3:strm.msg="invalid block type";state.mode=BAD;}hold>>>=2;bits-=2;break;case STORED:hold>>>=bits&7;bits-=bits&7;while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<>>16^65535)){strm.msg="invalid stored block lengths";state.mode=BAD;break}state.length=hold&65535;hold=0;bits=0;state.mode=COPY_;if(flush===Z_TREES){break inf_leave};case COPY_:state.mode=COPY;case COPY:copy=state.length;if(copy){if(copy>have){copy=have}if(copy>left){copy=left}if(copy===0){break inf_leave}utils.arraySet(output,input,next,copy,put);have-=copy;next+=copy;left-=copy;put+=copy;state.length-=copy;break}state.mode=TYPE;break;case TABLE:while(bits<14){if(have===0){break inf_leave}have--;hold+=input[next++]<>>=5;bits-=5;state.ndist=(hold&31)+1;hold>>>=5;bits-=5;state.ncode=(hold&15)+4;hold>>>=4;bits-=4;if(state.nlen>286||state.ndist>30){strm.msg="too many length or distance symbols";state.mode=BAD;break}state.have=0;state.mode=LENLENS;case LENLENS:while(state.have>>=3;bits-=3}while(state.have<19){state.lens[order[state.have++]]=0}state.lencode=state.lendyn;state.lenbits=7;opts={bits:state.lenbits};ret=inflate_table(CODES,state.lens,0,19,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid code lengths set";state.mode=BAD;break}state.have=0;state.mode=CODELENS;case CODELENS:while(state.have>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>>=here_bits;bits-=here_bits;state.lens[state.have++]=here_val}else{if(here_val===16){n=here_bits+2;while(bits>>=here_bits;bits-=here_bits;if(state.have===0){strm.msg="invalid bit length repeat";state.mode=BAD;break}len=state.lens[state.have-1];copy=3+(hold&3);hold>>>=2;bits-=2}else if(here_val===17){n=here_bits+3;while(bits>>=here_bits;bits-=here_bits;len=0;copy=3+(hold&7);hold>>>=3;bits-=3}else{n=here_bits+7;while(bits>>=here_bits;bits-=here_bits;len=0;copy=11+(hold&127);hold>>>=7;bits-=7}if(state.have+copy>state.nlen+state.ndist){strm.msg="invalid bit length repeat";state.mode=BAD;break}while(copy--){state.lens[state.have++]=len}}}if(state.mode===BAD){break}if(state.lens[256]===0){strm.msg="invalid code -- missing end-of-block";state.mode=BAD;break}state.lenbits=9;opts={bits:state.lenbits};ret=inflate_table(LENS,state.lens,0,state.nlen,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid literal/lengths set";state.mode=BAD;break}state.distbits=6;state.distcode=state.distdyn;opts={bits:state.distbits};ret=inflate_table(DISTS,state.lens,state.nlen,state.ndist,state.distcode,0,state.work,opts);state.distbits=opts.bits;if(ret){strm.msg="invalid distances set";state.mode=BAD;break}state.mode=LEN_;if(flush===Z_TREES){break inf_leave};case LEN_:state.mode=LEN;case LEN:if(have>=6&&left>=258){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;inflate_fast(strm,_out);put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;if(state.mode===TYPE){state.back=-1}break}state.back=0;for(;;){here=state.lencode[hold&(1<>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;state.length=here_val;if(here_op===0){state.mode=LIT;break}if(here_op&32){state.back=-1;state.mode=TYPE;break}if(here_op&64){strm.msg="invalid literal/length code";state.mode=BAD;break}state.extra=here_op&15;state.mode=LENEXT;case LENEXT:if(state.extra){n=state.extra;while(bits>>=state.extra;bits-=state.extra;state.back+=state.extra}state.was=state.length;state.mode=DIST;case DIST:for(;;){here=state.distcode[hold&(1<>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;if(here_op&64){strm.msg="invalid distance code";state.mode=BAD;break}state.offset=here_val;state.extra=here_op&15;state.mode=DISTEXT;case DISTEXT:if(state.extra){n=state.extra;while(bits>>=state.extra;bits-=state.extra;state.back+=state.extra}if(state.offset>state.dmax){strm.msg="invalid distance too far back";state.mode=BAD;break}state.mode=MATCH;case MATCH:if(left===0){break inf_leave}copy=_out-left;if(state.offset>copy){copy=state.offset-copy;if(copy>state.whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break}}if(copy>state.wnext){copy-=state.wnext;from=state.wsize-copy}else{from=state.wnext-copy}if(copy>state.length){copy=state.length}from_source=state.window}else{from_source=output;from=put-state.offset;copy=state.length}if(copy>left){copy=left}left-=copy;state.length-=copy;do{output[put++]=from_source[from++]}while(--copy);if(state.length===0){state.mode=LEN}break;case LIT:if(left===0){break inf_leave}output[put++]=state.length;left--;state.mode=LEN;break;case CHECK:if(state.wrap){while(bits<32){if(have===0){break inf_leave}have--;hold|=input[next++]<=1;max--){if(count[max]!==0){break}}if(root>max){root=max}if(max===0){table[table_index++]=1<<24|64<<16|0;table[table_index++]=1<<24|64<<16|0;opts.bits=1;return 0}for(min=1;min0&&(type===CODES||max!==1)){return-1}offs[1]=0;for(len=1;lenENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}var i=0;for(;;){i++;here_bits=len-drop;if(work[sym]end){here_op=extra[extra_index+work[sym]];here_val=base[base_index+work[sym]]}else{here_op=32+64;here_val=0}incr=1<>drop)+fill]=here_bits<<24|here_op<<16|here_val|0}while(fill!==0);incr=1<>=1}if(incr!==0){huff&=incr-1;huff+=incr}else{huff=0}sym++;if(--count[len]===0){if(len===max){break}len=lens[lens_index+work[sym]]}if(len>root&&(huff&mask)!==low){if(drop===0){drop=root}next+=min;curr=len-drop;left=1<ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}low=huff&mask;table[low]=root<<24|curr<<16|next-table_index|0}}if(huff!==0){table[next+huff]=len-drop<<24|64<<16|0}opts.bits=root;return 0}},{"../utils/common":27}],37:[function(_dereq_,module,exports){"use strict";module.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var Z_FIXED=4;var Z_BINARY=0;var Z_TEXT=1;var Z_UNKNOWN=2;function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;var MIN_MATCH=3;var MAX_MATCH=258;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var Buf_size=16;var MAX_BL_BITS=7;var END_BLOCK=256;var REP_3_6=16;var REPZ_3_10=17;var REPZ_11_138=18;var extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var DIST_CODE_LEN=512;var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);var static_dtree=new Array(D_CODES*2);zero(static_dtree);var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);var base_length=new Array(LENGTH_CODES);zero(base_length);var base_dist=new Array(D_CODES);zero(base_dist);var StaticTreeDesc=function(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;this.extra_bits=extra_bits;this.extra_base=extra_base;this.elems=elems;this.max_length=max_length;this.has_stree=static_tree&&static_tree.length};var static_l_desc;var static_d_desc;var static_bl_desc;var TreeDesc=function(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;this.max_code=0;this.stat_desc=stat_desc};function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+(dist>>>7)]}function put_short(s,w){s.pending_buf[s.pending++]=w&255;s.pending_buf[s.pending++]=w>>>8&255}function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size}else{s.bi_buf|=value<>>=1;res<<=1}while(--len>0);return res>>>1}function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&255;s.bi_buf>>=8;s.bi_valid-=8}}function gen_bitlen(s,desc){var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;var n,m;var bits;var xbits;var f;var overflow=0;for(bits=0;bits<=MAX_BITS;bits++){s.bl_count[bits]=0}tree[s.heap[s.heap_max]*2+1]=0;for(h=s.heap_max+1;hmax_length){bits=max_length;overflow++}tree[n*2+1]=bits;if(n>max_code){continue}s.bl_count[bits]++;xbits=0;if(n>=base){xbits=extra[n-base]}f=tree[n*2];s.opt_len+=f*(bits+xbits);if(has_stree){s.static_len+=f*(stree[n*2+1]+xbits)}}if(overflow===0){return}do{bits=max_length-1;while(s.bl_count[bits]===0){bits--}s.bl_count[bits]--;s.bl_count[bits+1]+=2;s.bl_count[max_length]--;overflow-=2}while(overflow>0);for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code){continue}if(tree[m*2+1]!==bits){s.opt_len+=(bits-tree[m*2+1])*tree[m*2];tree[m*2+1]=bits}n--}}}function gen_codes(tree,max_code,bl_count){var next_code=new Array(MAX_BITS+1);var code=0;var bits;var n;for(bits=1;bits<=MAX_BITS;bits++){next_code[bits]=code=code+bl_count[bits-1]<<1}for(n=0;n<=max_code;n++){var len=tree[n*2+1];if(len===0){continue}tree[n*2]=bi_reverse(next_code[len]++,len)}}function tr_static_init(){var n;var bits;var length;var code;var dist;var bl_count=new Array(MAX_BITS+1);length=0;for(code=0;code>=7;for(;code8){put_short(s,s.bi_buf)}else if(s.bi_valid>0){s.pending_buf[s.pending++]=s.bi_buf}s.bi_buf=0;s.bi_valid=0}function copy_block(s,buf,len,header){bi_windup(s);if(header){put_short(s,len);put_short(s,~len)}utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len}function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]>1;n>=1;n--){pqdownheap(s,tree,n)}node=elems;do{n=s.heap[1];s.heap[1]=s.heap[s.heap_len--];pqdownheap(s,tree,1);m=s.heap[1];s.heap[--s.heap_max]=n;s.heap[--s.heap_max]=m;tree[node*2]=tree[n*2]+tree[m*2];s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]=tree[m*2+1]=node;s.heap[1]=node++;pqdownheap(s,tree,1)}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1];gen_bitlen(s,desc);gen_codes(tree,max_code,s.bl_count)}function scan_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}tree[(max_code+1)*2+1]=65535;for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count=3;max_blindex--){if(s.bl_tree[bl_order[max_blindex]*2+1]!==0){break}}s.opt_len+=3*(max_blindex+1)+5+5+4;return max_blindex}function send_all_trees(s,lcodes,dcodes,blcodes){var rank;send_bits(s,lcodes-257,5);send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);for(rank=0;rank>>=1){if(black_mask&1&&s.dyn_ltree[n*2]!==0){return Z_BINARY}}if(s.dyn_ltree[9*2]!==0||s.dyn_ltree[10*2]!==0||s.dyn_ltree[13*2]!==0){return Z_TEXT}for(n=32;n0){if(s.strm.data_type===Z_UNKNOWN){s.strm.data_type=detect_data_type(s)}build_tree(s,s.l_desc);build_tree(s,s.d_desc);max_blindex=build_bl_tree(s);opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;if(static_lenb<=opt_lenb){opt_lenb=static_lenb}}else{opt_lenb=static_lenb=stored_len+5}if(stored_len+4<=opt_lenb&&buf!==-1){_tr_stored_block(s,buf,stored_len,last)}else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);compress_block(s,static_ltree,static_dtree)}else{send_bits(s,(DYN_TREES<<1)+(last?1:0),3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree)}init_block(s);if(last){bi_windup(s)}}function _tr_tally(s,dist,lc){s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&255;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&255;s.pending_buf[s.l_buf+s.last_lit]=lc&255;s.last_lit++;if(dist===0){s.dyn_ltree[lc*2]++}else{s.matches++;dist--;s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]++;s.dyn_dtree[d_code(dist)*2]++}return s.last_lit===s.lit_bufsize-1}exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align},{"../utils/common":27}],39:[function(_dereq_,module,exports){"use strict";function ZStream(){this.input=null;this.next_in=0;this.avail_in=0;this.total_in=0;this.output=null;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg="";this.state=null;this.data_type=2;this.adler=0}module.exports=ZStream},{}]},{},[9])(9)});var XLSX={};(function make_xlsx(XLSX){XLSX.version="0.10.8";var current_codepage=1200;if(typeof module!=="undefined"&&typeof require!=="undefined"){if(typeof cptable==="undefined")global.cptable=require("./dist/cpexcel.js")}function reset_cp(){set_cp(1200)}var set_cp=function(cp){current_codepage=cp};function char_codes(data){var o=[];for(var i=0,len=data.length;i>1;++i)o[i]=String.fromCharCode(data.charCodeAt(2*i)+(data.charCodeAt(2*i+1)<<8));return o.join("")}function utf16beread(data){var o=[];for(var i=0;i>1;++i)o[i]=String.fromCharCode(data.charCodeAt(2*i+1)+(data.charCodeAt(2*i)<<8));return o.join("")}var debom=function(data){var c1=data.charCodeAt(0),c2=data.charCodeAt(1);if(c1==255&&c2==254)return utf16leread(data.substr(2));if(c1==254&&c2==255)return utf16beread(data.substr(2));if(c1==65279)return data.substr(1);return data};var _getchar=function _gc1(x){return String.fromCharCode(x)};if(typeof cptable!=="undefined"){set_cp=function(cp){current_codepage=cp};debom=function(data){if(data.charCodeAt(0)===255&&data.charCodeAt(1)===254){return cptable.utils.decode(1200,char_codes(data.substr(2)))}return data};_getchar=function _gc2(x){if(current_codepage===1200)return String.fromCharCode(x);return cptable.utils.decode(current_codepage,[x&255,x>>8])[0]}}var DENSE=null;var DIF_XL=true;var Base64=function make_b64(){var map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(input){var o="";var c1,c2,c3,e1,e2,e3,e4;for(var i=0;i>2;e2=(c1&3)<<4|c2>>4;e3=(c2&15)<<2|c3>>6;e4=c3&63;if(isNaN(c2)){e3=e4=64}else if(isNaN(c3)){e4=64}o+=map.charAt(e1)+map.charAt(e2)+map.charAt(e3)+map.charAt(e4)}return o},decode:function b64_decode(input){var o="";var c1,c2,c3;var e1,e2,e3,e4;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var i=0;i>4;c2=(e2&15)<<4|e3>>2;c3=(e3&3)<<6|e4;o+=String.fromCharCode(c1);if(e3!=64){o+=String.fromCharCode(c2)}if(e4!=64){o+=String.fromCharCode(c3)}}return o}}}();var has_buf=typeof Buffer!=="undefined"&&typeof process!=="undefined"&&typeof process.versions!=="undefined"&&process.versions.node;function new_raw_buf(len){return new(has_buf?Buffer:Array)(len)}function s2a(s){if(has_buf)return new Buffer(s,"binary");return s.split("").map(function(x){return x.charCodeAt(0)&255})}var bconcat=function(bufs){return[].concat.apply([],bufs)};var chr0=/\u0000/g,chr1=/[\u0001-\u0006]/;var SSF={};var make_ssf=function make_ssf(SSF){SSF.version="0.9.4";function _strrev(x){var o="",i=x.length-1;while(i>=0)o+=x.charAt(i--);return o}function fill(c,l){var o="";while(o.length=d?t:fill("0",d-t.length)+t}function pad_(v,d){var t=""+v;return t.length>=d?t:fill(" ",d-t.length)+t}function rpad_(v,d){var t=""+v;return t.length>=d?t:t+fill(" ",d-t.length)}function pad0r1(v,d){var t=""+Math.round(v);return t.length>=d?t:fill("0",d-t.length)+t}function pad0r2(v,d){var t=""+v;return t.length>=d?t:fill("0",d-t.length)+t}var p2_32=Math.pow(2,32);function pad0r(v,d){if(v>p2_32||v<-p2_32)return pad0r1(v,d);var i=Math.round(v);return pad0r2(i,d)}function isgeneral(s,i){i=i||0;return s.length>=7+i&&(s.charCodeAt(i)|32)===103&&(s.charCodeAt(i+1)|32)===101&&(s.charCodeAt(i+2)|32)===110&&(s.charCodeAt(i+3)|32)===101&&(s.charCodeAt(i+4)|32)===114&&(s.charCodeAt(i+5)|32)===97&&(s.charCodeAt(i+6)|32)===108}var opts_fmt=[["date1904",0],["output",""],["WTF",false]];function fixopts(o){for(var y=0;y!=opts_fmt.length;++y)if(o[opts_fmt[y][0]]===undefined)o[opts_fmt[y][0]]=opts_fmt[y][1]}SSF.opts=opts_fmt;var days=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]];var months=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function init_table(t){t[0]="General";t[1]="0";t[2]="0.00";t[3]="#,##0";t[4]="#,##0.00";t[9]="0%";t[10]="0.00%";t[11]="0.00E+00";t[12]="# ?/?";t[13]="# ??/??";t[14]="m/d/yy";t[15]="d-mmm-yy";t[16]="d-mmm";t[17]="mmm-yy";t[18]="h:mm AM/PM";t[19]="h:mm:ss AM/PM";t[20]="h:mm";t[21]="h:mm:ss";t[22]="m/d/yy h:mm";t[37]="#,##0 ;(#,##0)";t[38]="#,##0 ;[Red](#,##0)";t[39]="#,##0.00;(#,##0.00)";t[40]="#,##0.00;[Red](#,##0.00)";t[45]="mm:ss";t[46]="[h]:mm:ss";t[47]="mmss.0";t[48]="##0.0E+0";t[49]="@";t[56]='"上午/下午 "hh"時"mm"分"ss"秒 "';t[65535]="General"}var table_fmt={};init_table(table_fmt);function frac(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1D){if(Q_1>D){Q=Q_2;P=P_2}else{Q=Q_1;P=P_1}}if(!mixed)return[0,sgn*P,Q];var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]}function general_fmt_int(v){return""+v}SSF._general_int=general_fmt_int;var general_fmt_num=function make_general_fmt_num(){var gnr1=/\.(\d*[1-9])0+$/,gnr2=/\.0*$/,gnr4=/\.(\d*[1-9])0+/,gnr5=/\.0*[Ee]/,gnr6=/(E[+-])(\d)$/;function gfn2(v){var w=v<0?12:11;var o=gfn5(v.toFixed(12));if(o.length<=w)return o;o=v.toPrecision(10);if(o.length<=w)return o;return v.toExponential(5)}function gfn3(v){var o=v.toFixed(11).replace(gnr1,".$1");if(o.length>(v<0?12:11))o=v.toPrecision(6);return o}function gfn4(o){for(var i=0;i!=o.length;++i)if((o.charCodeAt(i)|32)===101)return o.replace(gnr4,".$1").replace(gnr5,"E").replace("e","E").replace(gnr6,"$10$2");return o}function gfn5(o){return o.indexOf(".")>-1?o.replace(gnr2,"").replace(gnr1,".$1"):o}return function general_fmt_num(v){var V=Math.floor(Math.log(Math.abs(v))*Math.LOG10E),o;if(V>=-4&&V<=-1)o=v.toPrecision(10+V);else if(Math.abs(V)<=9)o=gfn2(v);else if(V===10)o=v.toFixed(10).substr(0,12);else o=gfn3(v);return gfn5(gfn4(o))}}();SSF._general_num=general_fmt_num;function general_fmt(v){switch(typeof v){case"string":return v;case"boolean":return v?"TRUE":"FALSE";case"number":return(v|0)===v?general_fmt_int(v):general_fmt_num(v);case"undefined":return"";case"object":if(v==null)return"";}throw new Error("unsupported value in General format: "+v)}SSF._general=general_fmt;function fix_hijri(){return 0}function parse_date_code(v,opts,b2){if(v>2958465||v<0)return null;var date=v|0,time=Math.floor(86400*(v-date)),dow=0;var dout=[];var out={D:date,T:time,u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(out.u)<1e-6)out.u=0;fixopts(opts!=null?opts:opts=[]);if(opts.date1904)date+=1462;if(out.u>.9999){out.u=0;if(++time==86400){out.T=time=0;++date;++out.D}}if(date===60){dout=b2?[1317,10,29]:[1900,2,29];dow=3}else if(date===0){dout=b2?[1317,8,29]:[1900,1,0];dow=6}else{if(date>60)--date;var d=new Date(1900,0,1);d.setDate(d.getDate()+date-1);dout=[d.getFullYear(),d.getMonth()+1,d.getDate()];dow=d.getDay();if(date<60)dow=(dow+6)%7;if(b2)dow=fix_hijri(d,dout)}out.y=dout[0];out.m=dout[1];out.d=dout[2];out.S=time%60;time=Math.floor(time/60);out.M=time%60;time=Math.floor(time/60);out.H=time;out.q=dow;return out}SSF.parse_date_code=parse_date_code;function write_date(type,fmt,val,ss0){var o="",ss=0,tt=0,y=val.y,out,outl=0;switch(type){case 98:y=val.y+543;case 121:switch(fmt.length){case 1:;case 2:out=y%100;outl=2;break;default:out=y%1e4;outl=4;break;}break;case 109:switch(fmt.length){case 1:;case 2:out=val.m;outl=fmt.length;break;case 3:return months[val.m-1][1];case 5:return months[val.m-1][0];default:return months[val.m-1][2];}break;case 100:switch(fmt.length){case 1:;case 2:out=val.d;outl=fmt.length;break;case 3:return days[val.q][0];default:return days[val.q][1];}break;case 104:switch(fmt.length){case 1:;case 2:out=1+(val.H+11)%12;outl=fmt.length;break;default:throw"bad hour format: "+fmt;}break;case 72:switch(fmt.length){case 1:;case 2:out=val.H;outl=fmt.length;break;default:throw"bad hour format: "+fmt;}break;case 77:switch(fmt.length){case 1:;case 2:out=val.M;outl=fmt.length;break;default:throw"bad minute format: "+fmt;}break;case 115:if(val.u===0)switch(fmt){case"s":;case"ss":return pad0(val.S,fmt.length);case".0":;case".00":;case".000":;}switch(fmt){case"s":;case"ss":;case".0":;case".00":;case".000":if(ss0>=2)tt=ss0===3?1e3:100;else tt=ss0===1?10:1;ss=Math.round(tt*(val.S+val.u));if(ss>=60*tt)ss=0;if(fmt==="s")return ss===0?"0":""+ss/tt;o=pad0(ss,2+ss0);if(fmt==="ss")return o.substr(0,2);return"."+o.substr(2,fmt.length-1);default:throw"bad second format: "+fmt;};case 90:switch(fmt){case"[h]":;case"[hh]":out=val.D*24+val.H;break;case"[m]":;case"[mm]":out=(val.D*24+val.H)*60+val.M;break;case"[s]":;case"[ss]":out=((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u);break;default:throw"bad abstime format: "+fmt;}outl=fmt.length===3?1:2;break;case 101:out=y;outl=1;}if(outl>0)return pad0(out,outl);else return""}function commaify(s){if(s.length<=3)return s;var j=s.length%3,o=s.substr(0,j);for(;j!=s.length;j+=3)o+=(o.length>0?",":"")+s.substr(j,3);return o}var write_num=function make_write_num(){var pct1=/%/g;function write_num_pct(type,fmt,val){var sfmt=fmt.replace(pct1,""),mul=fmt.length-sfmt.length;return write_num(type,sfmt,val*Math.pow(10,2*mul))+fill("%",mul)}function write_num_cm(type,fmt,val){var idx=fmt.length-1;while(fmt.charCodeAt(idx-1)===44)--idx;return write_num(type,fmt.substr(0,idx),val/Math.pow(10,3*(fmt.length-idx)))}function write_num_exp(fmt,val){var o;var idx=fmt.indexOf("E")-fmt.indexOf(".")-1;if(fmt.match(/^#+0.0E\+0$/)){if(val==0)return"0.0E+0";else if(val<0)return"-"+write_num_exp(fmt,-val);var period=fmt.indexOf(".");if(period===-1)period=fmt.indexOf("E");var ee=Math.floor(Math.log(val)*Math.LOG10E)%period;if(ee<0)ee+=period;o=(val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);if(o.indexOf("e")===-1){var fakee=Math.floor(Math.log(val)*Math.LOG10E);if(o.indexOf(".")===-1)o=o.charAt(0)+"."+o.substr(1)+"E+"+(fakee-o.length+ee);else o+="E+"+(fakee-ee);while(o.substr(0,2)==="0."){o=o.charAt(0)+o.substr(2,period)+"."+o.substr(2+period);o=o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.")}o=o.replace(/\+-/,"-")}o=o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3){return $1+$2+$3.substr(0,(period+ee)%period)+"."+$3.substr(ee)+"E"})}else o=val.toExponential(idx);if(fmt.match(/E\+00$/)&&o.match(/e[+-]\d$/))o=o.substr(0,o.length-1)+"0"+o.charAt(o.length-1);if(fmt.match(/E\-/)&&o.match(/e\+/))o=o.replace(/e\+/,"e");return o.replace("e","E")}var frac1=/# (\?+)( ?)\/( ?)(\d+)/;function write_num_f1(r,aval,sign){var den=parseInt(r[4],10),rr=Math.round(aval*den),base=Math.floor(rr/den);var myn=rr-base*den,myd=den;return sign+(base===0?"":""+base)+" "+(myn===0?fill(" ",r[1].length+1+r[4].length):pad_(myn,r[1].length)+r[2]+"/"+r[3]+pad0(myd,r[4].length))}function write_num_f2(r,aval,sign){return sign+(aval===0?"":""+aval)+fill(" ",r[1].length+2+r[4].length)}var dec1=/^#*0*\.([0#]+)/;var closeparen=/\).*[0#]/;var phone=/\(###\) ###\\?-####/;function hashq(str){var o="",cc;for(var i=0;i!=str.length;++i)switch(cc=str.charCodeAt(i)){case 35:break;case 63:o+=" ";break;case 48:o+="0";break;default:o+=String.fromCharCode(cc);}return o}function rnd(val,d){var dd=Math.pow(10,d);return""+Math.round(val*dd)/dd}function dec(val,d){if(d<(""+Math.round((val-Math.floor(val))*Math.pow(10,d))).length){return 0}return Math.round((val-Math.floor(val))*Math.pow(10,d))}function carry(val,d){if(d<(""+Math.round((val-Math.floor(val))*Math.pow(10,d))).length){return 1}return 0}function flr(val){if(val<2147483647&&val>-2147483648)return""+(val>=0?val|0:val-1|0);return""+Math.floor(val)}function write_num_flt(type,fmt,val){if(type.charCodeAt(0)===40&&!fmt.match(closeparen)){var ffmt=fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");if(val>=0)return write_num_flt("n",ffmt,val);return"("+write_num_flt("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_flt(type,fmt.substr(fmt.charAt(1)==" "?2:1),val);var o;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0r(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=pad0r(val,0);if(o==="0")o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if(r=fmt.match(frac1))return write_num_f1(r,aval,sign);if(fmt.match(/^#+0+$/))return sign+pad0r(aval,fmt.length-fmt.indexOf("0"));if(r=fmt.match(dec1)){o=rnd(val,r[1].length).replace(/^([^\.]+)$/,"$1."+hashq(r[1])).replace(/\.$/,"."+hashq(r[1])).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",hashq(r[1]).length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if(r=fmt.match(/^(0*)\.(#*)$/)){return sign+rnd(aval,r[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if(r=fmt.match(/^#{1,3},##0(\.?)$/))return sign+commaify(pad0r(aval,0));if(r=fmt.match(/^#,##0\.([#0]*0)$/)){return val<0?"-"+write_num_flt(type,fmt,-val):commaify(""+(Math.floor(val)+carry(val,r[1].length)))+"."+pad0(dec(val,r[1].length),r[1].length)}if(r=fmt.match(/^#,#*,#0/))return write_num_flt(type,fmt.replace(/^#,#*,/,""),val);if(r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/)){o=_strrev(write_num_flt(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri=0)return write_num_int("n",ffmt,val);return"("+write_num_int("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm2(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct2(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp2(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_int(type,fmt.substr(fmt.charAt(1)==" "?2:1),val);var o;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=""+val;if(val===0)o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if(r=fmt.match(frac1))return write_num_f2(r,aval,sign);if(fmt.match(/^#+0+$/))return sign+pad0(aval,fmt.length-fmt.indexOf("0"));if(r=fmt.match(dec1)){o=(""+val).replace(/^([^\.]+)$/,"$1."+hashq(r[1])).replace(/\.$/,"."+hashq(r[1]));o=o.replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",hashq(r[1]).length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if(r=fmt.match(/^(0*)\.(#*)$/)){return sign+(""+aval).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if(r=fmt.match(/^#{1,3},##0(\.?)$/))return sign+commaify(""+aval);if(r=fmt.match(/^#,##0\.([#0]*0)$/)){return val<0?"-"+write_num_int(type,fmt,-val):commaify(""+val)+"."+fill("0",r[1].length)}if(r=fmt.match(/^#,#*,#0/))return write_num_int(type,fmt.replace(/^#,#*,/,""),val);if(r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/)){o=_strrev(write_num_int(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri-1||c=="\\"&&fmt.charAt(i+1)=="-"&&"0#".indexOf(fmt.charAt(i+2))>-1)){}break;case"?":while(fmt.charAt(++i)===c){}break;case"*":++i;if(fmt.charAt(i)==" "||fmt.charAt(i)=="*")++i;break;case"(":;case")":++i;break;case"1":;case"2":;case"3":;case"4":;case"5":;case"6":;case"7":;case"8":;case"9":while(i-1){}break;case" ":++i;break;default:++i;break;}}return false}SSF.is_date=fmt_is_date;function eval_fmt(fmt,v,opts,flen){var out=[],o="",i=0,c="",lst="t",q,dt,j,cc;var hr="H";while(i=12?"P":"A";q.t="T";hr="h";i+=3}else if(fmt.substr(i,5).toUpperCase()==="AM/PM"){if(dt!=null)q.v=dt.H>=12?"PM":"AM";q.t="T";i+=5;hr="h"}else{q.t="t";++i}if(dt==null&&q.t==="T")return"";out[out.length]=q;lst=c;break;case"[":o=c;while(fmt.charAt(i++)!=="]"&&i-1){o=(o.match(/\$([^-\[\]]*)/)||[])[1]||"$";if(!fmt_is_date(fmt))out[out.length]={t:"t",v:o}}break;case".":if(dt!=null){o=c;while((c=fmt.charAt(++i))==="0")o+=c;out[out.length]={t:"s",v:o};break};case"0":;case"#":o=c;while(++i-1||c=="\\"&&fmt.charAt(i+1)=="-"&&i-1)o+=c;out[out.length]={t:"n",v:o};break;case"?":o=c;while(fmt.charAt(++i)===c)o+=c;q={t:c,v:o};out[out.length]=q;lst=c;break;case"*":++i;if(fmt.charAt(i)==" "||fmt.charAt(i)=="*")++i;break;case"(":;case")":out[out.length]={t:flen===1?"t":c,v:c};++i;break;case"1":;case"2":;case"3":;case"4":;case"5":;case"6":;case"7":;case"8":;case"9":o=c;while(i-1)o+=fmt.charAt(i);out[out.length]={t:"D",v:o};break;case" ":out[out.length]={t:c,v:c};++i;break;default:if(",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(c)===-1)throw new Error("unrecognized character "+c+" in "+fmt);out[out.length]={t:"t",v:c};++i;break;}}var bt=0,ss0=0,ssm;for(i=out.length-1,lst="t";i>=0;--i){switch(out[i].t){case"h":;case"H":out[i].t=hr;lst="h";if(bt<1)bt=1;break;case"s":if(ssm=out[i].v.match(/\.0+$/))ss0=Math.max(ss0,ssm[0].length-1);if(bt<3)bt=3;case"d":;case"y":;case"M":;case"e":lst=out[i].t;break;case"m":if(lst==="s"){out[i].t="M";if(bt<2)bt=2}break;case"X":break;case"Z":if(bt<1&&out[i].v.match(/[Hh]/))bt=1;if(bt<2&&out[i].v.match(/[Mm]/))bt=2;if(bt<3&&out[i].v.match(/[Ss]/))bt=3;}}switch(bt){case 0:break;case 1:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}if(dt.M>=60){dt.M=0;++dt.H}break;case 2:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}break;}var nstr="",jj;for(i=0;i0){if(nstr.charCodeAt(0)==40){myv=v<0&&nstr.charCodeAt(0)===45?-v:v;ostr=write_num("(",nstr,myv)}else{myv=v<0&&flen>1?-v:v;ostr=write_num("n",nstr,myv);if(myv<0&&out[0]&&out[0].t=="t"){ostr=ostr.substr(1);out[0].v="-"+out[0].v}}jj=ostr.length-1;var decpt=out.length;for(i=0;i-1){decpt=i;break}var lasti=out.length;if(decpt===out.length&&ostr.indexOf("E")===-1){for(i=out.length-1;i>=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;if(jj>=out[i].v.length-1){jj-=out[i].v.length;out[i].v=ostr.substr(jj+1,out[i].v.length)}else if(jj<0)out[i].v="";else{out[i].v=ostr.substr(0,jj+1);jj=-1}out[i].t="t";lasti=i}if(jj>=0&&lasti=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1;vv=out[i].v.substr(j+1);for(;j>=0;--j){if(jj>=0&&(out[i].v.charAt(j)==="0"||out[i].v.charAt(j)==="#"))vv=ostr.charAt(jj--)+vv}out[i].v=vv;out[i].t="t";lasti=i}if(jj>=0&&lasti-1&&i===decpt?out[i].v.indexOf(".")+1:0;vv=out[i].v.substr(0,j);for(;j-1){myv=flen>1&&v<0&&i>0&&out[i-1].v==="-"?-v:v;out[i].v=write_num(out[i].t,out[i].v,myv);out[i].t="t"}var retval="";for(i=0;i!==out.length;++i)if(out[i]!=null)retval+=out[i].v;return retval}SSF._eval=eval_fmt;var cfregex=/\[[=<>]/;var cfregex2=/\[([=<>]*)(-?\d+\.?\d*)\]/;function chkcond(v,rr){if(rr==null)return false;var thresh=parseFloat(rr[2]);switch(rr[1]){case"=":if(v==thresh)return true;break;case">":if(v>thresh)return true;break;case"<":if(v":if(v!=thresh)return true;break;case">=":if(v>=thresh)return true;break;case"<=":if(v<=thresh)return true;break;}return false}function choose_fmt(f,v){var fmt=split_fmt(f);var l=fmt.length,lat=fmt[l-1].indexOf("@");if(l<4&&lat>-1)--l;if(fmt.length>4)throw new Error("cannot find right format for |"+fmt.join("|")+"|");if(typeof v!=="number")return[4,fmt.length===4||lat>-1?fmt[fmt.length-1]:"@"];switch(fmt.length){case 1:fmt=lat>-1?["General","General","General",fmt[0]]:[fmt[0],fmt[0],fmt[0],"@"];break;case 2:fmt=lat>-1?[fmt[0],fmt[0],fmt[0],fmt[1]]:[fmt[0],fmt[1],fmt[0],"@"];break;case 3:fmt=lat>-1?[fmt[0],fmt[1],fmt[0],fmt[2]]:[fmt[0],fmt[1],fmt[2],"@"];break;case 4:break;}var ff=v>0?fmt[0]:v<0?fmt[1]:fmt[2];if(fmt[0].indexOf("[")===-1&&fmt[1].indexOf("[")===-1)return[l,ff];if(fmt[0].match(cfregex)!=null||fmt[1].match(cfregex)!=null){var m1=fmt[0].match(cfregex2);var m2=fmt[1].match(cfregex2);return chkcond(v,m1)?[l,fmt[0]]:chkcond(v,m2)?[l,fmt[1]]:[l,fmt[m1!=null&&m2!=null?2:1]]}return[l,ff]}function format(fmt,v,o){if(o==null)o={};var sfmt="";switch(typeof fmt){case"string":if(fmt=="m/d/yy"&&o.dateNF)sfmt=o.dateNF;else sfmt=fmt;break;case"number":if(fmt==14&&o.dateNF)sfmt=o.dateNF;else sfmt=(o.table!=null?o.table:table_fmt)[fmt];break;}if(isgeneral(sfmt,0))return general_fmt(v,o);var f=choose_fmt(sfmt,v);if(isgeneral(f[1]))return general_fmt(v,o);if(v===true)v="TRUE";else if(v===false)v="FALSE";else if(v===""||v==null)return"";return eval_fmt(f[1],v,o,f[0])}SSF._table=table_fmt;SSF.load=function load_entry(fmt,idx){table_fmt[idx]=fmt};SSF.format=format;SSF.get_table=function get_table(){return table_fmt};SSF.load_table=function load_table(tbl){for(var i=0;i!=392;++i)if(tbl[i]!==undefined)SSF.load(tbl[i],i)};SSF.init_table=init_table};make_ssf(SSF);var XLMLFormatMap={"General Number":"General","General Date":SSF._table[22],"Long Date":"dddd, mmmm dd, yyyy","Medium Date":SSF._table[15],"Short Date":SSF._table[14],"Long Time":SSF._table[19],"Medium Time":SSF._table[18],"Short Time":SSF._table[20],Currency:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',Fixed:SSF._table[2],Standard:SSF._table[4],Percent:SSF._table[10],Scientific:SSF._table[11],"Yes/No":'"Yes";"Yes";"No";@',"True/False":'"True";"True";"False";@',"On/Off":'"Yes";"Yes";"No";@'};var dateNFregex=/[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;function dateNF_regex(dateNF){var fmt=typeof dateNF=="number"?SSF._table[dateNF]:dateNF;fmt=fmt.replace(dateNFregex,"(\\d+)");return new RegExp("^"+fmt+"$")}function dateNF_fix(str,dateNF,match){var Y=-1,m=-1,d=-1,H=-1,M=-1,S=-1;(dateNF.match(dateNFregex)||[]).forEach(function(n,i){var v=parseInt(match[i+1],10);switch(n.toLowerCase().charAt(0)){case"y":Y=v;break;case"d":d=v;break;case"h":H=v;break;case"s":S=v;break;case"m":if(H>=0)M=v;else m=v;break;}});if(S>=0&&M==-1&&m>=0){M=m;m=-1}var datestr=(""+(Y>=0?Y:(new Date).getFullYear())).slice(-4)+"-"+("00"+(m>=1?m:1)).slice(-2)+"-"+("00"+(d>=1?d:1)).slice(-2);if(datestr.length==7)datestr="0"+datestr;if(datestr.length==8)datestr="20"+datestr;var timestr=("00"+(H>=0?H:0)).slice(-2)+":"+("00"+(M>=0?M:0)).slice(-2)+":"+("00"+(S>=0?S:0)).slice(-2);if(H==-1&&M==-1&&S==-1)return datestr;if(Y==-1&&m==-1&&d==-1)return timestr;return datestr+"T"+timestr}var DO_NOT_EXPORT_CFB=true;var CFB=function _CFB(){var exports={};exports.version="0.11.1";function parse(file){var mver=3;var ssz=512;var nmfs=0;var ndfs=0;var dir_start=0;var minifat_start=0;var difat_start=0;var fat_addrs=[];var blob=file.slice(0,512);prep_blob(blob,0);var mv=check_get_mver(blob);mver=mv[0];switch(mver){case 3:ssz=512;break;case 4:ssz=4096;break;default:throw new Error("Major Version: Expected 3 or 4 saw "+mver);}if(ssz!==512){blob=file.slice(0,ssz);prep_blob(blob,28)}var header=file.slice(0,ssz);check_shifts(blob,mver);var nds=blob.read_shift(4,"i");if(mver===3&&nds!==0)throw new Error("# Directory Sectors: Expected 0 saw "+nds);blob.l+=4;dir_start=blob.read_shift(4,"i");blob.l+=4;blob.chk("00100000","Mini Stream Cutoff Size: ");minifat_start=blob.read_shift(4,"i");nmfs=blob.read_shift(4,"i");difat_start=blob.read_shift(4,"i");ndfs=blob.read_shift(4,"i");for(var q,j=0;j<109;++j){q=blob.read_shift(4,"i");if(q<0)break;fat_addrs[j]=q}var sectors=sectorify(file,ssz);sleuth_fat(difat_start,ndfs,sectors,ssz,fat_addrs);var sector_list=make_sector_list(sectors,dir_start,fat_addrs,ssz);sector_list[dir_start].name="!Directory";if(nmfs>0&&minifat_start!==ENDOFCHAIN)sector_list[minifat_start].name="!MiniFAT";sector_list[fat_addrs[0]].name="!FAT";sector_list.fat_addrs=fat_addrs;sector_list.ssz=ssz;var files={},Paths=[],FileIndex=[],FullPaths=[],FullPathDir={};read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex);build_full_paths(FileIndex,FullPathDir,FullPaths,Paths);var root_name=Paths.shift();Paths.root=root_name;var find_path=make_find_path(FullPaths,Paths,FileIndex,files,root_name);return{raw:{header:header,sectors:sectors},FileIndex:FileIndex,FullPaths:FullPaths,FullPathDir:FullPathDir,find:find_path}}function check_get_mver(blob){blob.chk(HEADER_SIGNATURE,"Header Signature: ");blob.chk(HEADER_CLSID,"CLSID: ");var mver=blob.read_shift(2,"u");return[blob.read_shift(2,"u"),mver]}function check_shifts(blob,mver){var shift=9;blob.l+=2;switch(shift=blob.read_shift(2)){case 9:if(mver!=3)throw new Error("Sector Shift: Expected 9 saw "+shift);break;case 12:if(mver!=4)throw new Error("Sector Shift: Expected 12 saw "+shift);break;default:throw new Error("Sector Shift: Expected 9 or 12 saw "+shift);}blob.chk("0600","Mini Sector Shift: ");blob.chk("000000000000","Reserved: ")}function sectorify(file,ssz){var nsectors=Math.ceil(file.length/ssz)-1;var sectors=new Array(nsectors);for(var i=1;i>>2)-1;if(!sector)return;for(var i=0;i=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];jj=j*4&modulus;if(ssz<4+jj)throw new Error("FAT boundary crossed: "+j+" 4 "+ssz);if(!sectors[addr])break;j=__readInt32LE(sectors[addr],jj)}return{nodes:buf,data:__toBuffer([buf_chain])}}function make_sector_list(sectors,dir_start,fat_addrs,ssz){var sl=sectors.length,sector_list=new Array(sl);var chkd=new Array(sl),buf,buf_chain;var modulus=ssz-1,i,j,k,jj;for(i=0;i=sl)k-=sl;if(chkd[k]===true)continue;buf_chain=[];for(j=k;j>=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];jj=j*4&modulus;if(ssz<4+jj)throw new Error("FAT boundary crossed: "+j+" 4 "+ssz);if(!sectors[addr])break;j=__readInt32LE(sectors[addr],jj)}sector_list[k]={nodes:buf,data:__toBuffer([buf_chain])}}return sector_list}function read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex){var blob;var minifat_store=0,pl=Paths.length?2:0;var sector=sector_list[dir_start].data;var i=0,namelen=0,name,o,ctime,mtime;for(;i0&&minifat_store!==ENDOFCHAIN)sector_list[minifat_store].name="!StreamData"}else if(o.size>=4096){o.storage="fat";if(sector_list[o.start]===undefined)sector_list[o.start]=get_sector_list(sectors,o.start,sector_list.fat_addrs,sector_list.ssz);sector_list[o.start].name=o.name;o.content=sector_list[o.start].data.slice(0,o.size);prep_blob(o.content,0)}else{o.storage="minifat";if(minifat_store!==ENDOFCHAIN&&o.start!==ENDOFCHAIN){o.content=sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size);prep_blob(o.content,0)}}files[name]=o;FileIndex.push(o)}}function read_date(blob,offset){return new Date((__readUInt32LE(blob,offset+4)/1e7*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7-11644473600)*1e3)}var fs;function readFileSync(filename,options){if(fs===undefined)fs=require("fs");return parse(fs.readFileSync(filename),options)}function readSync(blob,options){switch(options!==undefined&&options.type!==undefined?options.type:"base64"){case"file":return readFileSync(blob,options);case"base64":return parse(s2a(Base64.decode(blob)),options);case"binary":return parse(s2a(blob),options);}return parse(blob)}var MSSZ=64;var ENDOFCHAIN=-2;var HEADER_SIGNATURE="d0cf11e0a1b11ae1";var HEADER_CLSID="00000000000000000000000000000000";var consts={MAXREGSECT:-6,DIFSECT:-4,FATSECT:-3,ENDOFCHAIN:ENDOFCHAIN,FREESECT:-1,HEADER_SIGNATURE:HEADER_SIGNATURE,HEADER_MINOR_VERSION:"3e00",MAXREGSID:-6,NOSTREAM:-1,HEADER_CLSID:HEADER_CLSID,EntryTypes:["unknown","storage","stream","lockbytes","property","root"]};exports.read=readSync;exports.parse=parse;exports.utils={ReadShift:ReadShift,CheckField:CheckField,prep_blob:prep_blob,bconcat:bconcat,consts:consts};return exports}();if(typeof require!=="undefined"&&typeof module!=="undefined"&&typeof DO_NOT_EXPORT_CFB==="undefined"){module.exports=CFB}function isval(x){return x!==undefined&&x!==null}function keys(o){return Object.keys(o)}function evert_key(obj,key){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]][key]]=K[i];return o}function evert(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=K[i];return o}function evert_num(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=parseInt(K[i],10);return o}function evert_arr(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i){if(o[obj[K[i]]]==null)o[obj[K[i]]]=[];o[obj[K[i]]].push(K[i])}return o}var basedate=new Date(1899,11,30,0,0,0);var dnthresh=basedate.getTime()+((new Date).getTimezoneOffset()-basedate.getTimezoneOffset())*6e4;function datenum(v,date1904){var epoch=v.getTime();if(date1904)epoch+=1462*24*60*60*1e3;return(epoch-dnthresh)/(24*60*60*1e3)}function numdate(v){var out=new Date;out.setTime(v*24*60*60*1e3+dnthresh);return out}function parse_isodur(s){var sec=0,mt=0,time=false;var m=s.match(/P([0-9\.]+Y)?([0-9\.]+M)?([0-9\.]+D)?T([0-9\.]+H)?([0-9\.]+M)?([0-9\.]+S)?/);if(!m)throw new Error("|"+s+"| is not an ISO8601 Duration");for(var i=1;i!=m.length;++i){if(!m[i])continue;mt=1;if(i>3)time=true;switch(m[i].substr(m[i].length-1)){case"Y":throw new Error("Unsupported ISO Duration Field: "+m[i].substr(m[i].length-1));case"D":mt*=24;case"H":mt*=60;case"M":if(!time)throw new Error("Unsupported ISO Duration Field: M");else mt*=60;case"S":break;}sec+=mt*parseInt(m[i],10)}return sec}var good_pd_date=new Date("2017-02-19T19:06:09.000Z");if(isNaN(good_pd_date.getFullYear()))good_pd_date=new Date("2/19/17");var good_pd=good_pd_date.getFullYear()==2017;function parseDate(str,fixdate){var d=new Date(str);if(good_pd){if(fixdate>0)d.setTime(d.getTime()+d.getTimezoneOffset()*60*1e3);else if(fixdate<0)d.setTime(d.getTime()-d.getTimezoneOffset()*60*1e3);return d}if(str instanceof Date)return str;if(good_pd_date.getFullYear()==1917&&!isNaN(d.getFullYear())){var s=d.getFullYear();if(str.indexOf(""+s)>-1)return d;d.setFullYear(d.getFullYear()+100);return d}var n=str.match(/\d+/g)||["2017","2","19","0","0","0"];return new Date(+n[0],+n[1]-1,+n[2],+n[3]||0,+n[4]||0,+n[5]||0)}function cc2str(arr){var o="";for(var i=0;i!=arr.length;++i)o+=String.fromCharCode(arr[i]);return o}function str2cc(str){var o=[];for(var i=0;i!=str.length;++i)o.push(str.charCodeAt(i));return o}function dup(o){if(typeof JSON!="undefined"&&!Array.isArray(o))return JSON.parse(JSON.stringify(o));if(typeof o!="object"||o==null)return o;var out={};for(var k in o)if(o.hasOwnProperty(k))out[k]=dup(o[k]);return out}function fill(c,l){var o="";while(o.length8099)return n;if((m>0||d>1)&&y!=101)return o;if(s.toLowerCase().match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/))return o;if(!s.match(/[a-zA-Z]/))return o;return n}function getdatastr(data){if(!data)return null;if(data.data)return debom(data.data);if(data.asNodeBuffer&&has_buf)return debom(data.asNodeBuffer().toString("binary"));if(data.asBinary)return debom(data.asBinary());if(data._data&&data._data.getContent)return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));return null}function getdatabin(data){if(!data)return null;if(data.data)return char_codes(data.data);if(data.asNodeBuffer&&has_buf)return data.asNodeBuffer();if(data._data&&data._data.getContent){var o=data._data.getContent();if(typeof o=="string")return str2cc(o);return Array.prototype.slice.call(o)}return null}function getdata(data){return data&&data.name.slice(-4)===".bin"?getdatabin(data):getdatastr(data)}function safegetzipfile(zip,file){var k=keys(zip.files);var f=file.toLowerCase(),g=f.replace(/\//g,"\\");for(var i=0;i\/]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g;var tagregex=/<[^>]*>/g;var nsregex=/<\w*:/,nsregex2=/<(\/?)\w+:/;function parsexmltag(tag,skip_root){var z={};var eq=0,c=0;for(;eq!==tag.length;++eq)if((c=tag.charCodeAt(eq))===32||c===10||c===13)break;if(!skip_root)z[0]=tag.substr(0,eq);if(eq===tag.length)return z;var m=tag.match(attregexg),j=0,v="",i=0,q="",cc="",quot=1;if(m)for(i=0;i!=m.length;++i){cc=m[i];for(c=0;c!=cc.length;++c)if(cc.charCodeAt(c)===61)break;q=cc.substr(0,c);quot=(eq=cc.charCodeAt(c+1))==34||eq==39?1:0;v=cc.substring(c+1+quot,cc.length-quot);for(j=0;j!=q.length;++j)if(q.charCodeAt(j)===58)break;if(j===q.length){if(q.indexOf("_")>0)q=q.substr(0,q.indexOf("_"));z[q]=v}else{var k=(j===5&&q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1);if(z[k]&&q.substr(j-3,3)=="ext")continue;z[k]=v}}return z}function strip_ns(x){return x.replace(nsregex2,"<$1")}var encodings={""":'"',"'":"'",">":">","<":"<","&":"&"};var rencoding=evert(encodings);var unescapexml=function(){var encregex=/&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/g,coderegex=/_x([\da-fA-F]{4})_/g;return function unescapexml(text){var s=text+"";return s.replace(encregex,function($$,$1){return encodings[$$]||String.fromCharCode(parseInt($1,$$.indexOf("x")>-1?16:10))||$$}).replace(coderegex,function(m,c){return String.fromCharCode(parseInt(c,16))})}}();var decregex=/[&<>'"]/g,charegex=/[\u0000-\u0008\u000b-\u001f]/g;function escapexml(text,xml){var s=text+"";return s.replace(decregex,function(y){return rencoding[y]}).replace(charegex,function(s){return"_x"+("000"+s.charCodeAt(0).toString(16)).slice(-4)+"_"})}function escapexmltag(text){return escapexml(text).replace(/ /g,"_x0020_")}var htmlcharegex=/[\u0000-\u001f]/g;function escapehtml(text){var s=text+"";return s.replace(decregex,function(y){return rencoding[y]}).replace(htmlcharegex,function(s){return"&#x"+("000"+s.charCodeAt(0).toString(16)).slice(-4)+";"})}var xlml_fixstr=function(){var entregex=/&#(\d+);/g;function entrepl($$,$1){return String.fromCharCode(parseInt($1,10))}return function xlml_fixstr(str){return str.replace(entregex,entrepl)}}();var xlml_unfixstr=function(){return function xlml_unfixstr(str){return str.replace(/(\r\n|[\r\n])/g," ")}}();function parsexmlbool(value,tag){switch(value){case 1:;case true:;case"1":;case"true":;case"TRUE":return true;default:return false;}}var utf8read=function utf8reada(orig){var out="",i=0,c=0,d=0,e=0,f=0,w=0;while(i191&&c<224){f=(c&31)<<6;f|=d&63;out+=String.fromCharCode(f);continue}e=orig.charCodeAt(i++);if(c<240){out+=String.fromCharCode((c&15)<<12|(d&63)<<6|e&63);continue}f=orig.charCodeAt(i++);w=((c&7)<<18|(d&63)<<12|(e&63)<<6|f&63)-65536;out+=String.fromCharCode(55296+(w>>>10&1023));out+=String.fromCharCode(56320+(w&1023))}return out};if(has_buf){var utf8readb=function utf8readb(data){var out=new Buffer(2*data.length),w,i,j=1,k=0,ww=0,c;for(i=0;i>>10&1023);w=56320+(w&1023)}if(ww!==0){out[k++]=ww&255;out[k++]=ww>>>8;ww=0}out[k++]=w%256;out[k++]=w>>>8}return out.slice(0,k).toString("ucs2")};var corpus="foo bar baz☃🍣";if(utf8read(corpus)==utf8readb(corpus))utf8read=utf8readb;var utf8readc=function utf8readc(data){return Buffer(data,"binary").toString("utf8")};if(utf8read(corpus)==utf8readc(corpus))utf8read=utf8readc}var matchtag=function(){var mtcache={};return function matchtag(f,g){var t=f+"|"+(g||"");if(mtcache[t])return mtcache[t];return mtcache[t]=new RegExp("<(?:\\w+:)?"+f+'(?: xml:space="preserve")?(?:[^>]*)>([\\s\\S]*?)",g||"")}}();var vtregex=function(){var vt_cache={};return function vt_regex(bt){if(vt_cache[bt]!==undefined)return vt_cache[bt];return vt_cache[bt]=new RegExp("<(?:vt:)?"+bt+">([\\s\\S]*?)","g"); -}}();var vtvregex=/<\/?(?:vt:)?variant>/g,vtmregex=/<(?:vt:)([^>]*)>([\s\S]*)"+g+""}function wxt_helper(h){return keys(h).map(function(k){return" "+k+'="'+h[k]+'"'}).join("")}function writextag(f,g,h){return"<"+f+(isval(h)?wxt_helper(h):"")+(isval(g)?(g.match(wtregex)?' xml:space="preserve"':"")+">"+g+""}function write_w3cdtf(d,t){try{return d.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}return""}function write_vt(s){switch(typeof s){case"string":return writextag("vt:lpwstr",s);case"number":return writextag((s|0)==s?"vt:i4":"vt:r8",String(s));case"boolean":return writextag("vt:bool",s?"true":"false");}if(s instanceof Date)return writextag("vt:filetime",write_w3cdtf(s));throw new Error("Unable to serialize "+s)}var XML_HEADER='\r\n';var XMLNS={dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"};XMLNS.main=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"];var XLMLNS={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"};function read_double_le(b,idx){var s=1-2*(b[idx+7]>>>7);var e=((b[idx+7]&127)<<4)+(b[idx+6]>>>4&15);var m=b[idx+6]&15;for(var i=5;i>=0;--i)m=m*256+b[idx+i];if(e==2047)return m==0?s*Infinity:NaN;if(e==0)e=-1022;else{e-=1023;m+=Math.pow(2,52)}return s*Math.pow(2,e-52)*m}function write_double_le(b,v,idx){var bs=(v<0||1/v==-Infinity?1:0)<<7,e=0,m=0;var av=bs?-v:v;if(!isFinite(av)){e=2047;m=isNaN(v)?26985:0}else{e=Math.floor(Math.log(av)*Math.LOG2E);m=v*Math.pow(2,52-e);if(e<=-1023&&(!isFinite(m)||m>4|bs}var __toBuffer,___toBuffer;__toBuffer=___toBuffer=function toBuffer_(bufs){var x=[];for(var i=0;i0?__utf8(b,i+4,i+4+len-1):""};var __lpwstr,___lpwstr;__lpwstr=___lpwstr=function lpwstr_(b,i){var len=2*__readUInt32LE(b,i);return len>0?__utf8(b,i+4,i+4+len-1):""};var __lpp4,___lpp4;__lpp4=___lpp4=function lpp4_(b,i){var len=__readUInt32LE(b,i);return len>0?__utf16le(b,i+4,i+4+len):""};var __8lpp4,___8lpp4;__8lpp4=___8lpp4=function lpp4_8(b,i){var len=__readUInt32LE(b,i);return len>0?__utf8(b,i+4,i+4+len):""};var __double,___double;__double=___double=function(b,idx){return read_double_le(b,idx)};var is_buf=function is_buf_a(a){return Array.isArray(a)};if(has_buf){__utf16le=function utf16le_b(b,s,e){if(!Buffer.isBuffer(b))return ___utf16le(b,s,e);return b.toString("utf16le",s,e)};__hexlify=function(b,s,l){return Buffer.isBuffer(b)?b.toString("hex",s,s+l):___hexlify(b,s,l)};__lpstr=function lpstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpstr(b,i);var len=b.readUInt32LE(i);return len>0?b.toString("utf8",i+4,i+4+len-1):""};__lpwstr=function lpwstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpwstr(b,i);var len=2*b.readUInt32LE(i);return b.toString("utf16le",i+4,i+4+len-1)};__lpp4=function lpp4_b(b,i){if(!Buffer.isBuffer(b))return ___lpp4(b,i);var len=b.readUInt32LE(i);return b.toString("utf16le",i+4,i+4+len)};__8lpp4=function lpp4_8b(b,i){if(!Buffer.isBuffer(b))return ___8lpp4(b,i);var len=b.readUInt32LE(i);return b.toString("utf8",i+4,i+4+len)};__utf8=function utf8_b(b,s,e){return b.toString("utf8",s,e)};__toBuffer=function(bufs){return bufs[0].length>0&&Buffer.isBuffer(bufs[0][0])?Buffer.concat(bufs[0]):___toBuffer(bufs)};bconcat=function(bufs){return Buffer.isBuffer(bufs[0])?Buffer.concat(bufs):[].concat.apply([],bufs)};__double=function double_(b,i){if(Buffer.isBuffer(b))return b.readDoubleLE(i);return ___double(b,i)};is_buf=function is_buf_b(a){return Buffer.isBuffer(a)||Array.isArray(a)}}if(typeof cptable!=="undefined"){__utf16le=function(b,s,e){return cptable.utils.decode(1200,b.slice(s,e))};__utf8=function(b,s,e){return cptable.utils.decode(65001,b.slice(s,e))};__lpstr=function(b,i){var len=__readUInt32LE(b,i);return len>0?cptable.utils.decode(current_codepage,b.slice(i+4,i+4+len-1)):""};__lpwstr=function(b,i){var len=2*__readUInt32LE(b,i);return len>0?cptable.utils.decode(1200,b.slice(i+4,i+4+len-1)):""};__lpp4=function(b,i){var len=__readUInt32LE(b,i);return len>0?cptable.utils.decode(1200,b.slice(i+4,i+4+len)):""};__8lpp4=function(b,i){var len=__readUInt32LE(b,i);return len>0?cptable.utils.decode(65001,b.slice(i+4,i+4+len)):""}}var __readUInt8=function(b,idx){return b[idx]};var __readUInt16LE=function(b,idx){return b[idx+1]*(1<<8)+b[idx]};var __readInt16LE=function(b,idx){var u=b[idx+1]*(1<<8)+b[idx];return u<32768?u:(65535-u+1)*-1};var __readUInt32LE=function(b,idx){return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]};var __readInt32LE=function(b,idx){return b[idx+3]<<24|b[idx+2]<<16|b[idx+1]<<8|b[idx]};var ___unhexlify=function(s){return s.match(/../g).map(function(x){return parseInt(x,16)})};var __unhexlify=typeof Buffer!=="undefined"?function(s){return Buffer.isBuffer(s)?new Buffer(s,"hex"):___unhexlify(s)}:___unhexlify;function ReadShift(size,t){var o="",oI,oR,oo=[],w,vv,i,loc;switch(t){case"dbcs":loc=this.l;if(has_buf&&Buffer.isBuffer(this))o=this.slice(this.l,this.l+2*size).toString("utf16le");else for(i=0;i!=size;++i){o+=String.fromCharCode(__readUInt16LE(this,loc));loc+=2}size*=2;break;case"utf8":o=__utf8(this,this.l,this.l+size);break;case"utf16le":size*=2;o=__utf16le(this,this.l,this.l+size);break;case"wstr":if(typeof cptable!=="undefined")o=cptable.utils.decode(current_codepage,this.slice(this.l,this.l+2*size));else return ReadShift.call(this,size,"dbcs");size=2*size;break;case"lpstr":o=__lpstr(this,this.l);size=5+o.length;break;case"lpwstr":o=__lpwstr(this,this.l);size=5+o.length;if(o[o.length-1]=="\0")size+=2;break;case"lpp4":size=4+__readUInt32LE(this,this.l);o=__lpp4(this,this.l);if(size&2)size+=2;break;case"8lpp4":size=4+__readUInt32LE(this,this.l);o=__8lpp4(this,this.l);if(size&3)size+=4-(size&3);break;case"cstr":size=0;o="";while((w=__readUInt8(this,this.l+size++))!==0)oo.push(_getchar(w));o=oo.join("");break;case"_wstr":size=0;o="";while((w=__readUInt16LE(this,this.l+size))!==0){oo.push(_getchar(w));size+=2}size+=2;o=oo.join("");break;case"dbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt16LE(this,loc)));loc+=2}o=oo.join("");size*=2;break;case"sbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt8(this,loc)));loc+=1}o=oo.join("");break;default:switch(size){case 1:oI=__readUInt8(this,this.l);this.l++;return oI;case 2:oI=(t==="i"?__readInt16LE:__readUInt16LE)(this,this.l);this.l+=2;return oI;case 4:if(t==="i"||(this[this.l+3]&128)===0){oI=__readInt32LE(this,this.l);this.l+=4;return oI}else{oR=__readUInt32LE(this,this.l);this.l+=4}return oR;case 8:if(t==="f"){oR=__double(this,this.l);this.l+=8;return oR};case 16:o=__hexlify(this,this.l,size);break;};}this.l+=size;return o}var __writeUInt16LE=function(b,val,idx){b[idx]=val&255;b[idx+1]=val>>>8&255};var __writeUInt32LE=function(b,val,idx){b[idx]=val&255;b[idx+1]=val>>>8&255;b[idx+2]=val>>>16&255;b[idx+3]=val>>>24&255};var __writeInt32LE=function(b,val,idx){b[idx]=val&255;b[idx+1]=val>>8&255;b[idx+2]=val>>16&255;b[idx+3]=val>>24&255};function WriteShift(t,val,f){var size=0,i=0;if(f==="dbcs"){for(i=0;i!=val.length;++i)__writeUInt16LE(this,val.charCodeAt(i),this.l+2*i);size=2*val.length}else if(f==="sbcs"){for(i=0;i!=val.length;++i)this[this.l+i]=val.charCodeAt(i)&255;size=val.length}else switch(t){case 1:size=1;this[this.l]=val&255;break;case 2:size=2;this[this.l]=val&255;val>>>=8;this[this.l+1]=val&255;break;case 3:size=3;this[this.l]=val&255;val>>>=8;this[this.l+1]=val&255;val>>>=8;this[this.l+2]=val&255;break;case 4:size=4;__writeUInt32LE(this,val,this.l);break;case 8:size=8;if(f==="f"){write_double_le(this,val,this.l);break};case 16:break;case-4:size=4;__writeInt32LE(this,val,this.l);break;}this.l+=size;return this}function CheckField(hexstr,fld){var m=__hexlify(this,this.l,hexstr.length>>1);if(m!==hexstr)throw fld+"Expected "+hexstr+" saw "+m;this.l+=hexstr.length>>1}function prep_blob(blob,pos){blob.l=pos;blob.read_shift=ReadShift;blob.chk=CheckField;blob.write_shift=WriteShift}function parsenoop(blob,length){blob.l+=length}function parsenooplog(blob,length){if(typeof console!="undefined")console.log(blob.slice(blob.l,blob.l+length));blob.l+=length}function writenoop(blob,length){blob.l+=length}function new_buf(sz){var o=new_raw_buf(sz);prep_blob(o,0);return o}function recordhopper(data,cb,opts){if(!data)return;var tmpbyte,cntbyte,length;prep_blob(data,data.l||0);var L=data.length,RT=0,tgt=0;while(data.lcurbuf.l)curbuf=curbuf.slice(0,curbuf.l);if(curbuf.length>0)bufs.push(curbuf);curbuf=null};var next=function ba_next(sz){if(curbuf&&sz=128?1:0)+1+length;if(length>=128)++l;if(length>=16384)++l;if(length>=2097152)++l;var o=ba.next(l);if(t<=127)o.write_shift(1,t);else{o.write_shift(1,(t&127)+128);o.write_shift(1,t>>7)}for(var i=0;i!=4;++i){if(length>=128){o.write_shift(1,(length&127)+128);length>>=7}else{o.write_shift(1,length);break}}if(length>0&&is_buf(payload))ba.push(payload)}function shift_cell_xls(cell,tgt,opts){var out=dup(cell);if(tgt.s){if(out.cRel)out.c+=tgt.s.c;if(out.rRel)out.r+=tgt.s.r}else{out.c+=tgt.c;out.r+=tgt.r}if(!opts||opts.biff<12){while(out.c>=256)out.c-=256;while(out.r>=65536)out.r-=65536}return out}function shift_range_xls(cell,range,opts){var out=dup(cell);out.s=shift_cell_xls(out.s,range.s,opts);out.e=shift_cell_xls(out.e,range.s,opts);return out}function encode_cell_xls(c){var s=encode_cell(c);if(c.cRel===0)s=fix_col(s);if(c.rRel===0)s=fix_row(s);return s}function encode_range_xls(r,opts){if(r.s.r==0&&!r.s.rRel){if(r.e.r==opts.biff>=12?1048575:65535&&!r.e.rRel){return(r.s.cRel?"":"$")+encode_col(r.s.c)+":"+(r.e.cRel?"":"$")+encode_col(r.e.c)}}if(r.s.c==0&&!r.s.cRel){if(r.e.c==opts.biff>=12?65535:255&&!r.e.cRel){return(r.s.rRel?"":"$")+encode_row(r.s.r)+":"+(r.e.rRel?"":"$")+encode_row(r.e.r)}}return encode_cell_xls(r.s)+":"+encode_cell_xls(r.e)}var OFFCRYPTO={};var make_offcrypto=function(O,_crypto){var crypto;if(typeof _crypto!=="undefined")crypto=_crypto;else if(typeof require!=="undefined"){try{crypto=require("crypto")}catch(e){crypto=null}}O.rc4=function(key,data){var S=new Array(256);var c=0,i=0,j=0,t=0;for(i=0;i!=256;++i)S[i]=i;for(i=0;i!=256;++i){j=j+S[i]+key[i%key.length].charCodeAt(0)&255;t=S[i];S[i]=S[j];S[j]=t}i=j=0;var out=Buffer(data.length);for(c=0;c!=data.length;++c){i=i+1&255;j=(j+S[i])%256;t=S[i];S[i]=S[j];S[j]=t;out[c]=data[c]^S[S[i]+S[j]&255]}return out};O.md5=function(hex){if(!crypto)throw new Error("Unsupported crypto");return crypto.createHash("md5").update(hex).digest("hex")}};make_offcrypto(OFFCRYPTO,typeof crypto!=="undefined"?crypto:undefined);function decode_row(rowstr){return parseInt(unfix_row(rowstr),10)-1}function encode_row(row){return""+(row+1)}function fix_row(cstr){return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}function unfix_row(cstr){return cstr.replace(/\$(\d+)$/,"$1")}function decode_col(colstr){var c=unfix_col(colstr),d=0,i=0;for(;i!==c.length;++i)d=26*d+c.charCodeAt(i)-64;return d-1}function encode_col(col){var s="";for(++col;col;col=Math.floor((col-1)/26))s=String.fromCharCode((col-1)%26+65)+s;return s}function fix_col(cstr){return cstr.replace(/^([A-Z])/,"$$$1")}function unfix_col(cstr){return cstr.replace(/^\$([A-Z])/,"$1")}function split_cell(cstr){return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")}function decode_cell(cstr){var splt=split_cell(cstr);return{c:decode_col(splt[0]),r:decode_row(splt[1])}}function encode_cell(cell){return encode_col(cell.c)+encode_row(cell.r)}function fix_cell(cstr){return fix_col(fix_row(cstr))}function unfix_cell(cstr){return unfix_col(unfix_row(cstr))}function decode_range(range){var x=range.split(":").map(decode_cell);return{s:x[0],e:x[x.length-1]}}function encode_range(cs,ce){if(typeof ce==="undefined"||typeof ce==="number"){return encode_range(cs.s,cs.e)}if(typeof cs!=="string")cs=encode_cell(cs);if(typeof ce!=="string")ce=encode_cell(ce);return cs==ce?cs:cs+":"+ce}function safe_decode_range(range){var o={s:{c:0,r:0},e:{c:0,r:0}};var idx=0,i=0,cc=0;var len=range.length;for(idx=0;i26)break;idx=26*idx+cc}o.s.c=--idx;for(idx=0;i9)break;idx=10*idx+cc}o.s.r=--idx;if(i===len||range.charCodeAt(++i)===58){o.e.c=o.s.c;o.e.r=o.s.r;return o}for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}o.e.c=--idx;for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-48)<0||cc>9)break;idx=10*idx+cc}o.e.r=--idx;return o}function safe_format_cell(cell,v){var q=cell.t=="d"&&v instanceof Date;if(cell.z!=null)try{return cell.w=SSF.format(cell.z,q?datenum(v):v)}catch(e){}try{return cell.w=SSF.format((cell.XF||{}).ifmt||(q?14:0),q?datenum(v):v)}catch(e){return""+v}}function format_cell(cell,v,o){if(cell==null||cell.t==null||cell.t=="z")return"";if(cell.w!==undefined)return cell.w;if(cell.t=="d"&&!cell.z&&o&&o.dateNF)cell.z=o.dateNF;if(v==undefined)return safe_format_cell(cell,cell.v,o);return safe_format_cell(cell,v,o)}function sheet_to_workbook(sheet,opts){var n=opts&&opts.sheet?opts.sheet:"Sheet1";var sheets={};sheets[n]=sheet;return{SheetNames:[n],Sheets:sheets}}function aoa_to_sheet(data,opts){var o=opts||{};if(DENSE!=null&&o.dense==null)o.dense=DENSE;var ws=o.dense?[]:{};var range={s:{c:1e7,r:1e7},e:{c:0,r:0}};for(var R=0;R!=data.length;++R){for(var C=0;C!=data[R].length;++C){if(typeof data[R][C]==="undefined")continue;var cell={v:data[R][C]};if(Array.isArray(cell.v)){cell.f=data[R][C][1];cell.v=cell.v[0]}if(range.s.r>R)range.s.r=R;if(range.s.c>C)range.s.c=C;if(range.e.r0)o.write_shift(0,data,"dbcs");return _null?o.slice(0,o.l):o}function parse_StrRun(data,length){return{ich:data.read_shift(2),ifnt:data.read_shift(2)}}function write_StrRun(run,o){if(!o)o=new_buf(4);o.write_shift(2,run.ich||0);o.write_shift(2,run.ifnt||0);return o}function parse_RichStr(data,length){var start=data.l;var flags=data.read_shift(1);var str=parse_XLWideString(data);var rgsStrRun=[];var z={t:str,h:str};if((flags&1)!==0){var dwSizeStrRun=data.read_shift(4);for(var i=0;i!=dwSizeStrRun;++i)rgsStrRun.push(parse_StrRun(data));z.r=rgsStrRun}else z.r=[{ich:0,ifnt:0}];data.l=start+length;return z}function write_RichStr(str,o){var _null=false;if(o==null){_null=true;o=new_buf(15+4*str.t.length)}o.write_shift(1,0);write_XLWideString(str.t,o);return _null?o.slice(0,o.l):o}var parse_BrtCommentText=parse_RichStr;function write_BrtCommentText(str,o){var _null=false;if(o==null){_null=true;o=new_buf(23+4*str.t.length)}o.write_shift(1,1);write_XLWideString(str.t,o);o.write_shift(4,1);write_StrRun({ich:0,ifnt:0},o);return _null?o.slice(0,o.l):o}function parse_XLSBCell(data){var col=data.read_shift(4);var iStyleRef=data.read_shift(2);iStyleRef+=data.read_shift(1)<<16;var fPhShow=data.read_shift(1);return{c:col,iStyleRef:iStyleRef}}function write_XLSBCell(cell,o){if(o==null)o=new_buf(8);o.write_shift(-4,cell.c);o.write_shift(3,cell.iStyleRef||cell.s);o.write_shift(1,0);return o}var parse_XLSBCodeName=parse_XLWideString;var write_XLSBCodeName=write_XLWideString;function parse_XLNullableWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0||cchCharacters===4294967295?"":data.read_shift(cchCharacters,"dbcs")}function write_XLNullableWideString(data,o){var _null=false;if(o==null){_null=true;o=new_buf(127)}o.write_shift(4,data.length>0?data.length:4294967295);if(data.length>0)o.write_shift(0,data,"dbcs");return _null?o.slice(0,o.l):o}var parse_XLNameWideString=parse_XLWideString;var write_XLNameWideString=write_XLWideString;var parse_RelID=parse_XLNullableWideString;var write_RelID=write_XLNullableWideString;function parse_RkNumber(data){var b=data.slice(data.l,data.l+4);var fX100=b[0]&1,fInt=b[0]&2;data.l+=4;b[0]&=252;var RK=fInt===0?__double([0,0,0,0,b[0],b[1],b[2],b[3]],0):__readInt32LE(b,0)>>2;return fX100?RK/100:RK}function write_RkNumber(data,o){if(o==null)o=new_buf(4);var fX100=0,fInt=0,d100=data*100;if(data==(data|0)&&data>=-(1<<29)&&data<1<<29){fInt=1}else if(d100==(d100|0)&&d100>=-(1<<29)&&d100<1<<29){fInt=1;fX100=1}if(fInt)o.write_shift(-4,((fX100?d100:data)<<2)+(fX100+2));else throw new Error("unsupported RkNumber "+data)}function parse_RfX(data){var cell={s:{},e:{}};cell.s.r=data.read_shift(4);cell.e.r=data.read_shift(4);cell.s.c=data.read_shift(4);cell.e.c=data.read_shift(4);return cell}function write_RfX(r,o){if(!o)o=new_buf(16);o.write_shift(4,r.s.r);o.write_shift(4,r.e.r);o.write_shift(4,r.s.c);o.write_shift(4,r.e.c);return o}var parse_UncheckedRfX=parse_RfX;var write_UncheckedRfX=write_RfX;function parse_Xnum(data,length){return data.read_shift(8,"f")}function write_Xnum(data,o){return(o||new_buf(8)).write_shift(8,data,"f")}var BErr={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"};var RBErr=evert_num(BErr);function parse_BrtColor(data,length){var out={};var d=data.read_shift(1);var fValidRGB=d&1;var xColorType=d>>>1;var index=data.read_shift(1);var nTS=data.read_shift(2,"i");var bR=data.read_shift(1);var bG=data.read_shift(1);var bB=data.read_shift(1);var bAlpha=data.read_shift(1);switch(xColorType){case 0:out.auto=1;break;case 1:out.index=index;var icv=XLSIcv[index];if(icv)out.rgb=icv[0].toString(16)+icv[1].toString(16)+icv[2].toString(16);break;case 2:out.rgb=bR.toString(16)+bG.toString(16)+bB.toString(16);break;case 3:out.theme=index;break;}if(nTS!=0)out.tint=nTS>0?nTS/32767:nTS/32768;return out}function write_BrtColor(color,o){if(!o)o=new_buf(8);if(!color||color.auto){o.write_shift(4,0);o.write_shift(4,0);return o}if(color.index){o.write_shift(1,2);o.write_shift(1,color.index)}else if(color.theme){o.write_shift(1,6);o.write_shift(1,color.theme)}else{o.write_shift(1,5);o.write_shift(1,0)}var nTS=color.tint||0;if(nTS>0)nTS*=32767;else if(nTS<0)nTS*=32768;o.write_shift(2,nTS);if(!color.rgb){o.write_shift(2,0);o.write_shift(1,0);o.write_shift(1,0)}else{var rgb=color.rgb||"FFFFFF";o.write_shift(1,parseInt(rgb.substr(0,2),16));o.write_shift(1,parseInt(rgb.substr(2,2),16));o.write_shift(1,parseInt(rgb.substr(4,2),16));o.write_shift(1,255)}return o}function parse_FontFlags(data,length,opts){var d=data.read_shift(1);data.l++;var out={fItalic:d&2,fStrikeout:d&8,fOutline:d&16,fShadow:d&32,fCondense:d&64,fExtend:d&128};return out}function write_FontFlags(font,o){if(!o)o=new_buf(2);var grbit=(font.italic?2:0)|(font.strike?8:0)|(font.outline?16:0)|(font.shadow?32:0)|(font.condense?64:0)|(font.extend?128:0);o.write_shift(1,grbit);o.write_shift(1,0);return o}{var VT_I2=2;var VT_I4=3;var VT_BOOL=11;var VT_VARIANT=12;var VT_UI4=19;var VT_UI8=21;var VT_LPSTR=30;var VT_FILETIME=64;var VT_CF=71;var VT_VECTOR=4096;var VT_STRING=80;var VT_USTR=81;var VT_CUSTOM=[VT_STRING,VT_USTR]}var DocSummaryPIDDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Category",t:VT_STRING},3:{n:"PresentationFormat",t:VT_STRING},4:{n:"ByteCount",t:VT_I4},5:{n:"LineCount",t:VT_I4},6:{n:"ParagraphCount",t:VT_I4},7:{n:"SlideCount",t:VT_I4},8:{n:"NoteCount",t:VT_I4},9:{n:"HiddenCount",t:VT_I4},10:{n:"MultimediaClipCount",t:VT_I4},11:{n:"Scale",t:VT_BOOL},12:{n:"HeadingPair",t:VT_VECTOR|VT_VARIANT},13:{n:"DocParts",t:VT_VECTOR|VT_LPSTR},14:{n:"Manager",t:VT_STRING},15:{n:"Company",t:VT_STRING},16:{n:"LinksDirty",t:VT_BOOL},17:{n:"CharacterCount",t:VT_I4},19:{n:"SharedDoc",t:VT_BOOL},22:{n:"HLinksChanged",t:VT_BOOL},23:{n:"AppVersion",t:VT_I4,p:"version"},26:{n:"ContentType",t:VT_STRING},27:{n:"ContentStatus",t:VT_STRING},28:{n:"Language",t:VT_STRING},29:{n:"Version",t:VT_STRING},255:{}};var SummaryPIDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Title",t:VT_STRING},3:{n:"Subject",t:VT_STRING},4:{n:"Author",t:VT_STRING},5:{n:"Keywords",t:VT_STRING},6:{n:"Comments",t:VT_STRING},7:{n:"Template",t:VT_STRING},8:{n:"LastAuthor",t:VT_STRING},9:{n:"RevNumber",t:VT_STRING},10:{n:"EditTime",t:VT_FILETIME},11:{n:"LastPrinted",t:VT_FILETIME},12:{n:"CreatedDate",t:VT_FILETIME},13:{n:"ModifiedDate",t:VT_FILETIME},14:{n:"PageCount",t:VT_I4},15:{n:"WordCount",t:VT_I4},16:{n:"CharCount",t:VT_I4},17:{n:"Thumbnail",t:VT_CF},18:{n:"ApplicationName",t:VT_LPSTR},19:{n:"DocumentSecurity",t:VT_I4},255:{}};var SpecialProperties={2147483648:{n:"Locale",t:VT_UI4},2147483651:{n:"Behavior",t:VT_UI4},1919054434:{}};(function(){for(var y in SpecialProperties)if(SpecialProperties.hasOwnProperty(y))DocSummaryPIDDSI[y]=SummaryPIDSI[y]=SpecialProperties[y]})();var CountryEnum={1:"US",2:"CA",3:"",7:"RU",20:"EG",30:"GR",31:"NL",32:"BE",33:"FR",34:"ES",36:"HU",39:"IT",41:"CH",43:"AT",44:"GB",45:"DK",46:"SE",47:"NO",48:"PL",49:"DE",52:"MX",55:"BR",61:"AU",64:"NZ",66:"TH",81:"JP",82:"KR",84:"VN",86:"CN",90:"TR",105:"JS",213:"DZ",216:"MA",218:"LY",351:"PT",354:"IS",358:"FI",420:"CZ",886:"TW",961:"LB",962:"JO",963:"SY",964:"IQ",965:"KW",966:"SA",971:"AE",972:"IL",974:"QA",981:"IR",65535:"US"};var XLSFillPattern=[null,"solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];function rgbify(arr){return arr.map(function(x){return[x>>16&255,x>>8&255,x&255]})}var XLSIcv=rgbify([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);var ct2type={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty":"TODO","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.ms-office.chartcolorstyle+xml":"TODO","application/vnd.ms-office.chartstyle+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"TODO","application/vnd.ms-excel.sheetMetadata":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"TODO","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.openxmlformats-officedocument.themeOverride+xml":"TODO","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"vba","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"drawings","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO","image/png":"TODO",sheet:"js"};var CT_LIST=function(){var o={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},comments:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",xlsb:"application/vnd.ms-excel.comments"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},charts:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",xlsb:"application/vnd.ms-excel.chartsheet"},dialogs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",xlsb:"application/vnd.ms-excel.dialogsheet"},macros:{xlsx:"application/vnd.ms-excel.macrosheet+xml",xlsb:"application/vnd.ms-excel.macrosheet"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};keys(o).forEach(function(k){if(!o[k].xlsm)o[k].xlsm=o[k].xlsx});keys(o).forEach(function(k){keys(o[k]).forEach(function(v){ct2type[o[k][v]]=k})});return o}();var type2ct=evert_arr(ct2type);XMLNS.CT="http://schemas.openxmlformats.org/package/2006/content-types";function parse_ct(data,opts){var ct={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],TODO:[],xmlns:""};if(!data||!data.match)return ct;var ctext={};(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0].replace(nsregex,"<")){ -case"0?ct.calcchains[0]:"";ct.sst=ct.strs.length>0?ct.strs[0]:"";ct.style=ct.styles.length>0?ct.styles[0]:"";ct.defaults=ctext;delete ct.calcchains;return ct}var CTYPE_XML_ROOT=writextag("Types",null,{xmlns:XMLNS.CT,"xmlns:xsd":XMLNS.xsd,"xmlns:xsi":XMLNS.xsi});var CTYPE_DEFAULTS=[["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["vml","application/vnd.openxmlformats-officedocument.vmlDrawing"],["bmp","image/bmp"],["png","image/png"],["gif","image/gif"],["emf","image/x-emf"],["wmf","image/x-wmf"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["tif","image/tiff"],["tiff","image/tiff"],["pdf","application/pdf"],["rels",type2ct.rels[0]]].map(function(x){return writextag("Default",null,{Extension:x[0],ContentType:x[1]})});function write_ct(ct,opts){var o=[],v;o[o.length]=XML_HEADER;o[o.length]=CTYPE_XML_ROOT;o=o.concat(CTYPE_DEFAULTS);var f1=function(w){if(ct[w]&&ct[w].length>0){v=ct[w][0];o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})}};var f2=function(w){(ct[w]||[]).forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})})};var f3=function(t){(ct[t]||[]).forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:type2ct[t][0]})})};f1("workbooks");f2("sheets");f2("charts");f3("themes");["strs","styles"].forEach(f1);["coreprops","extprops","custprops"].forEach(f3);f3("vba");f3("comments");f3("drawings");if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}var RELS={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function get_rels_path(file){var n=file.lastIndexOf("/");return file.substr(0,n+1)+"_rels/"+file.substr(n+1)+".rels"}function parse_rels(data,currentFilePath){if(!data)return data;if(currentFilePath.charAt(0)!=="/"){currentFilePath="/"+currentFilePath}var rels={};var hash={};(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);if(y[0]==="2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function add_rels(rels,rId,f,type,relobj){if(!relobj)relobj={};if(!rels["!id"])rels["!id"]={};if(rId<0)for(rId=1;rels["!id"]["rId"+rId];++rId){}relobj.Id="rId"+rId;relobj.Type=type;relobj.Target=f;if(relobj.Type==RELS.HLINK)relobj.TargetMode="External";if(rels["!id"][relobj.Id])throw new Error("Cannot rewrite rId "+rId);rels["!id"][relobj.Id]=relobj;rels[("/"+relobj.Target).replace("//","/")]=relobj;return rId}var CT_ODS="application/vnd.oasis.opendocument.spreadsheet";function parse_manifest(d,opts){var str=xlml_normalize(d);var Rn;var FEtag;while(Rn=xlmlregex.exec(str))switch(Rn[3]){case"manifest":break;case"file-entry":FEtag=parsexmltag(Rn[0],false);if(FEtag.path=="/"&&FEtag.type!==CT_ODS)throw new Error("This OpenDocument is not a spreadsheet");break;case"encryption-data":;case"algorithm":;case"start-key-generation":;case"key-derivation":throw new Error("Unsupported ODS Encryption");default:if(opts&&opts.WTF)throw Rn;}}function write_manifest(manifest,opts){var o=[XML_HEADER];o.push('\n');o.push(' \n');for(var i=0;i\n');o.push("");return o.join("")}function write_rdf_type(file,res,tag){return[' \n',' \n'," \n"].join("")}function write_rdf_has(base,file){return[' \n',' \n'," \n"].join("")}function write_rdf(rdf,opts){var o=[XML_HEADER];o.push('\n');for(var i=0;i!=rdf.length;++i){o.push(write_rdf_type(rdf[i][0],rdf[i][1]));o.push(write_rdf_has("",rdf[i][0]))}o.push(write_rdf_type("","Document","pkg"));o.push("");return o.join("")}var write_meta_ods=function(){var payload='Sheet'+"JS "+XLSX.version+"";return function wmo(wb,opts){return payload}}();var CORE_PROPS=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];XMLNS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/metadata/core-properties";RELS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";var CORE_PROPS_REGEX=function(){var r=new Array(CORE_PROPS.length);for(var i=0;i]*>([\\s\\S]*?)")}return r}();function parse_core_props(data){var p={};for(var i=0;i0)p[f[1]]=cur[1];if(f[2]==="date"&&p[f[1]])p[f[1]]=parseDate(p[f[1]])}return p}var CORE_PROPS_XML_ROOT=writextag("cp:coreProperties",null,{"xmlns:cp":XMLNS.CORE_PROPS,"xmlns:dc":XMLNS.dc,"xmlns:dcterms":XMLNS.dcterms,"xmlns:dcmitype":XMLNS.dcmitype,"xmlns:xsi":XMLNS.xsi});function cp_doit(f,g,h,o,p){if(p[f]!=null||g==null||g==="")return;p[f]=g;o[o.length]=h?writextag(f,g,h):writetag(f,g)}function write_core_props(cp,_opts){var opts=_opts||{};var o=[XML_HEADER,CORE_PROPS_XML_ROOT],p={};if(!cp&&!opts.Props)return o.join("");if(cp){if(cp.CreatedDate!=null)cp_doit("dcterms:created",typeof cp.CreatedDate==="string"?cp.CreatedDate:write_w3cdtf(cp.CreatedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p);if(cp.ModifiedDate!=null)cp_doit("dcterms:modified",typeof cp.ModifiedDate==="string"?cp.ModifiedDate:write_w3cdtf(cp.ModifiedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p)}for(var i=0;i!=CORE_PROPS.length;++i){var f=CORE_PROPS[i];var v=opts.Props&&opts.Props[f[1]]!=null?opts.Props[f[1]]:cp?cp[f[1]]:null;if(v===true)v="1";else if(v===false)v="0";else if(typeof v=="number")v=String(v);if(v!=null)cp_doit(f[0],v,null,o,p)}if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}var EXT_PROPS=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]];XMLNS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";RELS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";function parse_ext_props(data,p){var q={};if(!p)p={};EXT_PROPS.forEach(function(f){switch(f[2]){case"string":p[f[1]]=(data.match(matchtag(f[0]))||[])[1];break;case"bool":p[f[1]]=(data.match(matchtag(f[0]))||[])[1]==="true";break;case"raw":var cur=data.match(new RegExp("<"+f[0]+"[^>]*>([\\s\\S]*?)"));if(cur&&cur.length>0)q[f[1]]=cur[1];break;}});if(q.HeadingPairs&&q.TitlesOfParts){var v=parseVector(q.HeadingPairs);var parts=parseVector(q.TitlesOfParts).map(function(x){return x.v});var idx=0,len=0;for(var i=0;i!==v.length;i+=2){len=+v[i+1].v;switch(v[i].v){case"Worksheets":;case"工作表":;case"Листы":;case"أوراق العمل":;case"ワークシート":;case"גליונות עבודה":;case"Arbeitsblätter":;case"Çalışma Sayfaları":;case"Feuilles de calcul":;case"Fogli di lavoro":;case"Folhas de cálculo":;case"Planilhas":;case"Regneark":;case"Werkbladen":p.Worksheets=len;p.SheetNames=parts.slice(idx,idx+len);break;case"Named Ranges":;case"Benannte Bereiche":;case"Navngivne områder":p.NamedRanges=len;p.DefinedNames=parts.slice(idx,idx+len);break;case"Charts":;case"Diagramme":p.Chartsheets=len;p.ChartNames=parts.slice(idx,idx+len);break;}idx+=len}}return p}var EXT_PROPS_XML_ROOT=writextag("Properties",null,{xmlns:XMLNS.EXT_PROPS,"xmlns:vt":XMLNS.vt});function write_ext_props(cp,opts){var o=[],p={},W=writextag;if(!cp)cp={};cp.Application="SheetJS";o[o.length]=XML_HEADER;o[o.length]=EXT_PROPS_XML_ROOT;EXT_PROPS.forEach(function(f){if(cp[f[1]]===undefined)return;var v;switch(f[2]){case"string":v=String(cp[f[1]]);break;case"bool":v=cp[f[1]]?"true":"false";break;}if(v!==undefined)o[o.length]=W(f[0],v)});o[o.length]=W("HeadingPairs",W("vt:vector",W("vt:variant","Worksheets")+W("vt:variant",W("vt:i4",String(cp.Worksheets))),{size:2,baseType:"variant"}));o[o.length]=W("TitlesOfParts",W("vt:vector",cp.SheetNames.map(function(s){return""+escapexml(s)+""}).join(""),{size:cp.Worksheets,baseType:"lpstr"}));if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}XMLNS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties";RELS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties";var custregex=/<[^>]+>[^<]*/g;function parse_cust_props(data,opts){var p={},name="";var m=data.match(custregex);if(m)for(var i=0;i!=m.length;++i){var x=m[i],y=parsexmltag(x);switch(y[0]){case"":name=null;break;default:if(x.indexOf("");var type=toks[0].substring(4),text=toks[1];switch(type){case"lpstr":;case"bstr":;case"lpwstr":p[name]=unescapexml(text);break;case"bool":p[name]=parsexmlbool(text,"");break;case"i1":;case"i2":;case"i4":;case"i8":;case"int":;case"uint":p[name]=parseInt(text,10);break;case"r4":;case"r8":;case"decimal":p[name]=parseFloat(text);break;case"filetime":;case"date":p[name]=parseDate(text);break;case"cy":;case"error":p[name]=unescapexml(text);break;default:if(opts.WTF&&typeof console!=="undefined")console.warn("Unexpected",x,type,toks);}}else if(x.substr(0,2)==="2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}var XLMLDocPropsMap={Title:"Title",Subject:"Subject",Author:"Author",Keywords:"Keywords",Comments:"Description",LastAuthor:"LastAuthor",RevNumber:"Revision",Application:"AppName",LastPrinted:"LastPrinted",CreatedDate:"Created",ModifiedDate:"LastSaved",Category:"Category",Manager:"Manager",Company:"Company",AppVersion:"Version",ContentStatus:"ContentStatus",Identifier:"Identifier",Language:"Language"};var evert_XLMLDPM=evert(XLMLDocPropsMap);function xlml_set_prop(Props,tag,val){tag=evert_XLMLDPM[tag]||tag;Props[tag]=val}function xlml_write_docprops(Props,opts){var o=[];keys(XLMLDocPropsMap).map(function(m){for(var i=0;i'+o.join("")+""}function parse_FILETIME(blob){var dwLowDateTime=blob.read_shift(4),dwHighDateTime=blob.read_shift(4);return new Date((dwHighDateTime/1e7*Math.pow(2,32)+dwLowDateTime/1e7-11644473600)*1e3).toISOString().replace(/\.000/,"")}function parse_lpstr(blob,type,pad){var str=blob.read_shift(0,"lpstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_lpwstr(blob,type,pad){var str=blob.read_shift(0,"lpwstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_VtStringBase(blob,stringType,pad){if(stringType===31)return parse_lpwstr(blob);return parse_lpstr(blob,stringType,pad)}function parse_VtString(blob,t,pad){return parse_VtStringBase(blob,t,pad===false?0:4)}function parse_VtUnalignedString(blob,t){if(!t)throw new Error("dafuq?");return parse_VtStringBase(blob,t,0)}function parse_VtVecUnalignedLpstrValue(blob){var length=blob.read_shift(4);var ret=[];for(var i=0;i!=length;++i)ret[i]=blob.read_shift(0,"lpstr");return ret}function parse_VtVecUnalignedLpstr(blob){return parse_VtVecUnalignedLpstrValue(blob)}function parse_VtHeadingPair(blob){var headingString=parse_TypedPropertyValue(blob,VT_USTR);var headerParts=parse_TypedPropertyValue(blob,VT_I4);return[headingString,headerParts]}function parse_VtVecHeadingPairValue(blob){var cElements=blob.read_shift(4);var out=[];for(var i=0;i!=cElements/2;++i)out.push(parse_VtHeadingPair(blob));return out}function parse_VtVecHeadingPair(blob){return parse_VtVecHeadingPairValue(blob)}function parse_dictionary(blob,CodePage){var cnt=blob.read_shift(4);var dict={};for(var j=0;j!=cnt;++j){var pid=blob.read_shift(4);var len=blob.read_shift(4);dict[pid]=blob.read_shift(len,CodePage===1200?"utf16le":"utf8").replace(chr0,"").replace(chr1,"!")}if(blob.l&3)blob.l=blob.l>>2+1<<2;return dict}function parse_BLOB(blob){var size=blob.read_shift(4);var bytes=blob.slice(blob.l,blob.l+size);if((size&3)>0)blob.l+=4-(size&3)&3;return bytes}function parse_ClipboardData(blob){var o={};o.Size=blob.read_shift(4);blob.l+=o.Size;return o}function parse_VtVector(blob,cb){}function parse_TypedPropertyValue(blob,type,_opts){var t=blob.read_shift(2),ret,opts=_opts||{};blob.l+=2;if(type!==VT_VARIANT)if(t!==type&&VT_CUSTOM.indexOf(type)===-1)throw new Error("Expected type "+type+" saw "+t);switch(type===VT_VARIANT?t:type){case 2:ret=blob.read_shift(2,"i");if(!opts.raw)blob.l+=2;return ret;case 3:ret=blob.read_shift(4,"i");return ret;case 11:return blob.read_shift(4)!==0;case 19:ret=blob.read_shift(4);return ret;case 30:return parse_lpstr(blob,t,4).replace(chr0,"");case 31:return parse_lpwstr(blob);case 64:return parse_FILETIME(blob);case 65:return parse_BLOB(blob);case 71:return parse_ClipboardData(blob);case 80:return parse_VtString(blob,t,!opts.raw&&4).replace(chr0,"");case 81:return parse_VtUnalignedString(blob,t).replace(chr0,"");case 4108:return parse_VtVecHeadingPair(blob);case 4126:return parse_VtVecUnalignedLpstr(blob);default:throw new Error("TypedPropertyValue unrecognized type "+type+" "+t);}}function parse_PropertySet(blob,PIDSI){var start_addr=blob.l;var size=blob.read_shift(4);var NumProps=blob.read_shift(4);var Props=[],i=0;var CodePage=0;var Dictionary=-1,DictObj={};for(i=0;i!=NumProps;++i){var PropID=blob.read_shift(4);var Offset=blob.read_shift(4);Props[i]=[PropID,Offset+start_addr]}var PropH={};for(i=0;i!=NumProps;++i){if(blob.l!==Props[i][1]){var fail=true;if(i>0&&PIDSI)switch(PIDSI[Props[i-1][0]].t){case 2:if(blob.l+2===Props[i][1]){blob.l+=2;fail=false}break;case 80:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break;case 4108:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break;}if(!PIDSI&&blob.l<=Props[i][1]){fail=false;blob.l=Props[i][1]}if(fail)throw new Error("Read Error: Expected address "+Props[i][1]+" at "+blob.l+" :"+i)}if(PIDSI){var piddsi=PIDSI[Props[i][0]];PropH[piddsi.n]=parse_TypedPropertyValue(blob,piddsi.t,{raw:true});if(piddsi.p==="version")PropH[piddsi.n]=String(PropH[piddsi.n]>>16)+"."+String(PropH[piddsi.n]&65535);if(piddsi.n=="CodePage")switch(PropH[piddsi.n]){case 0:PropH[piddsi.n]=1252;case 874:;case 932:;case 936:;case 949:;case 950:;case 1250:;case 1251:;case 1253:;case 1254:;case 1255:;case 1256:;case 1257:;case 1258:;case 1e4:;case 1200:;case 1201:;case 1252:;case 65e3:;case-536:;case 65001:;case-535:set_cp(CodePage=PropH[piddsi.n]);break;default:throw new Error("Unsupported CodePage: "+PropH[piddsi.n]);}}else{if(Props[i][0]===1){CodePage=PropH.CodePage=parse_TypedPropertyValue(blob,VT_I2);set_cp(CodePage);if(Dictionary!==-1){var oldpos=blob.l;blob.l=Props[Dictionary][1];DictObj=parse_dictionary(blob,CodePage);blob.l=oldpos}}else if(Props[i][0]===0){if(CodePage===0){Dictionary=i;blob.l=Props[i+1][1];continue}DictObj=parse_dictionary(blob,CodePage)}else{var name=DictObj[Props[i][0]];var val;switch(blob[blob.l]){case 65:blob.l+=4;val=parse_BLOB(blob);break;case 30:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 31:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 3:blob.l+=4;val=blob.read_shift(4,"i");break;case 19:blob.l+=4;val=blob.read_shift(4);break;case 5:blob.l+=4;val=blob.read_shift(8,"f");break;case 11:blob.l+=4;val=parsebool(blob,4);break;case 64:blob.l+=4;val=parseDate(parse_FILETIME(blob));break;default:throw new Error("unparsed value: "+blob[blob.l]);}PropH[name]=val}}}blob.l=start_addr+size;return PropH}function parse_PropertySetStream(file,PIDSI){var blob=file.content;prep_blob(blob,0);var NumSets,FMTID0,FMTID1,Offset0,Offset1=0;blob.chk("feff","Byte Order: ");var vers=blob.read_shift(2);var SystemIdentifier=blob.read_shift(4);blob.chk(CFB.utils.consts.HEADER_CLSID,"CLSID: ");NumSets=blob.read_shift(4);if(NumSets!==1&&NumSets!==2)throw new Error("Unrecognized #Sets: "+NumSets);FMTID0=blob.read_shift(16);Offset0=blob.read_shift(4);if(NumSets===1&&Offset0!==blob.l)throw new Error("Length mismatch: "+Offset0+" !== "+blob.l);else if(NumSets===2){FMTID1=blob.read_shift(16);Offset1=blob.read_shift(4)}var PSet0=parse_PropertySet(blob,PIDSI);var rval={SystemIdentifier:SystemIdentifier};for(var y in PSet0)rval[y]=PSet0[y];rval.FMTID=FMTID0;if(NumSets===1)return rval;if(blob.l!==Offset1)throw new Error("Length mismatch 2: "+blob.l+" !== "+Offset1);var PSet1;try{PSet1=parse_PropertySet(blob,null)}catch(e){}for(y in PSet1)rval[y]=PSet1[y];rval.FMTID=[FMTID0,FMTID1];return rval}function parsenoop2(blob,length){blob.read_shift(length);return null}function parslurp(blob,length,cb){var arr=[],target=blob.l+length;while(blob.l=12?2:1);var width=1,encoding="sbcs-cont";var cp=current_codepage;if(opts&&opts.biff>=8)current_codepage=1200;if(!opts||opts.biff==8){var fHighByte=blob.read_shift(1);if(fHighByte){width=2;encoding="dbcs-cont"}}else if(opts.biff==12){width=2;encoding="wstr"}var o=cch?blob.read_shift(cch,encoding):"";current_codepage=cp;return o}function parse_XLUnicodeRichExtendedString(blob){var cp=current_codepage;current_codepage=1200;var cch=blob.read_shift(2),flags=blob.read_shift(1);var fHighByte=flags&1,fExtSt=flags&4,fRichSt=flags&8;var width=1+(flags&1);var cRun=0,cbExtRst;var z={};if(fRichSt)cRun=blob.read_shift(2);if(fExtSt)cbExtRst=blob.read_shift(4);var encoding=flags&1?"dbcs-cont":"sbcs-cont";var msg=cch===0?"":blob.read_shift(cch,encoding);if(fRichSt)blob.l+=4*cRun;if(fExtSt)blob.l+=cbExtRst;z.t=msg;if(!fRichSt){z.raw=""+z.t+"";z.r=z.t}current_codepage=cp;return z}function parse_XLUnicodeStringNoCch(blob,cch,opts){var retval;if(opts){if(opts.biff>=2&&opts.biff<=5)return blob.read_shift(cch,"sbcs-cont");if(opts.biff>=12)return blob.read_shift(cch,"dbcs-cont")}var fHighByte=blob.read_shift(1);if(fHighByte===0){retval=blob.read_shift(cch,"sbcs-cont")}else{retval=blob.read_shift(cch,"dbcs-cont")}return retval}function parse_XLUnicodeString(blob,length,opts){var cch=blob.read_shift(opts&&opts.biff==2?1:2);if(cch===0){blob.l++;return""}return parse_XLUnicodeStringNoCch(blob,cch,opts)}function parse_XLUnicodeString2(blob,length,opts){if(opts.biff>5)return parse_XLUnicodeString(blob,length,opts);var cch=blob.read_shift(1);if(cch===0){blob.l++;return""}return blob.read_shift(cch,"sbcs-cont")}var parse_ControlInfo=parsenoop;var parse_URLMoniker=function(blob){var len=blob.read_shift(4),start=blob.l;var extra=false;if(len>24){blob.l+=len-24;if(blob.read_shift(16)==="795881f43b1d7f48af2c825dc4852763")extra=true;blob.l=start}var url=blob.read_shift((extra?len-24:len)>>1,"utf16le").replace(chr0,"");if(extra)blob.l+=24;return url};var parse_FileMoniker=function(blob,length){var cAnti=blob.read_shift(2);var ansiLength=blob.read_shift(4);var ansiPath=blob.read_shift(ansiLength,"cstr");var endServer=blob.read_shift(2);var versionNumber=blob.read_shift(2);var cbUnicodePathSize=blob.read_shift(4);if(cbUnicodePathSize===0)return ansiPath.replace(/\\/g,"/");var cbUnicodePathBytes=blob.read_shift(4);var usKeyValue=blob.read_shift(2);var unicodePath=blob.read_shift(cbUnicodePathBytes>>1,"utf16le").replace(chr0,"");return unicodePath};var parse_HyperlinkMoniker=function(blob,length){var clsid=blob.read_shift(16);length-=16;switch(clsid){case"e0c9ea79f9bace118c8200aa004ba90b":return parse_URLMoniker(blob,length);case"0303000000000000c000000000000046":return parse_FileMoniker(blob,length);default:throw new Error("Unsupported Moniker "+clsid);}};var parse_HyperlinkString=function(blob,length){var len=blob.read_shift(4);var o=blob.read_shift(len,"utf16le").replace(chr0,"");return o};var parse_Hyperlink=function(blob,length){var end=blob.l+length;var sVer=blob.read_shift(4);if(sVer!==2)throw new Error("Unrecognized streamVersion: "+sVer);var flags=blob.read_shift(2);blob.l+=2;var displayName,targetFrameName,moniker,oleMoniker,location,guid,fileTime;if(flags&16)displayName=parse_HyperlinkString(blob,end-blob.l);if(flags&128)targetFrameName=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===257)moniker=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===1)oleMoniker=parse_HyperlinkMoniker(blob,end-blob.l);if(flags&8)location=parse_HyperlinkString(blob,end-blob.l);if(flags&32)guid=blob.read_shift(16);if(flags&64)fileTime=parse_FILETIME(blob,8);blob.l=end;var target=targetFrameName||moniker||oleMoniker;if(location)target+="#"+location;return{Target:target}};function parse_LongRGBA(blob,length){var r=blob.read_shift(1),g=blob.read_shift(1),b=blob.read_shift(1),a=blob.read_shift(1);return[r,g,b,a]}function parse_LongRGB(blob,length){var x=parse_LongRGBA(blob,length);x[3]=0;return x}function parse_XLSCell(blob,length){var rw=blob.read_shift(2);var col=blob.read_shift(2);var ixfe=blob.read_shift(2);return{r:rw,c:col,ixfe:ixfe}}function parse_frtHeader(blob){var rt=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=8;return{type:rt,flags:flags}}function parse_OptXLUnicodeString(blob,length,opts){return length===0?"":parse_XLUnicodeString2(blob,length,opts)}var parse_HideObjEnum=parseuint16;function parse_XTI(blob,length){var iSupBook=blob.read_shift(2),itabFirst=blob.read_shift(2,"i"),itabLast=blob.read_shift(2,"i");return[iSupBook,itabFirst,itabLast]}function parse_RkRec(blob,length){var ixfe=blob.read_shift(2);var RK=parse_RkNumber(blob);return[ixfe,RK]}function parse_AddinUdf(blob,length,opts){blob.l+=4;length-=4;var l=blob.l+length;var udfName=parse_ShortXLUnicodeString(blob,length,opts);var cb=blob.read_shift(2);l-=blob.l;if(cb!==l)throw new Error("Malformed AddinUdf: padding = "+l+" != "+cb);blob.l+=cb;return udfName}function parse_Ref8U(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(2);var colLast=blob.read_shift(2);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}function parse_RefU(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(1);var colLast=blob.read_shift(1);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}var parse_Ref=parse_RefU;function parse_FtCmo(blob,length){blob.l+=4;var ot=blob.read_shift(2);var id=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=12;return[id,ot,flags]}function parse_FtNts(blob,length){var out={};blob.l+=4;blob.l+=16;out.fSharedNote=blob.read_shift(2);blob.l+=4;return out}function parse_FtCf(blob,length){var out={};blob.l+=4;blob.cf=blob.read_shift(2);return out}function parse_FtSkip(blob,length){blob.l+=2;blob.l+=blob.read_shift(2)}var FtTab={0:parse_FtSkip,4:parse_FtSkip,5:parse_FtSkip,6:parse_FtSkip,7:parse_FtCf,8:parse_FtSkip,9:parse_FtSkip,10:parse_FtSkip,11:parse_FtSkip,12:parse_FtSkip,13:parse_FtNts,14:parse_FtSkip,15:parse_FtSkip,16:parse_FtSkip,17:parse_FtSkip,18:parse_FtSkip,19:parse_FtSkip,20:parse_FtSkip,21:parse_FtCmo};function parse_FtArray(blob,length,ot){var tgt=blob.l+length;var fts=[];while(blob.l=2){o.dt=blob.read_shift(2);blob.l-=2}switch(o.BIFFVer){case 1536:;case 1280:;case 2:;case 7:break;default:if(length>6)throw new Error("Unexpected BIFF Ver "+o.BIFFVer);}blob.read_shift(length);return o}function parse_InterfaceHdr(blob,length){if(length===0)return 1200;var q;if((q=blob.read_shift(2))!==1200){}return 1200}function parse_WriteAccess(blob,length,opts){if(opts.enc){blob.l+=length;return""}var l=blob.l;var UserName=parse_XLUnicodeString(blob,0,opts);blob.read_shift(length+l-blob.l);return UserName}function parse_BoundSheet8(blob,length,opts){var pos=blob.read_shift(4);var hidden=blob.read_shift(1)&3;var dt=blob.read_shift(1);switch(dt){case 0:dt="Worksheet";break;case 1:dt="Macrosheet";break;case 2:dt="Chartsheet";break;case 6:dt="VBAModule";break;}var name=parse_ShortXLUnicodeString(blob,0,opts);if(name.length===0)name="Sheet1";return{pos:pos,hs:hidden,dt:dt,name:name}}function parse_SST(blob,length){var cnt=blob.read_shift(4);var ucnt=blob.read_shift(4);var strs=[];for(var i=0;i!=ucnt;++i){strs.push(parse_XLUnicodeRichExtendedString(blob))}strs.Count=cnt;strs.Unique=ucnt;return strs}function parse_ExtSST(blob,length){var extsst={};extsst.dsst=blob.read_shift(2);blob.l+=length-2;return extsst}function parse_Row(blob,length){var z={};z.r=blob.read_shift(2);z.c=blob.read_shift(2);z.cnt=blob.read_shift(2)-z.c;var miyRw=blob.read_shift(2);blob.l+=4;var flags=blob.read_shift(1);blob.l+=3;if(flags&7)z.level=flags&7;if(flags&32)z.hidden=true;if(flags&64)z.hpt=miyRw/20;return z}function parse_ForceFullCalculation(blob,length){var header=parse_frtHeader(blob);if(header.type!=2211)throw new Error("Invalid Future Record "+header.type);var fullcalc=blob.read_shift(4);return fullcalc!==0}var parse_CompressPictures=parsenoop2;function parse_RecalcId(blob,length){blob.read_shift(2);return blob.read_shift(4)}function parse_DefaultRowHeight(blob,length,opts){var f=0;if(!(opts&&opts.biff==2)){f=blob.read_shift(2)}var miyRw=blob.read_shift(2);if(opts&&opts.biff==2){f=1-(miyRw>>15);miyRw&=32767}var fl={Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};return[fl,miyRw]}function parse_Window1(blob,length){var xWn=blob.read_shift(2),yWn=blob.read_shift(2),dxWn=blob.read_shift(2),dyWn=blob.read_shift(2);var flags=blob.read_shift(2),iTabCur=blob.read_shift(2),iTabFirst=blob.read_shift(2);var ctabSel=blob.read_shift(2),wTabRatio=blob.read_shift(2);return{Pos:[xWn,yWn],Dim:[dxWn,dyWn],Flags:flags,CurTab:iTabCur,FirstTab:iTabFirst,Selected:ctabSel,TabRatio:wTabRatio}}function parse_Font(blob,length,opts){var o={dyHeight:blob.read_shift(2),fl:blob.read_shift(2)};switch(opts&&opts.biff||8){case 2:break;case 3:;case 4:blob.l+=2;break;default:blob.l+=10;break;}o.name=parse_ShortXLUnicodeString(blob,0,opts);return o}function parse_LabelSst(blob,length){var cell=parse_XLSCell(blob);cell.isst=blob.read_shift(4);return cell}function parse_Label(blob,length,opts){var target=blob.l+length;var cell=parse_XLSCell(blob,6);if(opts.biff==2)blob.l++;var str=parse_XLUnicodeString(blob,target-blob.l,opts);cell.val=str;return cell}function parse_Format(blob,length,opts){var ifmt=blob.read_shift(2);var fmtstr=parse_XLUnicodeString2(blob,0,opts);return[ifmt,fmtstr]}var parse_BIFF2Format=parse_XLUnicodeString2;function parse_Dimensions(blob,length,opts){var end=blob.l+length;var w=opts.biff==8||!opts.biff?4:2;var r=blob.read_shift(w),R=blob.read_shift(w);var c=blob.read_shift(2),C=blob.read_shift(2);blob.l=end;return{s:{r:r,c:c},e:{r:R,c:C}}}function parse_RK(blob,length){var rw=blob.read_shift(2),col=blob.read_shift(2); -var rkrec=parse_RkRec(blob);return{r:rw,c:col,ixfe:rkrec[0],rknum:rkrec[1]}}function parse_MulRk(blob,length){var target=blob.l+length-2;var rw=blob.read_shift(2),col=blob.read_shift(2);var rkrecs=[];while(blob.l>26];if(!opts.cellStyles)return o;o.alc=a&7;o.fWrap=a>>3&1;o.alcV=a>>4&7;o.fJustLast=a>>7&1;o.trot=a>>8&255;o.cIndent=a>>16&15;o.fShrinkToFit=a>>20&1;o.iReadOrder=a>>22&2;o.fAtrNum=a>>26&1;o.fAtrFnt=a>>27&1;o.fAtrAlc=a>>28&1;o.fAtrBdr=a>>29&1;o.fAtrPat=a>>30&1;o.fAtrProt=a>>31&1;o.dgLeft=b&15;o.dgRight=b>>4&15;o.dgTop=b>>8&15;o.dgBottom=b>>12&15;o.icvLeft=b>>16&127;o.icvRight=b>>23&127;o.grbitDiag=b>>30&3;o.icvTop=c&127;o.icvBottom=c>>7&127;o.icvDiag=c>>14&127;o.dgDiag=c>>21&15;o.icvFore=d&127;o.icvBack=d>>7&127;o.fsxButton=d>>14&1;return o}function parse_CellXF(blob,length,opts){return parse_CellStyleXF(blob,length,0,opts)}function parse_StyleXF(blob,length,opts){return parse_CellStyleXF(blob,length,1,opts)}function parse_XF(blob,length,opts){var o={};o.ifnt=blob.read_shift(2);o.ifmt=blob.read_shift(2);o.flags=blob.read_shift(2);o.fStyle=o.flags>>2&1;length-=6;o.data=parse_CellStyleXF(blob,length,o.fStyle,opts);return o}function parse_Guts(blob,length){blob.l+=4;var out=[blob.read_shift(2),blob.read_shift(2)];if(out[0]!==0)out[0]--;if(out[1]!==0)out[1]--;if(out[0]>7||out[1]>7)throw new Error("Bad Gutters: "+out.join("|"));return out}function parse_BoolErr(blob,length,opts){var cell=parse_XLSCell(blob,6);if(opts.biff==2)++blob.l;var val=parse_Bes(blob,2);cell.val=val;cell.t=val===true||val===false?"b":"e";return cell}function parse_Number(blob,length){var cell=parse_XLSCell(blob,6);var xnum=parse_Xnum(blob,8);cell.val=xnum;return cell}var parse_XLHeaderFooter=parse_OptXLUnicodeString;function parse_SupBook(blob,length,opts){var end=blob.l+length;var ctab=blob.read_shift(2);var cch=blob.read_shift(2);opts.sbcch=cch;if(cch==1025||cch==14849)return[cch,ctab];if(cch<1||cch>255)throw new Error("Unexpected SupBook type: "+cch);var virtPath=parse_XLUnicodeStringNoCch(blob,cch);var rgst=blob.read_shift(end-blob.l);return[cch,ctab,virtPath,rgst]}function parse_ExternName(blob,length,opts){var flags=blob.read_shift(2);var body;var o={fBuiltIn:flags&1,fWantAdvise:flags>>>1&1,fWantPict:flags>>>2&1,fOle:flags>>>3&1,fOleLink:flags>>>4&1,cf:flags>>>5&1023,fIcon:flags>>>15&1};if(opts.sbcch===14849)body=parse_AddinUdf(blob,length-2,opts);o.body=body||blob.read_shift(length-2);if(typeof body==="string")o.Name=body;return o}var XLSLblBuiltIn=["_xlnm.Consolidate_Area","_xlnm.Auto_Open","_xlnm.Auto_Close","_xlnm.Extract","_xlnm.Database","_xlnm.Criteria","_xlnm.Print_Area","_xlnm.Print_Titles","_xlnm.Recorder","_xlnm.Data_Form","_xlnm.Auto_Activate","_xlnm.Auto_Deactivate","_xlnm.Sheet_Title","_xlnm._FilterDatabase"];function parse_Lbl(blob,length,opts){var target=blob.l+length;var flags=blob.read_shift(2);var chKey=blob.read_shift(1);var cch=blob.read_shift(1);var cce=blob.read_shift(opts&&opts.biff==2?1:2);var itab=0;if(!opts||opts.biff>=5){blob.l+=2;itab=blob.read_shift(2);blob.l+=4}var name=parse_XLUnicodeStringNoCch(blob,cch,opts);if(flags&32)name=XLSLblBuiltIn[name.charCodeAt(0)];var npflen=target-blob.l;if(opts&&opts.biff==2)--npflen;var rgce=target==blob.l||cce==0?[]:parse_NameParsedFormula(blob,npflen,opts,cce);return{chKey:chKey,Name:name,itab:itab,rgce:rgce}}function parse_ExternSheet(blob,length,opts){if(opts.biff<8)return parse_ShortXLUnicodeString(blob,length,opts);var o=[],target=blob.l+length,len=blob.read_shift(2);while(len--!==0)o.push(parse_XTI(blob,6));var oo=[];return o}function parse_NameCmt(blob,length,opts){if(opts.biff<8){blob.l+=length;return}var cchName=blob.read_shift(2);var cchComment=blob.read_shift(2);var name=parse_XLUnicodeStringNoCch(blob,cchName,opts);var comment=parse_XLUnicodeStringNoCch(blob,cchComment,opts);return[name,comment]}function parse_ShrFmla(blob,length,opts){var ref=parse_RefU(blob,6);blob.l++;var cUse=blob.read_shift(1);length-=8;return[parse_SharedParsedFormula(blob,length,opts),cUse]}function parse_Array(blob,length,opts){var ref=parse_Ref(blob,6);switch(opts.biff){case 2:blob.l++;length-=7;break;case 3:;case 4:blob.l+=2;length-=8;break;default:blob.l+=6;length-=12;}return[ref,parse_ArrayParsedFormula(blob,length,opts,ref)]}function parse_MTRSettings(blob,length){var fMTREnabled=blob.read_shift(4)!==0;var fUserSetThreadCount=blob.read_shift(4)!==0;var cUserThreadCount=blob.read_shift(4);return[fMTREnabled,fUserSetThreadCount,cUserThreadCount]}function parse_NoteSh(blob,length,opts){if(opts.biff<8)return;var row=blob.read_shift(2),col=blob.read_shift(2);var flags=blob.read_shift(2),idObj=blob.read_shift(2);var stAuthor=parse_XLUnicodeString2(blob,0,opts);if(opts.biff<8)blob.read_shift(1);return[{r:row,c:col},stAuthor,idObj,flags]}function parse_Note(blob,length,opts){return parse_NoteSh(blob,length,opts)}function parse_MergeCells(blob,length){var merges=[];var cmcs=blob.read_shift(2);while(cmcs--)merges.push(parse_Ref8U(blob,length));return merges}function parse_Obj(blob,length,opts){if(opts&&opts.biff<8)return parse_BIFF5Obj(blob,length,opts);var cmo=parse_FtCmo(blob,22);var fts=parse_FtArray(blob,length-22,cmo[1]);return{cmo:cmo,ft:fts}}var parse_BIFF5OT=[];parse_BIFF5OT[8]=function(blob,length,opts){var tgt=blob.l+length;blob.l+=10;var cf=blob.read_shift(2);blob.l+=4;var cbPictFmla=blob.read_shift(2);blob.l+=2;var grbit=blob.read_shift(2);blob.l+=4;var cchName=blob.read_shift(1);blob.l+=cchName;blob.l=tgt;return{fmt:cf}};function parse_BIFF5Obj(blob,length,opts){var cnt=blob.read_shift(4);var ot=blob.read_shift(2);var id=blob.read_shift(2);var grbit=blob.read_shift(2);var colL=blob.read_shift(2);var dxL=blob.read_shift(2);var rwT=blob.read_shift(2);var dyT=blob.read_shift(2);var colR=blob.read_shift(2);var dxR=blob.read_shift(2);var rwB=blob.read_shift(2);var dyB=blob.read_shift(2);var cbMacro=blob.read_shift(2);blob.l+=6;length-=36;var fts=[];fts.push((parse_BIFF5OT[ot]||parsenoop)(blob,length,opts));return{cmo:[id,ot,grbit],ft:fts}}function parse_TxO(blob,length,opts){var s=blob.l;var texts="";try{blob.l+=4;var ot=(opts.lastobj||{cmo:[0,0]}).cmo[1];var controlInfo;if([0,5,7,11,12,14].indexOf(ot)==-1)blob.l+=6;else controlInfo=parse_ControlInfo(blob,6,opts);var cchText=blob.read_shift(2);var cbRuns=blob.read_shift(2);var ifntEmpty=parse_FontIndex(blob,2);var len=blob.read_shift(2);blob.l+=len;for(var i=1;i=(hdr?cchText:2*cchText))break}if(texts.length!==cchText&&texts.length!==cchText*2){throw new Error("cchText: "+cchText+" != "+texts.length)}blob.l=s+length;return{t:texts}}catch(e){blob.l=s+length;return{t:texts}}}var parse_HLink=function(blob,length){var ref=parse_Ref8U(blob,8);blob.l+=16;var hlink=parse_Hyperlink(blob,length-24);return[ref,hlink]};var parse_HLinkTooltip=function(blob,length){var end=blob.l+length;blob.read_shift(2);var ref=parse_Ref8U(blob,8);var wzTooltip=blob.read_shift((length-10)/2,"dbcs-cont");wzTooltip=wzTooltip.replace(chr0,"");return[ref,wzTooltip]};function parse_Country(blob,length){var o=[],d;d=blob.read_shift(2);o[0]=CountryEnum[d]||d;d=blob.read_shift(2);o[1]=CountryEnum[d]||d;return o}function parse_ClrtClient(blob,length){var ccv=blob.read_shift(2);var o=[];while(ccv-- >0)o.push(parse_LongRGB(blob,8));return o}function parse_Palette(blob,length){var ccv=blob.read_shift(2);var o=[];while(ccv-- >0)o.push(parse_LongRGB(blob,8));return o}function parse_XFCRC(blob,length){blob.l+=2;var o={cxfs:0,crc:0};o.cxfs=blob.read_shift(2);o.crc=blob.read_shift(4);return o}function parse_ColInfo(blob,length,opts){if(!opts.cellStyles)return parsenoop(blob,length);var w=opts&&opts.biff>=12?4:2;var colFirst=blob.read_shift(w);var colLast=blob.read_shift(w);var coldx=blob.read_shift(w);var ixfe=blob.read_shift(w);var flags=blob.read_shift(2);if(w==2)blob.l+=2;return{s:colFirst,e:colLast,w:coldx,ixfe:ixfe,flags:flags}}function parse_Setup(blob,length,opts){var o={};blob.l+=16;o.header=parse_Xnum(blob,8);o.footer=parse_Xnum(blob,8);blob.l+=2;return o}function parse_ShtProps(blob,length,opts){var def={area:false};if(opts.biff!=5){blob.l+=length;return def}var d=blob.read_shift(1);blob.l+=3;if(d&16)def.area=true;return def}var parse_Style=parsenoop;var parse_StyleExt=parsenoop;var parse_Window2=parsenoop;var parse_Backup=parsebool;var parse_Blank=parse_XLSCell;var parse_BottomMargin=parse_Xnum;var parse_BuiltInFnGroupCount=parseuint16;var parse_CalcCount=parseuint16;var parse_CalcDelta=parse_Xnum;var parse_CalcIter=parsebool;var parse_CalcMode=parseuint16;var parse_CalcPrecision=parsebool;var parse_CalcRefMode=parsenoop2;var parse_CalcSaveRecalc=parsebool;var parse_CodePage=parseuint16;var parse_Compat12=parsebool;var parse_Date1904=parsebool;var parse_DefColWidth=parseuint16;var parse_DSF=parsenoop2;var parse_EntExU2=parsenoop2;var parse_EOF=parsenoop2;var parse_Excel9File=parsenoop2;var parse_FeatHdr=parsenoop2;var parse_FontX=parseuint16;var parse_Footer=parse_XLHeaderFooter;var parse_GridSet=parseuint16;var parse_HCenter=parsebool;var parse_Header=parse_XLHeaderFooter;var parse_HideObj=parse_HideObjEnum;var parse_InterfaceEnd=parsenoop2;var parse_LeftMargin=parse_Xnum;var parse_Mms=parsenoop2;var parse_ObjProtect=parsebool;var parse_Password=parseuint16;var parse_PrintGrid=parsebool;var parse_PrintRowCol=parsebool;var parse_PrintSize=parseuint16;var parse_Prot4Rev=parsebool;var parse_Prot4RevPass=parseuint16;var parse_Protect=parsebool;var parse_RefreshAll=parsebool;var parse_RightMargin=parse_Xnum;var parse_RRTabId=parseuint16a;var parse_ScenarioProtect=parsebool;var parse_Scl=parseuint16a;var parse_String=parse_XLUnicodeString;var parse_SxBool=parsebool;var parse_TopMargin=parse_Xnum;var parse_UsesELFs=parsebool;var parse_VCenter=parsebool;var parse_WinProtect=parsebool;var parse_WriteProtect=parsenoop;var parse_VerticalPageBreaks=parsenoop;var parse_HorizontalPageBreaks=parsenoop;var parse_Selection=parsenoop;var parse_Continue=parsenoop;var parse_Pane=parsenoop;var parse_Pls=parsenoop;var parse_DCon=parsenoop;var parse_DConRef=parsenoop;var parse_DConName=parsenoop;var parse_XCT=parsenoop;var parse_CRN=parsenoop;var parse_FileSharing=parsenoop;var parse_Uncalced=parsenoop;var parse_Template=parsenoop;var parse_Intl=parsenoop;var parse_WsBool=parsenoop;var parse_Sort=parsenoop;var parse_Sync=parsenoop;var parse_LPr=parsenoop;var parse_DxGCol=parsenoop;var parse_FnGroupName=parsenoop;var parse_FilterMode=parsenoop;var parse_AutoFilterInfo=parsenoop;var parse_AutoFilter=parsenoop;var parse_ScenMan=parsenoop;var parse_SCENARIO=parsenoop;var parse_SxView=parsenoop;var parse_Sxvd=parsenoop;var parse_SXVI=parsenoop;var parse_SxIvd=parsenoop;var parse_SXLI=parsenoop;var parse_SXPI=parsenoop;var parse_DocRoute=parsenoop;var parse_RecipName=parsenoop;var parse_SXDI=parsenoop;var parse_SXDB=parsenoop;var parse_SXFDB=parsenoop;var parse_SXDBB=parsenoop;var parse_SXNum=parsenoop;var parse_SxErr=parsenoop;var parse_SXInt=parsenoop;var parse_SXString=parsenoop;var parse_SXDtr=parsenoop;var parse_SxNil=parsenoop;var parse_SXTbl=parsenoop;var parse_SXTBRGIITM=parsenoop;var parse_SxTbpg=parsenoop;var parse_ObProj=parsenoop;var parse_SXStreamID=parsenoop;var parse_DBCell=parsenoop;var parse_SXRng=parsenoop;var parse_SxIsxoper=parsenoop;var parse_BookBool=parsenoop;var parse_DbOrParamQry=parsenoop;var parse_OleObjectSize=parsenoop;var parse_SXVS=parsenoop;var parse_BkHim=parsenoop;var parse_MsoDrawingGroup=parsenoop;var parse_MsoDrawing=parsenoop;var parse_MsoDrawingSelection=parsenoop;var parse_PhoneticInfo=parsenoop;var parse_SxRule=parsenoop;var parse_SXEx=parsenoop;var parse_SxFilt=parsenoop;var parse_SxDXF=parsenoop;var parse_SxItm=parsenoop;var parse_SxName=parsenoop;var parse_SxSelect=parsenoop;var parse_SXPair=parsenoop;var parse_SxFmla=parsenoop;var parse_SxFormat=parsenoop;var parse_SXVDEx=parsenoop;var parse_SXFormula=parsenoop;var parse_SXDBEx=parsenoop;var parse_RRDInsDel=parsenoop;var parse_RRDHead=parsenoop;var parse_RRDChgCell=parsenoop;var parse_RRDRenSheet=parsenoop;var parse_RRSort=parsenoop;var parse_RRDMove=parsenoop;var parse_RRFormat=parsenoop;var parse_RRAutoFmt=parsenoop;var parse_RRInsertSh=parsenoop;var parse_RRDMoveBegin=parsenoop;var parse_RRDMoveEnd=parsenoop;var parse_RRDInsDelBegin=parsenoop;var parse_RRDInsDelEnd=parsenoop;var parse_RRDConflict=parsenoop;var parse_RRDDefName=parsenoop;var parse_RRDRstEtxp=parsenoop;var parse_LRng=parsenoop;var parse_CUsr=parsenoop;var parse_CbUsr=parsenoop;var parse_UsrInfo=parsenoop;var parse_UsrExcl=parsenoop;var parse_FileLock=parsenoop;var parse_RRDInfo=parsenoop;var parse_BCUsrs=parsenoop;var parse_UsrChk=parsenoop;var parse_UserBView=parsenoop;var parse_UserSViewBegin=parsenoop;var parse_UserSViewEnd=parsenoop;var parse_RRDUserView=parsenoop;var parse_Qsi=parsenoop;var parse_CondFmt=parsenoop;var parse_CF=parsenoop;var parse_DVal=parsenoop;var parse_DConBin=parsenoop;var parse_Lel=parsenoop;var parse_XLSCodeName=parse_XLUnicodeString;var parse_SXFDBType=parsenoop;var parse_ObNoMacros=parsenoop;var parse_Dv=parsenoop;var parse_Index=parsenoop;var parse_Table=parsenoop;var parse_BigName=parsenoop;var parse_ContinueBigName=parsenoop;var parse_WebPub=parsenoop;var parse_QsiSXTag=parsenoop;var parse_DBQueryExt=parsenoop;var parse_ExtString=parsenoop;var parse_TxtQry=parsenoop;var parse_Qsir=parsenoop;var parse_Qsif=parsenoop;var parse_RRDTQSIF=parsenoop;var parse_OleDbConn=parsenoop;var parse_WOpt=parsenoop;var parse_SXViewEx=parsenoop;var parse_SXTH=parsenoop;var parse_SXPIEx=parsenoop;var parse_SXVDTEx=parsenoop;var parse_SXViewEx9=parsenoop;var parse_ContinueFrt=parsenoop;var parse_RealTimeData=parsenoop;var parse_ChartFrtInfo=parsenoop;var parse_FrtWrapper=parsenoop;var parse_StartBlock=parsenoop;var parse_EndBlock=parsenoop;var parse_StartObject=parsenoop;var parse_EndObject=parsenoop;var parse_CatLab=parsenoop;var parse_YMult=parsenoop;var parse_SXViewLink=parsenoop;var parse_PivotChartBits=parsenoop;var parse_FrtFontList=parsenoop;var parse_SheetExt=parsenoop;var parse_BookExt=parsenoop;var parse_SXAddl=parsenoop;var parse_CrErr=parsenoop;var parse_HFPicture=parsenoop;var parse_Feat=parsenoop;var parse_DataLabExt=parsenoop;var parse_DataLabExtContents=parsenoop;var parse_CellWatch=parsenoop;var parse_FeatHdr11=parsenoop;var parse_Feature11=parsenoop;var parse_DropDownObjIds=parsenoop;var parse_ContinueFrt11=parsenoop;var parse_DConn=parsenoop;var parse_List12=parsenoop;var parse_Feature12=parsenoop;var parse_CondFmt12=parsenoop;var parse_CF12=parsenoop;var parse_CFEx=parsenoop;var parse_AutoFilter12=parsenoop;var parse_ContinueFrt12=parsenoop;var parse_MDTInfo=parsenoop;var parse_MDXStr=parsenoop;var parse_MDXTuple=parsenoop;var parse_MDXSet=parsenoop;var parse_MDXProp=parsenoop;var parse_MDXKPI=parsenoop;var parse_MDB=parsenoop;var parse_PLV=parsenoop;var parse_DXF=parsenoop;var parse_TableStyles=parsenoop;var parse_TableStyle=parsenoop;var parse_TableStyleElement=parsenoop;var parse_NamePublish=parsenoop;var parse_SortData=parsenoop;var parse_GUIDTypeLib=parsenoop;var parse_FnGrp12=parsenoop;var parse_NameFnGrp12=parsenoop;var parse_HeaderFooter=parsenoop;var parse_CrtLayout12=parsenoop;var parse_CrtMlFrt=parsenoop;var parse_CrtMlFrtContinue=parsenoop;var parse_ShapePropsStream=parsenoop;var parse_TextPropsStream=parsenoop;var parse_RichTextStream=parsenoop;var parse_CrtLayout12A=parsenoop;var parse_Units=parsenoop;var parse_Chart=parsenoop;var parse_Series=parsenoop;var parse_DataFormat=parsenoop;var parse_LineFormat=parsenoop;var parse_MarkerFormat=parsenoop;var parse_AreaFormat=parsenoop;var parse_PieFormat=parsenoop;var parse_AttachedLabel=parsenoop;var parse_SeriesText=parsenoop;var parse_ChartFormat=parsenoop;var parse_Legend=parsenoop;var parse_SeriesList=parsenoop;var parse_Bar=parsenoop;var parse_Line=parsenoop;var parse_Pie=parsenoop;var parse_Area=parsenoop;var parse_Scatter=parsenoop;var parse_CrtLine=parsenoop;var parse_Axis=parsenoop;var parse_Tick=parsenoop;var parse_ValueRange=parsenoop;var parse_CatSerRange=parsenoop;var parse_AxisLine=parsenoop;var parse_CrtLink=parsenoop;var parse_DefaultText=parsenoop;var parse_Text=parsenoop;var parse_ObjectLink=parsenoop;var parse_Frame=parsenoop;var parse_Begin=parsenoop;var parse_End=parsenoop;var parse_PlotArea=parsenoop;var parse_Chart3d=parsenoop;var parse_PicF=parsenoop;var parse_DropBar=parsenoop;var parse_Radar=parsenoop;var parse_Surf=parsenoop;var parse_RadarArea=parsenoop;var parse_AxisParent=parsenoop;var parse_LegendException=parsenoop;var parse_SerToCrt=parsenoop;var parse_AxesUsed=parsenoop;var parse_SBaseRef=parsenoop;var parse_SerParent=parsenoop;var parse_SerAuxTrend=parsenoop;var parse_IFmtRecord=parsenoop;var parse_Pos=parsenoop;var parse_AlRuns=parsenoop;var parse_BRAI=parsenoop;var parse_SerAuxErrBar=parsenoop;var parse_SerFmt=parsenoop;var parse_Chart3DBarShape=parsenoop;var parse_Fbi=parsenoop;var parse_BopPop=parsenoop;var parse_AxcExt=parsenoop;var parse_Dat=parsenoop;var parse_PlotGrowth=parsenoop;var parse_SIIndex=parsenoop;var parse_GelFrame=parsenoop;var parse_BopPopCustom=parsenoop;var parse_Fbi2=parsenoop;function parse_ImData(blob,length,opts){var tgt=blob.l+length;var cf=blob.read_shift(2);var env=blob.read_shift(2);var lcb=blob.read_shift(4);var o={fmt:cf,env:env,len:lcb,data:blob.slice(blob.l,blob.l+lcb)};blob.l+=lcb;return o}function parse_BIFF5String(blob){var len=blob.read_shift(1);return blob.read_shift(len,"sbcs-cont")}function parse_BIFF2STR(blob,length,opts){var cell=parse_XLSCell(blob,6);++blob.l;var str=parse_XLUnicodeString2(blob,length-7,opts);cell.t="str";cell.val=str;return cell}function parse_BIFF2NUM(blob,length,opts){var cell=parse_XLSCell(blob,6);++blob.l;var num=parse_Xnum(blob,8);cell.t="n";cell.val=num;return cell}function parse_BIFF2INT(blob,length){var cell=parse_XLSCell(blob,6);++blob.l;var num=blob.read_shift(2);cell.t="n";cell.val=num;return cell}function parse_BIFF2STRING(blob,length){var cch=blob.read_shift(1);if(cch===0){blob.l++;return""}return blob.read_shift(cch,"sbcs-cont")}function parse_BIFF2FONTXTRA(blob,length){blob.l+=6;blob.l+=2;blob.l+=1;blob.l+=3;blob.l+=1;blob.l+=length-13}function parse_RString(blob,length,opts){var end=blob.l+length;var cell=parse_XLSCell(blob,6);var cch=blob.read_shift(2);var str=parse_XLUnicodeStringNoCch(blob,cch,opts);blob.l=end;cell.t="str";cell.val=str;return cell}var DBF=function(){var dbf_codepage_map={1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127,8:865,9:437,10:850,11:437,13:437,14:850,15:437,16:850,17:437,18:850,19:932,20:850,21:437,22:850,23:865,24:437,25:437,26:850,27:437,28:863,29:850,31:852,34:852,35:852,36:860,37:850,38:866,55:850,64:852,77:936,78:949,79:950,80:874,87:1252,88:1252,89:1252,255:16969};function dbf_to_aoa(buf,opts){var out=[];var d=new_raw_buf(1);switch(opts.type){case"base64":d=s2a(Base64.decode(buf));break;case"binary":d=s2a(buf);break;case"buffer":;case"array":d=buf;break;}prep_blob(d,0);var ft=d.read_shift(1);var memo=false;var vfp=false;switch(ft){case 2:;case 3:break;case 48:vfp=true;memo=true;break;case 49:vfp=true;break;case 131:memo=true;break;case 139:memo=true;break;case 245:memo=true;break;default:throw new Error("DBF Unsupported Version: "+ft.toString(16));}var filedate=new Date,nrow=0,fpos=0;if(ft==2)nrow=d.read_shift(2);filedate=new Date(d.read_shift(1)+1900,d.read_shift(1)-1,d.read_shift(1));if(ft!=2)nrow=d.read_shift(4);if(ft!=2)fpos=d.read_shift(2);var rlen=d.read_shift(2);var flags=0,current_cp=1252;if(ft!=2){d.l+=16;flags=d.read_shift(1);if(d[d.l]!==0)current_cp=dbf_codepage_map[d[d.l]];d.l+=1;d.l+=2}var fields=[],field={};var hend=fpos-10-(vfp?264:0);while(ft==2?d.l0){if(d[d.l]===42){d.l+=rlen;continue}++d.l;out[++R]=[];C=0;for(C=0;C!=fields.length;++C){var dd=d.slice(d.l,d.l+fields[C].len);d.l+=fields[C].len;prep_blob(dd,0);var s=cptable.utils.decode(current_cp,dd);switch(fields[C].type){case"C":out[R][C]=cptable.utils.decode(current_cp,dd);out[R][C]=out[R][C].trim();break;case"D":if(s.length===8)out[R][C]=new Date(+s.substr(0,4),+s.substr(4,2)-1,+s.substr(6,2));else out[R][C]=s;break;case"F":out[R][C]=parseFloat(s.trim());break;case"I":out[R][C]=dd.read_shift(4,"i");break;case"L":switch(s.toUpperCase()){case"Y":;case"T":out[R][C]=true;break;case"N":;case"F":out[R][C]=false;break;case" ":;case"?":out[R][C]=false;break;default:throw new Error("DBF Unrecognized L:|"+s+"|");}break;case"M":if(!memo)throw new Error("DBF Unexpected MEMO for type "+ft.toString(16));out[R][C]="##MEMO##"+dd.read_shift(4);break;case"N":out[R][C]=+s.replace(/\u0000/g,"").trim();break;case"T":var day=dd.read_shift(4),ms=dd.read_shift(4);throw new Error(day+" | "+ms);case"Y":out[R][C]=dd.read(4,"i")/1e4;break;case"0":if(fields[C].name==="_NullFlags")break;default:throw new Error("DBF Unsupported data type "+fields[C].type);}}}if(ft!=2)if(d.l0)switch(RT){case"ID":break;case"E":break;case"B":break;case"O":break;case"P":if(record[1].charAt(0)=="P")formats.push(rstr.substr(3).replace(/;;/g,";"));break;case"C":for(rj=1;rj0){rowinfo[R].hpt=Mval;rowinfo[R].hpx=pt2px(Mval)}else if(Mval==0)rowinfo[R].hidden=true;break;default:if(opts&&opts.WTF)throw new Error("SYLK bad record "+rstr);}if(F_seen<1)next_cell_format=null;break;default:if(opts&&opts.WTF)throw new Error("SYLK bad record "+rstr);}}if(rowinfo.length>0)sht["!rows"]=rowinfo;if(colinfo.length>0)sht["!cols"]=colinfo;return[arr,sht]}function sylk_to_sheet(d,opts){var aoasht=sylk_to_aoa(d,opts);var aoa=aoasht[0],ws=aoasht[1];var o=aoa_to_sheet(aoa,opts);keys(ws).forEach(function(k){o[k]=ws[k]});return o}function sylk_to_workbook(d,opts){return sheet_to_workbook(sylk_to_sheet(d,opts),opts)}function write_ws_cell_sylk(cell,ws,R,C,opts){var o="C;Y"+(R+1)+";X"+(C+1)+";K";switch(cell.t){case"n":o+=cell.v||0;if(cell.f&&!cell.F)o+=";E"+a1_to_rc(cell.f,{r:R,c:C});break;case"b":o+=cell.v?"TRUE":"FALSE";break;case"e":o+=cell.w||cell.v;break;case"d":o+='"'+(cell.w||cell.v)+'"';break;case"s":o+='"'+cell.v.replace(/"/g,"")+'"';break;}return o}function write_ws_cols_sylk(out,cols){cols.forEach(function(col,i){var rec="F;W"+(i+1)+" "+(i+1)+" ";if(col.hidden)rec+="0";else{if(typeof col.width=="number")col.wpx=width2px(col.width);if(typeof col.wpx=="number")col.wch=px2char(col.wpx);if(typeof col.wch=="number")rec+=Math.round(col.wch)}if(rec.charAt(rec.length-1)!=" ")out.push(rec)})}function write_ws_rows_sylk(out,rows){rows.forEach(function(row,i){var rec="F;";if(row.hidden)rec+="M0;";else if(row.hpt)rec+="M"+20*row.hpt+";";else if(row.hpx)rec+="M"+20*px2pt(row.hpx)+";";if(rec.length>2)out.push(rec+"R"+(i+1))})}function sheet_to_sylk(ws,opts){var preamble=["ID;PWXL;N;E"],o=[];var r=decode_range(ws["!ref"]),cell;var dense=Array.isArray(ws);var RS="\r\n";preamble.push("P;PGeneral");preamble.push("F;P0;DG0G8;M255");if(ws["!cols"])write_ws_cols_sylk(preamble,ws["!cols"]);if(ws["!rows"])write_ws_rows_sylk(preamble,ws["!rows"]);preamble.push("B;Y"+(r.e.r-r.s.r+1)+";X"+(r.e.c-r.s.c+1)+";D"+[r.s.c,r.s.r,r.e.c,r.e.r].join(" "));for(var R=r.s.r;R<=r.e.r;++R){for(var C=r.s.c;C<=r.e.c;++C){var coord=encode_cell({r:R,c:C});cell=dense?(ws[R]||[])[C]:ws[coord];if(!cell||cell.v==null&&(!cell.f||cell.F))continue;o.push(write_ws_cell_sylk(cell,ws,R,C,opts))}}return preamble.join(RS)+RS+o.join(RS)+RS+"E"+RS}return{to_workbook:sylk_to_workbook,to_sheet:sylk_to_sheet,from_sheet:sheet_to_sylk}}();var DIF=function(){function dif_to_aoa(d,opts){switch(opts.type){case"base64":return dif_to_aoa_str(Base64.decode(d),opts);case"binary":return dif_to_aoa_str(d,opts);case"buffer":return dif_to_aoa_str(d.toString("binary"),opts);case"array":return dif_to_aoa_str(cc2str(d),opts);}throw new Error("Unrecognized type "+opts.type)}function dif_to_aoa_str(str,opts){var records=str.split("\n"),R=-1,C=-1,ri=0,arr=[];for(;ri!==records.length;++ri){if(records[ri].trim()==="BOT"){arr[++R]=[];C=0;continue}if(R<0)continue;var metadata=records[ri].trim().split(",");var type=metadata[0],value=metadata[1];++ri;var data=records[ri].trim();switch(+type){case-1:if(data==="BOT"){arr[++R]=[];C=0;continue}else if(data!=="EOD")throw new Error("Unrecognized DIF special command "+data);break;case 0:if(data==="TRUE")arr[R][C]=true;else if(data==="FALSE")arr[R][C]=false;else if(+value==+value)arr[R][C]=+value;else if(!isNaN(fuzzydate(value).getDate()))arr[R][C]=parseDate(value);else arr[R][C]=value;++C;break;case 1:data=data.substr(1,data.length-2);arr[R][C++]=data!==""?data:null;break;}if(data==="EOD")break}return arr}function dif_to_sheet(str,opts){return aoa_to_sheet(dif_to_aoa(str,opts),opts)}function dif_to_workbook(str,opts){return sheet_to_workbook(dif_to_sheet(str,opts),opts)}var sheet_to_dif=function(){var push_field=function pf(o,topic,v,n,s){o.push(topic);o.push(v+","+n);o.push('"'+s.replace(/"/g,'""')+'"')};var push_value=function po(o,type,v,s){o.push(type+","+v);o.push(type==1?'"'+s.replace(/"/g,'""')+'"':s)};return function sheet_to_dif(ws,opts){var o=[];var r=decode_range(ws["!ref"]),cell;var dense=Array.isArray(ws);push_field(o,"TABLE",0,1,"sheetjs");push_field(o,"VECTORS",0,r.e.r-r.s.r+1,"");push_field(o,"TUPLES",0,r.e.c-r.s.c+1,"");push_field(o,"DATA",0,0,"");for(var R=r.s.r;R<=r.e.r;++R){push_value(o,-1,0,"BOT");for(var C=r.s.c;C<=r.e.c;++C){var coord=encode_cell({r:R,c:C});cell=dense?(ws[R]||[])[C]:ws[coord];if(!cell){push_value(o,1,0,"");continue}switch(cell.t){case"n":var val=DIF_XL?cell.w:cell.v;if(!val&&cell.v!=null)val=cell.v;if(val==null){if(DIF_XL&&cell.f&&!cell.F)push_value(o,1,0,"="+cell.f);else push_value(o,1,0,"")}else push_value(o,0,val,"V");break;case"b":push_value(o,0,cell.v?1:0,cell.v?"TRUE":"FALSE");break;case"s":push_value(o,1,0,!DIF_XL||isNaN(cell.v)?cell.v:'="'+cell.v+'"');break;case"d":if(!cell.w)cell.w=SSF.format(cell.z||SSF._table[14],datenum(parseDate(cell.v)));if(DIF_XL)push_value(o,0,cell.w,"V");else push_value(o,1,0,cell.w);break;default:push_value(o,1,0,"");}}}push_value(o,-1,0,"EOD");var RS="\r\n";var oo=o.join(RS);return oo}}();return{to_workbook:dif_to_workbook,to_sheet:dif_to_sheet,from_sheet:sheet_to_dif}}();var PRN=function(){function set_text_arr(data,arr,R,C){if(data==="TRUE")arr[R][C]=true;else if(data==="FALSE")arr[R][C]=false;else if(data===""){}else if(+data==+data)arr[R][C]=+data;else if(!isNaN(fuzzydate(data).getDate()))arr[R][C]=parseDate(data);else arr[R][C]=data}function prn_to_aoa_str(f,opts){var arr=[];if(!f||f.length===0)return arr;var lines=f.split(/[\r\n]/);var L=lines.length-1;while(L>=0&&lines[L].length===0)--L;var start=10,idx=0;var R=0;for(;R<=L;++R){idx=lines[R].indexOf(" ");if(idx==-1)idx=lines[R].length;else idx++;start=Math.max(start,idx)}for(R=0;R<=L;++R){arr[R]=[];var C=0;set_text_arr(lines[R].slice(0,start).trim(),arr,R,C);for(C=1;C<=(lines[R].length-start)/10+1;++C)set_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C)}return arr}function dsv_to_sheet_str(str,opts){var o=opts||{};var sep="";if(DENSE!=null&&o.dense==null)o.dense=DENSE;var ws=o.dense?[]:{};var range={s:{c:0,r:0},e:{c:0,r:0}};if(str.substr(0,4)=="sep="&&str.charCodeAt(5)==10){sep=str.charAt(4);str=str.substr(6)}else if(str.substr(0,1024).indexOf("\t")==-1)sep=",";else sep="\t";var R=0,C=0,v=0;var start=0,end=0,sepcc=sep.charCodeAt(0),instr=false,cc=0;str=str.replace(/\r\n/gm,"\n");var _re=o.dateNF!=null?dateNF_regex(o.dateNF):null;function finish_cell(){var s=str.slice(start,end);var cell={};if(o.raw){cell.t="s";cell.v=s}else if(s.charCodeAt(0)==61){ -cell.t="n";cell.f=s.substr(1)}else if(s=="TRUE"){cell.t="b";cell.v=true}else if(s=="FALSE"){cell.t="b";cell.v=false}else if(!isNaN(v=+s)){cell.t="n";cell.w=s;cell.v=v}else if(!isNaN(fuzzydate(s).getDate())||_re&&s.match(_re)){cell.z=o.dateNF||SSF._table[14];var k=0;if(_re&&s.match(_re)){s=dateNF_fix(s,o.dateNF,s.match(_re)||[]);k=1}if(o.cellDates){cell.t="d";cell.v=parseDate(s,k)}else{cell.t="n";cell.v=datenum(parseDate(s,k))}cell.w=SSF.format(cell.z,cell.v instanceof Date?datenum(cell.v):cell.v)}else{cell.t="s";if(s.charAt(0)=='"'&&s.charAt(s.length-1)=='"')s=s.slice(1,-1).replace(/""/g,'"');cell.v=s}if(o.dense){if(!ws[R])ws[R]=[];ws[R][C]=cell}else ws[encode_cell({c:C,r:R})]=cell;start=end+1;if(range.e.c0)finish_cell();ws["!ref"]=encode_range(range);return ws}function prn_to_sheet_str(str,opts){if(str.substr(0,4)=="sep=")return dsv_to_sheet_str(str,opts);if(str.indexOf("\t")>=0||str.indexOf(",")>=0)return dsv_to_sheet_str(str,opts);return aoa_to_sheet(prn_to_aoa_str(str,opts),opts)}function prn_to_sheet(d,opts){var str="",bytes=firstbyte(d,opts);switch(opts.type){case"base64":str=Base64.decode(d);break;case"binary":str=d;break;case"buffer":str=d.toString("binary");break;case"array":str=cc2str(d);break;default:throw new Error("Unrecognized type "+opts.type);}if(bytes[0]==239&&bytes[1]==187&&bytes[2]==191)str=utf8read(str);return prn_to_sheet_str(str,opts)}function prn_to_workbook(d,opts){return sheet_to_workbook(prn_to_sheet(d,opts),opts)}function sheet_to_prn(ws,opts){var o=[];var r=decode_range(ws["!ref"]),cell;var dense=Array.isArray(ws);for(var R=r.s.r;R<=r.e.r;++R){var oo=[];for(var C=r.s.c;C<=r.e.c;++C){var coord=encode_cell({r:R,c:C});cell=dense?(ws[R]||[])[C]:ws[coord];if(!cell||cell.v==null){oo.push(" ");continue}var w=(cell.w||(format_cell(cell),cell.w)||"").substr(0,10);while(w.length<10)w+=" ";oo.push(w+(C==0?" ":""))}o.push(oo.join(""))}return o.join("\n")}return{to_workbook:prn_to_workbook,to_sheet:prn_to_sheet,from_sheet:sheet_to_prn}}();function read_wb_ID(d,opts){var o=opts||{},OLD_WTF=!!o.WTF;o.WTF=true;try{var out=SYLK.to_workbook(d,o);o.WTF=OLD_WTF;return out}catch(e){o.WTF=OLD_WTF;if(!e.message.match(/SYLK bad record ID/)&&OLD_WTF)throw e;return PRN.to_workbook(d,opts)}}var WK_=function(){function lotushopper(data,cb,opts){if(!data)return;prep_blob(data,data.l||0);var Enum=opts.Enum||WK1Enum;while(data.l=4096)o.qpro=true;break;case 6:refguess=val;break;case 15:if(!o.qpro)val[1].v=val[1].v.substr(1);case 13:;case 14:;case 16:;case 51:if(RT==14&&(val[2]&112)==112&&(val[2]&15)>1&&(val[2]&15)<15){val[1].z=o.dateNF||SSF._table[14];if(o.cellDates){val[1].t="d";val[1].v=numdate(val[1].v)}}if(o.dense){if(!s[val[0].r])s[val[0].r]=[];s[val[0].r][val[0].c]=val[1]}else s[encode_cell(val[0])]=val[1];break;}else switch(RT){case 22:val[1].v=val[1].v.substr(1);case 23:;case 24:;case 25:;case 37:;case 39:;case 40:if(val[3]>sidx){s["!ref"]=encode_range(refguess);sheets[n]=s;s=o.dense?[]:{};refguess={s:{r:0,c:0},e:{r:0,c:0}};sidx=val[3];n="Sheet"+(sidx+1);snames.push(n)}s[encode_cell(val[0])]=val[1];if(refguess.e.c>1;if(o[1].v&1){switch(v&7){case 1:v=(v>>3)*500;break;case 2:v=(v>>3)/20;break;case 4:v=(v>>3)/2e3;break;case 6:v=(v>>3)/16;break;case 7:v=(v>>3)/64;break;default:throw"unknown NUMBER_18 encoding "+(v&7);}}o[1].v=v;return o}function parse_NUMBER_17(blob,length){var o=parse_cell_3(blob,length);var v1=blob.read_shift(4);var v2=blob.read_shift(4);var e=blob.read_shift(2);if(e==65535){o[1].v=0;return o}var s=e&32768;e=(e&32767)-16446;o[1].v=(e>0?v2<>>-e)+(e>-32?v1<>>-(e+32));return o}function parse_FORMULA_19(blob,length){var o=parse_NUMBER_17(blob,14);blob.l+=length-14;return o}function parse_NUMBER_25(blob,length){var o=parse_cell_3(blob,length);var v1=blob.read_shift(4);o[1].v=v1>>6;return o}function parse_NUMBER_27(blob,length){var o=parse_cell_3(blob,length);var v1=blob.read_shift(8,"f");o[1].v=v1;return o}function parse_FORMULA_28(blob,length){var o=parse_NUMBER_27(blob,14);blob.l+=length-10;return o}var WK1Enum={0:{n:"BOF",f:parseuint16},1:{n:"EOF",f:parsenoop},2:{n:"CALCMODE",f:parsenoop},3:{n:"CALCORDER",f:parsenoop},4:{n:"SPLIT",f:parsenoop},5:{n:"SYNC",f:parsenoop},6:{n:"RANGE",f:parse_RANGE},7:{n:"WINDOW1",f:parsenoop},8:{n:"COLW1",f:parsenoop},9:{n:"WINTWO",f:parsenoop},10:{n:"COLW2",f:parsenoop},11:{n:"NAME",f:parsenoop},12:{n:"BLANK",f:parsenoop},13:{n:"INTEGER",f:parse_INTEGER},14:{n:"NUMBER",f:parse_NUMBER},15:{n:"LABEL",f:parse_LABEL},16:{n:"FORMULA",f:parse_FORMULA},24:{n:"TABLE",f:parsenoop},25:{n:"ORANGE",f:parsenoop},26:{n:"PRANGE",f:parsenoop},27:{n:"SRANGE",f:parsenoop},28:{n:"FRANGE",f:parsenoop},29:{n:"KRANGE1",f:parsenoop},32:{n:"HRANGE",f:parsenoop},35:{n:"KRANGE2",f:parsenoop},36:{n:"PROTEC",f:parsenoop},37:{n:"FOOTER",f:parsenoop},38:{n:"HEADER",f:parsenoop},39:{n:"SETUP",f:parsenoop},40:{n:"MARGINS",f:parsenoop},41:{n:"LABELFMT",f:parsenoop},42:{n:"TITLES",f:parsenoop},43:{n:"SHEETJS",f:parsenoop},45:{n:"GRAPH",f:parsenoop},46:{n:"NGRAPH",f:parsenoop},47:{n:"CALCCOUNT",f:parsenoop},48:{n:"UNFORMATTED",f:parsenoop},49:{n:"CURSORW12",f:parsenoop},50:{n:"WINDOW",f:parsenoop},51:{n:"STRING",f:parse_LABEL},55:{n:"PASSWORD",f:parsenoop},56:{n:"LOCKED",f:parsenoop},60:{n:"QUERY",f:parsenoop},61:{n:"QUERYNAME",f:parsenoop},62:{n:"PRINT",f:parsenoop},63:{n:"PRINTNAME",f:parsenoop},64:{n:"GRAPH2",f:parsenoop},65:{n:"GRAPHNAME",f:parsenoop},66:{n:"ZOOM",f:parsenoop},67:{n:"SYMSPLIT",f:parsenoop},68:{n:"NSROWS",f:parsenoop},69:{n:"NSCOLS",f:parsenoop},70:{n:"RULER",f:parsenoop},71:{n:"NNAME",f:parsenoop},72:{n:"ACOMM",f:parsenoop},73:{n:"AMACRO",f:parsenoop},74:{n:"PARSE",f:parsenoop},255:{n:"",f:parsenoop}};var WK3Enum={0:{n:"BOF",f:parsenoop},1:{n:"EOF",f:parsenoop},3:{n:"??",f:parsenoop},4:{n:"??",f:parsenoop},5:{n:"??",f:parsenoop},6:{n:"??",f:parsenoop},7:{n:"??",f:parsenoop},9:{n:"??",f:parsenoop},10:{n:"??",f:parsenoop},11:{n:"??",f:parsenoop},12:{n:"??",f:parsenoop},14:{n:"??",f:parsenoop},15:{n:"??",f:parsenoop},16:{n:"??",f:parsenoop},17:{n:"??",f:parsenoop},18:{n:"??",f:parsenoop},19:{n:"??",f:parsenoop},21:{n:"??",f:parsenoop},22:{n:"LABEL16",f:parse_LABEL_16},23:{n:"NUMBER17",f:parse_NUMBER_17},24:{n:"NUMBER18",f:parse_NUMBER_18},25:{n:"FORMULA19",f:parse_FORMULA_19},26:{n:"??",f:parsenoop},27:{n:"??",f:parsenoop},28:{n:"??",f:parsenoop},29:{n:"??",f:parsenoop},30:{n:"??",f:parsenoop},31:{n:"??",f:parsenoop},33:{n:"??",f:parsenoop},37:{n:"NUMBER25",f:parse_NUMBER_25},39:{n:"NUMBER27",f:parse_NUMBER_27},40:{n:"FORMULA28",f:parse_FORMULA_28},255:{n:"",f:parsenoop}};return{to_workbook:lotus_to_workbook}}();var CS2CP={0:1252,1:65001,2:65001,77:1e4,128:932,129:949,130:1361,134:936,136:950,161:1253,162:1254,163:1258,177:1255,178:1256,186:1257,204:1251,222:874,238:1250,255:1252,69:6969};var parse_rs=function parse_rs_factory(){var tregex=matchtag("t"),rpregex=matchtag("rPr"),rregex=/<(?:\w+:)?r>/g,rend=/<\/(?:\w+:)?r>/,nlregex=/\r\n/g;var parse_rpr=function parse_rpr(rpr,intro,outro){var font={},cp=65001,align="";var m=rpr.match(tagregex),i=0;if(m)for(;i!=m.length;++i){var y=parsexmltag(m[i]);switch(y[0].replace(/\w*:/g,"")){case"":;case"":font.shadow=1;break;case"":break;case"":;case"":font.outline=1;break;case"":break;case"":;case"":font.strike=1;break;case"":break;case"":;case"":font.u=1;break;case"":break;case"":;case"":font.b=1;break;case"":break;case"":;case"":font.i=1;break;case"":break;case"');if(font.b){intro.push("");outro.push("")}if(font.i){intro.push("");outro.push("")}if(font.strike){intro.push("");outro.push("")}if(align=="superscript")align="sup";else if(align=="subscript")align="sub";if(align!=""){intro.push("<"+align+">");outro.push("")}outro.push("");return cp};function parse_r(r){var terms=[[],"",[]];var t=r.match(tregex),cp=65001;if(!isval(t))return"";terms[1]=t[1];var rpr=r.match(rpregex);if(isval(rpr))cp=parse_rpr(rpr[1],terms[0],terms[2]);return terms[0].join("")+terms[1].replace(nlregex,"
")+terms[2].join("")}return function parse_rs(rs){return rs.replace(rregex,"").split(rend).map(parse_r).join("")}}();var sitregex=/<(?:\w+:)?t[^>]*>([^<]*)<\/(?:\w+:)?t>/g,sirregex=/<(?:\w+:)?r>/;var sirphregex=/<(?:\w+:)?rPh.*?>([\s\S]*?)<\/(?:\w+:)?rPh>/g;function parse_si(x,opts){var html=opts?opts.cellHTML:true;var z={};if(!x)return null;var y;if(x.match(/^\s*<(?:\w+:)?t[^>]*>/)){z.t=utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0]));z.r=utf8read(x);if(html)z.h=escapehtml(z.t)}else if(y=x.match(sirregex)){z.r=utf8read(x);z.t=utf8read(unescapexml((x.replace(sirphregex,"").match(sitregex)||[]).join("").replace(tagregex,"")));if(html)z.h=parse_rs(z.r)}return z}var sstr0=/<(?:\w+:)?sst([^>]*)>([\s\S]*)<\/(?:\w+:)?sst>/;var sstr1=/<(?:\w+:)?(?:si|sstItem)>/g;var sstr2=/<\/(?:\w+:)?(?:si|sstItem)>/;function parse_sst_xml(data,opts){var s=[],ss="";if(!data)return s;var sst=data.match(sstr0);if(isval(sst)){ss=sst[2].replace(sstr1,"").split(sstr2);for(var i=0;i!=ss.length;++i){var o=parse_si(ss[i].trim(),opts);if(o!=null)s[s.length]=o}sst=parsexmltag(sst[1]);s.Count=sst.count;s.Unique=sst.uniqueCount}return s}RELS.SST="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";var straywsregex=/^\s|\s$|[\t\n\r]/;function write_sst_xml(sst,opts){if(!opts.bookSST)return"";var o=[XML_HEADER];o[o.length]=writextag("sst",null,{xmlns:XMLNS.main[0],count:sst.Count,uniqueCount:sst.Unique});for(var i=0;i!=sst.length;++i){if(sst[i]==null)continue;var s=sst[i];var sitag="";if(s.r)sitag+=s.r;else{sitag+=""}sitag+="";o[o.length]=sitag}if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBeginSst(data,length){return[data.read_shift(4),data.read_shift(4)]}function parse_sst_bin(data,opts){var s=[];var pass=false;recordhopper(data,function hopper_sst(val,R_n,RT){switch(RT){case 159:s.Count=val[0];s.Unique=val[1];break;case 19:s.push(val);break;case 160:return true;case 35:pass=true;break;case 36:pass=false;break;default:if(R_n.indexOf("Begin")>0){}else if(R_n.indexOf("End")>0){}if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}});return s}function write_BrtBeginSst(sst,o){if(!o)o=new_buf(8);o.write_shift(4,sst.Count);o.write_shift(4,sst.Unique);return o}var write_BrtSSTItem=write_RichStr;function write_sst_bin(sst,opts){var ba=buf_array();write_record(ba,"BrtBeginSst",write_BrtBeginSst(sst));for(var i=0;i=4)blob.l+=length-4;return o}function parse_DataSpaceVersionInfo(blob,length){var o={};o.id=blob.read_shift(0,"lpp4");o.R=parse_CRYPTOVersion(blob,4);o.U=parse_CRYPTOVersion(blob,4);o.W=parse_CRYPTOVersion(blob,4);return o}function parse_DataSpaceMapEntry(blob){var len=blob.read_shift(4);var end=blob.l+len-4;var o={};var cnt=blob.read_shift(4);var comps=[];while(cnt-- >0){var rc={};rc.t=blob.read_shift(4);rc.v=blob.read_shift(0,"lpp4");comps.push(rc)}o.name=blob.read_shift(0,"lpp4");o.comps=comps;return o}function parse_DataSpaceMap(blob,length){var o=[];blob.l+=4;var cnt=blob.read_shift(4);while(cnt-- >0)o.push(parse_DataSpaceMapEntry(blob));return o}function parse_DataSpaceDefinition(blob,length){var o=[];blob.l+=4;var cnt=blob.read_shift(4);while(cnt-- >0)o.push(blob.read_shift(0,"lpp4"));return o}function parse_TransformInfoHeader(blob,length){var o={};var len=blob.read_shift(4);var tgt=blob.l+len-4;blob.l+=4;o.id=blob.read_shift(0,"lpp4");o.name=blob.read_shift(0,"lpp4");o.R=parse_CRYPTOVersion(blob,4);o.U=parse_CRYPTOVersion(blob,4);o.W=parse_CRYPTOVersion(blob,4);return o}function parse_Primary(blob,length){var hdr=parse_TransformInfoHeader(blob);hdr.ename=blob.read_shift(0,"8lpp4");hdr.blksz=blob.read_shift(4);hdr.cmode=blob.read_shift(4);if(blob.read_shift(4)!=4)throw new Error("Bad !Primary record");return hdr}function parse_EncryptionHeader(blob,length){var tgt=blob.l+length;var o={};o.Flags=blob.read_shift(4)&63;blob.l+=4;o.AlgID=blob.read_shift(4);var valid=false;switch(o.AlgID){case 26126:;case 26127:;case 26128:valid=o.Flags==36;break;case 26625:valid=o.Flags==4;break;case 0:valid=o.Flags==16||o.Flags==4||o.Flags==36;break;default:throw"Unrecognized encryption algorithm: "+o.AlgID;}if(!valid)throw new Error("Encryption Flags/AlgID mismatch");o.AlgIDHash=blob.read_shift(4);o.KeySize=blob.read_shift(4);o.ProviderType=blob.read_shift(4);blob.l+=8;o.CSPName=blob.read_shift(tgt-blob.l>>1,"utf16le").slice(0,-1);blob.l=tgt;return o}function parse_EncryptionVerifier(blob,length){var o={};blob.l+=4;o.Salt=blob.slice(blob.l,blob.l+16);blob.l+=16;o.Verifier=blob.slice(blob.l,blob.l+16);blob.l+=16;var sz=blob.read_shift(4);o.VerifierHash=blob.slice(blob.l,blob.l+sz);blob.l+=sz;return o}function parse_EncryptionInfo(blob,length){var vers=parse_CRYPTOVersion(blob);switch(vers.Minor){case 2:return parse_EncInfoStd(blob,vers);case 3:return parse_EncInfoExt(blob,vers);case 4:return parse_EncInfoAgl(blob,vers);}throw new Error("ECMA-376 Encryped file unrecognized Version: "+vers.Minor)}function parse_EncInfoStd(blob,vers){var flags=blob.read_shift(4);if((flags&63)!=36)throw new Error("EncryptionInfo mismatch");var sz=blob.read_shift(4);var tgt=blob.l+sz;var hdr=parse_EncryptionHeader(blob,sz);var verifier=parse_EncryptionVerifier(blob,blob.length-blob.l);return{t:"Std",h:hdr,v:verifier}}function parse_EncInfoExt(blob,vers){throw new Error("File is password-protected: ECMA-376 Extensible")}function parse_EncInfoAgl(blob,vers){throw new Error("File is password-protected: ECMA-376 Agile")}function parse_RC4CryptoHeader(blob,length){var o={};var vers=o.EncryptionVersionInfo=parse_CRYPTOVersion(blob,4);length-=4;if(vers.Minor!=2)throw"unrecognized minor version code: "+vers.Minor;if(vers.Major>4||vers.Major<2)throw"unrecognized major version code: "+vers.Major;o.Flags=blob.read_shift(4);length-=4;var sz=blob.read_shift(4);length-=4;o.EncryptionHeader=parse_EncryptionHeader(blob,sz);length-=sz;o.EncryptionVerifier=parse_EncryptionVerifier(blob,length);return o}function parse_RC4Header(blob,length){var o={};var vers=o.EncryptionVersionInfo=parse_CRYPTOVersion(blob,4);length-=4;if(vers.Major!=1||vers.Minor!=1)throw"unrecognized version code "+vers.Major+" : "+vers.Minor;o.Salt=blob.read_shift(16);o.EncryptedVerifier=blob.read_shift(16);o.EncryptedVerifierHash=blob.read_shift(16);return o}function crypto_CreatePasswordVerifier_Method1(Password){var Verifier=0,PasswordArray;var PasswordDecoded=_JS2ANSI(Password);var len=PasswordDecoded.length+1,i,PasswordByte;var Intermediate1,Intermediate2,Intermediate3;PasswordArray=new_raw_buf(len);PasswordArray[0]=PasswordDecoded.length;for(i=1;i!=len;++i)PasswordArray[i]=PasswordDecoded[i-1];for(i=len-1;i>=0;--i){PasswordByte=PasswordArray[i];Intermediate1=(Verifier&16384)===0?0:1;Intermediate2=Verifier<<1&32767;Intermediate3=Intermediate1|Intermediate2;Verifier=Intermediate3^PasswordByte}return Verifier^52811}var crypto_CreateXorArray_Method1=function(){var PadArray=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0];var InitialCode=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163];var XorMatrix=[44796,19929,39858,10053,20106,40212,10761,31585,63170,64933,60267,50935,40399,11199,17763,35526,1453,2906,5812,11624,23248,885,1770,3540,7080,14160,28320,56640,55369,41139,20807,41614,21821,43642,17621,28485,56970,44341,19019,38038,14605,29210,60195,50791,40175,10751,21502,43004,24537,18387,36774,3949,7898,15796,31592,63184,47201,24803,49606,37805,14203,28406,56812,17824,35648,1697,3394,6788,13576,27152,43601,17539,35078,557,1114,2228,4456,30388,60776,51953,34243,7079,14158,28316,14128,28256,56512,43425,17251,34502,7597,13105,26210,52420,35241,883,1766,3532,4129,8258,16516,33032,4657,9314,18628];var Ror=function(Byte){return(Byte/2|Byte*128)&255};var XorRor=function(byte1,byte2){return Ror(byte1^byte2)};var CreateXorKey_Method1=function(Password){var XorKey=InitialCode[Password.length-1];var CurrentElement=104;for(var i=Password.length-1;i>=0;--i){var Char=Password[i];for(var j=0;j!=7;++j){if(Char&64)XorKey^=XorMatrix[CurrentElement];Char*=2;--CurrentElement}}return XorKey};return function(password){var Password=_JS2ANSI(password);var XorKey=CreateXorKey_Method1(Password);var Index=Password.length;var ObfuscationArray=new_raw_buf(16);for(var i=0;i!=16;++i)ObfuscationArray[i]=0;var Temp,PasswordLastChar,PadIndex;if((Index&1)===1){Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(PadArray[0],Temp);--Index;Temp=XorKey&255;PasswordLastChar=Password[Password.length-1];ObfuscationArray[Index]=XorRor(PasswordLastChar,Temp)}while(Index>0){--Index;Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(Password[Index],Temp);--Index;Temp=XorKey&255;ObfuscationArray[Index]=XorRor(Password[Index],Temp)}Index=15;PadIndex=15-Password.length;while(PadIndex>0){Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(PadArray[PadIndex],Temp);--Index;--PadIndex;Temp=XorKey&255;ObfuscationArray[Index]=XorRor(Password[Index],Temp);--Index;--PadIndex}return ObfuscationArray}}();var crypto_DecryptData_Method1=function(password,Data,XorArrayIndex,XorArray,O){if(!O)O=Data;if(!XorArray)XorArray=crypto_CreateXorArray_Method1(password);var Index,Value;for(Index=0;Index!=Data.length;++Index){Value=Data[Index];Value^=XorArray[XorArrayIndex];Value=(Value>>5|Value<<3)&255;O[Index]=Value;++XorArrayIndex}return[O,XorArrayIndex,XorArray]};var crypto_MakeXorDecryptor=function(password){var XorArrayIndex=0,XorArray=crypto_CreateXorArray_Method1(password);return function(Data){var O=crypto_DecryptData_Method1("",Data,XorArrayIndex,XorArray);XorArrayIndex=O[1];return O[0]}};function parse_XORObfuscation(blob,length,opts,out){var o={key:parseuint16(blob),verificationBytes:parseuint16(blob)};if(opts.password)o.verifier=crypto_CreatePasswordVerifier_Method1(opts.password);out.valid=o.verificationBytes===o.verifier;if(out.valid)out.insitu_decrypt=crypto_MakeXorDecryptor(opts.password);return o}function parse_FilePassHeader(blob,length,oo){var o=oo||{};o.Info=blob.read_shift(2);blob.l-=2;if(o.Info===1)o.Data=parse_RC4Header(blob,length);else o.Data=parse_RC4CryptoHeader(blob,length);return o}function parse_FilePass(blob,length,opts){var o={Type:blob.read_shift(2)};if(o.Type)parse_FilePassHeader(blob,length-2,o);else parse_XORObfuscation(blob,length-2,opts,o);return o}function hex2RGB(h){var o=h.substr(h[0]==="#"?1:0,6);return[parseInt(o.substr(0,2),16),parseInt(o.substr(2,2),16),parseInt(o.substr(4,2),16)]}function rgb2Hex(rgb){for(var i=0,o=1;i!=3;++i)o=o*256+(rgb[i]>255?255:rgb[i]<0?0:rgb[i]);return o.toString(16).toUpperCase().substr(1)}function rgb2HSL(rgb){var R=rgb[0]/255,G=rgb[1]/255,B=rgb[2]/255;var M=Math.max(R,G,B),m=Math.min(R,G,B),C=M-m;if(C===0)return[0,0,R];var H6=0,S=0,L2=M+m;S=C/(L2>1?2-L2:L2);switch(M){case R:H6=((G-B)/C+6)%6;break;case G:H6=(B-R)/C+2;break;case B:H6=(R-G)/C+4;break;}return[H6/6,S,L2/2]}function hsl2RGB(hsl){var H=hsl[0],S=hsl[1],L=hsl[2];var C=S*2*(L<.5?L:1-L),m=L-C/2;var rgb=[m,m,m],h6=6*H;var X;if(S!==0)switch(h6|0){case 0:;case 6:X=C*h6;rgb[0]+=C;rgb[1]+=X;break;case 1:X=C*(2-h6);rgb[0]+=X;rgb[1]+=C;break;case 2:X=C*(h6-2);rgb[1]+=C;rgb[2]+=X;break;case 3:X=C*(4-h6);rgb[1]+=X;rgb[2]+=C;break;case 4:X=C*(h6-4);rgb[2]+=C;rgb[0]+=X;break;case 5:X=C*(6-h6);rgb[2]+=X;rgb[0]+=C;break;}for(var i=0;i!=3;++i)rgb[i]=Math.round(rgb[i]*255);return rgb}function rgb_tint(hex,tint){if(tint===0)return hex;var hsl=rgb2HSL(hex2RGB(hex));if(tint<0)hsl[2]=hsl[2]*(1+tint);else hsl[2]=1-(1-hsl[2])*(1-tint);return rgb2Hex(hsl2RGB(hsl))}var DEF_MDW=6,MAX_MDW=15,MIN_MDW=1,MDW=DEF_MDW;function width2px(width){return Math.floor((width+Math.round(128/MDW)/256)*MDW)}function px2char(px){return Math.floor((px-5)/MDW*100+.5)/100}function char2width(chr){return Math.round((chr*MDW+5)/MDW*256)/256}function px2char_(px){return((px-5)/MDW*100+.5)/100}function char2width_(chr){return(chr*MDW+5)/MDW*256/256}function cycle_width(collw){return char2width(px2char(width2px(collw)))}function find_mdw_colw(collw){var delta=Math.abs(collw-cycle_width(collw)),_MDW=MDW;if(delta>.005)for(MDW=MIN_MDW;MDW.5)guess--;if(Math.abs(guess)":;case"":break;case"":border={};if(y.diagonalUp){border.diagonalUp=y.diagonalUp}if(y.diagonalDown){border.diagonalDown=y.diagonalDown}styles.Borders.push(border);break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":;case"":break;case"":break;case"":;case"":break;case"":break;case"":;case"":break;case"":break;case"":;case"":break;case"":break;case"":;case"":break;case"":break;case"":break;case"":;case"":break;default:if(opts&&opts.WTF)throw new Error("unrecognized "+y[0]+" in borders");}})}function parse_fills(t,styles,themes,opts){styles.Fills=[];var fill={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":;case"":break;case"":;case"":styles.Fills.push(fill);fill={};break;case"":break;case"":styles.Fills.push(fill);fill={};break;case"":if(y.patternType)fill.patternType=y.patternType;break;case"":;case"":break;case"":;case"":break;case"":;case"":break;case"":break;case"":break;case"":break;case"":break;default:if(opts&&opts.WTF)throw new Error("unrecognized "+y[0]+" in fills");}})}function parse_fonts(t,styles,themes,opts){styles.Fonts=[];var font={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":;case"":break;case"":break;case"":;case"":styles.Fonts.push(font);font={};break;case"":;case"":break;case"":font.bold=1;break;case"":font.italic=1;break;case"":font.underline=1;break;case"":font.strike=1;break;case"":font.outline=1;break;case"":font.shadow=1;break;case"":font.condense=1;break;case"":font.extend=1;break;case"":;case"":break;case"":;case"":break;case"":;case"":break;case"":;case"":break;case"":;case"":break;default:if(opts&&opts.WTF)throw new Error("unrecognized "+y[0]+" in fonts");}})}function parse_numFmts(t,styles,opts){styles.NumberFmt=[];var k=keys(SSF._table);for(var i=0;i":;case"":;case"":break;case"0){if(j>392){for(j=392;j>60;--j)if(styles.NumberFmt[j]==null)break;styles.NumberFmt[j]=f}SSF.load(f,j)}}break;case"":break;default:if(opts.WTF)throw new Error("unrecognized "+y[0]+" in numFmts");}}}function write_numFmts(NF,opts){var o=[""];[[5,8],[23,26],[41,44],[50,392]].forEach(function(r){for(var i=r[0];i<=r[1];++i)if(NF[i]!=null)o[o.length]=writextag("numFmt",null,{numFmtId:i,formatCode:escapexml(NF[i])})});if(o.length===1)return"";o[o.length]="";o[0]=writextag("numFmts",null,{count:o.length-2}).replace("/>",">");return o.join("")}var cellXF_uint=["numFmtId","fillId","fontId","borderId","xfId"];var cellXF_bool=["applyAlignment","applyBorder","applyFill","applyFont","applyNumberFormat","applyProtection","pivotButton","quotePrefix"];function parse_cellXfs(t,styles,opts){ -styles.CellXf=[];var xf;t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x),i=0;switch(y[0]){case"":;case"":;case"":break;case"":xf=y;delete xf[0];for(i=0;i392){for(i=392;i>60;--i)if(styles.NumberFmt[xf.numFmtId]==styles.NumberFmt[i]){xf.numFmtId=i;break}}styles.CellXf.push(xf);break;case"":break;case"":var alignment={};if(y.vertical)alignment.vertical=y.vertical;if(y.horizontal)alignment.horizontal=y.horizontal;if(y.textRotation!=null)alignment.textRotation=y.textRotation;if(y.indent)alignment.indent=y.indent;if(y.wrapText)alignment.wrapText=y.wrapText;xf.alignment=alignment;break;case"":break;case"":;case"":break;case"":break;case"";if(o.length===2)return"";o[0]=writextag("cellXfs",null,{count:o.length-2}).replace("/>",">");return o.join("")}var parse_sty_xml=function make_pstyx(){var numFmtRegex=/]*)>[\S\s]*?<\/numFmts>/;var cellXfRegex=/]*)>[\S\s]*?<\/cellXfs>/;var fillsRegex=/]*)>[\S\s]*?<\/fills>/;var fontsRegex=/]*)>[\S\s]*?<\/fonts>/;var bordersRegex=/]*)>[\S\s]*?<\/borders>/;return function parse_sty_xml(data,themes,opts){var styles={};if(!data)return styles;data=data.replace(//gm,"").replace(//gm,"");var t;if(t=data.match(numFmtRegex))parse_numFmts(t,styles,opts);if(t=data.match(fontsRegex))parse_fonts(t,styles,themes,opts);if(t=data.match(fillsRegex))parse_fills(t,styles,themes,opts);if(t=data.match(bordersRegex))parse_borders(t,styles,themes,opts);if(t=data.match(cellXfRegex))parse_cellXfs(t,styles,opts);return styles}}();var STYLES_XML_ROOT=writextag("styleSheet",null,{xmlns:XMLNS.main[0],"xmlns:vt":XMLNS.vt});RELS.STY="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";function write_sty_xml(wb,opts){var o=[XML_HEADER,STYLES_XML_ROOT],w;if(wb.SSF&&(w=write_numFmts(wb.SSF))!=null)o[o.length]=w;o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';if(w=write_cellXfs(opts.cellXfs))o[o.length]=w;o[o.length]='';o[o.length]='';o[o.length]='';if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtFmt(data,length){var ifmt=data.read_shift(2);var stFmtCode=parse_XLWideString(data,length-2);return[ifmt,stFmtCode]}function write_BrtFmt(i,f,o){if(!o)o=new_buf(6+4*f.length);o.write_shift(2,i);write_XLWideString(f,o);return o.length>o.l?o.slice(0,o.l):o}function parse_BrtFont(data,length,opts){var out={};out.sz=data.read_shift(2)/20;var grbit=parse_FontFlags(data,2,opts);if(grbit.fCondense)out.condense=1;if(grbit.fExtend)out.extend=1;if(grbit.fShadow)out.shadow=1;if(grbit.fOutline)out.outline=1;if(grbit.fStrikeout)out.strike=1;if(grbit.fItalic)out.italic=1;var bls=data.read_shift(2);if(bls===700)out.bold=1;switch(data.read_shift(2)){case 1:out.vertAlign="superscript";break;case 2:out.vertAlign="subscript";break;}var underline=data.read_shift(1);if(underline!=0)out.underline=underline;var family=data.read_shift(1);if(family>0)out.family=family;var bCharSet=data.read_shift(1);if(bCharSet>0)out.charset=bCharSet;data.l++;out.color=parse_BrtColor(data,8);switch(data.read_shift(1)){case 1:out.scheme="major";break;case 2:out.scheme="minor";break;}out.name=parse_XLWideString(data,length-21);return out}function write_BrtFont(font,o){if(!o)o=new_buf(25+4*32);o.write_shift(2,font.sz*20);write_FontFlags(font,o);o.write_shift(2,font.bold?700:400);var sss=0;if(font.vertAlign=="superscript")sss=1;else if(font.vertAlign=="subscript")sss=2;o.write_shift(2,sss);o.write_shift(1,font.underline||0);o.write_shift(1,font.family||0);o.write_shift(1,font.charset||0);o.write_shift(1,0);write_BrtColor(font.color,o);var scheme=0;if(font.scheme=="major")scheme=1;if(font.scheme=="minor")scheme=2;o.write_shift(1,scheme);write_XLWideString(font.name,o);return o.length>o.l?o.slice(0,o.l):o}var XLSBFillPTNames=["none","solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];var rev_XLSBFillPTNames=evert(XLSBFillPTNames);function write_BrtFill(fill,o){if(!o)o=new_buf(4*3+8*7+16*1);var fls=rev_XLSBFillPTNames[fill.patternType];if(fls==null)fls=40;o.write_shift(4,fls);var j=0;if(fls!=40){write_BrtColor({auto:1},o);write_BrtColor({auto:1},o);for(;j<12;++j)o.write_shift(4,0)}else{for(;j<4;++j)o.write_shift(4,0);for(;j<12;++j)o.write_shift(4,0)}return o.length>o.l?o.slice(0,o.l):o}function parse_BrtXF(data,length){var ixfeParent=data.read_shift(2);var ifmt=data.read_shift(2);parsenoop(data,length-4);return{ixfe:ixfeParent,ifmt:ifmt}}function write_BrtXF(data,ixfeP,o){if(!o)o=new_buf(16);o.write_shift(2,ixfeP||0);o.write_shift(2,data.numFmtId||0);o.write_shift(2,0);o.write_shift(2,0);o.write_shift(2,0);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(1,0);return o}function write_Blxf(data,o){if(!o)o=new_buf(10);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(4,0);o.write_shift(4,0);return o}function write_BrtBorder(border,o){if(!o)o=new_buf(51);o.write_shift(1,0);write_Blxf(null,o);write_Blxf(null,o);write_Blxf(null,o);write_Blxf(null,o);write_Blxf(null,o);return o.length>o.l?o.slice(0,o.l):o}function write_BrtStyle(style,o){if(!o)o=new_buf(12+4*10);o.write_shift(4,style.xfId);o.write_shift(2,1);o.write_shift(1,+style.builtinId);o.write_shift(1,0);write_XLNullableWideString(style.name||"",o);return o.length>o.l?o.slice(0,o.l):o}function write_BrtBeginTableStyles(cnt,defTableStyle,defPivotStyle){var o=new_buf(4+256*2*4);o.write_shift(4,cnt);write_XLNullableWideString(defTableStyle,o);write_XLNullableWideString(defPivotStyle,o);return o.length>o.l?o.slice(0,o.l):o}function parse_sty_bin(data,themes,opts){var styles={};styles.NumberFmt=[];for(var y in SSF._table)styles.NumberFmt[y]=SSF._table[y];styles.CellXf=[];styles.Fonts=[];var state=[];var pass=false;recordhopper(data,function hopper_sty(val,R_n,RT){switch(RT){case 44:styles.NumberFmt[val[0]]=val[1];SSF.load(val[1],val[0]);break;case 43:styles.Fonts.push(val);if(val.color.theme!=null&&themes&&themes.themeElements&&themes.themeElements.clrScheme){val.color.rgb=rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb,val.color.tint||0)}break;case 1025:break;case 45:break;case 46:break;case 47:if(state[state.length-1]=="BrtBeginCellXFs"){styles.CellXf.push(val)}break;case 48:;case 507:;case 572:;case 475:break;case 1171:;case 2102:;case 1130:;case 512:;case 2095:break;case 35:pass=true;break;case 36:pass=false;break;case 37:state.push(R_n);break;case 38:state.pop();break;default:if((R_n||"").indexOf("Begin")>0)state.push(R_n);else if((R_n||"").indexOf("End")>0)state.pop();else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}});return styles}function write_FMTS_bin(ba,NF){if(!NF)return;var cnt=0;[[5,8],[23,26],[41,44],[50,392]].forEach(function(r){for(var i=r[0];i<=r[1];++i)if(NF[i]!=null)++cnt});if(cnt==0)return;write_record(ba,"BrtBeginFmts",write_UInt32LE(cnt));[[5,8],[23,26],[41,44],[50,392]].forEach(function(r){for(var i=r[0];i<=r[1];++i)if(NF[i]!=null)write_record(ba,"BrtFmt",write_BrtFmt(i,NF[i]))});write_record(ba,"BrtEndFmts")}function write_FONTS_bin(ba,data){var cnt=1;if(cnt==0)return;write_record(ba,"BrtBeginFonts",write_UInt32LE(cnt));write_record(ba,"BrtFont",write_BrtFont({sz:12,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}));write_record(ba,"BrtEndFonts")}function write_FILLS_bin(ba,data){var cnt=2;if(cnt==0)return;write_record(ba,"BrtBeginFills",write_UInt32LE(cnt));write_record(ba,"BrtFill",write_BrtFill({patternType:"none"}));write_record(ba,"BrtFill",write_BrtFill({patternType:"gray125"}));write_record(ba,"BrtEndFills")}function write_BORDERS_bin(ba,data){var cnt=1;if(cnt==0)return;write_record(ba,"BrtBeginBorders",write_UInt32LE(cnt));write_record(ba,"BrtBorder",write_BrtBorder({}));write_record(ba,"BrtEndBorders")}function write_CELLSTYLEXFS_bin(ba,data){var cnt=1;write_record(ba,"BrtBeginCellStyleXFs",write_UInt32LE(cnt));write_record(ba,"BrtXF",write_BrtXF({numFmtId:0,fontId:0,fillId:0,borderId:0},65535));write_record(ba,"BrtEndCellStyleXFs")}function write_CELLXFS_bin(ba,data){write_record(ba,"BrtBeginCellXFs",write_UInt32LE(data.length));data.forEach(function(c){write_record(ba,"BrtXF",write_BrtXF(c,0))});write_record(ba,"BrtEndCellXFs")}function write_STYLES_bin(ba,data){var cnt=1;write_record(ba,"BrtBeginStyles",write_UInt32LE(1));write_record(ba,"BrtStyle",write_BrtStyle({xfId:0,builtinId:0,name:"Normal"}));write_record(ba,"BrtEndStyles")}function write_DXFS_bin(ba,data){var cnt=0;write_record(ba,"BrtBeginDXFs",write_UInt32LE(cnt));write_record(ba,"BrtEndDXFs")}function write_TABLESTYLES_bin(ba,data){var cnt=0;write_record(ba,"BrtBeginTableStyles",write_BrtBeginTableStyles(cnt,"TableStyleMedium9","PivotStyleMedium4"));write_record(ba,"BrtEndTableStyles")}function write_COLORPALETTE_bin(ba,data){return}function write_sty_bin(wb,opts){var ba=buf_array();write_record(ba,"BrtBeginStyleSheet");write_FMTS_bin(ba,wb.SSF);write_FONTS_bin(ba,wb);write_FILLS_bin(ba,wb);write_BORDERS_bin(ba,wb);write_CELLSTYLEXFS_bin(ba,wb);write_CELLXFS_bin(ba,opts.cellXfs);write_STYLES_bin(ba,wb);write_DXFS_bin(ba,wb);write_TABLESTYLES_bin(ba,wb);write_COLORPALETTE_bin(ba,wb);write_record(ba,"BrtEndStyleSheet");return ba.end()}RELS.THEME="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";function parse_clrScheme(t,themes,opts){themes.themeElements.clrScheme=[];var color={};(t[0].match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":break;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":if(y[0].charAt(1)==="/"){themes.themeElements.clrScheme.push(color);color={}}else{color.name=y[0].substring(3,y[0].length-1)}break;default:if(opts&&opts.WTF)throw new Error("Unrecognized "+y[0]+" in clrScheme");}})}function parse_fontScheme(t,themes,opts){}function parse_fmtScheme(t,themes,opts){}var clrsregex=/]*)>[\s\S]*<\/a:clrScheme>/;var fntsregex=/]*)>[\s\S]*<\/a:fontScheme>/;var fmtsregex=/]*)>[\s\S]*<\/a:fmtScheme>/;function parse_themeElements(data,themes,opts){themes.themeElements={};var t;[["clrScheme",clrsregex,parse_clrScheme],["fontScheme",fntsregex,parse_fontScheme],["fmtScheme",fmtsregex,parse_fmtScheme]].forEach(function(m){if(!(t=data.match(m[1])))throw new Error(m[0]+" not found in themeElements");m[2](t,themes,opts)})}var themeltregex=/]*)>[\s\S]*<\/a:themeElements>/;function parse_theme_xml(data,opts){if(!data||data.length===0)return parse_theme_xml(write_theme());var t;var themes={};if(!(t=data.match(themeltregex)))throw new Error("themeElements not found in theme");parse_themeElements(t[0],themes,opts);return themes}function write_theme(Themes,opts){if(opts&&opts.themeXLSX)return opts.themeXLSX;var o=[XML_HEADER];o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";return o.join("")}function parse_Theme(blob,length,opts){var dwThemeVersion=blob.read_shift(4);if(dwThemeVersion===124226)return;blob.l+=length-4}function parse_ColorTheme(blob,length){return blob.read_shift(4)}function parse_FullColorExt(blob,length){var o={};o.xclrType=blob.read_shift(2);o.nTintShade=blob.read_shift(2);switch(o.xclrType){case 0:blob.l+=4;break;case 1:o.xclrValue=parse_IcvXF(blob,4);break;case 2:o.xclrValue=parse_LongRGBA(blob,4);break;case 3:o.xclrValue=parse_ColorTheme(blob,4);break;case 4:blob.l+=4;break;}blob.l+=8;return o}function parse_IcvXF(blob,length){return parsenoop(blob,length)}function parse_XFExtGradient(blob,length){return parsenoop(blob,length)}function parse_ExtProp(blob,length){var extType=blob.read_shift(2);var cb=blob.read_shift(2);var o=[extType];switch(extType){case 4:;case 5:;case 7:;case 8:;case 9:;case 10:;case 11:;case 13:o[1]=parse_FullColorExt(blob,cb);break;case 6:o[1]=parse_XFExtGradient(blob,cb);break;case 14:;case 15:o[1]=blob.read_shift(cb===5?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+extType+" "+cb);}return o}function parse_XFExt(blob,length){var end=blob.l+length;blob.l+=2;var ixfe=blob.read_shift(2);blob.l+=2;var cexts=blob.read_shift(2);var ext=[];while(cexts-- >0)ext.push(parse_ExtProp(blob,end-blob.l));return{ixfe:ixfe,ext:ext}}function update_xfext(xf,xfext){xfext.forEach(function(xfe){switch(xfe[0]){case 4:break;case 5:break;case 6:break;case 7:break;case 8:break;case 9:break;case 10:break;case 11:break;case 13:break;case 14:break;case 15:break;}})}function parse_cc_xml(data,opts){var d=[];if(!data)return d;var l=0,i=1;(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":;case"":break;case"0){}else if((R_n||"").indexOf("End")>0){}else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}});return out}function write_cc_bin(data,opts){}RELS.IMG="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image";RELS.DRAW="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing";function parse_drawing(data,rels){if(!data)return"??";var id=(data.match(/]*r:id="([^"]*)"/)||["",""])[1];return rels["!id"][id].Target}var _shapeid=1024;function write_comments_vml(rId,comments){var csize=[21600,21600];var bbox=["m0,0l0",csize[1],csize[0],csize[1],csize[0],"0xe"].join(",");var o=[writextag("xml",null,{"xmlns:v":XLMLNS.v,"xmlns:o":XLMLNS.o,"xmlns:x":XLMLNS.x,"xmlns:mv":XLMLNS.mv}).replace(/\/>/,">"),writextag("o:shapelayout",writextag("o:idmap",null,{"v:ext":"edit",data:rId}),{"v:ext":"edit"}),writextag("v:shapetype",[writextag("v:stroke",null,{joinstyle:"miter"}),writextag("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202","o:spt":202,coordsize:csize.join(","),path:bbox})];while(_shapeid",writextag("v:fill",writextag("o:fill",null,{type:"gradientUnscaled","v:ext":"view"}),{color2:"#BEFF82",angle:"-180",type:"gradient"}),writextag("v:shadow",null,{on:"t",obscured:"t"}),writextag("v:path",null,{"o:connecttype":"none"}),'
','',"","",writetag("x:Anchor",[c.c,0,c.r,0,c.c+3,100,c.r+5,100].join(",")),writetag("x:AutoFill","False"),writetag("x:Row",String(c.r)),writetag("x:Column",String(c.c)),"","",""])});o.push("");return o.join("")}RELS.CMNT="http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments";function parse_comments(zip,dirComments,sheets,sheetRels,opts){for(var i=0;i!=dirComments.length;++i){var canonicalpath=dirComments[i];var comments=parse_cmnt(getzipdata(zip,canonicalpath.replace(/^\//,""),true),canonicalpath,opts);if(!comments||!comments.length)continue;var sheetNames=keys(sheets);for(var j=0;j!=sheetNames.length;++j){var sheetName=sheetNames[j];var rels=sheetRels[sheetName];if(rels){var rel=rels[canonicalpath];if(rel)insertCommentsIntoSheet(sheetName,sheets[sheetName],comments)}}}}function insertCommentsIntoSheet(sheetName,sheet,comments){var dense=Array.isArray(sheet);var cell,r;comments.forEach(function(comment){if(dense){r=decode_cell(comment.ref);if(!sheet[r.r])sheet[r.r]=[];cell=sheet[r.r][r.c]}else cell=sheet[comment.ref];if(!cell){cell={};if(dense)sheet[r.r][r.c]=cell;else sheet[comment.ref]=cell;var range=safe_decode_range(sheet["!ref"]||"BDWGO1000001:A1");var thisCell=decode_cell(comment.ref);if(range.s.r>thisCell.r)range.s.r=thisCell.r;if(range.e.rthisCell.c)range.s.c=thisCell.c;if(range.e.c/))return[];var authors=[];var commentList=[];var authtag=data.match(/<(?:\w+:)?authors>([\s\S]*)<\/(?:\w+:)?authors>/);if(authtag&&authtag[1])authtag[1].split(/<\/\w*:?author>/).forEach(function(x){if(x===""||x.trim()==="")return;var a=x.match(/<(?:\w+:)?author[^>]*>(.*)/);if(a)authors.push(a[1])});var cmnttag=data.match(/<(?:\w+:)?commentList>([\s\S]*)<\/(?:\w+:)?commentList>/);if(cmnttag&&cmnttag[1])cmnttag[1].split(/<\/\w*:?comment>/).forEach(function(x,index){if(x===""||x.trim()==="")return;var cm=x.match(/<(?:\w+:)?comment[^>]*>/);if(!cm)return;var y=parsexmltag(cm[0]);var comment={author:y.authorId&&authors[y.authorId]?authors[y.authorId]:"sheetjsghost",ref:y.ref,guid:y.guid};var cell=decode_cell(y.ref);if(opts.sheetRows&&opts.sheetRows<=cell.r)return;var textMatch=x.match(/<(?:\w+:)?text>([\s\S]*)<\/(?:\w+:)?text>/);var rt=!!textMatch&&!!textMatch[1]&&parse_si(textMatch[1])||{r:"",t:"",h:""};comment.r=rt.r;if(rt.r=="")rt.t=rt.h="";comment.t=rt.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n");if(opts.cellHTML)comment.h=rt.h;commentList.push(comment)});return commentList}var CMNT_XML_ROOT=writextag("comments",null,{xmlns:XMLNS.main[0]});function write_comments_xml(data,opts){var o=[XML_HEADER,CMNT_XML_ROOT];var iauthor=[];o.push("");data.map(function(x){return x[1]}).forEach(function(comment){comment.map(function(x){return escapexml(x.a)}).forEach(function(a){if(iauthor.indexOf(a)>-1)return;iauthor.push(a);o.push(""+a+"")})});o.push("");o.push("");data.forEach(function(d){d[1].forEach(function(c){o.push('');o.push(writetag("t",c.t==null?"":c.t));o.push("")})});o.push("");if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBeginComment(data,length){var out={};out.iauthor=data.read_shift(4);var rfx=parse_UncheckedRfX(data,16);out.rfx=rfx.s;out.ref=encode_cell(rfx.s);data.l+=16;return out}function write_BrtBeginComment(data,o){if(o==null)o=new_buf(36);o.write_shift(4,data[1].iauthor);write_UncheckedRfX(data[0],o);o.write_shift(4,0);o.write_shift(4,0);o.write_shift(4,0);o.write_shift(4,0);return o}var parse_BrtCommentAuthor=parse_XLWideString;function parse_comments_bin(data,opts){var out=[];var authors=[];var c={};var pass=false;recordhopper(data,function hopper_cmnt(val,R_n,RT){switch(RT){case 632:authors.push(val);break;case 635:c=val;break;case 637:c.t=val.t;c.h=val.h;c.r=val.r;break;case 636:c.author=authors[c.iauthor];delete c.iauthor;if(opts.sheetRows&&opts.sheetRows<=c.rfx.r)break;if(!c.t)c.t="";delete c.rfx;out.push(c);break;case 35:pass=true;break;case 36:pass=false;break;case 37:break;case 38:break;default:if((R_n||"").indexOf("Begin")>0){}else if((R_n||"").indexOf("End")>0){}else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}});return out}function write_comments_bin(data,opts){var ba=buf_array();var iauthor=[];write_record(ba,"BrtBeginComments");{write_record(ba,"BrtBeginCommentAuthors");data.forEach(function(comment){comment[1].forEach(function(c){if(iauthor.indexOf(c.a)>-1)return;iauthor.push(c.a.substr(0,54));write_record(ba,"BrtCommentAuthor",write_XLWideString(c.a.substr(0,54)))})});write_record(ba,"BrtEndCommentAuthors")}{write_record(ba,"BrtBeginCommentList");data.forEach(function(comment){comment[1].forEach(function(c){c.iauthor=iauthor.indexOf(c.a);var range={s:decode_cell(comment[0]),e:decode_cell(comment[0]) -};write_record(ba,"BrtBeginComment",write_BrtBeginComment([range,c]));if(c.t&&c.t.length>0)write_record(ba,"BrtCommentText",write_BrtCommentText(c));write_record(ba,"BrtEndComment");delete c.iauthor})});write_record(ba,"BrtEndCommentList")}write_record(ba,"BrtEndComments");return ba.end()}RELS.DS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet";RELS.MS="http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet";function parse_ds_bin(data,opts,rels,wb,themes,styles){return{"!type":"dialog"}}function parse_ds_xml(data,opts,rels,wb,themes,styles){return{"!type":"dialog"}}function parse_ms_bin(data,opts,rels,wb,themes,styles){return{"!type":"macro"}}function parse_ms_xml(data,opts,rels,wb,themes,styles){return{"!type":"macro"}}var rc_to_a1=function(){var rcregex=/(^|[^A-Za-z])R(\[?)(-?\d+|)\]?C(\[?)(-?\d+|)\]?/g;var rcbase={r:0,c:0};function rcfunc($$,$1,$2,$3,$4,$5){var R=$3.length>0?parseInt($3,10)|0:0,C=$5.length>0?parseInt($5,10)|0:0;if(C<0&&$4.length===0)C=0;var cRel=false,rRel=false;if($4.length>0||$5.length==0)cRel=true;if(cRel)C+=rcbase.c;else--C;if($2.length>0||$3.length==0)rRel=true;if(rRel)R+=rcbase.r;else--R;return $1+(cRel?"":"$")+encode_col(C)+(rRel?"":"$")+encode_row(R)}return function rc_to_a1(fstr,base){rcbase=base;return fstr.replace(rcregex,rcfunc)}}();var crefregex=/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)([1-9]\d{0,5}|10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6])(?![_.\(A-Za-z0-9])/g;var a1_to_rc=function(){return function a1_to_rc(fstr,base){return fstr.replace(crefregex,function($0,$1,$2,$3,$4,$5,off,str){var c=decode_col($3)-base.c;var r=decode_row($5)-base.r;return $1+"R"+(r==0?"":"["+r+"]")+"C"+(c==0?"":"["+c+"]")})}}();function shift_formula_str(f,delta){return f.replace(crefregex,function($0,$1,$2,$3,$4,$5,off,str){return $1+($2=="$"?$2+$3:encode_col(decode_col($3)+delta.c))+($4=="$"?$4+$5:encode_row(decode_row($5)+delta.r))})}function shift_formula_xlsx(f,range,cell){var r=decode_range(range),s=r.s,c=decode_cell(cell);var delta={r:c.r-s.r,c:c.c-s.c};return shift_formula_str(f,delta)}function parseread(l){return function(blob,length){blob.l+=l;return}}function parseread1(blob){blob.l+=1;return}function parse_ColRelU(blob,length){var c=blob.read_shift(length==1?1:2);return[c&16383,c>>14&1,c>>15&1]}function parse_RgceArea(blob,length,opts){var w=2;if(opts){if(opts.biff>=2&&opts.biff<=5)return parse_RgceArea_BIFF2(blob,length,opts);else if(opts.biff==12)w=4}var r=blob.read_shift(w),R=blob.read_shift(w);var c=parse_ColRelU(blob,2);var C=parse_ColRelU(blob,2);return{s:{r:r,c:c[0],cRel:c[1],rRel:c[2]},e:{r:R,c:C[0],cRel:C[1],rRel:C[2]}}}function parse_RgceArea_BIFF2(blob){var r=parse_ColRelU(blob,2),R=parse_ColRelU(blob,2);var c=blob.read_shift(1);var C=blob.read_shift(1);return{s:{r:r[0],c:c,cRel:r[1],rRel:r[2]},e:{r:R[0],c:C,cRel:R[1],rRel:R[2]}}}function parse_RgceAreaRel(blob,length){var r=blob.read_shift(length==12?4:2),R=blob.read_shift(length==12?4:2);var c=parse_ColRelU(blob,2);var C=parse_ColRelU(blob,2);return{s:{r:r,c:c[0],cRel:c[1],rRel:c[2]},e:{r:R,c:C[0],cRel:C[1],rRel:C[2]}}}function parse_RgceLoc(blob,length,opts){if(opts&&opts.biff>=2&&opts.biff<=5)return parse_RgceLoc_BIFF2(blob,length,opts);var r=blob.read_shift(opts&&opts.biff==12?4:2);var c=parse_ColRelU(blob,2);return{r:r,c:c[0],cRel:c[1],rRel:c[2]}}function parse_RgceLoc_BIFF2(blob,length,opts){var r=parse_ColRelU(blob,2);var c=blob.read_shift(1);return{r:r[0],c:c,cRel:r[1],rRel:r[2]}}function parse_RgceLocRel(blob,length,opts){var biff=opts&&opts.biff?opts.biff:8;if(biff>=2&&biff<=5)return parse_RgceLocRel_BIFF2(blob,length,opts);var r=blob.read_shift(biff>=12?4:2);var cl=blob.read_shift(2);var cRel=(cl&32768)>>15,rRel=(cl&16384)>>14;cl&=16383;if(rRel==1)while(r>524287)r-=1048576;if(cRel==1)while(cl>8191)cl=cl-16384;return{r:r,c:cl,cRel:cRel,rRel:rRel}}function parse_RgceLocRel_BIFF2(blob,length){var rl=blob.read_shift(2);var c=blob.read_shift(1);var rRel=(rl&32768)>>15,cRel=(rl&16384)>>14;rl&=16383;if(rRel==1&&rl>=8192)rl=rl-16384;if(cRel==1&&c>=128)c=c-256;return{r:rl,c:c,cRel:cRel,rRel:rRel}}function parse_PtgArea(blob,length,opts){var type=(blob[blob.l++]&96)>>5;var area=parse_RgceArea(blob,opts.biff>=2&&opts.biff<=5?6:8,opts);return[type,area]}function parse_PtgArea3d(blob,length,opts){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2,"i");var w=8;if(opts)switch(opts.biff){case 5:blob.l+=12;w=6;break;case 12:w=12;break;}var area=parse_RgceArea(blob,w,opts);return[type,ixti,area]}function parse_PtgAreaErr(blob,length,opts){var type=(blob[blob.l++]&96)>>5;blob.l+=opts&&opts.biff>8?12:8;return[type]}function parse_PtgAreaErr3d(blob,length,opts){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2);var w=8;if(opts)switch(opts.biff){case 5:blob.l+=12;w=6;break;case 12:w=12;break;}blob.l+=w;return[type,ixti]}function parse_PtgAreaN(blob,length,opts){var type=(blob[blob.l++]&96)>>5;var area=parse_RgceAreaRel(blob,opts&&opts.biff>8?12:8,opts);return[type,area]}function parse_PtgArray(blob,length,opts){var type=(blob[blob.l++]&96)>>5;blob.l+=opts.biff==2?6:opts.biff==12?14:7;return[type]}function parse_PtgAttrBaxcel(blob,length){var bitSemi=blob[blob.l+1]&1;var bitBaxcel=1;blob.l+=4;return[bitSemi,bitBaxcel]}function parse_PtgAttrChoose(blob,length,opts){blob.l+=2;var offset=blob.read_shift(opts&&opts.biff==2?1:2);var o=[];for(var i=0;i<=offset;++i)o.push(blob.read_shift(opts&&opts.biff==2?1:2));return o}function parse_PtgAttrGoto(blob,length,opts){var bitGoto=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitGoto,blob.read_shift(opts&&opts.biff==2?1:2)]}function parse_PtgAttrIf(blob,length,opts){var bitIf=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitIf,blob.read_shift(opts&&opts.biff==2?1:2)]}function parse_PtgAttrIfError(blob,length){var bitIf=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitIf,blob.read_shift(2)]}function parse_PtgAttrSemi(blob,length,opts){var bitSemi=blob[blob.l+1]&255?1:0;blob.l+=opts&&opts.biff==2?3:4;return[bitSemi]}function parse_PtgAttrSpaceType(blob,length){var type=blob.read_shift(1),cch=blob.read_shift(1);return[type,cch]}function parse_PtgAttrSpace(blob,length){blob.read_shift(2);return parse_PtgAttrSpaceType(blob,2)}function parse_PtgAttrSpaceSemi(blob,length){blob.read_shift(2);return parse_PtgAttrSpaceType(blob,2)}function parse_PtgRef(blob,length,opts){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var loc=parse_RgceLoc(blob,0,opts);return[type,loc]}function parse_PtgRefN(blob,length,opts){var type=(blob[blob.l]&96)>>5;blob.l+=1;var loc=parse_RgceLocRel(blob,0,opts);return[type,loc]}function parse_PtgRef3d(blob,length,opts){var type=(blob[blob.l]&96)>>5;blob.l+=1;var ixti=blob.read_shift(2);var loc=parse_RgceLoc(blob,0,opts);return[type,ixti,loc]}function parse_PtgFunc(blob,length,opts){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var iftab=blob.read_shift(opts&&opts.biff<=3?1:2);return[FtabArgc[iftab],Ftab[iftab],type]}function parse_PtgFuncVar(blob,length,opts){blob.l++;var cparams=blob.read_shift(1),tab=opts&&opts.biff<=3?[0,blob.read_shift(1)]:parsetab(blob);return[cparams,(tab[0]===0?Ftab:Cetab)[tab[1]]]}function parsetab(blob,length){return[blob[blob.l+1]>>7,blob.read_shift(2)&32767]}function parse_PtgAttrSum(blob,length,opts){blob.l+=opts&&opts.biff==2?3:4;return}var parse_PtgConcat=parseread1;function parse_PtgExp(blob,length,opts){blob.l++;if(opts&&opts.biff==12)return[blob.read_shift(4,"i"),0];var row=blob.read_shift(2);var col=blob.read_shift(opts&&opts.biff==2?1:2);return[row,col]}function parse_PtgErr(blob,length){blob.l++;return BErr[blob.read_shift(1)]}function parse_PtgInt(blob,length){blob.l++;return blob.read_shift(2)}function parse_PtgBool(blob,length){blob.l++;return blob.read_shift(1)!==0}function parse_PtgNum(blob,length){blob.l++;return parse_Xnum(blob,8)}function parse_PtgStr(blob,length,opts){blob.l++;return parse_ShortXLUnicodeString(blob,length-1,opts)}function parse_SerAr(blob,biff){var val=[blob.read_shift(1)];if(biff==12)switch(val[0]){case 2:val[0]=4;break;case 4:val[0]=16;break;case 0:val[0]=1;break;case 1:val[0]=2;break;}switch(val[0]){case 4:val[1]=parsebool(blob,1)?"TRUE":"FALSE";blob.l+=7;break;case 16:val[1]=BErr[blob[blob.l]];blob.l+=8;break;case 0:blob.l+=8;break;case 1:val[1]=parse_Xnum(blob,8);break;case 2:val[1]=parse_XLUnicodeString2(blob,0,{biff:biff>0&&biff<8?2:biff});break;}return val}function parse_PtgExtraMem(blob,cce){var count=blob.read_shift(2);var out=[];for(var i=0;i!=count;++i)out.push(parse_Ref8U(blob,8));return out}function parse_PtgExtraArray(blob,length,opts){var rows=0,cols=0;if(opts.biff==12){rows=blob.read_shift(4);cols=blob.read_shift(4)}else{cols=1+blob.read_shift(1);rows=1+blob.read_shift(2)}if(opts.biff>=2&&opts.biff<8){--rows;if(--cols==0)cols=256}for(var i=0,o=[];i!=rows&&(o[i]=[]);++i)for(var j=0;j!=cols;++j)o[i][j]=parse_SerAr(blob,opts.biff);return o}function parse_PtgName(blob,length,opts){var type=blob.read_shift(1)>>>5&3;var w=!opts||opts.biff>=8?4:2;var nameindex=blob.read_shift(w);switch(opts.biff){case 2:blob.l+=5;break;case 3:;case 4:blob.l+=8;break;case 5:blob.l+=12;break;}return[type,0,nameindex]}function parse_PtgNameX(blob,length,opts){if(opts.biff==5)return parse_PtgNameX_BIFF5(blob,length,opts);var type=blob.read_shift(1)>>>5&3;var ixti=blob.read_shift(2);var nameindex=blob.read_shift(4);return[type,ixti,nameindex]}function parse_PtgNameX_BIFF5(blob,length,opts){var type=blob.read_shift(1)>>>5&3;var ixti=blob.read_shift(2,"i");blob.l+=8;var nameindex=blob.read_shift(2);blob.l+=12;return[type,ixti,nameindex]}function parse_PtgMemArea(blob,length,opts){var type=blob.read_shift(1)>>>5&3;blob.l+=opts&&opts.biff==2?3:4;var cce=blob.read_shift(opts&&opts.biff==2?1:2);return[type,cce]}function parse_PtgMemFunc(blob,length,opts){var type=blob.read_shift(1)>>>5&3;var cce=blob.read_shift(opts&&opts.biff==2?1:2);return[type,cce]}function parse_PtgRefErr(blob,length,opts){var type=blob.read_shift(1)>>>5&3;blob.l+=4;if(opts.biff==12)blob.l+=2;return[type]}function parse_PtgRefErr3d(blob,length,opts){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2);var w=4;if(opts)switch(opts.biff){case 5:throw new Error("PtgRefErr3d -- 5");case 12:w=6;break;}blob.l+=w;return[type,ixti]}var parse_PtgAdd=parseread1;var parse_PtgDiv=parseread1;var parse_PtgEq=parseread1;var parse_PtgGe=parseread1;var parse_PtgGt=parseread1;var parse_PtgIsect=parseread1;var parse_PtgLe=parseread1;var parse_PtgLt=parseread1;var parse_PtgMissArg=parseread1;var parse_PtgMul=parseread1;var parse_PtgNe=parseread1;var parse_PtgParen=parseread1;var parse_PtgPercent=parseread1;var parse_PtgPower=parseread1;var parse_PtgRange=parseread1;var parse_PtgSub=parseread1;var parse_PtgUminus=parseread1;var parse_PtgUnion=parseread1;var parse_PtgUplus=parseread1;var parse_PtgMemErr=parsenoop;var parse_PtgMemNoMem=parsenoop;var parse_PtgTbl=parsenoop;var PtgTypes={1:{n:"PtgExp",f:parse_PtgExp},2:{n:"PtgTbl",f:parse_PtgTbl},3:{n:"PtgAdd",f:parse_PtgAdd},4:{n:"PtgSub",f:parse_PtgSub},5:{n:"PtgMul",f:parse_PtgMul},6:{n:"PtgDiv",f:parse_PtgDiv},7:{n:"PtgPower",f:parse_PtgPower},8:{n:"PtgConcat",f:parse_PtgConcat},9:{n:"PtgLt",f:parse_PtgLt},10:{n:"PtgLe",f:parse_PtgLe},11:{n:"PtgEq",f:parse_PtgEq},12:{n:"PtgGe",f:parse_PtgGe},13:{n:"PtgGt",f:parse_PtgGt},14:{n:"PtgNe",f:parse_PtgNe},15:{n:"PtgIsect",f:parse_PtgIsect},16:{n:"PtgUnion",f:parse_PtgUnion},17:{n:"PtgRange",f:parse_PtgRange},18:{n:"PtgUplus",f:parse_PtgUplus},19:{n:"PtgUminus",f:parse_PtgUminus},20:{n:"PtgPercent",f:parse_PtgPercent},21:{n:"PtgParen",f:parse_PtgParen},22:{n:"PtgMissArg",f:parse_PtgMissArg},23:{n:"PtgStr",f:parse_PtgStr},28:{n:"PtgErr",f:parse_PtgErr},29:{n:"PtgBool",f:parse_PtgBool},30:{n:"PtgInt",f:parse_PtgInt},31:{n:"PtgNum",f:parse_PtgNum},32:{n:"PtgArray",f:parse_PtgArray},33:{n:"PtgFunc",f:parse_PtgFunc},34:{n:"PtgFuncVar",f:parse_PtgFuncVar},35:{n:"PtgName",f:parse_PtgName},36:{n:"PtgRef",f:parse_PtgRef},37:{n:"PtgArea",f:parse_PtgArea},38:{n:"PtgMemArea",f:parse_PtgMemArea},39:{n:"PtgMemErr",f:parse_PtgMemErr},40:{n:"PtgMemNoMem",f:parse_PtgMemNoMem},41:{n:"PtgMemFunc",f:parse_PtgMemFunc},42:{n:"PtgRefErr",f:parse_PtgRefErr},43:{n:"PtgAreaErr",f:parse_PtgAreaErr},44:{n:"PtgRefN",f:parse_PtgRefN},45:{n:"PtgAreaN",f:parse_PtgAreaN},57:{n:"PtgNameX",f:parse_PtgNameX},58:{n:"PtgRef3d",f:parse_PtgRef3d},59:{n:"PtgArea3d",f:parse_PtgArea3d},60:{n:"PtgRefErr3d",f:parse_PtgRefErr3d},61:{n:"PtgAreaErr3d",f:parse_PtgAreaErr3d},255:{}};var PtgDupes={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61};(function(){for(var y in PtgDupes)PtgTypes[y]=PtgTypes[PtgDupes[y]]})();var Ptg18={};var Ptg19={1:{n:"PtgAttrSemi",f:parse_PtgAttrSemi},2:{n:"PtgAttrIf",f:parse_PtgAttrIf},4:{n:"PtgAttrChoose",f:parse_PtgAttrChoose},8:{n:"PtgAttrGoto",f:parse_PtgAttrGoto},16:{n:"PtgAttrSum",f:parse_PtgAttrSum},32:{n:"PtgAttrBaxcel",f:parse_PtgAttrBaxcel},64:{n:"PtgAttrSpace",f:parse_PtgAttrSpace},65:{n:"PtgAttrSpaceSemi",f:parse_PtgAttrSpaceSemi},128:{n:"PtgAttrIfError",f:parse_PtgAttrIfError},255:{}};function parse_Formula(blob,length,opts){var end=blob.l+length;var cell=parse_XLSCell(blob,6);if(opts.biff==2)++blob.l;var val=parse_FormulaValue(blob,8);var flags=blob.read_shift(1);if(opts.biff!=2){blob.read_shift(1);if(opts.biff>=5){var chn=blob.read_shift(4)}}var cbf=parse_XLSCellParsedFormula(blob,end-blob.l,opts);return{cell:cell,val:val[0],formula:cbf,shared:flags>>3&1,tt:val[1]}}function parse_FormulaValue(blob){var b;if(__readUInt16LE(blob,blob.l+6)!==65535)return[parse_Xnum(blob),"n"];switch(blob[blob.l]){case 0:blob.l+=8;return["String","s"];case 1:b=blob[blob.l+2]===1;blob.l+=8;return[b,"b"];case 2:b=blob[blob.l+2];blob.l+=8;return[b,"e"];case 3:blob.l+=8;return["","s"];}return[]}function parse_RgbExtra(blob,length,rgce,opts){if(opts.biff<8)return parsenoop(blob,length);var target=blob.l+length;var o=[];for(var i=0;i!==rgce.length;++i){switch(rgce[i][0]){case"PtgArray":rgce[i][1]=parse_PtgExtraArray(blob,0,opts);o.push(rgce[i][1]);break;case"PtgMemArea":rgce[i][2]=parse_PtgExtraMem(blob,rgce[i][1]);o.push(rgce[i][2]);break;case"PtgExp":if(opts&&opts.biff==12){rgce[i][1][1]=blob.read_shift(4);o.push(rgce[i][1])}break;default:break;}}length=target-blob.l;if(length!==0)o.push(parsenoop(blob,length));return o}function parse_NameParsedFormula(blob,length,opts,cce){var target=blob.l+length;var rgce=parse_Rgce(blob,cce,opts);var rgcb;if(target!==blob.l)rgcb=parse_RgbExtra(blob,target-blob.l,rgce,opts);return[rgce,rgcb]}function parse_XLSCellParsedFormula(blob,length,opts){var target=blob.l+length,len=opts.biff==2?1:2;var rgcb,cce=blob.read_shift(len);if(cce==65535)return[[],parsenoop(blob,length-2)];var rgce=parse_Rgce(blob,cce,opts);if(length!==cce+len)rgcb=parse_RgbExtra(blob,length-cce-len,rgce,opts);return[rgce,rgcb]}function parse_SharedParsedFormula(blob,length,opts){var target=blob.l+length;var rgcb,cce=blob.read_shift(2);var rgce=parse_Rgce(blob,cce,opts);if(cce==65535)return[[],parsenoop(blob,length-2)];if(length!==cce+2)rgcb=parse_RgbExtra(blob,target-cce-2,rgce,opts);return[rgce,rgcb]}function parse_ArrayParsedFormula(blob,length,opts,ref){var target=blob.l+length,len=opts.biff==2?1:2;var rgcb,cce=blob.read_shift(len);if(cce==65535)return[[],parsenoop(blob,length-2)];var rgce=parse_Rgce(blob,cce,opts);if(length!==cce+len)rgcb=parse_RgbExtra(blob,length-cce-len,rgce,opts);return[rgce,rgcb]}function parse_Rgce(blob,length,opts){var target=blob.l+length;var R,id,ptgs=[];while(target!=blob.l){length=target-blob.l;id=blob[blob.l];R=PtgTypes[id];if(id===24||id===25){id=blob[blob.l+1];R=(id===24?Ptg18:Ptg19)[id]}if(!R||!R.f){parsenoop(blob,length)}else{ptgs.push([R.n,R.f(blob,length,opts)])}}return ptgs}function stringify_array(f){var o=[];for(var i=0;i=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"};function stringify_formula(formula,range,cell,supbooks,opts){var _range={s:{c:0,r:0},e:{c:0,r:0}};var stack=[],e1,e2,type,c,ixti=0,nameidx=0,r,sname="";if(!formula[0]||!formula[0][0])return"";var last_sp=-1,sp="";for(var ff=0,fflen=formula[0].length;ff=0){switch(formula[0][last_sp][1][0]){case 0:sp=fill(" ",formula[0][last_sp][1][1]);break;case 1:sp=fill("\r",formula[0][last_sp][1][1]);break;default:sp="";if(opts.WTF)throw new Error("Unexpected PtgAttrSpaceType "+formula[0][last_sp][1][0]);}e2=e2+sp;last_sp=-1}stack.push(e2+PtgBinOp[f[0]]+e1);break;case"PtgIsect":e1=stack.pop();e2=stack.pop();stack.push(e2+" "+e1);break;case"PtgUnion":e1=stack.pop();e2=stack.pop();stack.push(e2+","+e1);break;case"PtgRange":e1=stack.pop();e2=stack.pop();stack.push(e2+":"+e1);break;case"PtgAttrChoose":break;case"PtgAttrGoto":break;case"PtgAttrIf":break;case"PtgAttrIfError":break;case"PtgRef":type=f[1][0];c=shift_cell_xls(f[1][1],_range,opts);stack.push(encode_cell_xls(c));break;case"PtgRefN":type=f[1][0];c=cell?shift_cell_xls(f[1][1],cell,opts):f[1][1];stack.push(encode_cell_xls(c));break;case"PtgRef3d":type=f[1][0];ixti=f[1][1];c=shift_cell_xls(f[1][2],_range,opts);sname=supbooks.SheetNames[ixti];var w=sname;stack.push(sname+"!"+encode_cell_xls(c));break;case"PtgFunc":;case"PtgFuncVar":var argc=f[1][0],func=f[1][1];if(!argc)argc=0;var args=argc==0?[]:stack.slice(-argc);stack.length-=argc;if(func==="User")func=args.shift();stack.push(func+"("+args.join(",")+")");break;case"PtgBool":stack.push(f[1]?"TRUE":"FALSE");break;case"PtgInt":stack.push(f[1]);break;case"PtgNum":stack.push(String(f[1]));break;case"PtgStr":stack.push('"'+f[1]+'"');break;case"PtgErr":stack.push(f[1]);break;case"PtgAreaN":type=f[1][0];r=shift_range_xls(f[1][1],_range,opts);stack.push(encode_range_xls(r,opts));break;case"PtgArea":type=f[1][0];r=shift_range_xls(f[1][1],_range,opts);stack.push(encode_range_xls(r,opts));break;case"PtgArea3d":type=f[1][0];ixti=f[1][1];r=f[1][2];sname=supbooks&&supbooks[1]?supbooks[1][ixti+1]:"**MISSING**";stack.push(sname+"!"+encode_range(r));break;case"PtgAttrSum":stack.push("SUM("+stack.pop()+")");break;case"PtgAttrSemi":break;case"PtgName":nameidx=f[1][2];var lbl=(supbooks.names||[])[nameidx-1]||(supbooks[0]||[])[nameidx];var name=lbl?lbl.Name:"**MISSING**"+String(nameidx);if(name in XLSXFutureFunctions)name=XLSXFutureFunctions[name];stack.push(name);break;case"PtgNameX":var bookidx=f[1][1];nameidx=f[1][2];var externbook;if(opts.biff<=5){if(bookidx<0)bookidx=-bookidx;if(supbooks[bookidx])externbook=supbooks[bookidx][nameidx]}else{var pnxname=supbooks.SheetNames[bookidx];var o="";if(((supbooks[bookidx]||[])[0]||[])[0]==14849){}else if(((supbooks[bookidx]||[])[0]||[])[0]==1025){if(supbooks[bookidx][nameidx]&&supbooks[bookidx][nameidx].itab>0){o=supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1]+"!"}}else o=supbooks.SheetNames[nameidx-1]+"!";if(supbooks[bookidx]&&supbooks[bookidx][nameidx])o+=supbooks[bookidx][nameidx].Name;else if(supbooks[0]&&supbooks[0][nameidx])o+=supbooks[0][nameidx].Name;else o+="??NAMEX??";stack.push(o);break}if(!externbook)externbook={Name:"??NAMEX??"};stack.push(externbook.Name);break;case"PtgParen":var lp="(",rp=")";if(last_sp>=0){sp="";switch(formula[0][last_sp][1][0]){case 2:lp=fill(" ",formula[0][last_sp][1][1])+lp;break;case 3:lp=fill("\r",formula[0][last_sp][1][1])+lp;break;case 4:rp=fill(" ",formula[0][last_sp][1][1])+rp;break;case 5:rp=fill("\r",formula[0][last_sp][1][1])+rp;break;default:if(opts.WTF)throw new Error("Unexpected PtgAttrSpaceType "+formula[0][last_sp][1][0]);}last_sp=-1}stack.push(lp+stack.pop()+rp);break;case"PtgRefErr":stack.push("#REF!");break;case"PtgRefErr3d":stack.push("#REF!");break;case"PtgExp":c={c:f[1][1],r:f[1][0]};var q={c:cell.c,r:cell.r};if(supbooks.sharedf[encode_cell(c)]){var parsedf=supbooks.sharedf[encode_cell(c)];stack.push(stringify_formula(parsedf,_range,q,supbooks,opts))}else{var fnd=false;for(e1=0;e1!=supbooks.arrayf.length;++e1){e2=supbooks.arrayf[e1];if(c.ce2[0].e.c)continue;if(c.re2[0].e.r)continue;stack.push(stringify_formula(e2[1],_range,q,supbooks,opts));fnd=true;break}if(!fnd)stack.push(f[1])}break;case"PtgArray":stack.push("{"+stringify_array(f[1])+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":;case"PtgAttrSpaceSemi":last_sp=ff;break;case"PtgTbl":break;case"PtgMemErr":break;case"PtgMissArg":stack.push("");break;case"PtgAreaErr":stack.push("#REF!");break;case"PtgAreaErr3d":stack.push("#REF!");break;case"PtgMemFunc":break;default:throw new Error("Unrecognized Formula Token: "+String(f));}var PtgNonDisp=["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"];if(last_sp>=0&&PtgNonDisp.indexOf(formula[0][ff][0])==-1){f=formula[0][last_sp];var _left=true;switch(f[1][0]){case 4:_left=false;case 0:sp=fill(" ",f[1][1]);break;case 5:_left=false;case 1:sp=fill("\r",f[1][1]);break;default:sp="";if(opts.WTF)throw new Error("Unexpected PtgAttrSpaceType "+f[1][0]);}stack.push((_left?sp:"")+stack.pop()+(_left?"":sp));last_sp=-1}}if(stack.length>1&&opts.WTF)throw new Error("bad formula stack");return stack[0]}function parse_XLSBParsedFormula(data,length,opts){var end=data.l+length;var cce=data.read_shift(4);var rgce=parse_Rgce(data,cce,opts);var cb=data.read_shift(4);var rgcb=cb>0?parse_RgbExtra(data,cb,rgce,opts):null;return[rgce,rgcb]}var parse_XLSBArrayParsedFormula=parse_XLSBParsedFormula;var parse_XLSBCellParsedFormula=parse_XLSBParsedFormula;var parse_XLSBNameParsedFormula=parse_XLSBParsedFormula;var parse_XLSBSharedParsedFormula=parse_XLSBParsedFormula;var PtgDataType={1:"REFERENCE",2:"VALUE",3:"ARRAY"};var Cetab={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV",103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"};var Ftab={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDIRECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT", -189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD",380:"CUBEVALUE",381:"CUBEMEMBER",382:"CUBEMEMBERPROPERTY",383:"CUBERANKEDMEMBER",384:"HEX2BIN",385:"HEX2DEC",386:"HEX2OCT",387:"DEC2BIN",388:"DEC2HEX",389:"DEC2OCT",390:"OCT2BIN",391:"OCT2HEX",392:"OCT2DEC",393:"BIN2DEC",394:"BIN2OCT",395:"BIN2HEX",396:"IMSUB",397:"IMDIV",398:"IMPOWER",399:"IMABS",400:"IMSQRT",401:"IMLN",402:"IMLOG2",403:"IMLOG10",404:"IMSIN",405:"IMCOS",406:"IMEXP",407:"IMARGUMENT",408:"IMCONJUGATE",409:"IMAGINARY",410:"IMREAL",411:"COMPLEX",412:"IMSUM",413:"IMPRODUCT",414:"SERIESSUM",415:"FACTDOUBLE",416:"SQRTPI",417:"QUOTIENT",418:"DELTA",419:"GESTEP",420:"ISEVEN",421:"ISODD",422:"MROUND",423:"ERF",424:"ERFC",425:"BESSELJ",426:"BESSELK",427:"BESSELY",428:"BESSELI",429:"XIRR",430:"XNPV",431:"PRICEMAT",432:"YIELDMAT",433:"INTRATE",434:"RECEIVED",435:"DISC",436:"PRICEDISC",437:"YIELDDISC",438:"TBILLEQ",439:"TBILLPRICE",440:"TBILLYIELD",441:"PRICE",442:"YIELD",443:"DOLLARDE",444:"DOLLARFR",445:"NOMINAL",446:"EFFECT",447:"CUMPRINC",448:"CUMIPMT",449:"EDATE",450:"EOMONTH",451:"YEARFRAC",452:"COUPDAYBS",453:"COUPDAYS",454:"COUPDAYSNC",455:"COUPNCD",456:"COUPNUM",457:"COUPPCD",458:"DURATION",459:"MDURATION",460:"ODDLPRICE",461:"ODDLYIELD",462:"ODDFPRICE",463:"ODDFYIELD",464:"RANDBETWEEN",465:"WEEKNUM",466:"AMORDEGRC",467:"AMORLINC",468:"CONVERT",724:"SHEETJS",469:"ACCRINT",470:"ACCRINTM",471:"WORKDAY",472:"NETWORKDAYS",473:"GCD",474:"MULTINOMIAL",475:"LCM",476:"FVSCHEDULE",477:"CUBEKPIMEMBER",478:"CUBESET",479:"CUBESETCOUNT",480:"IFERROR",481:"COUNTIFS",482:"SUMIFS",483:"AVERAGEIF",484:"AVERAGEIFS"};var FtabArgc={2:1,3:1,15:1,16:1,17:1,18:1,19:0,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,65:3,66:3,67:1,68:1,69:1,70:1,71:1,72:1,73:1,75:1,76:1,77:1,79:2,80:2,83:1,85:0,86:1,90:1,97:2,98:1,99:1,101:3,102:3,105:1,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,144:4,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,189:3,190:1,195:3,196:3,197:1,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,247:4,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,382:3,385:1,392:1,393:1,396:2,397:2,398:2,399:1,400:1,401:1,402:1,403:1,404:1,405:1,406:1,407:1,408:1,409:1,410:1,414:4,415:1,416:1,417:2,420:1,421:1,422:2,424:1,425:2,426:2,427:2,428:2,430:3,438:3,439:3,440:3,443:2,444:2,445:2,446:2,447:6,448:6,449:2,450:2,464:2,468:3,476:2,479:1,480:2,65535:0};var XLSXFutureFunctions={"_xlfn.ACOT":"ACOT","_xlfn.ACOTH":"ACOTH","_xlfn.AGGREGATE":"AGGREGATE","_xlfn.ARABIC":"ARABIC","_xlfn.AVERAGEIF":"AVERAGEIF","_xlfn.AVERAGEIFS":"AVERAGEIFS","_xlfn.BASE":"BASE","_xlfn.BETA.DIST":"BETA.DIST","_xlfn.BETA.INV":"BETA.INV","_xlfn.BINOM.DIST":"BINOM.DIST","_xlfn.BINOM.DIST.RANGE":"BINOM.DIST.RANGE","_xlfn.BINOM.INV":"BINOM.INV","_xlfn.BITAND":"BITAND","_xlfn.BITLSHIFT":"BITLSHIFT","_xlfn.BITOR":"BITOR","_xlfn.BITRSHIFT":"BITRSHIFT","_xlfn.BITXOR":"BITXOR","_xlfn.CEILING.MATH":"CEILING.MATH","_xlfn.CEILING.PRECISE":"CEILING.PRECISE","_xlfn.CHISQ.DIST":"CHISQ.DIST","_xlfn.CHISQ.DIST.RT":"CHISQ.DIST.RT","_xlfn.CHISQ.INV":"CHISQ.INV","_xlfn.CHISQ.INV.RT":"CHISQ.INV.RT","_xlfn.CHISQ.TEST":"CHISQ.TEST","_xlfn.COMBINA":"COMBINA","_xlfn.CONFIDENCE.NORM":"CONFIDENCE.NORM","_xlfn.CONFIDENCE.T":"CONFIDENCE.T","_xlfn.COT":"COT","_xlfn.COTH":"COTH","_xlfn.COUNTIFS":"COUNTIFS","_xlfn.COVARIANCE.P":"COVARIANCE.P","_xlfn.COVARIANCE.S":"COVARIANCE.S","_xlfn.CSC":"CSC","_xlfn.CSCH":"CSCH","_xlfn.DAYS":"DAYS","_xlfn.DECIMAL":"DECIMAL","_xlfn.ECMA.CEILING":"ECMA.CEILING","_xlfn.ERF.PRECISE":"ERF.PRECISE","_xlfn.ERFC.PRECISE":"ERFC.PRECISE","_xlfn.EXPON.DIST":"EXPON.DIST","_xlfn.F.DIST":"F.DIST","_xlfn.F.DIST.RT":"F.DIST.RT","_xlfn.F.INV":"F.INV","_xlfn.F.INV.RT":"F.INV.RT","_xlfn.F.TEST":"F.TEST","_xlfn.FILTERXML":"FILTERXML","_xlfn.FLOOR.MATH":"FLOOR.MATH","_xlfn.FLOOR.PRECISE":"FLOOR.PRECISE","_xlfn.FORMULATEXT":"FORMULATEXT","_xlfn.GAMMA":"GAMMA","_xlfn.GAMMA.DIST":"GAMMA.DIST","_xlfn.GAMMA.INV":"GAMMA.INV","_xlfn.GAMMALN.PRECISE":"GAMMALN.PRECISE","_xlfn.GAUSS":"GAUSS","_xlfn.HYPGEOM.DIST":"HYPGEOM.DIST","_xlfn.IFNA":"IFNA","_xlfn.IFERROR":"IFERROR","_xlfn.IMCOSH":"IMCOSH","_xlfn.IMCOT":"IMCOT","_xlfn.IMCSC":"IMCSC","_xlfn.IMCSCH":"IMCSCH","_xlfn.IMSEC":"IMSEC","_xlfn.IMSECH":"IMSECH","_xlfn.IMSINH":"IMSINH","_xlfn.IMTAN":"IMTAN","_xlfn.ISFORMULA":"ISFORMULA","_xlfn.ISO.CEILING":"ISO.CEILING","_xlfn.ISOWEEKNUM":"ISOWEEKNUM","_xlfn.LOGNORM.DIST":"LOGNORM.DIST","_xlfn.LOGNORM.INV":"LOGNORM.INV","_xlfn.MODE.MULT":"MODE.MULT","_xlfn.MODE.SNGL":"MODE.SNGL","_xlfn.MUNIT":"MUNIT","_xlfn.NEGBINOM.DIST":"NEGBINOM.DIST","_xlfn.NETWORKDAYS.INTL":"NETWORKDAYS.INTL","_xlfn.NIGBINOM":"NIGBINOM","_xlfn.NORM.DIST":"NORM.DIST","_xlfn.NORM.INV":"NORM.INV","_xlfn.NORM.S.DIST":"NORM.S.DIST","_xlfn.NORM.S.INV":"NORM.S.INV","_xlfn.NUMBERVALUE":"NUMBERVALUE","_xlfn.PDURATION":"PDURATION","_xlfn.PERCENTILE.EXC":"PERCENTILE.EXC","_xlfn.PERCENTILE.INC":"PERCENTILE.INC","_xlfn.PERCENTRANK.EXC":"PERCENTRANK.EXC","_xlfn.PERCENTRANK.INC":"PERCENTRANK.INC","_xlfn.PERMUTATIONA":"PERMUTATIONA","_xlfn.PHI":"PHI","_xlfn.POISSON.DIST":"POISSON.DIST","_xlfn.QUARTILE.EXC":"QUARTILE.EXC","_xlfn.QUARTILE.INC":"QUARTILE.INC","_xlfn.QUERYSTRING":"QUERYSTRING","_xlfn.RANK.AVG":"RANK.AVG","_xlfn.RANK.EQ":"RANK.EQ","_xlfn.RRI":"RRI","_xlfn.SEC":"SEC","_xlfn.SECH":"SECH","_xlfn.SHEET":"SHEET","_xlfn.SHEETS":"SHEETS","_xlfn.SKEW.P":"SKEW.P","_xlfn.STDEV.P":"STDEV.P","_xlfn.STDEV.S":"STDEV.S","_xlfn.SUMIFS":"SUMIFS","_xlfn.T.DIST":"T.DIST","_xlfn.T.DIST.2T":"T.DIST.2T","_xlfn.T.DIST.RT":"T.DIST.RT","_xlfn.T.INV":"T.INV","_xlfn.T.INV.2T":"T.INV.2T","_xlfn.T.TEST":"T.TEST","_xlfn.UNICHAR":"UNICHAR","_xlfn.UNICODE":"UNICODE","_xlfn.VAR.P":"VAR.P","_xlfn.VAR.S":"VAR.S","_xlfn.WEBSERVICE":"WEBSERVICE","_xlfn.WEIBULL.DIST":"WEIBULL.DIST","_xlfn.WORKDAY.INTL":"WORKDAY.INTL","_xlfn.XOR":"XOR","_xlfn.Z.TEST":"Z.TEST"};function ods_to_csf_formula(f){if(f.substr(0,3)=="of:")f=f.substr(3);if(f.charCodeAt(0)==61){f=f.substr(1);if(f.charCodeAt(0)==61)f=f.substr(1)}f=f.replace(/COM\.MICROSOFT\./g,"");f=f.replace(/\[((?:\.[A-Z]+[0-9]+)(?::\.[A-Z]+[0-9]+)?)\]/g,function($$,$1){return $1.replace(/\./g,"")});f=f.replace(/\[.(#[A-Z]*[?!])\]/g,"$1");return f.replace(/[;~]/g,",").replace(/\|/g,";")}function csf_to_ods_formula(f){var o="of:="+f.replace(crefregex,"$1[.$2$3$4$5]").replace(/\]:\[/g,":");return o.replace(/;/g,"|").replace(/,/g,";")}function ods_to_csf_range_3D(r){var a=r.split(":");var s=a[0].split(".")[0];return[s,a[0].split(".")[1]+":"+a[1].split(".")[1]]}var strs={};var _ssfopts={};RELS.WS=["http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet","http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"];function get_sst_id(sst,str){for(var i=0,len=sst.length;i-1){p.width=char2width(wch);p.customWidth=1}else if(col.width!=null)p.width=col.width;if(col.hidden)p.hidden=true;return p}function default_margins(margins,mode){if(!margins)return;var defs=[.7,.7,.75,.75,.3,.3];if(mode=="xlml")defs=[1,1,1,1,.5,.5];if(margins.left==null)margins.left=defs[0];if(margins.right==null)margins.right=defs[1];if(margins.top==null)margins.top=defs[2];if(margins.bottom==null)margins.bottom=defs[3];if(margins.header==null)margins.header=defs[4];if(margins.footer==null)margins.footer=defs[5]}function get_cell_style(styles,cell,opts){var z=opts.revssf[cell.z!=null?cell.z:"General"];var i=60,len=styles.length;if(z==null&&opts.ssf){for(;i<392;++i)if(opts.ssf[i]==null){SSF.load(cell.z,i);opts.ssf[i]=cell.z;opts.revssf[cell.z]=z=i;break}}for(i=0;i!=len;++i)if(styles[i].numFmtId===z)return i;styles[len]={numFmtId:z,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1};return len}function safe_format(p,fmtid,fillid,opts,themes,styles){if(p.t==="z")return;if(p.t==="d"&&typeof p.v==="string")p.v=parseDate(p.v);try{if(opts.cellNF)p.z=SSF._table[fmtid]}catch(e){if(opts.WTF)throw e}if(!opts||opts.cellText!==false)try{if(p.t==="e")p.w=p.w||BErr[p.v];else if(fmtid===0){if(p.t==="n"){if((p.v|0)===p.v)p.w=SSF._general_int(p.v,_ssfopts);else p.w=SSF._general_num(p.v,_ssfopts)}else if(p.t==="d"){var dd=datenum(p.v);if((dd|0)===dd)p.w=SSF._general_int(dd,_ssfopts);else p.w=SSF._general_num(dd,_ssfopts)}else if(p.v===undefined)return"";else p.w=SSF._general(p.v,_ssfopts)}else if(p.t==="d")p.w=SSF.format(fmtid,datenum(p.v),_ssfopts);else p.w=SSF.format(fmtid,p.v,_ssfopts)}catch(e){if(opts.WTF)throw e}if(fillid)try{p.s=styles.Fills[fillid];if(p.s.fgColor&&p.s.fgColor.theme&&!p.s.fgColor.rgb){p.s.fgColor.rgb=rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb,p.s.fgColor.tint||0);if(opts.WTF)p.s.fgColor.raw_rgb=themes.themeElements.clrScheme[p.s.fgColor.theme].rgb}if(p.s.bgColor&&p.s.bgColor.theme){p.s.bgColor.rgb=rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb,p.s.bgColor.tint||0);if(opts.WTF)p.s.bgColor.raw_rgb=themes.themeElements.clrScheme[p.s.bgColor.theme].rgb}}catch(e){if(opts.WTF)throw e}}function parse_ws_xml_dim(ws,s){var d=safe_decode_range(s);if(d.s.r<=d.e.r&&d.s.c<=d.e.c&&d.s.r>=0&&d.s.c>=0)ws["!ref"]=encode_range(d)}var mergecregex=/<(?:\w:)?mergeCell ref="[A-Z0-9:]+"\s*[\/]?>/g;var sheetdataregex=/<(?:\w+:)?sheetData>([\s\S]*)<\/(?:\w+:)?sheetData>/;var hlinkregex=/<(?:\w:)?hyperlink [^>]*>/gm;var dimregex=/"(\w*:\w*)"/;var colregex=/<(?:\w:)?col[^>]*[\/]?>/g;var afregex=/<(?:\w:)?autoFilter[^>]*([\/]|>([\s\S]*)<\/(?:\w:)?autoFilter)>/g;var marginregex=/<(?:\w:)?pageMargins[^>]*\/>/g;function parse_ws_xml(data,opts,rels,wb,themes,styles){if(!data)return data;if(DENSE!=null&&opts.dense==null)opts.dense=DENSE;var s=opts.dense?[]:{};var refguess={s:{r:2e6,c:2e6},e:{r:0,c:0}};var data1="",data2="";var mtch=data.match(sheetdataregex);if(mtch){data1=data.substr(0,mtch.index);data2=data.substr(mtch.index+mtch[0].length)}else data1=data2=data;var ridx=(data1.match(/<(?:\w*:)?dimension/)||{index:-1}).index;if(ridx>0){var ref=data1.substr(ridx,50).match(dimregex);if(ref)parse_ws_xml_dim(s,ref[1])}var columns=[];if(opts.cellStyles){var cols=data1.match(colregex);if(cols)parse_ws_xml_cols(columns,cols)}if(mtch)parse_ws_xml_data(mtch[1],s,opts,refguess,themes,styles);var afilter=data2.match(afregex);if(afilter)s["!autofilter"]=parse_ws_xml_autofilter(afilter[0]);var mergecells=[];var merges=data2.match(mergecregex);if(merges)for(ridx=0;ridx!=merges.length;++ridx)mergecells[ridx]=safe_decode_range(merges[ridx].substr(merges[ridx].indexOf('"')+1));var hlink=data2.match(hlinkregex);if(hlink)parse_ws_xml_hlinks(s,hlink,rels);var margins=data2.match(marginregex);if(margins)s["!margins"]=parse_ws_xml_margins(parsexmltag(margins[0]));if(!s["!ref"]&&refguess.e.c>=refguess.s.c&&refguess.e.r>=refguess.s.r)s["!ref"]=encode_range(refguess);if(opts.sheetRows>0&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.rrefguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c0)s["!cols"]=columns;if(mergecells.length>0)s["!merges"]=mergecells;return s}function write_ws_xml_merges(merges){if(merges.length==0)return"";var o='';for(var i=0;i!=merges.length;++i)o+='';return o+""}function write_ws_xml_protection(sp){var o={sheet:1};var deffalse=["objects","scenarios","selectLockedCells","selectUnlockedCells"];var deftrue=["formatColumns","formatRows","formatCells","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables"];deffalse.forEach(function(n){if(sp[n]!=null&&sp[n])o[n]="1"});deftrue.forEach(function(n){if(sp[n]!=null&&!sp[n])o[n]="0"});if(sp.password)o.password=crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();return writextag("sheetProtection",null,o)}function parse_ws_xml_hlinks(s,data,rels){var dense=Array.isArray(s);for(var i=0;i!=data.length;++i){var val=parsexmltag(utf8read(data[i]),true);if(!val.ref)return;var rel=rels?rels["!id"][val.id]:null;if(rel){val.Target=rel.Target;if(val.location)val.Target+="#"+val.location;val.Rel=rel}else{val.Target=val.location;rel={Target:val.location,TargetMode:"Internal"};val.Rel=rel}if(val.tooltip){val.Tooltip=val.tooltip;delete val.tooltip}var rng=safe_decode_range(val.ref);for(var R=rng.s.r;R<=rng.e.r;++R)for(var C=rng.s.c;C<=rng.e.c;++C){var addr=encode_cell({c:C,r:R});if(dense){if(!s[R])s[R]=[];if(!s[R][C])s[R][C]={t:"z",v:undefined};s[R][C].l=val}else{if(!s[addr])s[addr]={t:"z",v:undefined};s[addr].l=val}}}}function parse_ws_xml_margins(margin){var o={};["left","right","top","bottom","header","footer"].forEach(function(k){if(margin[k])o[k]=parseFloat(margin[k])});return o}function write_ws_xml_margins(margin){default_margins(margin);return writextag("pageMargins",null,margin)}function parse_ws_xml_cols(columns,cols){var seencol=false;for(var coli=0;coli!=cols.length;++coli){var coll=parsexmltag(cols[coli],true);if(coll.hidden)coll.hidden=parsexmlbool(coll.hidden);var colm=parseInt(coll.min,10)-1,colM=parseInt(coll.max,10)-1;delete coll.min;delete coll.max;coll.width=+coll.width;if(!seencol&&coll.width){seencol=true;find_mdw_colw(coll.width)}process_col(coll);while(colm<=colM)columns[colm++]=dup(coll)}}function write_ws_xml_cols(ws,cols){var o=[""],col,width;for(var i=0;i!=cols.length;++i){if(!(col=cols[i]))continue;o[o.length]=writextag("col",null,col_obj_w(i,col))}o[o.length]="";return o.join("")}function parse_ws_xml_autofilter(data){var o={ref:(data.match(/ref="([^"]*)"/)||[])[1]};return o}function write_ws_xml_autofilter(data){return writextag("autoFilter",null,{ref:data.ref})}function write_ws_xml_sheetviews(ws,opts,idx,wb){return writextag("sheetViews",writextag("sheetView",null,{workbookViewId:"0"}),{})}function write_ws_xml_cell(cell,ref,ws,opts,idx,wb){if(cell.v===undefined&&cell.f===undefined||cell.t==="z")return"";var vv="";var oldt=cell.t,oldv=cell.v;switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"n":vv=""+cell.v;break;case"e":vv=BErr[cell.v];break;case"d":if(opts.cellDates)vv=parseDate(cell.v,-1).toISOString();else{cell.t="n";vv=""+(cell.v=datenum(parseDate(cell.v)))}if(typeof cell.z==="undefined")cell.z=SSF._table[14];break;default:vv=cell.v;break;}var v=writetag("v",escapexml(vv)),o={r:ref};var os=get_cell_style(opts.cellXfs,cell,opts);if(os!==0)o.s=os;switch(cell.t){case"n":break;case"d":o.t="d";break;case"b":o.t="b";break;case"e":o.t="e";break;default:if(cell.v==null){delete cell.t;break}if(opts.bookSST){v=writetag("v",""+get_sst_id(opts.Strings,cell.v));o.t="s";break}o.t="str";break;}if(cell.t!=oldt){cell.t=oldt;cell.v=oldv}if(cell.f){var ff=cell.F&&cell.F.substr(0,ref.length)==ref?{t:"array",ref:cell.F}:null;v=writextag("f",escapexml(cell.f),ff)+(cell.v!=null?v:"")}if(cell.l)ws["!links"].push([ref,cell.l]);if(cell.c)ws["!comments"].push([ref,cell.c]);return writextag("c",v,o)}var parse_ws_xml_data=function parse_ws_xml_data_factory(){var cellregex=/<(?:\w+:)?c[ >]/,rowregex=/<\/(?:\w+:)?row>/;var rregex=/r=["']([^"']*)["']/,isregex=/<(?:\w+:)?is>([\S\s]*?)<\/(?:\w+:)?is>/;var refregex=/ref=["']([^"']*)["']/;var match_v=matchtag("v"),match_f=matchtag("f");return function parse_ws_xml_data(sdata,s,opts,guess,themes,styles){var ri=0,x="",cells=[],cref=[],idx=0,i=0,cc=0,d="",p;var tag,tagr=0,tagc=0;var sstr,ftag;var fmtid=0,fillid=0;var do_format=Array.isArray(styles.CellXf),cf;var arrayf=[];var sharedf=[];var dense=Array.isArray(s);var rows=[],rowobj={},rowrite=false;for(var marr=sdata.split(rowregex),mt=0,marrlen=marr.length;mt!=marrlen;++mt){x=marr[mt].trim();var xlen=x.length;if(xlen===0)continue;for(ri=0;ritagr-1)guess.s.r=tagr-1;if(guess.e.r":"")+x;if(cref!=null&&cref.length===2){idx=0;d=cref[1];for(i=0;i!=d.length;++i){if((cc=d.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}--idx;tagc=idx}else++tagc;for(i=0;i!=x.length;++i)if(x.charCodeAt(i)===62)break;++i;tag=parsexmltag(x.substr(0,i),true);if(!tag.r)tag.r=encode_cell({r:tagr-1,c:tagc});d=x.substr(i);p={t:""};if((cref=d.match(match_v))!=null&&cref[1]!=="")p.v=unescapexml(cref[1]);if(opts.cellFormula){if((cref=d.match(match_f))!=null&&cref[1]!==""){p.f=unescapexml(utf8read(cref[1])).replace(/_xlfn\./,"");if(cref[0].indexOf('t="array"')>-1){p.F=(d.match(refregex)||[])[1];if(p.F.indexOf(":")>-1)arrayf.push([safe_decode_range(p.F),p.F])}else if(cref[0].indexOf('t="shared"')>-1){ftag=parsexmltag(cref[0]);sharedf[parseInt(ftag.si,10)]=[ftag,unescapexml(utf8read(cref[1]))]}}else if(cref=d.match(/]*\/>/)){ftag=parsexmltag(cref[0]);if(sharedf[ftag.si])p.f=shift_formula_xlsx(sharedf[ftag.si][1],sharedf[ftag.si][0].ref,tag.r)}var _tag=decode_cell(tag.r);for(i=0;i=arrayf[i][0].s.r&&_tag.r<=arrayf[i][0].e.r)if(_tag.c>=arrayf[i][0].s.c&&_tag.c<=arrayf[i][0].e.c)p.F=arrayf[i][1]}if(tag.t==null&&p.v===undefined){if(p.f||p.F){p.v=0;p.t="n"}else if(!opts.sheetStubs)continue;else p.t="z"}else p.t=tag.t||"n";if(guess.s.c>idx)guess.s.c=idx;if(guess.e.c0)s["!rows"]=rows}}();function write_ws_xml_data(ws,opts,idx,wb,rels){var o=[],r=[],range=safe_decode_range(ws["!ref"]),cell,ref,rr="",cols=[],R=0,C=0,rows=ws["!rows"];var dense=Array.isArray(ws);for(C=range.s.c;C<=range.e.c;++C)cols[C]=encode_col(C);for(R=range.s.r;R<=range.e.r;++R){r=[];rr=encode_row(R);for(C=range.s.c;C<=range.e.c;++C){ref=cols[C]+rr;var _cell=dense?(ws[R]||[])[C]:ws[ref];if(_cell===undefined)continue;if((cell=write_ws_xml_cell(_cell,ref,ws,opts,idx,wb))!=null)r.push(cell)}if(r.length>0||rows&&rows[R]){var params={r:rr};if(rows&&rows[R]){var row=rows[R];if(row.hidden)params.hidden=1;var height=-1;if(row.hpx)height=px2pt(row.hpx);else if(row.hpt)height=row.hpt;if(height>-1){params.ht=height;params.customHeight=1}if(row.level){params.outlineLevel=row.level}}o[o.length]=writextag("row",r.join(""),params)}}if(rows)for(;R-1){params.ht=height;params.customHeight=1}if(row.level){params.outlineLevel=row.level}o[o.length]=writextag("row","",params)}}return o.join("")}var WS_XML_ROOT=writextag("worksheet",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function write_ws_xml(idx,opts,wb,rels){var o=[XML_HEADER,WS_XML_ROOT];var s=wb.SheetNames[idx],sidx=0,rdata="";var ws=wb.Sheets[s];if(ws==null)ws={};var ref=ws["!ref"];if(ref==null)ref="A1";if(!rels)rels={};ws["!comments"]=[];ws["!drawing"]=[];o[o.length]=writextag("sheetPr",null,{codeName:escapexml(wb.SheetNames[idx])});o[o.length]=writextag("dimension",null,{ref:ref});o[o.length]=write_ws_xml_sheetviews(ws,opts,idx,wb);if(opts.sheetFormat)o[o.length]=writextag("sheetFormatPr",null,{defaultRowHeight:opts.sheetFormat.defaultRowHeight||"16",baseColWidth:opts.sheetFormat.baseColWidth||"10",outlineLevelRow:opts.sheetFormat.outlineLevelRow||"7"});if(ws["!cols"]!=null&&ws["!cols"].length>0)o[o.length]=write_ws_xml_cols(ws,ws["!cols"]);o[sidx=o.length]="";ws["!links"]=[];if(ws["!ref"]!=null){rdata=write_ws_xml_data(ws,opts,idx,wb,rels);if(rdata.length>0)o[o.length]=rdata}if(o.length>sidx+1){o[o.length]="";o[sidx]=o[sidx].replace("/>",">")}if(ws["!protect"]!=null)o[o.length]=write_ws_xml_protection(ws["!protect"]);if(ws["!autofilter"]!=null)o[o.length]=write_ws_xml_autofilter(ws["!autofilter"]);if(ws["!merges"]!=null&&ws["!merges"].length>0)o[o.length]=write_ws_xml_merges(ws["!merges"]);var relc=-1,rel,rId=-1;if(ws["!links"].length>0){o[o.length]="";ws["!links"].forEach(function(l){if(!l[1].Target)return;rId=add_rels(rels,-1,escapexml(l[1].Target).replace(/#.*$/,""),RELS.HLINK);rel={ref:l[0],"r:id":"rId"+rId};if((relc=l[1].Target.indexOf("#"))>-1)rel.location=escapexml(l[1].Target.substr(relc+1));if(l[1].Tooltip)rel.tooltip=escapexml(l[1].Tooltip);o[o.length]=writextag("hyperlink",null,rel)});o[o.length]=""}delete ws["!links"];if(ws["!margins"]!=null)o[o.length]=write_ws_xml_margins(ws["!margins"]);var hfidx=o.length;o[o.length]="";if(ws["!drawing"].length>0){rId=add_rels(rels,-1,"../drawings/drawing"+(idx+1)+".xml",RELS.DRAW);o[o.length]=writextag("drawing",null,{"r:id":"rId"+rId})}else delete ws["!drawing"];if(ws["!comments"].length>0){rId=add_rels(rels,-1,"../drawings/vmlDrawing"+(idx+1)+".vml",RELS.VML);o[o.length]=writextag("legacyDrawing",null,{"r:id":"rId"+rId});ws["!legacy"]=rId}if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtRowHdr(data,length){var z={};var tgt=data.l+length;z.r=data.read_shift(4);data.l+=4;var miyRw=data.read_shift(2);data.l+=1;var flags=data.read_shift(1);data.l=tgt;if(flags&7)z.level=flags&7;if(flags&16)z.hidden=true;if(flags&32)z.hpt=miyRw/20;return z}function write_BrtRowHdr(R,range,ws){var o=new_buf(17+8*16);var row=(ws["!rows"]||[])[R]||{};o.write_shift(4,R);o.write_shift(4,0);var miyRw=320;if(row.hpx)miyRw=px2pt(row.hpx)*20;else if(row.hpt)miyRw=row.hpt*20;o.write_shift(2,miyRw);o.write_shift(1,0);var flags=0;if(row.level)flags|=row.level;if(row.hidden)flags|=16;if(row.hpx||row.hpt)flags|=32;o.write_shift(1,flags);o.write_shift(1,0);var ncolspan=0,lcs=o.l;o.l+=4;var caddr={r:R,c:0};for(var i=0;i<16;++i){if(range.s.c>i+1<<10||range.e.co.l?o.slice(0,o.l):o}function write_row_header(ba,ws,range,R){var o=write_BrtRowHdr(R,range,ws);if(o.length>17||(ws["!rows"]||[])[R])write_record(ba,"BrtRowHdr",o)}var parse_BrtWsDim=parse_UncheckedRfX;var write_BrtWsDim=write_UncheckedRfX;function parse_BrtWsProp(data,length){var z={};data.l+=19;z.name=parse_XLSBCodeName(data,length-19);return z}function write_BrtWsProp(str,o){if(o==null)o=new_buf(84+4*str.length);for(var i=0;i<3;++i)o.write_shift(1,0);write_BrtColor({auto:1},o);o.write_shift(-4,-1);o.write_shift(-4,-1);write_XLSBCodeName(str,o);return o.slice(0,o.l)}function parse_BrtCellBlank(data,length){var cell=parse_XLSBCell(data);return[cell]}function write_BrtCellBlank(cell,ncell,o){if(o==null)o=new_buf(8);return write_XLSBCell(ncell,o)}function parse_BrtCellBool(data,length){var cell=parse_XLSBCell(data);var fBool=data.read_shift(1);return[cell,fBool,"b"]}function write_BrtCellBool(cell,ncell,o){if(o==null)o=new_buf(9);write_XLSBCell(ncell,o);o.write_shift(1,cell.v?1:0);return o}function parse_BrtCellError(data,length){var cell=parse_XLSBCell(data);var bError=data.read_shift(1);return[cell,bError,"e"]}function parse_BrtCellIsst(data,length){var cell=parse_XLSBCell(data);var isst=data.read_shift(4);return[cell,isst,"s"]}function write_BrtCellIsst(cell,ncell,o){if(o==null)o=new_buf(12);write_XLSBCell(ncell,o);o.write_shift(4,ncell.v);return o}function parse_BrtCellReal(data,length){var cell=parse_XLSBCell(data);var value=parse_Xnum(data);return[cell,value,"n"]}function write_BrtCellReal(cell,ncell,o){if(o==null)o=new_buf(16);write_XLSBCell(ncell,o);write_Xnum(cell.v,o);return o}function parse_BrtCellRk(data,length){var cell=parse_XLSBCell(data);var value=parse_RkNumber(data);return[cell,value,"n"]}function write_BrtCellRk(cell,ncell,o){if(o==null)o=new_buf(12);write_XLSBCell(ncell,o);write_RkNumber(cell.v,o);return o}function parse_BrtCellSt(data,length){var cell=parse_XLSBCell(data);var value=parse_XLWideString(data);return[cell,value,"str"]}function write_BrtCellSt(cell,ncell,o){if(o==null)o=new_buf(12+4*cell.v.length);write_XLSBCell(ncell,o);write_XLWideString(cell.v,o);return o.length>o.l?o.slice(0,o.l):o}function parse_BrtFmlaBool(data,length,opts){var end=data.l+length;var cell=parse_XLSBCell(data);cell.r=opts["!row"];var value=data.read_shift(1);var o=[cell,value,"b"];if(opts.cellFormula){data.l+=2;var formula=parse_XLSBCellParsedFormula(data,end-data.l,opts);o[3]=stringify_formula(formula,null,cell,opts.supbooks,opts)}else data.l=end;return o}function parse_BrtFmlaError(data,length,opts){var end=data.l+length;var cell=parse_XLSBCell(data);cell.r=opts["!row"];var value=data.read_shift(1);var o=[cell,value,"e"];if(opts.cellFormula){data.l+=2;var formula=parse_XLSBCellParsedFormula(data,end-data.l,opts);o[3]=stringify_formula(formula,null,cell,opts.supbooks,opts)}else data.l=end;return o}function parse_BrtFmlaNum(data,length,opts){var end=data.l+length;var cell=parse_XLSBCell(data);cell.r=opts["!row"];var value=parse_Xnum(data);var o=[cell,value,"n"];if(opts.cellFormula){data.l+=2;var formula=parse_XLSBCellParsedFormula(data,end-data.l,opts);o[3]=stringify_formula(formula,null,cell,opts.supbooks,opts)}else data.l=end;return o}function parse_BrtFmlaString(data,length,opts){var end=data.l+length;var cell=parse_XLSBCell(data);cell.r=opts["!row"];var value=parse_XLWideString(data);var o=[cell,value,"str"];if(opts.cellFormula){data.l+=2;var formula=parse_XLSBCellParsedFormula(data,end-data.l,opts);o[3]=stringify_formula(formula,null,cell,opts.supbooks,opts)}else data.l=end;return o}var parse_BrtMergeCell=parse_UncheckedRfX;var write_BrtMergeCell=write_UncheckedRfX;function write_BrtBeginMergeCells(cnt,o){if(o==null)o=new_buf(4);o.write_shift(4,cnt);return o}function parse_BrtHLink(data,length,opts){var end=data.l+length;var rfx=parse_UncheckedRfX(data,16);var relId=parse_XLNullableWideString(data);var loc=parse_XLWideString(data);var tooltip=parse_XLWideString(data);var display=parse_XLWideString(data);data.l=end;return{rfx:rfx,relId:relId,loc:loc,Tooltip:tooltip,display:display}}function write_BrtHLink(l,rId,o){if(o==null)o=new_buf(50+4*l[1].Target.length);write_UncheckedRfX({s:decode_cell(l[0]),e:decode_cell(l[0])},o);write_RelID("rId"+rId,o);var locidx=l[1].Target.indexOf("#");var loc=locidx==-1?"":l[1].Target.substr(locidx+1);write_XLWideString(loc||"",o);write_XLWideString(l[1].Tooltip||"",o);write_XLWideString("",o);return o.slice(0,o.l)}function parse_BrtArrFmla(data,length,opts){var end=data.l+length;var rfx=parse_RfX(data,16);var fAlwaysCalc=data.read_shift(1);var o=[rfx];o[2]=fAlwaysCalc;if(opts.cellFormula){var formula=parse_XLSBArrayParsedFormula(data,end-data.l,opts);o[1]=formula}else data.l=end;return o}function parse_BrtShrFmla(data,length,opts){var end=data.l+length;var rfx=parse_UncheckedRfX(data,16);var o=[rfx];if(opts.cellFormula){var formula=parse_XLSBSharedParsedFormula(data,end-data.l,opts);o[1]=formula;data.l=end}else data.l=end;return o}function write_BrtColInfo(C,col,o){ -if(o==null)o=new_buf(18);var p=col_obj_w(C,col);o.write_shift(-4,C);o.write_shift(-4,C);o.write_shift(4,(p.width||10)*256);o.write_shift(4,0);var flags=0;if(col.hidden)flags|=1;if(typeof p.width=="number")flags|=2;o.write_shift(1,flags);o.write_shift(1,0);return o}function parse_BrtMargins(data,length,opts){return{left:parse_Xnum(data,8),right:parse_Xnum(data,8),top:parse_Xnum(data,8),bottom:parse_Xnum(data,8),header:parse_Xnum(data,8),footer:parse_Xnum(data,8)}}function write_BrtMargins(margins,o){if(o==null)o=new_buf(6*8);default_margins(margins);write_Xnum(margins.left,o);write_Xnum(margins.right,o);write_Xnum(margins.top,o);write_Xnum(margins.bottom,o);write_Xnum(margins.header,o);write_Xnum(margins.footer,o);return o}function write_BrtBeginWsView(ws,o){if(o==null)o=new_buf(30);o.write_shift(2,924);o.write_shift(4,0);o.write_shift(4,0);o.write_shift(4,0);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(2,0);o.write_shift(2,100);o.write_shift(2,0);o.write_shift(2,0);o.write_shift(2,0);o.write_shift(4,0);return o}function write_BrtSheetProtection(sp,o){if(o==null)o=new_buf(16*4+2);o.write_shift(2,sp.password?crypto_CreatePasswordVerifier_Method1(sp.password):0);o.write_shift(4,1);[["objects",false],["scenarios",false],["formatCells",true],["formatColumns",true],["formatRows",true],["insertColumns",true],["insertRows",true],["insertHyperlinks",true],["deleteColumns",true],["deleteRows",true],["selectLockedCells",false],["sort",true],["autoFilter",true],["pivotTables",true],["selectUnlockedCells",false]].forEach(function(n){if(n[1])o.write_shift(4,sp[n[0]]!=null&&!sp[n[0]]?1:0);else o.write_shift(4,sp[n[0]]!=null&&sp[n[0]]?0:1)});return o}function parse_ws_bin(data,_opts,rels,wb,themes,styles){if(!data)return data;var opts=_opts||{};if(!rels)rels={"!id":{}};if(DENSE!=null&&opts.dense==null)opts.dense=DENSE;var s=opts.dense?[]:{};var ref;var refguess={s:{r:2e6,c:2e6},e:{r:0,c:0}};var pass=false,end=false;var row,p,cf,R,C,addr,sstr,rr,cell;var mergecells=[];opts.biff=12;opts["!row"]=0;var ai=0,af=false;var array_formulae=[];var shared_formulae={};var supbooks=[[]];supbooks.sharedf=shared_formulae;supbooks.arrayf=array_formulae;supbooks.SheetNames=wb.SheetNames||wb.Sheets.map(function(x){return x.name});opts.supbooks=supbooks;for(var i=0;i=aii[0].s.r&&row.r<=aii[0].e.r)if(C>=aii[0].s.c&&C<=aii[0].e.c){p.F=encode_range(aii[0]);af=true}}if(!af&&val.length>3)p.f=val[3]}if(refguess.s.r>row.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.rrow.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.r=val.s){colinfo[val.e--]={width:val.w/256,hidden:!!(val.flags&1)};if(!seencol){seencol=true;find_mdw_colw(val.w/256)}process_col(colinfo[val.e+1])}break;case 161:s["!autofilter"]={ref:encode_range(val)};break;case 476:s["!margins"]=val;break;case 485:;case 175:;case 644:;case 625:;case 562:;case 396:;case 1112:;case 1146:;case 471:;case 1050:;case 649:;case 1105:;case 49:;case 589:;case 607:;case 564:;case 1055:;case 168:;case 174:;case 1180:;case 499:;case 64:;case 1053:;case 550:;case 171:;case 167:;case 1177:;case 169:;case 1181:;case 551:;case 552:;case 661:;case 639:;case 478:;case 151:;case 537:;case 477:;case 536:;case 1103:;case 680:;case 1104:;case 1024:;case 152:;case 663:;case 535:;case 678:;case 504:;case 1043:;case 428:;case 170:;case 50:;case 2070:;case 1045:;case 147:break;case 35:pass=true;break;case 36:pass=false;break;case 37:break;case 38:break;default:if((R_n||"").indexOf("Begin")>0){}else if((R_n||"").indexOf("End")>0){}else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}},opts);delete opts.supbooks;delete opts["!row"];if(!s["!ref"]&&(refguess.s.r<2e6||ref&&(ref.e.r>0||ref.e.c>0||ref.s.r>0||ref.s.c>0)))s["!ref"]=encode_range(ref||refguess);if(opts.sheetRows&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.rrefguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c0)s["!merges"]=mergecells;if(colinfo.length>0)s["!cols"]=colinfo;if(rowinfo.length>0)s["!rows"]=rowinfo;return s}function write_ws_bin_cell(ba,cell,R,C,opts,ws){if(cell.v===undefined)return"";var vv="";var olddate=null;switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"d":cell.z=cell.z||SSF._table[14];olddate=cell.v;cell.v=datenum(cell.v);cell.t="n";break;case"n":;case"e":vv=""+cell.v;break;default:vv=cell.v;break;}var o={r:R,c:C};o.s=get_cell_style(opts.cellXfs,cell,opts);if(cell.l)ws["!links"].push([encode_cell(o),cell.l]);if(cell.c)ws["!comments"].push([encode_cell(o),cell.c]);switch(cell.t){case"s":;case"str":if(opts.bookSST){vv=get_sst_id(opts.Strings,cell.v);o.t="s";o.v=vv;write_record(ba,"BrtCellIsst",write_BrtCellIsst(cell,o))}else{o.t="str";write_record(ba,"BrtCellSt",write_BrtCellSt(cell,o))}return;case"n":if(cell.v==(cell.v|0)&&cell.v>-1e3&&cell.v<1e3)write_record(ba,"BrtCellRk",write_BrtCellRk(cell,o));else write_record(ba,"BrtCellReal",write_BrtCellReal(cell,o));if(olddate){cell.t="d";cell.v=olddate}return;case"b":o.t="b";write_record(ba,"BrtCellBool",write_BrtCellBool(cell,o));return;case"e":o.t="e";break;}write_record(ba,"BrtCellBlank",write_BrtCellBlank(cell,o))}function write_CELLTABLE(ba,ws,idx,opts,wb){var range=safe_decode_range(ws["!ref"]||"A1"),ref,rr="",cols=[];write_record(ba,"BrtBeginSheetData");var dense=Array.isArray(ws);var cap=range.e.r;if(ws["!rows"])cap=Math.max(range.e.r,ws["!rows"].length-1);for(var R=range.s.r;R<=cap;++R){rr=encode_row(R);write_row_header(ba,ws,range,R);if(R<=range.e.r)for(var C=range.s.c;C<=range.e.c;++C){if(R===range.s.r)cols[C]=encode_col(C);ref=cols[C]+rr;var cell=dense?(ws[R]||[])[C]:ws[ref];if(!cell)continue;write_ws_bin_cell(ba,cell,R,C,opts,ws)}}write_record(ba,"BrtEndSheetData")}function write_MERGECELLS(ba,ws){if(!ws||!ws["!merges"])return;write_record(ba,"BrtBeginMergeCells",write_BrtBeginMergeCells(ws["!merges"].length));ws["!merges"].forEach(function(m){write_record(ba,"BrtMergeCell",write_BrtMergeCell(m))});write_record(ba,"BrtEndMergeCells")}function write_COLINFOS(ba,ws,idx,opts,wb){if(!ws||!ws["!cols"])return;write_record(ba,"BrtBeginColInfos");ws["!cols"].forEach(function(m,i){if(m)write_record(ba,"BrtColInfo",write_BrtColInfo(i,m))});write_record(ba,"BrtEndColInfos")}function write_HLINKS(ba,ws,rels){ws["!links"].forEach(function(l){if(!l[1].Target)return;var rId=add_rels(rels,-1,l[1].Target.replace(/#.*$/,""),RELS.HLINK);write_record(ba,"BrtHLink",write_BrtHLink(l,rId))});delete ws["!links"]}function write_LEGACYDRAWING(ba,ws,idx,rels){if(ws["!comments"].length>0){var rId=add_rels(rels,-1,"../drawings/vmlDrawing"+(idx+1)+".vml",RELS.VML);write_record(ba,"BrtLegacyDrawing",write_RelID("rId"+rId));ws["!legacy"]=rId}}function write_AUTOFILTER(ba,ws){if(!ws["!autofilter"])return;write_record(ba,"BrtBeginAFilter",write_UncheckedRfX(decode_range(ws["!autofilter"].ref)));write_record(ba,"BrtEndAFilter")}function write_WSVIEWS2(ba,ws){write_record(ba,"BrtBeginWsViews");{write_record(ba,"BrtBeginWsView",write_BrtBeginWsView(ws));write_record(ba,"BrtEndWsView")}write_record(ba,"BrtEndWsViews")}function write_WSFMTINFO(ba,ws){}function write_SHEETPROTECT(ba,ws){if(!ws["!protect"])return;write_record(ba,"BrtSheetProtection",write_BrtSheetProtection(ws["!protect"]))}function write_ws_bin(idx,opts,wb,rels){var ba=buf_array();var s=wb.SheetNames[idx],ws=wb.Sheets[s]||{};var r=safe_decode_range(ws["!ref"]||"A1");ws["!links"]=[];ws["!comments"]=[];write_record(ba,"BrtBeginSheet");write_record(ba,"BrtWsProp",write_BrtWsProp(s));write_record(ba,"BrtWsDim",write_BrtWsDim(r));write_WSVIEWS2(ba,ws);write_WSFMTINFO(ba,ws);write_COLINFOS(ba,ws,idx,opts,wb);write_CELLTABLE(ba,ws,idx,opts,wb);write_SHEETPROTECT(ba,ws);write_AUTOFILTER(ba,ws);write_MERGECELLS(ba,ws);write_HLINKS(ba,ws,rels);if(ws["!margins"])write_record(ba,"BrtMargins",write_BrtMargins(ws["!margins"]));write_LEGACYDRAWING(ba,ws,idx,rels);write_record(ba,"BrtEndSheet");return ba.end()}function parse_numCache(data){var col=[];(data.match(/(.*?)<\/c:pt>/gm)||[]).forEach(function(pt){var q=pt.match(/(.*)<\/c:v><\/c:pt>/);if(!q)return;col[+q[1]]=+q[2]});var nf=unescapexml((data.match(/([\s\S]*?)<\/c:formatCode>/)||["","General"])[1]);return[col,nf]}function parse_chart(data,name,opts,rels,wb,csheet){var cs=csheet||{"!type":"chart"};if(!data)return csheet;var C=0,R=0,col="A";var refguess={s:{r:2e6,c:2e6},e:{r:0,c:0}};(data.match(/[\s\S]*?<\/c:numCache>/gm)||[]).forEach(function(nc){var cache=parse_numCache(nc);refguess.s.r=refguess.s.c=0;refguess.e.c=C;col=encode_col(C);cache[0].forEach(function(n,i){cs[col+encode_row(i)]={t:"n",v:n,z:cache[1]};R=i});if(refguess.e.r0)cs["!ref"]=encode_range(refguess);return cs}RELS.CS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet";var CS_XML_ROOT=writextag("chartsheet",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function parse_cs_xml(data,opts,rels,wb,themes,styles){if(!data)return data;if(!rels)rels={"!id":{}};var s={"!type":"chart","!chart":null,"!rel":""};var m;if(m=data.match(/drawing r:id="(.*?)"/))s["!rel"]=m[1];if(rels["!id"][s["!rel"]])s["!chart"]=rels["!id"][s["!rel"]];return s}function write_cs_xml(idx,opts,wb,rels){var o=[XML_HEADER,CS_XML_ROOT];o[o.length]=writextag("drawing",null,{"r:id":"rId1"});add_rels(rels,-1,"../drawings/drawing"+(idx+1)+".xml",RELS.DRAW);if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_cs_bin(data,opts,rels,wb,themes,styles){if(!data)return data;if(!rels)rels={"!id":{}};var s={"!type":"chart","!chart":null,"!rel":""};var state=[];var pass=false;recordhopper(data,function cs_parse(val,R_n,RT){switch(RT){case 550:s["!rel"]=val;break;case 562:;case 652:;case 651:;case 669:;case 679:;case 551:;case 552:;case 476:break;case 35:pass=true;break;case 36:pass=false;break;case 37:state.push(R_n);break;case 38:state.pop();break;default:if((R_n||"").indexOf("Begin")>0)state.push(R_n);else if((R_n||"").indexOf("End")>0)state.pop();else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}},opts);if(rels["!id"][s["!rel"]])s["!chart"]=rels["!id"][s["!rel"]];return s}function write_cs_bin(idx,opts,wb,rels){var ba=buf_array();write_record(ba,"BrtBeginSheet");write_record(ba,"BrtEndSheet");return ba.end()}var WBPropsDef=[["allowRefreshQuery",false,"bool"],["autoCompressPictures",true,"bool"],["backupFile",false,"bool"],["checkCompatibility",false,"bool"],["codeName",""],["date1904",false,"bool"],["defaultThemeVersion",0,"int"],["filterPrivacy",false,"bool"],["hidePivotFieldList",false,"bool"],["promptedSolutions",false,"bool"],["publishItems",false,"bool"],["refreshAllConnections",false,"bool"],["saveExternalLinkValues",true,"bool"],["showBorderUnselectedTables",true,"bool"],["showInkAnnotation",true,"bool"],["showObjects","all"],["showPivotChartFilter",false,"bool"],["updateLinks","userSet"]];var WBViewDef=[["activeTab",0,"int"],["autoFilterDateGrouping",true,"bool"],["firstSheet",0,"int"],["minimized",false,"bool"],["showHorizontalScroll",true,"bool"],["showSheetTabs",true,"bool"],["showVerticalScroll",true,"bool"],["tabRatio",600,"int"],["visibility","visible"]];var SheetDef=[];var CalcPrDef=[["calcCompleted","true"],["calcMode","auto"],["calcOnSave","true"],["concurrentCalc","true"],["fullCalcOnLoad","false"],["fullPrecision","true"],["iterate","false"],["iterateCount","100"],["iterateDelta","0.001"],["refMode","A1"]];var CustomWBViewDef=[["autoUpdate","false"],["changesSavedWin","false"],["includeHiddenRowCol","true"],["includePrintSettings","true"],["maximized","false"],["minimized","false"],["onlySync","false"],["personalView","false"],["showComments","commIndicator"],["showFormulaBar","true"],["showHorizontalScroll","true"],["showObjects","all"],["showSheetTabs","true"],["showStatusbar","true"],["showVerticalScroll","true"],["tabRatio","600"],["xWindow","0"],["yWindow","0"]];function push_defaults_array(target,defaults){for(var j=0;j!=target.length;++j){var w=target[j];for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(w[z[0]]==null)w[z[0]]=z[1];else switch(z[2]){case"bool":if(typeof w[z[0]]=="string")w[z[0]]=parsexmlbool(w[z[0]],z[0]);break;case"int":if(typeof w[z[0]]=="string")w[z[0]]=parseInt(w[z[0]],10);break;}}}}function push_defaults(target,defaults){for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(target[z[0]]==null)target[z[0]]=z[1];else switch(z[2]){case"bool":if(typeof target[z[0]]=="string")target[z[0]]=parsexmlbool(target[z[0]],z[0]);break;case"int":if(typeof target[z[0]]=="string")target[z[0]]=parseInt(target[z[0]],10);break;}}}function parse_wb_defaults(wb){push_defaults(wb.WBProps,WBPropsDef);push_defaults(wb.CalcPr,CalcPrDef);push_defaults_array(wb.WBView,WBViewDef);push_defaults_array(wb.Sheets,SheetDef);_ssfopts.date1904=parsexmlbool(wb.WBProps.date1904,"date1904")}function safe1904(wb){if(!wb.Workbook)return"false";if(!wb.Workbook.WBProps)return"false";return parsexmlbool(wb.Workbook.WBProps.date1904)?"true":"false"}var badchars="][*?/\\".split("");function check_ws_name(n,safe){if(n.length>31){if(safe)return false;throw new Error("Sheet names cannot exceed 31 chars")}var _good=true;badchars.forEach(function(c){if(n.indexOf(c)==-1)return;if(!safe)throw new Error("Sheet name cannot contain : \\ / ? * [ ]");_good=false});return _good}function check_wb_names(N){N.forEach(function(n,i){check_ws_name(n);for(var j=0;j":break;case"":;case"":break;case"":break;case"":WBPropsDef.forEach(function(w){if(y[w[0]]==null)return;switch(w[2]){case"bool":wb.WBProps[w[0]]=parsexmlbool(y[w[0]],w[0]);break;case"int":wb.WBProps[w[0]]=parseInt(y[w[0]],10);break;default:wb.WBProps[w[0]]=y[w[0]];}});break;case"":break;case"":break;case"":;case"":break;case"":break;case"":;case"":break;case"":break;case"":break;case"":;case"":break;case"":break;case"":;case"":pass=false;break;case"":{dname.Ref=data.slice(dnstart,idx);wb.Names.push(dname)}break;case"":break;case"":delete y[0];wb.CalcPr=y;break;case"":break;case"":;case"":;case"":break;case"":;case"":;case"":break;case"":;case"":break;case"":break;case"":break;case"":;case"":break;case"":;case"":;case"":break;case"":pass=false;break;case"":pass=false;break;case"0;var workbookPr={codeName:"ThisWorkbook"};if(wb.Workbook&&wb.Workbook.WBProps){if(wb.Workbook.WBProps.codeName)workbookPr.codeName=wb.Workbook.WBProps.codeName;WBPropsDef.forEach(function(x){if(wb.Workbook.WBProps[x[0]]==null)return;if(wb.Workbook.WBProps[x[0]]==x[1])return;workbookPr[x[0]]=wb.Workbook.WBProps[x[0]]})}o[o.length]=writextag("workbookPr",null,workbookPr);o[o.length]="";var sheets=wb.Workbook&&wb.Workbook.Sheets||[];for(var i=0;i!=wb.SheetNames.length;++i){var sht={name:escapexml(wb.SheetNames[i].substr(0,31))};sht.sheetId=""+(i+1);sht["r:id"]="rId"+(i+1);if(sheets[i])switch(sheets[i].Hidden){case 1:sht.state="hidden";break;case 2:sht.state="veryHidden";break;}o[o.length]=writextag("sheet",null,sht)}o[o.length]="";if(write_names){o[o.length]="";if(wb.Workbook&&wb.Workbook.Names)wb.Workbook.Names.forEach(function(n){var d={name:n.Name};if(n.Comment)d.comment=n.Comment;if(n.Sheet!=null)d.localSheetId=""+n.Sheet;if(!n.Ref)return;o[o.length]=writextag("definedName",String(n.Ref),d)});o[o.length]=""}if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBundleSh(data,length){var z={};z.Hidden=data.read_shift(4);z.iTabID=data.read_shift(4);z.strRelID=parse_RelID(data,length-8);z.name=parse_XLWideString(data);return z}function write_BrtBundleSh(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.Hidden);o.write_shift(4,data.iTabID);write_RelID(data.strRelID,o);write_XLWideString(data.name.substr(0,31),o);return o.length>o.l?o.slice(0,o.l):o}function parse_BrtWbProp(data,length){var o={};var flags=data.read_shift(4);o.defaultThemeVersion=data.read_shift(4);var strName=length>8?parse_XLWideString(data):"";if(strName.length>0)o.codeName=strName;o.autoCompressPictures=!!(flags&65536);o.backupFile=!!(flags&64);o.checkCompatibility=!!(flags&4096);o.date1904=!!(flags&1);o.filterPrivacy=!!(flags&8);o.hidePivotFieldList=!!(flags&1024);o.promptedSolutions=!!(flags&16);o.publishItems=!!(flags&2048);o.refreshAllConnections=!!(flags&262144);o.saveExternalLinkValues=!!(flags&128);o.showBorderUnselectedTables=!!(flags&4);o.showInkAnnotation=!!(flags&32);o.showObjects=["all","placeholders","none"][flags>>13&3];o.showPivotChartFilter=!!(flags&32768);o.updateLinks=["userSet","never","always"][flags>>8&3];return o}function write_BrtWbProp(data,o){if(!o)o=new_buf(72);var flags=0;if(data){if(data.filterPrivacy)flags|=8}o.write_shift(4,flags);o.write_shift(4,0);write_XLSBCodeName("ThisWorkbook",o);return o.slice(0,o.l)}function parse_BrtFRTArchID$(data,length){var o={};data.read_shift(4);o.ArchID=data.read_shift(4);data.l+=length-8;return o}function parse_BrtName(data,length,opts){var end=data.l+length;var flags=data.read_shift(4);var chKey=data.read_shift(1);var itab=data.read_shift(4);var name=parse_XLNameWideString(data);var formula=parse_XLSBNameParsedFormula(data,0,opts);var comment=parse_XLNullableWideString(data);data.l=end;var out={Name:name,Ptg:formula,Comment:comment};if(itab<268435455)out.Sheet=itab;return out}function parse_wb_bin(data,opts){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,z;if(!opts)opts={};opts.biff=12;var Names=[];var supbooks=[];supbooks.SheetNames=[];recordhopper(data,function hopper_wb(val,R_n,RT){switch(RT){case 156:supbooks.SheetNames.push(val.name);wb.Sheets.push(val);break;case 153:wb.WBProps=val;break;case 39:val.Ref=stringify_formula(val.Ptg,null,null,supbooks,opts);delete val.Ptg;Names.push(val);break;case 1036:break;case 357:;case 358:;case 355:;case 667:;case 362:;case 361:break;case 2071:;case 534:;case 677:;case 158:;case 157:;case 610:;case 2050:;case 155:;case 548:;case 676:;case 128:;case 665:;case 2128:;case 2125:;case 549:;case 2053:;case 596:;case 2076:;case 2075:;case 2082:;case 397:;case 154:;case 1117:;case 553:;case 2091:break;case 35:pass=true;break;case 36:pass=false;break;case 37:break;case 38:break;case 16:break;default:if((R_n||"").indexOf("Begin")>0){}else if((R_n||"").indexOf("End")>0){}else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}},opts);parse_wb_defaults(wb);wb.Names=Names;return wb}function write_BUNDLESHS(ba,wb,opts){write_record(ba,"BrtBeginBundleShs");for(var idx=0;idx!=wb.SheetNames.length;++idx){var viz=wb.Workbook&&wb.Workbook.Sheets&&wb.Workbook.Sheets[idx]&&wb.Workbook.Sheets[idx].Hidden||0;var d={Hidden:viz,iTabID:idx+1,strRelID:"rId"+(idx+1),name:wb.SheetNames[idx]};write_record(ba,"BrtBundleSh",write_BrtBundleSh(d))}write_record(ba,"BrtEndBundleShs")}function write_BrtFileVersion(data,o){if(!o)o=new_buf(127);for(var i=0;i!=4;++i)o.write_shift(4,0);write_XLWideString("SheetJS",o);write_XLWideString(XLSX.version,o);write_XLWideString(XLSX.version,o);write_XLWideString("7262",o);o.length=o.l;return o.length>o.l?o.slice(0,o.l):o}function write_BrtBookView(idx,o){if(!o)o=new_buf(29);o.write_shift(-4,0);o.write_shift(-4,460);o.write_shift(4,28800);o.write_shift(4,17600);o.write_shift(4,500);o.write_shift(4,idx);o.write_shift(4,idx);var flags=120;o.write_shift(1,flags);return o.length>o.l?o.slice(0,o.l):o}function write_BOOKVIEWS(ba,wb,opts){if(!wb.Workbook||!wb.Workbook.Sheets)return;var sheets=wb.Workbook.Sheets;var i=0,vistab=-1,hidden=-1;for(;ivistab)return;write_record(ba,"BrtBeginBookViews");write_record(ba,"BrtBookView",write_BrtBookView(vistab));write_record(ba,"BrtEndBookViews")}function write_BrtCalcProp(data,o){if(!o)o=new_buf(26);o.write_shift(4,0);o.write_shift(4,1);o.write_shift(4,0);write_Xnum(0,o);o.write_shift(-4,1023);o.write_shift(1,51);o.write_shift(1,0);return o}function write_BrtFileRecover(data,o){if(!o)o=new_buf(1);o.write_shift(1,0);return o}function write_wb_bin(wb,opts){var ba=buf_array();write_record(ba,"BrtBeginBook");write_record(ba,"BrtFileVersion",write_BrtFileVersion());write_record(ba,"BrtWbProp",write_BrtWbProp(wb.Workbook&&wb.Workbook.WBProps||null));write_BOOKVIEWS(ba,wb,opts);write_BUNDLESHS(ba,wb,opts);write_record(ba,"BrtEndBook");return ba.end()}function parse_wb(data,name,opts){if(name.slice(-4)===".bin")return parse_wb_bin(data,opts);return parse_wb_xml(data,opts)}function parse_ws(data,name,opts,rels,wb,themes,styles){if(name.slice(-4)===".bin")return parse_ws_bin(data,opts,rels,wb,themes,styles);return parse_ws_xml(data,opts,rels,wb,themes,styles)}function parse_cs(data,name,opts,rels,wb,themes,styles){if(name.slice(-4)===".bin")return parse_cs_bin(data,opts,rels,wb,themes,styles);return parse_cs_xml(data,opts,rels,wb,themes,styles)}function parse_ms(data,name,opts,rels,wb,themes,styles){if(name.slice(-4)===".bin")return parse_ms_bin(data,opts,rels,wb,themes,styles);return parse_ms_xml(data,opts,rels,wb,themes,styles)}function parse_ds(data,name,opts,rels,wb,themes,styles){if(name.slice(-4)===".bin")return parse_ds_bin(data,opts,rels,wb,themes,styles);return parse_ds_xml(data,opts,rels,wb,themes,styles)}function parse_sty(data,name,themes,opts){if(name.slice(-4)===".bin")return parse_sty_bin(data,themes,opts);return parse_sty_xml(data,themes,opts)}function parse_theme(data,name,opts){return parse_theme_xml(data,opts)}function parse_sst(data,name,opts){if(name.slice(-4)===".bin")return parse_sst_bin(data,opts);return parse_sst_xml(data,opts)}function parse_cmnt(data,name,opts){if(name.slice(-4)===".bin")return parse_comments_bin(data,opts);return parse_comments_xml(data,opts)}function parse_cc(data,name,opts){if(name.slice(-4)===".bin")return parse_cc_bin(data,opts);return parse_cc_xml(data,opts)}function write_wb(wb,name,opts){return(name.slice(-4)===".bin"?write_wb_bin:write_wb_xml)(wb,opts)}function write_ws(data,name,opts,wb,rels){return(name.slice(-4)===".bin"?write_ws_bin:write_ws_xml)(data,opts,wb,rels)}function write_cs(data,name,opts,wb,rels){return(name.slice(-4)===".bin"?write_cs_bin:write_cs_xml)(data,opts,wb,rels)}function write_sty(data,name,opts){return(name.slice(-4)===".bin"?write_sty_bin:write_sty_xml)(data,opts)}function write_sst(data,name,opts){return(name.slice(-4)===".bin"?write_sst_bin:write_sst_xml)(data,opts)}function write_cmnt(data,name,opts){return(name.slice(-4)===".bin"?write_comments_bin:write_comments_xml)(data,opts)}var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;var _chr=function(c){return String.fromCharCode(c)};function xlml_parsexmltag(tag,skip_root){var words=tag.split(/\s+/);var z=[];if(!skip_root)z[0]=words[0];if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_parsexmltagobj(tag){var words=tag.split(/\s+/);var z={};if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_format(format,value){var fmt=XLMLFormatMap[format]||unescapexml(format);if(fmt==="General")return SSF._general(value);return SSF.format(fmt,value)}function xlml_set_custprop(Custprops,Rn,cp,val){var oval=val;switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":oval=parsexmlbool(val);break;case"i2":;case"int":oval=parseInt(val,10);break;case"r4":;case"float":oval=parseFloat(val);break;case"date":;case"dateTime.tz":oval=parseDate(val);break;case"i8":;case"string":;case"fixed":;case"uuid":;case"bin.base64":break;default:throw new Error("bad custprop:"+cp[0]);}Custprops[unescapexml(Rn[3])]=oval}function safe_format_xlml(cell,nf,o){if(cell.t==="z")return;if(!o||o.cellText!==false)try{if(cell.t==="e"){cell.w=cell.w||BErr[cell.v]}else if(nf==="General"){if(cell.t==="n"){if((cell.v|0)===cell.v)cell.w=SSF._general_int(cell.v);else cell.w=SSF._general_num(cell.v)}else cell.w=SSF._general(cell.v)}else cell.w=xlml_format(nf||"General",cell.v)}catch(e){if(o.WTF)throw e}try{var z=XLMLFormatMap[nf]||nf||"General";if(o.cellNF)cell.z=z;if(o.cellDates&&cell.t=="n"&&SSF.is_date(z)){var _d=SSF.parse_date_code(cell.v);if(_d){cell.t="d";cell.v=new Date(_d.y,_d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)}}}catch(e){if(o.WTF)throw e}}function process_style_xlml(styles,stag,opts){if(opts.cellStyles){if(stag.Interior){var I=stag.Interior;if(I.Pattern)I.patternType=XLMLPatternTypeMap[I.Pattern]||I.Pattern}}styles[stag.ID]=stag}function parse_xlml_data(xml,ss,data,cell,base,styles,csty,row,arrayf,o){var nf="General",sid=cell.StyleID,S={};o=o||{};var interiors=[];var i=0;if(sid===undefined&&row)sid=row.StyleID;if(sid===undefined&&csty)sid=csty.StyleID;while(styles[sid]!==undefined){if(styles[sid].nf)nf=styles[sid].nf;if(styles[sid].Interior)interiors.push(styles[sid].Interior);if(!styles[sid].Parent)break;sid=styles[sid].Parent}switch(data.Type){case"Boolean":cell.t="b";cell.v=parsexmlbool(xml);break;case"String":cell.t="s";cell.r=xlml_fixstr(unescapexml(xml));cell.v=xml.indexOf("<")>-1?unescapexml(ss):cell.r;break;case"DateTime":if(xml.slice(-1)!="Z")xml+="Z";cell.v=(parseDate(xml)-new Date(Date.UTC(1899,11,30)))/(24*60*60*1e3);if(cell.v!==cell.v)cell.v=unescapexml(xml);else if(cell.v<60)cell.v=cell.v-1;if(!nf||nf=="General")nf="yyyy-mm-dd";case"Number":if(cell.v===undefined)cell.v=+xml;if(!cell.t)cell.t="n";break;case"Error":cell.t="e";cell.v=RBErr[xml];if(o.cellText!==false)cell.w=xml;break;default:cell.t="s";cell.v=xlml_fixstr(ss||xml);break;}safe_format_xlml(cell,nf,o);if(o.cellFormula!==false){if(cell.Formula){var fstr=unescapexml(cell.Formula);if(fstr.charCodeAt(0)==61)fstr=fstr.substr(1);cell.f=rc_to_a1(fstr,base);delete cell.Formula;if(cell.ArrayRange=="RC")cell.F=rc_to_a1("RC:RC",base);else if(cell.ArrayRange){cell.F=rc_to_a1(cell.ArrayRange,base);arrayf.push([safe_decode_range(cell.F),cell.F])}}else{for(i=0;i=arrayf[i][0].s.r&&base.r<=arrayf[i][0].e.r)if(base.c>=arrayf[i][0].s.c&&base.c<=arrayf[i][0].e.c)cell.F=arrayf[i][1]}}if(o.cellStyles){interiors.forEach(function(x){if(!S.patternType&&x.patternType)S.patternType=x.patternType});cell.s=S}cell.ixfe=cell.StyleID!==undefined?cell.StyleID:"Default"; -}function xlml_clean_comment(comment){comment.t=comment.v||"";comment.t=comment.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n");comment.v=comment.w=comment.ixfe=undefined}function xlml_normalize(d){if(has_buf&&Buffer.isBuffer(d))return d.toString("utf8");if(typeof d==="string")return d;throw new Error("Bad input format: expected Buffer or string")}var xlmlregex=/<(\/?)([^\s?>!\/:]*:|)([^\s?>]*[^\s?>\/])[^>]*>/gm;function parse_xlml_xml(d,_opts){var opts=_opts||{};make_ssf(SSF);var str=debom(xlml_normalize(d));if(opts&&opts.type=="binary"&&typeof cptable!=="undefined")str=cptable.utils.decode(65001,char_codes(str));if(str.substr(0,1e3).indexOf("=0)return HTML_.to_workbook(str,opts);var Rn;var state=[],tmp;if(DENSE!=null&&opts.dense==null)opts.dense=DENSE;var sheets={},sheetnames=[],cursheet=opts.dense?[]:{},sheetname="";var table={},cell={},row={};var dtag=xlml_parsexmltag(''),didx=0;var c=0,r=0;var refguess={s:{r:2e6,c:2e6},e:{r:0,c:0}};var styles={},stag={};var ss="",fidx=0;var mergecells=[];var Props={},Custprops={},pidx=0,cp={};var comments=[],comment={};var cstys=[],csty,seencol=false;var arrayf=[];var rowinfo=[],rowobj={};var Workbook={Sheets:[],WBProps:{date1904:false}},wsprops={};xlmlregex.lastIndex=0;str=str.replace(//gm,"");while(Rn=xlmlregex.exec(str))switch(Rn[3]){case"Data":if(state[state.length-1][1])break;if(Rn[1]==="/")parse_xlml_data(str.slice(didx,Rn.index),ss,dtag,state[state.length-1][0]=="Comment"?comment:cell,{c:c,r:r},styles,cstys[c],row,arrayf,opts);else{ss="";dtag=xlml_parsexmltag(Rn[0]);didx=Rn.index+Rn[0].length}break;case"Cell":if(Rn[1]==="/"){if(comments.length>0)cell.c=comments;if((!opts.sheetRows||opts.sheetRows>r)&&cell.v!==undefined){if(opts.dense){if(!cursheet[r])cursheet[r]=[];cursheet[r][c]=cell}else cursheet[encode_col(c)+encode_row(r)]=cell}if(cell.HRef){cell.l={Target:cell.HRef,Tooltip:cell.HRefScreenTip};delete cell.HRef;delete cell.HRefScreenTip}if(cell.MergeAcross||cell.MergeDown){var cc=c+(parseInt(cell.MergeAcross,10)|0);var rr=r+(parseInt(cell.MergeDown,10)|0);mergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}})}if(!opts.sheetStubs){if(cell.MergeAcross)c=cc+1;else++c}else if(cell.MergeAcross||cell.MergeDown){for(var cma=c;cma<=cc;++cma){for(var cmd=r;cmd<=rr;++cmd){if(cma>c||cmd>r){if(opts.dense){if(!cursheet[cmd])cursheet[cmd]=[];cursheet[cmd][cma]={t:"z"}}else cursheet[encode_col(cma)+encode_row(cmd)]={t:"z"}}}}c=cc+1}else++c}else{cell=xlml_parsexmltagobj(Rn[0]);if(cell.Index)c=+cell.Index-1;if(crefguess.e.c)refguess.e.c=c;if(Rn[0].slice(-2)==="/>")++c;comments=[]}break;case"Row":if(Rn[1]==="/"||Rn[0].slice(-2)==="/>"){if(rrefguess.e.r)refguess.e.r=r;if(Rn[0].slice(-2)==="/>"){row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1}c=0;++r}else{row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1;rowobj={};if(row.AutoFitHeight=="0"||row.Height){rowobj.hpx=parseInt(row.Height,10);rowobj.hpt=px2pt(rowobj.hpx);rowinfo[r]=rowobj}if(row.Hidden=="1"){rowobj.hidden=true;rowinfo[r]=rowobj}}break;case"Worksheet":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"));sheetnames.push(sheetname);if(refguess.s.r<=refguess.e.r&&refguess.s.c<=refguess.e.c)cursheet["!ref"]=encode_range(refguess);if(mergecells.length)cursheet["!merges"]=mergecells;if(cstys.length>0)cursheet["!cols"]=cstys;if(rowinfo.length>0)cursheet["!rows"]=rowinfo;sheets[sheetname]=cursheet}else{refguess={s:{r:2e6,c:2e6},e:{r:0,c:0}};r=c=0;state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);sheetname=unescapexml(tmp.Name);cursheet=opts.dense?[]:{};mergecells=[];arrayf=[];rowinfo=[];wsprops={name:sheetname,Hidden:0};Workbook.Sheets.push(wsprops)}break;case"Table":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"))}else if(Rn[0].slice(-2)=="/>")break;else{table=xlml_parsexmltag(Rn[0]);state.push([Rn[3],false]);cstys=[];seencol=false}break;case"Style":if(Rn[1]==="/")process_style_xlml(styles,stag,opts);else stag=xlml_parsexmltag(Rn[0]);break;case"NumberFormat":stag.nf=unescapexml(xlml_parsexmltag(Rn[0]).Format||"General");if(XLMLFormatMap[stag.nf])stag.nf=XLMLFormatMap[stag.nf];for(var ssfidx=0;ssfidx!=392;++ssfidx)if(SSF._table[ssfidx]==stag.nf)break;if(ssfidx==392)for(ssfidx=57;ssfidx!=392;++ssfidx)if(SSF._table[ssfidx]==null){SSF.load(stag.nf,ssfidx);break}break;case"Column":if(state[state.length-1][0]!=="Table")break;csty=xlml_parsexmltag(Rn[0]);if(csty.Hidden){csty.hidden=true;delete csty.Hidden}if(csty.Width)csty.wpx=parseInt(csty.Width,10);if(!seencol&&csty.wpx>10){seencol=true;MDW=DEF_MDW;for(var _col=0;_col0)_DefinedName.Sheet=Workbook.Sheets.length-1;Workbook.Names.push(_DefinedName);break;case"NamedCell":break;case"B":break;case"I":break;case"U":break;case"S":break;case"Sub":break;case"Sup":break;case"Span":break;case"Border":break;case"Alignment":break;case"Borders":break;case"Font":if(Rn[0].slice(-2)==="/>")break;else if(Rn[1]==="/")ss+=str.slice(fidx,Rn.index);else fidx=Rn.index+Rn[0].length;break;case"Interior":if(!opts.cellStyles)break;stag.Interior=xlml_parsexmltag(Rn[0]);break;case"Protection":break;case"Author":;case"Title":;case"Description":;case"Created":;case"Keywords":;case"Subject":;case"Category":;case"Company":;case"LastAuthor":;case"LastSaved":;case"LastPrinted":;case"Version":;case"Revision":;case"TotalTime":;case"HyperlinkBase":;case"Manager":;case"ContentStatus":;case"Identifier":;case"Language":if(Rn[0].slice(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_prop(Props,Rn[3],str.slice(pidx,Rn.index));else pidx=Rn.index+Rn[0].length;break;case"Paragraphs":break;case"Styles":;case"Workbook":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"))}else state.push([Rn[3],false]);break;case"Comment":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"));xlml_clean_comment(comment);comments.push(comment)}else{state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);comment={a:tmp.Author}}break;case"AutoFilter":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"))}else if(Rn[0].charAt(Rn[0].length-2)!=="/"){var AutoFilter=xlml_parsexmltag(Rn[0]);cursheet["!autofilter"]={ref:rc_to_a1(AutoFilter.Range).replace(/\$/g,"")};state.push([Rn[3],true])}break;case"Name":break;case"ComponentOptions":;case"DocumentProperties":;case"CustomDocumentProperties":;case"OfficeDocumentSettings":;case"PivotTable":;case"PivotCache":;case"Names":;case"MapInfo":;case"PageBreaks":;case"QueryTable":;case"DataValidation":;case"Sorting":;case"Schema":;case"data":;case"ConditionalFormatting":;case"SmartTagType":;case"SmartTags":;case"ExcelWorkbook":;case"WorkbookOptions":;case"WorksheetOptions":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"))}else if(Rn[0].charAt(Rn[0].length-2)!=="/")state.push([Rn[3],true]);break;default:if(state.length==0&&Rn[3]=="document")return parse_fods(str,opts);if(state.length==0&&Rn[3]=="UOF")return parse_fods(str,opts);var seen=true;switch(state[state.length-1][0]){case"OfficeDocumentSettings":switch(Rn[3]){case"AllowPNG":break;case"RemovePersonalInformation":break;case"DownloadComponents":break;case"LocationOfComponents":break;case"Colors":break;case"Color":break;case"Index":break;case"RGB":break;case"PixelsPerInch":break;case"TargetScreenSize":break;case"ReadOnlyRecommended":break;default:seen=false;}break;case"ComponentOptions":switch(Rn[3]){case"Toolbar":break;case"HideOfficeLogo":break;case"SpreadsheetAutoFit":break;case"Label":break;case"Caption":break;case"MaxHeight":break;case"MaxWidth":break;case"NextSheetNumber":break;default:seen=false;}break;case"ExcelWorkbook":switch(Rn[3]){case"Date1904":Workbook.WBProps.date1904=true;break;case"WindowHeight":break;case"WindowWidth":break;case"WindowTopX":break;case"WindowTopY":break;case"TabRatio":break;case"ProtectStructure":break;case"ProtectWindows":break;case"ActiveSheet":break;case"DisplayInkNotes":break;case"FirstVisibleSheet":break;case"SupBook":break;case"SheetName":break;case"SheetIndex":break;case"SheetIndexFirst":break;case"SheetIndexLast":break;case"Dll":break;case"AcceptLabelsInFormulas":break;case"DoNotSaveLinkValues":break;case"Iteration":break;case"MaxIterations":break;case"MaxChange":break;case"Path":break;case"Xct":break;case"Count":break;case"SelectedSheets":break;case"Calculation":break;case"Uncalced":break;case"StartupPrompt":break;case"Crn":break;case"ExternName":break;case"Formula":break;case"ColFirst":break;case"ColLast":break;case"WantAdvise":break;case"Boolean":break;case"Error":break;case"Text":break;case"OLE":break;case"NoAutoRecover":break;case"PublishObjects":break;case"DoNotCalculateBeforeSave":break;case"Number":break;case"RefModeR1C1":break;case"EmbedSaveSmartTags":break;default:seen=false;}break;case"WorkbookOptions":switch(Rn[3]){case"OWCVersion":break;case"Height":break;case"Width":break;default:seen=false;}break;case"WorksheetOptions":switch(Rn[3]){case"Visible":if(Rn[0].slice(-2)==="/>"){}else if(Rn[1]==="/")switch(str.slice(pidx,Rn.index)){case"SheetHidden":wsprops.Hidden=1;break;case"SheetVeryHidden":wsprops.Hidden=2;break;}else pidx=Rn.index+Rn[0].length;break;case"Header":if(!cursheet["!margins"])default_margins(cursheet["!margins"]={},"xlml");cursheet["!margins"].header=parsexmltag(Rn[0]).Margin;break;case"Footer":if(!cursheet["!margins"])default_margins(cursheet["!margins"]={},"xlml");cursheet["!margins"].footer=parsexmltag(Rn[0]).Margin;break;case"PageMargins":var pagemargins=parsexmltag(Rn[0]);if(!cursheet["!margins"])default_margins(cursheet["!margins"]={},"xlml");if(pagemargins.Top)cursheet["!margins"].top=pagemargins.Top;if(pagemargins.Left)cursheet["!margins"].left=pagemargins.Left;if(pagemargins.Right)cursheet["!margins"].right=pagemargins.Right;if(pagemargins.Bottom)cursheet["!margins"].bottom=pagemargins.Bottom;break;case"Unsynced":break;case"Print":break;case"Panes":break;case"Scale":break;case"Pane":break;case"Number":break;case"Layout":break;case"PageSetup":break;case"Selected":break;case"ProtectObjects":break;case"EnableSelection":break;case"ProtectScenarios":break;case"ValidPrinterInfo":break;case"HorizontalResolution":break;case"VerticalResolution":break;case"NumberofCopies":break;case"ActiveRow":break;case"ActiveCol":break;case"ActivePane":break;case"TopRowVisible":break;case"TopRowBottomPane":break;case"LeftColumnVisible":break;case"LeftColumnRightPane":break;case"FitToPage":break;case"RangeSelection":break;case"PaperSizeIndex":break;case"PageLayoutZoom":break;case"PageBreakZoom":break;case"FilterOn":break;case"DoNotDisplayGridlines":break;case"SplitHorizontal":break;case"SplitVertical":break;case"FreezePanes":break;case"FrozenNoSplit":break;case"FitWidth":break;case"FitHeight":break;case"CommentsLayout":break;case"Zoom":break;case"LeftToRight":break;case"Gridlines":break;case"AllowSort":break;case"AllowFilter":break;case"AllowInsertRows":break;case"AllowDeleteRows":break;case"AllowInsertCols":break;case"AllowDeleteCols":break;case"AllowInsertHyperlinks":break;case"AllowFormatCells":break;case"AllowSizeCols":break;case"AllowSizeRows":break;case"NoSummaryRowsBelowDetail":break;case"TabColorIndex":break;case"DoNotDisplayHeadings":break;case"ShowPageLayoutZoom":break;case"NoSummaryColumnsRightDetail":break;case"BlackAndWhite":break;case"DoNotDisplayZeros":break;case"DisplayPageBreak":break;case"RowColHeadings":break;case"DoNotDisplayOutline":break;case"NoOrientation":break;case"AllowUsePivotTables":break;case"ZeroHeight":break;case"ViewableRange":break;case"Selection":break;case"ProtectContents":break;default:seen=false;}break;case"PivotTable":;case"PivotCache":switch(Rn[3]){case"ImmediateItemsOnDrop":break;case"ShowPageMultipleItemLabel":break;case"CompactRowIndent":break;case"Location":break;case"PivotField":break;case"Orientation":break;case"LayoutForm":break;case"LayoutSubtotalLocation":break;case"LayoutCompactRow":break;case"Position":break;case"PivotItem":break;case"DataType":break;case"DataField":break;case"SourceName":break;case"ParentField":break;case"PTLineItems":break;case"PTLineItem":break;case"CountOfSameItems":break;case"Item":break;case"ItemType":break;case"PTSource":break;case"CacheIndex":break;case"ConsolidationReference":break;case"FileName":break;case"Reference":break;case"NoColumnGrand":break;case"NoRowGrand":break;case"BlankLineAfterItems":break;case"Hidden":break;case"Subtotal":break;case"BaseField":break;case"MapChildItems":break;case"Function":break;case"RefreshOnFileOpen":break;case"PrintSetTitles":break;case"MergeLabels":break;case"DefaultVersion":break;case"RefreshName":break;case"RefreshDate":break;case"RefreshDateCopy":break;case"VersionLastRefresh":break;case"VersionLastUpdate":break;case"VersionUpdateableMin":break;case"VersionRefreshableMin":break;case"Calculation":break;default:seen=false;}break;case"PageBreaks":switch(Rn[3]){case"ColBreaks":break;case"ColBreak":break;case"RowBreaks":break;case"RowBreak":break;case"ColStart":break;case"ColEnd":break;case"RowEnd":break;default:seen=false;}break;case"AutoFilter":switch(Rn[3]){case"AutoFilterColumn":break;case"AutoFilterCondition":break;case"AutoFilterAnd":break;case"AutoFilterOr":break;default:seen=false;}break;case"QueryTable":switch(Rn[3]){case"Id":break;case"AutoFormatFont":break;case"AutoFormatPattern":break;case"QuerySource":break;case"QueryType":break;case"EnableRedirections":break;case"RefreshedInXl9":break;case"URLString":break;case"HTMLTables":break;case"Connection":break;case"CommandText":break;case"RefreshInfo":break;case"NoTitles":break;case"NextId":break;case"ColumnInfo":break;case"OverwriteCells":break;case"DoNotPromptForFile":break;case"TextWizardSettings":break;case"Source":break;case"Number":break;case"Decimal":break;case"ThousandSeparator":break;case"TrailingMinusNumbers":break;case"FormatSettings":break;case"FieldType":break;case"Delimiters":break;case"Tab":break;case"Comma":break;case"AutoFormatName":break;case"VersionLastEdit":break;case"VersionLastRefresh":break;default:seen=false;}break;case"Sorting":;case"ConditionalFormatting":;case"DataValidation":switch(Rn[3]){case"Range":break;case"Type":break;case"Min":break;case"Max":break;case"Sort":break;case"Descending":break;case"Order":break;case"CaseSensitive":break;case"Value":break;case"ErrorStyle":break;case"ErrorMessage":break;case"ErrorTitle":break;case"CellRangeList":break;case"InputMessage":break;case"InputTitle":break;case"ComboHide":break;case"InputHide":break;case"Condition":break;case"Qualifier":break;case"UseBlank":break;case"Value1":break;case"Value2":break;case"Format":break;default:seen=false;}break;case"MapInfo":;case"Schema":;case"data":switch(Rn[3]){case"Map":break;case"Entry":break;case"Range":break;case"XPath":break;case"Field":break;case"XSDType":break;case"FilterOn":break;case"Aggregate":break;case"ElementType":break;case"AttributeType":break;case"schema":;case"element":;case"complexType":;case"datatype":;case"all":;case"attribute":;case"extends":break;case"row":break;default:seen=false;}break;case"SmartTags":break;default:seen=false;break;}if(seen)break;if(!state[state.length-1][1])throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|");if(state[state.length-1][0]==="CustomDocumentProperties"){if(Rn[0].slice(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_custprop(Custprops,Rn,cp,str.slice(pidx,Rn.index));else{cp=Rn;pidx=Rn.index+Rn[0].length}break}if(opts.WTF)throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|");}var out={};if(!opts.bookSheets&&!opts.bookProps)out.Sheets=sheets;out.SheetNames=sheetnames;out.Workbook=Workbook;out.SSF=SSF.get_table();out.Props=Props;out.Custprops=Custprops;return out}function parse_xlml(data,opts){fix_read_opts(opts=opts||{});switch(opts.type||"base64"){case"base64":return parse_xlml_xml(Base64.decode(data),opts);case"binary":;case"buffer":;case"file":return parse_xlml_xml(data,opts);case"array":return parse_xlml_xml(data.map(_chr).join(""),opts);}}function write_props_xlml(wb,opts){var o=[];if(wb.Props)o.push(xlml_write_docprops(wb.Props,opts));if(wb.Custprops)o.push(xlml_write_custprops(wb.Props,wb.Custprops,opts));return o.join("")}function write_wb_xlml(wb,opts){return""}function write_sty_xlml(wb,opts){return""}function write_ws_xlml_wsopts(ws,opts,idx,wb){if(!ws)return"";var o=[];if(ws["!margins"]){o.push("");if(ws["!margins"].header)o.push(writextag("Header",null,{"x:Margin":ws["!margins"].header}));if(ws["!margins"].footer)o.push(writextag("Footer",null,{"x:Margin":ws["!margins"].footer}));o.push(writextag("PageMargins",null,{"x:Bottom":ws["!margins"].bottom||"0.75","x:Left":ws["!margins"].left||"0.7","x:Right":ws["!margins"].right||"0.7","x:Top":ws["!margins"].top||"0.75"}));o.push("")}if(wb&&wb.Workbook&&wb.Workbook.Sheets&&wb.Workbook.Sheets[idx]){if(wb.Workbook.Sheets[idx].Hidden)o.push(writextag("Visible",wb.Workbook.Sheets[idx].Hidden==1?"SheetHidden":"SheetVeryHidden",{}));else{for(var i=0;i")}}if(ws["!protect"]){o.push(writetag("ProtectContents","True"));if(ws["!protect"].objects)o.push(writetag("ProtectObjects","True"));if(ws["!protect"].scenarios)o.push(writetag("ProtectScenarios","True"));if(ws["!protect"].selectLockedCells!=null&&!ws["!protect"].selectLockedCells)o.push(writetag("EnableSelection","NoSelection"));else if(ws["!protect"].selectUnlockedCells!=null&&!ws["!protect"].selectUnlockedCells)o.push(writetag("EnableSelection","UnlockedCells"));[["formatColumns","AllowFormatCells"],["formatRows","AllowSizeCols"],["formatCells","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach(function(x){if(ws["!protect"][x[0]])o.push("<"+x[1]+"/>")})}if(o.length==0)return"";return writextag("WorksheetOptions",o.join(""),{xmlns:XLMLNS.x})}function write_ws_xlml_comment(comments){return comments.map(function(c){var t=xlml_unfixstr(c.t||"");var d=writextag("ss:Data",t,{xmlns:"http://www.w3.org/TR/REC-html40"});return writextag("Comment",d,{"ss:Author":c.a})}).join("")}function write_ws_xlml_cell(cell,ref,ws,opts,idx,wb,addr){if(!cell||cell.v==undefined&&cell.f==undefined)return"";var attr={};if(cell.f)attr["ss:Formula"]="="+escapexml(a1_to_rc(cell.f,addr));if(cell.F&&cell.F.substr(0,ref.length)==ref){var end=decode_cell(cell.F.substr(ref.length+1));attr["ss:ArrayRange"]="RC:R"+(end.r==addr.r?"":"["+(end.r-addr.r)+"]")+"C"+(end.c==addr.c?"":"["+(end.c-addr.c)+"]")}if(cell.l&&cell.l.Target){attr["ss:HRef"]=escapexml(cell.l.Target);if(cell.l.Tooltip)attr["x:HRefScreenTip"]=escapexml(cell.l.Tooltip)}if(ws["!merges"]){var marr=ws["!merges"];for(var mi=0;mi!=marr.length;++mi){if(marr[mi].s.c!=addr.c||marr[mi].s.r!=addr.r)continue;if(marr[mi].e.c>marr[mi].s.c)attr["ss:MergeAcross"]=marr[mi].e.c-marr[mi].s.c;if(marr[mi].e.r>marr[mi].s.r)attr["ss:MergeDown"]=marr[mi].e.r-marr[mi].s.r}}var t="",p="";switch(cell.t){case"z":return"";case"n":t="Number";p=String(cell.v);break;case"b":t="Boolean";p=cell.v?"1":"0";break;case"e":t="Error";p=BErr[cell.v];break;case"d":t="DateTime";p=new Date(cell.v).toISOString();break;case"s":t="String";p=escapexml(cell.v||"");break;}var _v=cell.v!=null?p:"";if(opts&&opts.type=="binary"&&typeof cptable!=="undefined"&&cell.t=="s"){_v=cptable.utils.encode(65001,_v);var __v="";for(var __i=0;__i<_v.length;++__i)__v+=String.fromCharCode(_v[__i]);_v=__v}var m=''+_v+"";if((cell.c||[]).length>0)m+=write_ws_xlml_comment(cell.c);return writextag("Cell",m,attr)}function write_ws_xlml_row(R,row){var o='"}function write_ws_xlml_table(ws,opts,idx,wb){if(!ws["!ref"])return"";var range=safe_decode_range(ws["!ref"]);var marr=ws["!merges"]||[],mi=0;var o=[];if(ws["!cols"])ws["!cols"].forEach(function(n,i){process_col(n);var w=!!n.width;var p=col_obj_w(i,n);var k={"ss:Index":i+1};if(w)k["ss:Width"]=width2px(p.width);if(n.hidden)k["ss:Hidden"]="1";o.push(writextag("Column",null,k))});var dense=Array.isArray(ws);for(var R=range.s.r;R<=range.e.r;++R){var row=[write_ws_xlml_row(R,(ws["!rows"]||[])[R])];for(var C=range.s.c;C<=range.e.c;++C){var skip=false;for(mi=0;mi!=marr.length;++mi){if(marr[mi].s.c>C)continue;if(marr[mi].s.r>R)continue;if(marr[mi].e.c");if(row.length>2)o.push(row.join(""))}return o.join("")}function write_ws_xlml(idx,opts,wb){var o=[];var s=wb.SheetNames[idx];var ws=wb.Sheets[s];var t=ws?write_ws_xlml_table(ws,opts,idx,wb):"";if(t.length>0)o.push(""+t+"
");o.push(write_ws_xlml_wsopts(ws,opts,idx,wb));return o.join("")}function write_xlml(wb,opts){var d=[];d.push(write_props_xlml(wb,opts));d.push(write_wb_xlml(wb,opts));d.push(write_sty_xlml(wb,opts));for(var i=0;i400)throw new Error("Unsupported Clipboard: "+m.toString(16));l+=m;}m=__lpstr(o,l);l+=m.length===0?0:5+m.length;v.Reserved1=m;if((m=__readUInt32LE(o,l))!==1907550708)return v;throw new Error("Unsupported Unicode Extension")}function slurp(R,blob,length,opts){var l=length;var bufs=[];var d=blob.slice(blob.l,blob.l+l);if(opts&&opts.enc&&opts.enc.insitu_decrypt)switch(R.n){case"BOF":;case"FilePass":;case"FileLock":;case"InterfaceHdr":;case"RRDInfo":;case"RRDHead":;case"UsrExcl":break;default:if(d.length===0)break;opts.enc.insitu_decrypt(d);}bufs.push(d);blob.l+=l;var next=XLSRecordEnum[__readUInt16LE(blob,blob.l)];while(next!=null&&next.n==="Continue"){l=__readUInt16LE(blob,blob.l+2);bufs.push(blob.slice(blob.l+4,blob.l+4+l));blob.l+=4+l;next=XLSRecordEnum[__readUInt16LE(blob,blob.l)]}var b=bconcat(bufs);prep_blob(b,0);var ll=0;b.lens=[];for(var j=0;j1)return;if(!cell_valid)return;if(options.cellStyles&&line.XF&&line.XF.data)process_cell_style(cell,line,options);lastcell=cell;last_cell=encode_cell(cell);if(range.s){if(cell.rrange.e.r)range.e.r=cell.r+1;if(cell.c+1>range.e.c)range.e.c=cell.c+1}if(options.cellFormula&&line.f){for(var afi=0;aficell.c)continue;if(array_formulae[afi][0].s.r>cell.r)continue;if(array_formulae[afi][0].e.c=options.sheetRows)cell_valid=false;else{if(options.dense){if(!out[cell.r])out[cell.r]=[];out[cell.r][cell.c]=line}else out[last_cell]=line}};var opts={enc:false,sbcch:0,snames:[],sharedf:shared_formulae,arrayf:array_formulae,rrtabid:[],lastuser:"",biff:8,codepage:0,winlocked:0,cellStyles:!!options&&!!options.cellStyles,WTF:!!options&&!!options.wtf};if(options.password)opts.password=options.password;var mergecells=[];var objects=[];var colinfo=[],rowinfo=[];var defwidth=0,defheight=0;var seencol=false;var supbooks=[];supbooks.SheetNames=opts.snames;supbooks.sharedf=opts.sharedf;supbooks.arrayf=opts.arrayf;supbooks.names=[];supbooks.XTI=[];var last_Rn="";var file_depth=0;var BIFF2Fmt=0;var BIFF2FmtTable=[];var FilterDatabases=[];var last_lbl;opts.codepage=1200;set_cp(1200);while(blob.l0)last_lbl.Sheet=val.itab-1;supbooks.names.push(last_lbl);if(!supbooks[0])supbooks[0]=[];supbooks[supbooks.length-1].push(val);if(val.Name=="_xlnm._FilterDatabase"&&val.itab>0)if(val.rgce&&val.rgce[0]&&val.rgce[0][0]&&val.rgce[0][0][0]=="PtgArea3d")FilterDatabases[val.itab-1]={ref:encode_range(val.rgce[0][0][1][2])};break;case"ExternSheet":if(supbooks.length==0){supbooks[0]=[];supbooks[0].XTI=[]}supbooks[supbooks.length-1].XTI=supbooks[supbooks.length-1].XTI.concat(val);supbooks.XTI=supbooks.XTI.concat(val);break;case"NameCmt":if(opts.biff<8)break;if(last_lbl!=null)last_lbl.Comment=val[1];break;case"Protect":out["!protect"]=val;break;case"Password":if(val!==0&&opts.WTF)console.error("Password verifier: "+val);break;case"Prot4Rev":;case"Prot4RevPass":break;case"BoundSheet8":{Directory[val.pos]=val;opts.snames.push(val.name)}break;case"EOF":{if(--file_depth)break;if(range.e){if(range.e.r>0&&range.e.c>0){range.e.r--;range.e.c--;out["!ref"]=encode_range(range);range.e.r++;range.e.c++}if(mergecells.length>0)out["!merges"]=mergecells;if(objects.length>0)out["!objects"]=objects;if(colinfo.length>0)out["!cols"]=colinfo;if(rowinfo.length>0)out["!rows"]=rowinfo;Workbook.Sheets.push(wsprops)}if(cur_sheet==="")Preamble=out;else Sheets[cur_sheet]=out;out=options.dense?[]:{}}break;case"BOF":{if(opts.biff!==8){}else if(RecordType===9)opts.biff=2;else if(RecordType===521)opts.biff=3;else if(RecordType===1033)opts.biff=4;else if(val.BIFFVer===1280)opts.biff=5;else if(val.BIFFVer===1536)opts.biff=8;else if(val.BIFFVer===2)opts.biff=2;else if(val.BIFFVer===7)opts.biff=2;if(file_depth++)break;cell_valid=true;out=options.dense?[]:{};if(opts.biff<5){if(cur_sheet==="")cur_sheet="Sheet1";range={s:{r:0,c:0},e:{r:0,c:0}};var fakebs8={pos:blob.l-length,name:cur_sheet};Directory[fakebs8.pos]=fakebs8;opts.snames.push(cur_sheet)}else cur_sheet=(Directory[s]||{name:""}).name;if(val.dt==32)out["!type"]="chart";mergecells=[];objects=[];array_formulae=[];opts.arrayf=array_formulae;colinfo=[];rowinfo=[];defwidth=defheight=0;seencol=false;wsprops={Hidden:(Directory[s]||{hs:0}).hs,name:cur_sheet}}break;case"Number":;case"BIFF2NUM":;case"BIFF2INT":{if(out["!type"]=="chart")if(options.dense?(out[val.r]||[])[val.c]:out[encode_cell({c:val.c,r:val.r})])++val.c;temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe]||{},v:val.val,t:"n"};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"BoolErr":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.val,t:val.t};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"RK":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.rknum,t:"n"};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"MulRk":{for(var j=val.c;j<=val.C;++j){var ixfe=val.rkrec[j-val.c][0];temp_val={ixfe:ixfe,XF:XFs[ixfe],v:val.rkrec[j-val.c][1],t:"n"};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:j,r:val.r},temp_val,options)}}break;case"Formula":{if(val.val=="String"){ -last_formula=val;break}temp_val=make_cell(val.val,val.cell.ixfe,val.tt);temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula){var _f=val.formula;if(_f&&_f[0]&&_f[0][0]&&_f[0][0][0]=="PtgExp"){var _fr=_f[0][0][1][0],_fc=_f[0][0][1][1];var _fe=encode_cell({r:_fr,c:_fc});if(shared_formulae[_fe])temp_val.f=""+stringify_formula(val.formula,range,val.cell,supbooks,opts);else temp_val.F=((options.dense?(out[_fr]||[])[_fc]:out[_fe])||{}).F}else temp_val.f=""+stringify_formula(val.formula,range,val.cell,supbooks,opts)}if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(val.cell,temp_val,options);last_formula=val}break;case"String":{if(last_formula){last_formula.val=val;temp_val=make_cell(val,last_formula.cell.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula){temp_val.f=""+stringify_formula(last_formula.formula,range,last_formula.cell,supbooks,opts)}if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(last_formula.cell,temp_val,options);last_formula=null}else throw new Error("String record expects Formula")}break;case"Array":{array_formulae.push(val);var _arraystart=encode_cell(val[0].s);cc=options.dense?(out[val[0].s.r]||[])[val[0].s.c]:out[_arraystart];if(options.cellFormula&&cc){if(!last_formula)break;if(!_arraystart||!cc)break;cc.f=""+stringify_formula(val[1],range,val[0],supbooks,opts);cc.F=encode_range(val[0])}}break;case"ShrFmla":{if(!cell_valid)break;if(!options.cellFormula)break;if(last_cell){if(!last_formula)break;shared_formulae[encode_cell(last_formula.cell)]=val[0];cc=options.dense?(out[last_formula.cell.r]||[])[last_formula.cell.c]:out[encode_cell(last_formula.cell)];(cc||{}).f=""+stringify_formula(val[0],range,lastcell,supbooks,opts)}}break;case"LabelSst":temp_val=make_cell(sst[val.isst].t,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Blank":if(options.sheetStubs){temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],t:"z"};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"MulBlank":if(options.sheetStubs){for(var _j=val.c;_j<=val.C;++_j){var _ixfe=val.ixfe[_j-val.c];temp_val={ixfe:_ixfe,XF:XFs[_ixfe],t:"z"};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:_j,r:val.r},temp_val,options)}}break;case"RString":;case"Label":;case"BIFF2STR":temp_val=make_cell(val.val,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Dimensions":{if(file_depth===1)range=val}break;case"SST":{sst=val}break;case"Format":{SSF.load(val[1],val[0])}break;case"BIFF2FORMAT":{BIFF2FmtTable[BIFF2Fmt++]=val;for(var b2idx=0;b2idx=163)SSF.load(val,BIFF2Fmt+163)}break;case"MergeCells":mergecells=mergecells.concat(val);break;case"Obj":objects[val.cmo[0]]=opts.lastobj=val;break;case"TxO":opts.lastobj.TxO=val;break;case"ImData":opts.lastobj.ImData=val;break;case"HLink":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC){cc=options.dense?(out[rngR]||[])[rngC]:out[encode_cell({c:rngC,r:rngR})];if(cc)cc.l=val[1]}}break;case"HLinkTooltip":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC){cc=options.dense?(out[rngR]||[])[rngC]:out[encode_cell({c:rngC,r:rngR})];if(cc)cc.l.Tooltip=val[1]}}break;case"Note":{if(opts.biff<=5&&opts.biff>=2)break;cc=options.dense?(out[val[0].r]||[])[val[0].c]:out[encode_cell(val[0])];var noteobj=objects[val[2]];if(!cc)break;if(!cc.c)cc.c=[];cmnt={a:val[1],t:noteobj.TxO.t};cc.c.push(cmnt)}break;default:switch(R.n){case"ClrtClient":break;case"XFExt":update_xfext(XFs[val.ixfe],val.ext);break;case"DefColWidth":defwidth=val;break;case"DefaultRowHeight":defheight=val[1];break;case"ColInfo":{if(!opts.cellStyles)break;while(val.e>=val.s){colinfo[val.e--]={width:val.w/256};if(!seencol){seencol=true;find_mdw_colw(val.w/256)}process_col(colinfo[val.e+1])}}break;case"Row":{var rowobj={};if(val.level!=null){rowinfo[val.r]=rowobj;rowobj.level=val.level}if(val.hidden){rowinfo[val.r]=rowobj;rowobj.hidden=true}if(val.hpt){rowinfo[val.r]=rowobj;rowobj.hpt=val.hpt;rowobj.hpx=pt2px(val.hpt)}}break;case"LeftMargin":;case"RightMargin":;case"TopMargin":;case"BottomMargin":if(!out["!margins"])default_margins(out["!margins"]={});out["!margins"][Rn.slice(0,-6).toLowerCase()]=val;break;case"Setup":if(!out["!margins"])default_margins(out["!margins"]={});out["!margins"].header=val.header;out["!margins"].footer=val.footer;break;case"Header":break;case"Footer":break;case"HCenter":break;case"VCenter":break;case"Pls":break;case"GCW":break;case"LHRecord":break;case"DBCell":break;case"EntExU2":break;case"SxView":break;case"Sxvd":break;case"SXVI":break;case"SXVDEx":break;case"SxIvd":break;case"SXDI":break;case"SXLI":break;case"SXEx":break;case"QsiSXTag":break;case"Selection":break;case"Feat":break;case"FeatHdr":;case"FeatHdr11":break;case"Feature11":;case"Feature12":;case"List12":break;case"Country":country=val;break;case"RecalcId":break;case"DxGCol":break;case"Fbi":;case"Fbi2":;case"GelFrame":break;case"Font":break;case"XFCRC":break;case"Style":break;case"StyleExt":break;case"Palette":palette=val;break;case"Theme":break;case"ScenarioProtect":break;case"ObjProtect":break;case"CondFmt12":break;case"Table":break;case"TableStyles":break;case"TableStyle":break;case"TableStyleElement":break;case"SXStreamID":break;case"SXVS":break;case"DConRef":break;case"SXAddl":break;case"DConBin":break;case"DConName":break;case"SXPI":break;case"SxFormat":break;case"SxSelect":break;case"SxRule":break;case"SxFilt":break;case"SxItm":break;case"SxDXF":break;case"ScenMan":break;case"DCon":break;case"CellWatch":break;case"PrintRowCol":break;case"PrintGrid":break;case"PrintSize":break;case"XCT":break;case"CRN":break;case"Scl":{}break;case"SheetExt":{}break;case"SheetExtOptional":{}break;case"ObNoMacros":{}break;case"ObProj":{}break;case"CodeName":{}break;case"GUIDTypeLib":{}break;case"WOpt":break;case"PhoneticInfo":break;case"OleObjectSize":break;case"DXF":;case"DXFN":;case"DXFN12":;case"DXFN12List":;case"DXFN12NoCB":break;case"Dv":;case"DVal":break;case"BRAI":;case"Series":;case"SeriesText":break;case"DConn":break;case"DbOrParamQry":break;case"DBQueryExt":break;case"IFmtRecord":break;case"CondFmt":;case"CF":;case"CF12":;case"CFEx":break;case"Excel9File":break;case"Units":break;case"InterfaceHdr":;case"Mms":;case"InterfaceEnd":;case"DSF":;case"BuiltInFnGroupCount":break;case"Window1":;case"Window2":;case"HideObj":;case"GridSet":;case"Guts":;case"UserBView":;case"UserSViewBegin":;case"UserSViewEnd":;case"Pane":break;default:switch(R.n){case"Dat":;case"Begin":;case"End":;case"StartBlock":;case"EndBlock":;case"Frame":;case"Area":;case"Axis":;case"AxisLine":;case"Tick":break;case"AxesUsed":;case"CrtLayout12":;case"CrtLayout12A":;case"CrtLink":;case"CrtLine":;case"CrtMlFrt":;case"CrtMlFrtContinue":break;case"LineFormat":;case"AreaFormat":;case"Chart":;case"Chart3d":;case"Chart3DBarShape":;case"ChartFormat":;case"ChartFrtInfo":break;case"PlotArea":;case"PlotGrowth":break;case"SeriesList":;case"SerParent":;case"SerAuxTrend":break;case"DataFormat":;case"SerToCrt":;case"FontX":break;case"CatSerRange":;case"AxcExt":;case"SerFmt":break;case"ShtProps":break;case"DefaultText":;case"Text":;case"CatLab":break;case"DataLabExtContents":break;case"Legend":;case"LegendException":break;case"Pie":;case"Scatter":break;case"PieFormat":;case"MarkerFormat":break;case"StartObject":;case"EndObject":break;case"AlRuns":;case"ObjectLink":break;case"SIIndex":break;case"AttachedLabel":;case"YMult":break;case"Line":;case"Bar":break;case"Surf":break;case"AxisParent":break;case"Pos":break;case"ValueRange":break;case"SXViewEx9":break;case"SXViewLink":break;case"PivotChartBits":break;case"SBaseRef":break;case"TextPropsStream":break;case"LnExt":break;case"MkrExt":break;case"CrtCoopt":break;case"Qsi":;case"Qsif":;case"Qsir":;case"QsiSXTag":break;case"TxtQry":break;case"FilterMode":break;case"AutoFilter":;case"AutoFilterInfo":break;case"AutoFilter12":break;case"DropDownObjIds":break;case"Sort":break;case"SortData":break;case"ShapePropsStream":break;case"MsoDrawing":;case"MsoDrawingGroup":;case"MsoDrawingSelection":break;case"WebPub":;case"AutoWebPub":break;case"HeaderFooter":;case"HFPicture":;case"PLV":;case"HorizontalPageBreaks":;case"VerticalPageBreaks":break;case"Backup":;case"CompressPictures":;case"Compat12":break;case"Continue":;case"ContinueFrt12":break;case"FrtFontList":;case"FrtWrapper":break;default:switch(R.n){case"ExternCount":break;case"TabIdConf":;case"Radar":;case"RadarArea":;case"DropBar":;case"Intl":;case"CoordList":;case"SerAuxErrBar":break;case"BIFF2FONTCLR":;case"BIFF2FMTCNT":;case"BIFF2FONTXTRA":break;case"BIFF2XF":;case"BIFF3XF":;case"BIFF4XF":break;case"BIFF4FMTCNT":;case"BIFF2ROW":;case"BIFF2WINDOW2":break;case"SCENARIO":;case"DConBin":;case"PicF":;case"DataLabExt":;case"Lel":;case"BopPop":;case"BopPopCustom":;case"RealTimeData":;case"Name":break;default:if(options.WTF)throw"Unrecognized Record "+R.n;};};};}}else blob.l+=length}var sheetnamesraw=Object.keys(Directory).sort(function(a,b){return Number(a)-Number(b)}).map(function(x){return Directory[x].name});var sheetnames=sheetnamesraw.slice();wb.Directory=sheetnamesraw;wb.SheetNames=sheetnamesraw;if(!options.bookSheets)wb.Sheets=Sheets;if(wb.Sheets)FilterDatabases.forEach(function(r,i){wb.Sheets[wb.SheetNames[i]]["!autofilter"]=r});wb.Preamble=Preamble;wb.Strings=sst;wb.SSF=SSF.get_table();if(opts.enc)wb.Encryption=opts.enc;wb.Metadata={};if(country!==undefined)wb.Metadata.Country=country;if(supbooks.names.length>0)Workbook.Names=supbooks.names;wb.Workbook=Workbook;return wb}function parse_props(cfb){var DSI=cfb.find("!DocumentSummaryInformation");if(DSI)try{cfb.DocSummary=parse_PropertySetStream(DSI,DocSummaryPIDDSI)}catch(e){}var SI=cfb.find("!SummaryInformation");if(SI)try{cfb.Summary=parse_PropertySetStream(SI,SummaryPIDSI)}catch(e){}}function parse_xlscfb(cfb,options){if(!options)options={};fix_read_opts(options);reset_cp();var CompObj,Summary,Workbook;if(cfb.FullPaths){CompObj=cfb.find("!CompObj");Summary=cfb.find("!SummaryInformation");Workbook=cfb.find("/Workbook")}else{prep_blob(cfb,0);Workbook={content:cfb}}if(!Workbook)Workbook=cfb.find("/Book");var CompObjP,SummaryP,WorkbookP;if(CompObj)CompObjP=parse_compobj(CompObj);if(options.bookProps&&!options.bookSheets)WorkbookP={};else{if(Workbook)WorkbookP=parse_workbook(Workbook.content,options,!!Workbook.find);else if(cfb.find("PerfectOffice_MAIN"))WorkbookP=WK_.to_workbook(cfb.find("PerfectOffice_MAIN").content,options);else if(cfb.find("NativeContent_MAIN"))WorkbookP=WK_.to_workbook(cfb.find("NativeContent_MAIN").content,options);else throw new Error("Cannot find Workbook stream")}if(cfb.FullPaths)parse_props(cfb);var props={};for(var y in cfb.Summary)props[y]=cfb.Summary[y];for(y in cfb.DocSummary)props[y]=cfb.DocSummary[y];WorkbookP.Props=WorkbookP.Custprops=props;if(options.bookFiles)WorkbookP.cfb=cfb;return WorkbookP}var XLSBRecordEnum={0:{n:"BrtRowHdr",f:parse_BrtRowHdr},1:{n:"BrtCellBlank",f:parse_BrtCellBlank},2:{n:"BrtCellRk",f:parse_BrtCellRk},3:{n:"BrtCellError",f:parse_BrtCellError},4:{n:"BrtCellBool",f:parse_BrtCellBool},5:{n:"BrtCellReal",f:parse_BrtCellReal},6:{n:"BrtCellSt",f:parse_BrtCellSt},7:{n:"BrtCellIsst",f:parse_BrtCellIsst},8:{n:"BrtFmlaString",f:parse_BrtFmlaString},9:{n:"BrtFmlaNum",f:parse_BrtFmlaNum},10:{n:"BrtFmlaBool",f:parse_BrtFmlaBool},11:{n:"BrtFmlaError",f:parse_BrtFmlaError},16:{n:"BrtFRTArchID$",f:parse_BrtFRTArchID$},19:{n:"BrtSSTItem",f:parse_RichStr},20:{n:"BrtPCDIMissing",f:parsenoop},21:{n:"BrtPCDINumber",f:parsenoop},22:{n:"BrtPCDIBoolean",f:parsenoop},23:{n:"BrtPCDIError",f:parsenoop},24:{n:"BrtPCDIString",f:parsenoop},25:{n:"BrtPCDIDatetime",f:parsenoop},26:{n:"BrtPCDIIndex",f:parsenoop},27:{n:"BrtPCDIAMissing",f:parsenoop},28:{n:"BrtPCDIANumber",f:parsenoop},29:{n:"BrtPCDIABoolean",f:parsenoop},30:{n:"BrtPCDIAError",f:parsenoop},31:{n:"BrtPCDIAString",f:parsenoop},32:{n:"BrtPCDIADatetime",f:parsenoop},33:{n:"BrtPCRRecord",f:parsenoop},34:{n:"BrtPCRRecordDt",f:parsenoop},35:{n:"BrtFRTBegin",f:parsenoop},36:{n:"BrtFRTEnd",f:parsenoop},37:{n:"BrtACBegin",f:parsenoop},38:{n:"BrtACEnd",f:parsenoop},39:{n:"BrtName",f:parse_BrtName},40:{n:"BrtIndexRowBlock",f:parsenoop},42:{n:"BrtIndexBlock",f:parsenoop},43:{n:"BrtFont",f:parse_BrtFont},44:{n:"BrtFmt",f:parse_BrtFmt},45:{n:"BrtFill",f:parsenoop},46:{n:"BrtBorder",f:parsenoop},47:{n:"BrtXF",f:parse_BrtXF},48:{n:"BrtStyle",f:parsenoop},49:{n:"BrtCellMeta",f:parsenoop},50:{n:"BrtValueMeta",f:parsenoop},51:{n:"BrtMdb",f:parsenoop},52:{n:"BrtBeginFmd",f:parsenoop},53:{n:"BrtEndFmd",f:parsenoop},54:{n:"BrtBeginMdx",f:parsenoop},55:{n:"BrtEndMdx",f:parsenoop},56:{n:"BrtBeginMdxTuple",f:parsenoop},57:{n:"BrtEndMdxTuple",f:parsenoop},58:{n:"BrtMdxMbrIstr",f:parsenoop},59:{n:"BrtStr",f:parsenoop},60:{n:"BrtColInfo",f:parse_ColInfo},62:{n:"BrtCellRString",f:parsenoop},63:{n:"BrtCalcChainItem$",f:parse_BrtCalcChainItem$},64:{n:"BrtDVal",f:parsenoop},65:{n:"BrtSxvcellNum",f:parsenoop},66:{n:"BrtSxvcellStr",f:parsenoop},67:{n:"BrtSxvcellBool",f:parsenoop},68:{n:"BrtSxvcellErr",f:parsenoop},69:{n:"BrtSxvcellDate",f:parsenoop},70:{n:"BrtSxvcellNil",f:parsenoop},128:{n:"BrtFileVersion",f:parsenoop},129:{n:"BrtBeginSheet",f:parsenoop},130:{n:"BrtEndSheet",f:parsenoop},131:{n:"BrtBeginBook",f:parsenoop,p:0},132:{n:"BrtEndBook",f:parsenoop},133:{n:"BrtBeginWsViews",f:parsenoop},134:{n:"BrtEndWsViews",f:parsenoop},135:{n:"BrtBeginBookViews",f:parsenoop},136:{n:"BrtEndBookViews",f:parsenoop},137:{n:"BrtBeginWsView",f:parsenoop},138:{n:"BrtEndWsView",f:parsenoop},139:{n:"BrtBeginCsViews",f:parsenoop},140:{n:"BrtEndCsViews",f:parsenoop},141:{n:"BrtBeginCsView",f:parsenoop},142:{n:"BrtEndCsView",f:parsenoop},143:{n:"BrtBeginBundleShs",f:parsenoop},144:{n:"BrtEndBundleShs",f:parsenoop},145:{n:"BrtBeginSheetData",f:parsenoop},146:{n:"BrtEndSheetData",f:parsenoop},147:{n:"BrtWsProp",f:parse_BrtWsProp},148:{n:"BrtWsDim",f:parse_BrtWsDim,p:16},151:{n:"BrtPane",f:parsenoop},152:{n:"BrtSel",f:parsenoop},153:{n:"BrtWbProp",f:parse_BrtWbProp},154:{n:"BrtWbFactoid",f:parsenoop},155:{n:"BrtFileRecover",f:parsenoop},156:{n:"BrtBundleSh",f:parse_BrtBundleSh},157:{n:"BrtCalcProp",f:parsenoop},158:{n:"BrtBookView",f:parsenoop},159:{n:"BrtBeginSst",f:parse_BrtBeginSst},160:{n:"BrtEndSst",f:parsenoop},161:{n:"BrtBeginAFilter",f:parse_UncheckedRfX},162:{n:"BrtEndAFilter",f:parsenoop},163:{n:"BrtBeginFilterColumn",f:parsenoop},164:{n:"BrtEndFilterColumn",f:parsenoop},165:{n:"BrtBeginFilters",f:parsenoop},166:{n:"BrtEndFilters",f:parsenoop},167:{n:"BrtFilter",f:parsenoop},168:{n:"BrtColorFilter",f:parsenoop},169:{n:"BrtIconFilter",f:parsenoop},170:{n:"BrtTop10Filter",f:parsenoop},171:{n:"BrtDynamicFilter",f:parsenoop},172:{n:"BrtBeginCustomFilters",f:parsenoop},173:{n:"BrtEndCustomFilters",f:parsenoop},174:{n:"BrtCustomFilter",f:parsenoop},175:{n:"BrtAFilterDateGroupItem",f:parsenoop},176:{n:"BrtMergeCell",f:parse_BrtMergeCell},177:{n:"BrtBeginMergeCells",f:parsenoop},178:{n:"BrtEndMergeCells",f:parsenoop},179:{n:"BrtBeginPivotCacheDef",f:parsenoop},180:{n:"BrtEndPivotCacheDef",f:parsenoop},181:{n:"BrtBeginPCDFields",f:parsenoop},182:{n:"BrtEndPCDFields",f:parsenoop},183:{n:"BrtBeginPCDField",f:parsenoop},184:{n:"BrtEndPCDField",f:parsenoop},185:{n:"BrtBeginPCDSource",f:parsenoop},186:{n:"BrtEndPCDSource",f:parsenoop},187:{n:"BrtBeginPCDSRange",f:parsenoop},188:{n:"BrtEndPCDSRange",f:parsenoop},189:{n:"BrtBeginPCDFAtbl",f:parsenoop},190:{n:"BrtEndPCDFAtbl",f:parsenoop},191:{n:"BrtBeginPCDIRun",f:parsenoop},192:{n:"BrtEndPCDIRun",f:parsenoop},193:{n:"BrtBeginPivotCacheRecords",f:parsenoop},194:{n:"BrtEndPivotCacheRecords",f:parsenoop},195:{n:"BrtBeginPCDHierarchies",f:parsenoop},196:{n:"BrtEndPCDHierarchies",f:parsenoop},197:{n:"BrtBeginPCDHierarchy",f:parsenoop},198:{n:"BrtEndPCDHierarchy",f:parsenoop},199:{n:"BrtBeginPCDHFieldsUsage",f:parsenoop},200:{n:"BrtEndPCDHFieldsUsage",f:parsenoop},201:{n:"BrtBeginExtConnection",f:parsenoop},202:{n:"BrtEndExtConnection",f:parsenoop},203:{n:"BrtBeginECDbProps",f:parsenoop},204:{n:"BrtEndECDbProps",f:parsenoop},205:{n:"BrtBeginECOlapProps",f:parsenoop},206:{n:"BrtEndECOlapProps",f:parsenoop},207:{n:"BrtBeginPCDSConsol",f:parsenoop},208:{n:"BrtEndPCDSConsol",f:parsenoop},209:{n:"BrtBeginPCDSCPages",f:parsenoop},210:{n:"BrtEndPCDSCPages",f:parsenoop},211:{n:"BrtBeginPCDSCPage",f:parsenoop},212:{n:"BrtEndPCDSCPage",f:parsenoop},213:{n:"BrtBeginPCDSCPItem",f:parsenoop},214:{n:"BrtEndPCDSCPItem",f:parsenoop},215:{n:"BrtBeginPCDSCSets",f:parsenoop},216:{n:"BrtEndPCDSCSets",f:parsenoop},217:{n:"BrtBeginPCDSCSet",f:parsenoop},218:{n:"BrtEndPCDSCSet",f:parsenoop},219:{n:"BrtBeginPCDFGroup",f:parsenoop},220:{n:"BrtEndPCDFGroup",f:parsenoop},221:{n:"BrtBeginPCDFGItems",f:parsenoop},222:{n:"BrtEndPCDFGItems",f:parsenoop},223:{n:"BrtBeginPCDFGRange",f:parsenoop},224:{n:"BrtEndPCDFGRange",f:parsenoop},225:{n:"BrtBeginPCDFGDiscrete",f:parsenoop},226:{n:"BrtEndPCDFGDiscrete",f:parsenoop},227:{n:"BrtBeginPCDSDTupleCache",f:parsenoop},228:{n:"BrtEndPCDSDTupleCache",f:parsenoop},229:{n:"BrtBeginPCDSDTCEntries",f:parsenoop},230:{n:"BrtEndPCDSDTCEntries",f:parsenoop},231:{n:"BrtBeginPCDSDTCEMembers",f:parsenoop},232:{n:"BrtEndPCDSDTCEMembers",f:parsenoop},233:{n:"BrtBeginPCDSDTCEMember",f:parsenoop},234:{n:"BrtEndPCDSDTCEMember",f:parsenoop},235:{n:"BrtBeginPCDSDTCQueries",f:parsenoop},236:{n:"BrtEndPCDSDTCQueries",f:parsenoop},237:{n:"BrtBeginPCDSDTCQuery",f:parsenoop},238:{n:"BrtEndPCDSDTCQuery",f:parsenoop},239:{n:"BrtBeginPCDSDTCSets",f:parsenoop},240:{n:"BrtEndPCDSDTCSets",f:parsenoop},241:{n:"BrtBeginPCDSDTCSet",f:parsenoop},242:{n:"BrtEndPCDSDTCSet",f:parsenoop},243:{n:"BrtBeginPCDCalcItems",f:parsenoop},244:{n:"BrtEndPCDCalcItems",f:parsenoop},245:{n:"BrtBeginPCDCalcItem",f:parsenoop},246:{n:"BrtEndPCDCalcItem",f:parsenoop},247:{n:"BrtBeginPRule",f:parsenoop},248:{n:"BrtEndPRule",f:parsenoop},249:{n:"BrtBeginPRFilters",f:parsenoop},250:{n:"BrtEndPRFilters",f:parsenoop},251:{n:"BrtBeginPRFilter",f:parsenoop},252:{n:"BrtEndPRFilter",f:parsenoop},253:{n:"BrtBeginPNames",f:parsenoop},254:{n:"BrtEndPNames",f:parsenoop},255:{n:"BrtBeginPName",f:parsenoop},256:{n:"BrtEndPName",f:parsenoop},257:{n:"BrtBeginPNPairs",f:parsenoop},258:{n:"BrtEndPNPairs",f:parsenoop},259:{n:"BrtBeginPNPair",f:parsenoop},260:{n:"BrtEndPNPair",f:parsenoop},261:{n:"BrtBeginECWebProps",f:parsenoop},262:{n:"BrtEndECWebProps",f:parsenoop},263:{n:"BrtBeginEcWpTables",f:parsenoop},264:{n:"BrtEndECWPTables",f:parsenoop},265:{n:"BrtBeginECParams",f:parsenoop},266:{n:"BrtEndECParams",f:parsenoop},267:{n:"BrtBeginECParam",f:parsenoop},268:{n:"BrtEndECParam",f:parsenoop},269:{n:"BrtBeginPCDKPIs",f:parsenoop},270:{n:"BrtEndPCDKPIs",f:parsenoop},271:{n:"BrtBeginPCDKPI",f:parsenoop},272:{n:"BrtEndPCDKPI",f:parsenoop},273:{n:"BrtBeginDims",f:parsenoop},274:{n:"BrtEndDims",f:parsenoop},275:{n:"BrtBeginDim",f:parsenoop},276:{n:"BrtEndDim",f:parsenoop},277:{n:"BrtIndexPartEnd",f:parsenoop},278:{n:"BrtBeginStyleSheet",f:parsenoop},279:{n:"BrtEndStyleSheet",f:parsenoop},280:{n:"BrtBeginSXView",f:parsenoop},281:{n:"BrtEndSXVI",f:parsenoop},282:{n:"BrtBeginSXVI",f:parsenoop},283:{n:"BrtBeginSXVIs",f:parsenoop},284:{n:"BrtEndSXVIs",f:parsenoop},285:{n:"BrtBeginSXVD",f:parsenoop},286:{n:"BrtEndSXVD",f:parsenoop},287:{n:"BrtBeginSXVDs",f:parsenoop},288:{n:"BrtEndSXVDs",f:parsenoop},289:{n:"BrtBeginSXPI",f:parsenoop},290:{n:"BrtEndSXPI",f:parsenoop},291:{n:"BrtBeginSXPIs",f:parsenoop},292:{n:"BrtEndSXPIs",f:parsenoop},293:{n:"BrtBeginSXDI",f:parsenoop},294:{n:"BrtEndSXDI",f:parsenoop},295:{n:"BrtBeginSXDIs",f:parsenoop},296:{n:"BrtEndSXDIs",f:parsenoop},297:{n:"BrtBeginSXLI",f:parsenoop},298:{n:"BrtEndSXLI",f:parsenoop},299:{n:"BrtBeginSXLIRws",f:parsenoop},300:{n:"BrtEndSXLIRws",f:parsenoop},301:{n:"BrtBeginSXLICols",f:parsenoop},302:{n:"BrtEndSXLICols",f:parsenoop},303:{n:"BrtBeginSXFormat",f:parsenoop},304:{n:"BrtEndSXFormat",f:parsenoop},305:{n:"BrtBeginSXFormats",f:parsenoop},306:{n:"BrtEndSxFormats",f:parsenoop},307:{n:"BrtBeginSxSelect",f:parsenoop},308:{n:"BrtEndSxSelect",f:parsenoop},309:{n:"BrtBeginISXVDRws",f:parsenoop},310:{n:"BrtEndISXVDRws",f:parsenoop},311:{n:"BrtBeginISXVDCols",f:parsenoop},312:{n:"BrtEndISXVDCols",f:parsenoop},313:{n:"BrtEndSXLocation",f:parsenoop},314:{n:"BrtBeginSXLocation",f:parsenoop},315:{n:"BrtEndSXView",f:parsenoop},316:{n:"BrtBeginSXTHs",f:parsenoop},317:{n:"BrtEndSXTHs",f:parsenoop},318:{n:"BrtBeginSXTH",f:parsenoop},319:{n:"BrtEndSXTH",f:parsenoop},320:{n:"BrtBeginISXTHRws",f:parsenoop},321:{n:"BrtEndISXTHRws",f:parsenoop},322:{n:"BrtBeginISXTHCols",f:parsenoop},323:{n:"BrtEndISXTHCols",f:parsenoop},324:{n:"BrtBeginSXTDMPS",f:parsenoop},325:{n:"BrtEndSXTDMPs",f:parsenoop},326:{n:"BrtBeginSXTDMP",f:parsenoop},327:{n:"BrtEndSXTDMP",f:parsenoop},328:{n:"BrtBeginSXTHItems",f:parsenoop},329:{n:"BrtEndSXTHItems",f:parsenoop},330:{n:"BrtBeginSXTHItem",f:parsenoop},331:{n:"BrtEndSXTHItem",f:parsenoop},332:{n:"BrtBeginMetadata",f:parsenoop},333:{n:"BrtEndMetadata",f:parsenoop},334:{n:"BrtBeginEsmdtinfo",f:parsenoop},335:{n:"BrtMdtinfo",f:parsenoop},336:{n:"BrtEndEsmdtinfo",f:parsenoop},337:{n:"BrtBeginEsmdb",f:parsenoop},338:{n:"BrtEndEsmdb",f:parsenoop},339:{n:"BrtBeginEsfmd",f:parsenoop},340:{n:"BrtEndEsfmd",f:parsenoop},341:{n:"BrtBeginSingleCells",f:parsenoop},342:{n:"BrtEndSingleCells",f:parsenoop},343:{n:"BrtBeginList",f:parsenoop},344:{n:"BrtEndList",f:parsenoop},345:{n:"BrtBeginListCols",f:parsenoop},346:{n:"BrtEndListCols",f:parsenoop},347:{n:"BrtBeginListCol",f:parsenoop},348:{n:"BrtEndListCol",f:parsenoop},349:{n:"BrtBeginListXmlCPr",f:parsenoop},350:{n:"BrtEndListXmlCPr",f:parsenoop},351:{n:"BrtListCCFmla",f:parsenoop},352:{n:"BrtListTrFmla",f:parsenoop},353:{n:"BrtBeginExternals",f:parsenoop},354:{n:"BrtEndExternals",f:parsenoop},355:{n:"BrtSupBookSrc",f:parse_RelID},357:{n:"BrtSupSelf",f:parsenoop},358:{n:"BrtSupSame",f:parsenoop},359:{n:"BrtSupTabs",f:parsenoop},360:{n:"BrtBeginSupBook",f:parsenoop},361:{n:"BrtPlaceholderName",f:parsenoop},362:{n:"BrtExternSheet",f:parsenoop},363:{n:"BrtExternTableStart",f:parsenoop},364:{n:"BrtExternTableEnd",f:parsenoop},366:{n:"BrtExternRowHdr",f:parsenoop},367:{n:"BrtExternCellBlank",f:parsenoop},368:{n:"BrtExternCellReal",f:parsenoop},369:{n:"BrtExternCellBool",f:parsenoop},370:{n:"BrtExternCellError",f:parsenoop},371:{n:"BrtExternCellString",f:parsenoop},372:{n:"BrtBeginEsmdx",f:parsenoop},373:{n:"BrtEndEsmdx",f:parsenoop},374:{n:"BrtBeginMdxSet",f:parsenoop},375:{n:"BrtEndMdxSet",f:parsenoop},376:{n:"BrtBeginMdxMbrProp",f:parsenoop},377:{n:"BrtEndMdxMbrProp",f:parsenoop},378:{n:"BrtBeginMdxKPI",f:parsenoop},379:{n:"BrtEndMdxKPI",f:parsenoop},380:{n:"BrtBeginEsstr",f:parsenoop},381:{n:"BrtEndEsstr",f:parsenoop},382:{n:"BrtBeginPRFItem",f:parsenoop},383:{n:"BrtEndPRFItem",f:parsenoop},384:{n:"BrtBeginPivotCacheIDs",f:parsenoop},385:{n:"BrtEndPivotCacheIDs",f:parsenoop},386:{n:"BrtBeginPivotCacheID",f:parsenoop},387:{n:"BrtEndPivotCacheID",f:parsenoop},388:{n:"BrtBeginISXVIs",f:parsenoop},389:{n:"BrtEndISXVIs",f:parsenoop},390:{n:"BrtBeginColInfos",f:parsenoop},391:{n:"BrtEndColInfos",f:parsenoop},392:{n:"BrtBeginRwBrk",f:parsenoop},393:{n:"BrtEndRwBrk",f:parsenoop},394:{n:"BrtBeginColBrk",f:parsenoop},395:{n:"BrtEndColBrk",f:parsenoop},396:{n:"BrtBrk",f:parsenoop},397:{n:"BrtUserBookView",f:parsenoop},398:{n:"BrtInfo",f:parsenoop},399:{n:"BrtCUsr",f:parsenoop},400:{n:"BrtUsr",f:parsenoop},401:{n:"BrtBeginUsers",f:parsenoop},403:{n:"BrtEOF",f:parsenoop},404:{n:"BrtUCR",f:parsenoop},405:{n:"BrtRRInsDel",f:parsenoop},406:{n:"BrtRREndInsDel",f:parsenoop},407:{n:"BrtRRMove",f:parsenoop},408:{n:"BrtRREndMove",f:parsenoop},409:{n:"BrtRRChgCell",f:parsenoop},410:{n:"BrtRREndChgCell",f:parsenoop},411:{n:"BrtRRHeader",f:parsenoop},412:{n:"BrtRRUserView",f:parsenoop},413:{n:"BrtRRRenSheet",f:parsenoop},414:{n:"BrtRRInsertSh",f:parsenoop},415:{n:"BrtRRDefName",f:parsenoop},416:{n:"BrtRRNote",f:parsenoop},417:{n:"BrtRRConflict",f:parsenoop},418:{n:"BrtRRTQSIF",f:parsenoop},419:{n:"BrtRRFormat",f:parsenoop},420:{n:"BrtRREndFormat",f:parsenoop},421:{n:"BrtRRAutoFmt",f:parsenoop},422:{n:"BrtBeginUserShViews",f:parsenoop},423:{n:"BrtBeginUserShView",f:parsenoop},424:{n:"BrtEndUserShView",f:parsenoop},425:{n:"BrtEndUserShViews",f:parsenoop},426:{n:"BrtArrFmla",f:parse_BrtArrFmla},427:{n:"BrtShrFmla",f:parse_BrtShrFmla},428:{n:"BrtTable",f:parsenoop},429:{n:"BrtBeginExtConnections",f:parsenoop},430:{n:"BrtEndExtConnections",f:parsenoop},431:{n:"BrtBeginPCDCalcMems",f:parsenoop},432:{n:"BrtEndPCDCalcMems",f:parsenoop},433:{n:"BrtBeginPCDCalcMem",f:parsenoop},434:{n:"BrtEndPCDCalcMem",f:parsenoop},435:{n:"BrtBeginPCDHGLevels",f:parsenoop},436:{n:"BrtEndPCDHGLevels",f:parsenoop},437:{n:"BrtBeginPCDHGLevel",f:parsenoop},438:{n:"BrtEndPCDHGLevel",f:parsenoop},439:{n:"BrtBeginPCDHGLGroups",f:parsenoop},440:{n:"BrtEndPCDHGLGroups",f:parsenoop},441:{n:"BrtBeginPCDHGLGroup",f:parsenoop},442:{n:"BrtEndPCDHGLGroup",f:parsenoop},443:{n:"BrtBeginPCDHGLGMembers",f:parsenoop},444:{n:"BrtEndPCDHGLGMembers",f:parsenoop},445:{n:"BrtBeginPCDHGLGMember",f:parsenoop},446:{n:"BrtEndPCDHGLGMember",f:parsenoop},447:{n:"BrtBeginQSI",f:parsenoop},448:{n:"BrtEndQSI",f:parsenoop},449:{n:"BrtBeginQSIR",f:parsenoop},450:{n:"BrtEndQSIR",f:parsenoop},451:{n:"BrtBeginDeletedNames",f:parsenoop},452:{n:"BrtEndDeletedNames",f:parsenoop},453:{n:"BrtBeginDeletedName",f:parsenoop},454:{n:"BrtEndDeletedName",f:parsenoop},455:{n:"BrtBeginQSIFs",f:parsenoop},456:{n:"BrtEndQSIFs",f:parsenoop},457:{n:"BrtBeginQSIF",f:parsenoop},458:{n:"BrtEndQSIF",f:parsenoop},459:{n:"BrtBeginAutoSortScope",f:parsenoop},460:{n:"BrtEndAutoSortScope",f:parsenoop},461:{n:"BrtBeginConditionalFormatting",f:parsenoop},462:{n:"BrtEndConditionalFormatting",f:parsenoop},463:{n:"BrtBeginCFRule",f:parsenoop},464:{n:"BrtEndCFRule",f:parsenoop},465:{n:"BrtBeginIconSet",f:parsenoop},466:{n:"BrtEndIconSet",f:parsenoop},467:{n:"BrtBeginDatabar",f:parsenoop},468:{n:"BrtEndDatabar",f:parsenoop},469:{n:"BrtBeginColorScale",f:parsenoop},470:{n:"BrtEndColorScale",f:parsenoop},471:{n:"BrtCFVO",f:parsenoop},472:{n:"BrtExternValueMeta",f:parsenoop},473:{n:"BrtBeginColorPalette",f:parsenoop},474:{n:"BrtEndColorPalette",f:parsenoop},475:{n:"BrtIndexedColor",f:parsenoop},476:{n:"BrtMargins",f:parse_BrtMargins},477:{n:"BrtPrintOptions",f:parsenoop},478:{n:"BrtPageSetup",f:parsenoop},479:{n:"BrtBeginHeaderFooter",f:parsenoop},480:{n:"BrtEndHeaderFooter",f:parsenoop},481:{n:"BrtBeginSXCrtFormat",f:parsenoop},482:{n:"BrtEndSXCrtFormat",f:parsenoop},483:{n:"BrtBeginSXCrtFormats",f:parsenoop},484:{n:"BrtEndSXCrtFormats",f:parsenoop},485:{n:"BrtWsFmtInfo",f:parsenoop},486:{n:"BrtBeginMgs",f:parsenoop},487:{n:"BrtEndMGs",f:parsenoop},488:{n:"BrtBeginMGMaps",f:parsenoop},489:{n:"BrtEndMGMaps",f:parsenoop},490:{n:"BrtBeginMG",f:parsenoop},491:{n:"BrtEndMG",f:parsenoop},492:{n:"BrtBeginMap",f:parsenoop},493:{n:"BrtEndMap",f:parsenoop},494:{n:"BrtHLink",f:parse_BrtHLink},495:{n:"BrtBeginDCon",f:parsenoop},496:{n:"BrtEndDCon",f:parsenoop},497:{n:"BrtBeginDRefs",f:parsenoop},498:{n:"BrtEndDRefs",f:parsenoop},499:{n:"BrtDRef",f:parsenoop},500:{n:"BrtBeginScenMan",f:parsenoop},501:{n:"BrtEndScenMan",f:parsenoop},502:{n:"BrtBeginSct",f:parsenoop},503:{n:"BrtEndSct",f:parsenoop},504:{n:"BrtSlc",f:parsenoop},505:{n:"BrtBeginDXFs",f:parsenoop},506:{n:"BrtEndDXFs",f:parsenoop},507:{n:"BrtDXF",f:parsenoop},508:{n:"BrtBeginTableStyles",f:parsenoop},509:{n:"BrtEndTableStyles",f:parsenoop},510:{n:"BrtBeginTableStyle",f:parsenoop},511:{n:"BrtEndTableStyle",f:parsenoop},512:{n:"BrtTableStyleElement",f:parsenoop},513:{n:"BrtTableStyleClient",f:parsenoop},514:{n:"BrtBeginVolDeps",f:parsenoop},515:{n:"BrtEndVolDeps",f:parsenoop},516:{n:"BrtBeginVolType",f:parsenoop},517:{n:"BrtEndVolType",f:parsenoop},518:{n:"BrtBeginVolMain",f:parsenoop},519:{n:"BrtEndVolMain",f:parsenoop},520:{n:"BrtBeginVolTopic",f:parsenoop},521:{n:"BrtEndVolTopic",f:parsenoop},522:{n:"BrtVolSubtopic",f:parsenoop},523:{n:"BrtVolRef",f:parsenoop},524:{n:"BrtVolNum",f:parsenoop},525:{n:"BrtVolErr",f:parsenoop},526:{n:"BrtVolStr",f:parsenoop},527:{n:"BrtVolBool",f:parsenoop},528:{n:"BrtBeginCalcChain$",f:parsenoop},529:{n:"BrtEndCalcChain$",f:parsenoop},530:{n:"BrtBeginSortState",f:parsenoop},531:{n:"BrtEndSortState",f:parsenoop},532:{n:"BrtBeginSortCond",f:parsenoop},533:{n:"BrtEndSortCond",f:parsenoop},534:{n:"BrtBookProtection",f:parsenoop},535:{n:"BrtSheetProtection",f:parsenoop},536:{n:"BrtRangeProtection",f:parsenoop},537:{n:"BrtPhoneticInfo",f:parsenoop},538:{n:"BrtBeginECTxtWiz",f:parsenoop},539:{n:"BrtEndECTxtWiz",f:parsenoop},540:{n:"BrtBeginECTWFldInfoLst",f:parsenoop},541:{n:"BrtEndECTWFldInfoLst",f:parsenoop},542:{n:"BrtBeginECTwFldInfo",f:parsenoop},548:{n:"BrtFileSharing",f:parsenoop},549:{n:"BrtOleSize",f:parsenoop},550:{n:"BrtDrawing",f:parse_RelID},551:{n:"BrtLegacyDrawing",f:parsenoop},552:{n:"BrtLegacyDrawingHF",f:parsenoop},553:{n:"BrtWebOpt",f:parsenoop},554:{n:"BrtBeginWebPubItems",f:parsenoop},555:{n:"BrtEndWebPubItems",f:parsenoop},556:{n:"BrtBeginWebPubItem",f:parsenoop},557:{n:"BrtEndWebPubItem",f:parsenoop},558:{n:"BrtBeginSXCondFmt",f:parsenoop},559:{n:"BrtEndSXCondFmt",f:parsenoop},560:{n:"BrtBeginSXCondFmts",f:parsenoop},561:{n:"BrtEndSXCondFmts",f:parsenoop},562:{n:"BrtBkHim",f:parsenoop},564:{n:"BrtColor",f:parsenoop},565:{n:"BrtBeginIndexedColors",f:parsenoop},566:{n:"BrtEndIndexedColors",f:parsenoop},569:{n:"BrtBeginMRUColors",f:parsenoop},570:{n:"BrtEndMRUColors",f:parsenoop},572:{n:"BrtMRUColor",f:parsenoop},573:{n:"BrtBeginDVals",f:parsenoop},574:{n:"BrtEndDVals",f:parsenoop},577:{n:"BrtSupNameStart",f:parsenoop},578:{n:"BrtSupNameValueStart",f:parsenoop},579:{n:"BrtSupNameValueEnd",f:parsenoop},580:{n:"BrtSupNameNum",f:parsenoop},581:{n:"BrtSupNameErr",f:parsenoop},582:{n:"BrtSupNameSt",f:parsenoop},583:{n:"BrtSupNameNil",f:parsenoop},584:{n:"BrtSupNameBool",f:parsenoop},585:{n:"BrtSupNameFmla",f:parsenoop},586:{n:"BrtSupNameBits",f:parsenoop},587:{n:"BrtSupNameEnd",f:parsenoop},588:{n:"BrtEndSupBook",f:parsenoop},589:{n:"BrtCellSmartTagProperty",f:parsenoop},590:{n:"BrtBeginCellSmartTag",f:parsenoop},591:{n:"BrtEndCellSmartTag",f:parsenoop},592:{n:"BrtBeginCellSmartTags",f:parsenoop},593:{n:"BrtEndCellSmartTags",f:parsenoop},594:{n:"BrtBeginSmartTags",f:parsenoop},595:{n:"BrtEndSmartTags",f:parsenoop},596:{n:"BrtSmartTagType",f:parsenoop},597:{n:"BrtBeginSmartTagTypes",f:parsenoop},598:{n:"BrtEndSmartTagTypes",f:parsenoop},599:{n:"BrtBeginSXFilters",f:parsenoop},600:{n:"BrtEndSXFilters",f:parsenoop},601:{n:"BrtBeginSXFILTER",f:parsenoop},602:{n:"BrtEndSXFilter",f:parsenoop},603:{n:"BrtBeginFills",f:parsenoop},604:{n:"BrtEndFills",f:parsenoop},605:{n:"BrtBeginCellWatches",f:parsenoop},606:{n:"BrtEndCellWatches",f:parsenoop},607:{n:"BrtCellWatch",f:parsenoop},608:{n:"BrtBeginCRErrs",f:parsenoop},609:{n:"BrtEndCRErrs",f:parsenoop},610:{n:"BrtCrashRecErr",f:parsenoop},611:{n:"BrtBeginFonts",f:parsenoop},612:{n:"BrtEndFonts",f:parsenoop},613:{n:"BrtBeginBorders",f:parsenoop},614:{n:"BrtEndBorders",f:parsenoop},615:{n:"BrtBeginFmts",f:parsenoop},616:{n:"BrtEndFmts",f:parsenoop},617:{n:"BrtBeginCellXFs",f:parsenoop},618:{n:"BrtEndCellXFs",f:parsenoop},619:{n:"BrtBeginStyles",f:parsenoop},620:{n:"BrtEndStyles",f:parsenoop},625:{n:"BrtBigName",f:parsenoop},626:{n:"BrtBeginCellStyleXFs",f:parsenoop},627:{n:"BrtEndCellStyleXFs",f:parsenoop},628:{n:"BrtBeginComments",f:parsenoop},629:{n:"BrtEndComments",f:parsenoop},630:{n:"BrtBeginCommentAuthors", -f:parsenoop},631:{n:"BrtEndCommentAuthors",f:parsenoop},632:{n:"BrtCommentAuthor",f:parse_BrtCommentAuthor},633:{n:"BrtBeginCommentList",f:parsenoop},634:{n:"BrtEndCommentList",f:parsenoop},635:{n:"BrtBeginComment",f:parse_BrtBeginComment},636:{n:"BrtEndComment",f:parsenoop},637:{n:"BrtCommentText",f:parse_BrtCommentText},638:{n:"BrtBeginOleObjects",f:parsenoop},639:{n:"BrtOleObject",f:parsenoop},640:{n:"BrtEndOleObjects",f:parsenoop},641:{n:"BrtBeginSxrules",f:parsenoop},642:{n:"BrtEndSxRules",f:parsenoop},643:{n:"BrtBeginActiveXControls",f:parsenoop},644:{n:"BrtActiveX",f:parsenoop},645:{n:"BrtEndActiveXControls",f:parsenoop},646:{n:"BrtBeginPCDSDTCEMembersSortBy",f:parsenoop},648:{n:"BrtBeginCellIgnoreECs",f:parsenoop},649:{n:"BrtCellIgnoreEC",f:parsenoop},650:{n:"BrtEndCellIgnoreECs",f:parsenoop},651:{n:"BrtCsProp",f:parsenoop},652:{n:"BrtCsPageSetup",f:parsenoop},653:{n:"BrtBeginUserCsViews",f:parsenoop},654:{n:"BrtEndUserCsViews",f:parsenoop},655:{n:"BrtBeginUserCsView",f:parsenoop},656:{n:"BrtEndUserCsView",f:parsenoop},657:{n:"BrtBeginPcdSFCIEntries",f:parsenoop},658:{n:"BrtEndPCDSFCIEntries",f:parsenoop},659:{n:"BrtPCDSFCIEntry",f:parsenoop},660:{n:"BrtBeginListParts",f:parsenoop},661:{n:"BrtListPart",f:parsenoop},662:{n:"BrtEndListParts",f:parsenoop},663:{n:"BrtSheetCalcProp",f:parsenoop},664:{n:"BrtBeginFnGroup",f:parsenoop},665:{n:"BrtFnGroup",f:parsenoop},666:{n:"BrtEndFnGroup",f:parsenoop},667:{n:"BrtSupAddin",f:parsenoop},668:{n:"BrtSXTDMPOrder",f:parsenoop},669:{n:"BrtCsProtection",f:parsenoop},671:{n:"BrtBeginWsSortMap",f:parsenoop},672:{n:"BrtEndWsSortMap",f:parsenoop},673:{n:"BrtBeginRRSort",f:parsenoop},674:{n:"BrtEndRRSort",f:parsenoop},675:{n:"BrtRRSortItem",f:parsenoop},676:{n:"BrtFileSharingIso",f:parsenoop},677:{n:"BrtBookProtectionIso",f:parsenoop},678:{n:"BrtSheetProtectionIso",f:parsenoop},679:{n:"BrtCsProtectionIso",f:parsenoop},680:{n:"BrtRangeProtectionIso",f:parsenoop},1024:{n:"BrtRwDescent",f:parsenoop},1025:{n:"BrtKnownFonts",f:parsenoop},1026:{n:"BrtBeginSXTupleSet",f:parsenoop},1027:{n:"BrtEndSXTupleSet",f:parsenoop},1028:{n:"BrtBeginSXTupleSetHeader",f:parsenoop},1029:{n:"BrtEndSXTupleSetHeader",f:parsenoop},1030:{n:"BrtSXTupleSetHeaderItem",f:parsenoop},1031:{n:"BrtBeginSXTupleSetData",f:parsenoop},1032:{n:"BrtEndSXTupleSetData",f:parsenoop},1033:{n:"BrtBeginSXTupleSetRow",f:parsenoop},1034:{n:"BrtEndSXTupleSetRow",f:parsenoop},1035:{n:"BrtSXTupleSetRowItem",f:parsenoop},1036:{n:"BrtNameExt",f:parsenoop},1037:{n:"BrtPCDH14",f:parsenoop},1038:{n:"BrtBeginPCDCalcMem14",f:parsenoop},1039:{n:"BrtEndPCDCalcMem14",f:parsenoop},1040:{n:"BrtSXTH14",f:parsenoop},1041:{n:"BrtBeginSparklineGroup",f:parsenoop},1042:{n:"BrtEndSparklineGroup",f:parsenoop},1043:{n:"BrtSparkline",f:parsenoop},1044:{n:"BrtSXDI14",f:parsenoop},1045:{n:"BrtWsFmtInfoEx14",f:parsenoop},1046:{n:"BrtBeginConditionalFormatting14",f:parsenoop},1047:{n:"BrtEndConditionalFormatting14",f:parsenoop},1048:{n:"BrtBeginCFRule14",f:parsenoop},1049:{n:"BrtEndCFRule14",f:parsenoop},1050:{n:"BrtCFVO14",f:parsenoop},1051:{n:"BrtBeginDatabar14",f:parsenoop},1052:{n:"BrtBeginIconSet14",f:parsenoop},1053:{n:"BrtDVal14",f:parsenoop},1054:{n:"BrtBeginDVals14",f:parsenoop},1055:{n:"BrtColor14",f:parsenoop},1056:{n:"BrtBeginSparklines",f:parsenoop},1057:{n:"BrtEndSparklines",f:parsenoop},1058:{n:"BrtBeginSparklineGroups",f:parsenoop},1059:{n:"BrtEndSparklineGroups",f:parsenoop},1061:{n:"BrtSXVD14",f:parsenoop},1062:{n:"BrtBeginSxview14",f:parsenoop},1063:{n:"BrtEndSxview14",f:parsenoop},1066:{n:"BrtBeginPCD14",f:parsenoop},1067:{n:"BrtEndPCD14",f:parsenoop},1068:{n:"BrtBeginExtConn14",f:parsenoop},1069:{n:"BrtEndExtConn14",f:parsenoop},1070:{n:"BrtBeginSlicerCacheIDs",f:parsenoop},1071:{n:"BrtEndSlicerCacheIDs",f:parsenoop},1072:{n:"BrtBeginSlicerCacheID",f:parsenoop},1073:{n:"BrtEndSlicerCacheID",f:parsenoop},1075:{n:"BrtBeginSlicerCache",f:parsenoop},1076:{n:"BrtEndSlicerCache",f:parsenoop},1077:{n:"BrtBeginSlicerCacheDef",f:parsenoop},1078:{n:"BrtEndSlicerCacheDef",f:parsenoop},1079:{n:"BrtBeginSlicersEx",f:parsenoop},1080:{n:"BrtEndSlicersEx",f:parsenoop},1081:{n:"BrtBeginSlicerEx",f:parsenoop},1082:{n:"BrtEndSlicerEx",f:parsenoop},1083:{n:"BrtBeginSlicer",f:parsenoop},1084:{n:"BrtEndSlicer",f:parsenoop},1085:{n:"BrtSlicerCachePivotTables",f:parsenoop},1086:{n:"BrtBeginSlicerCacheOlapImpl",f:parsenoop},1087:{n:"BrtEndSlicerCacheOlapImpl",f:parsenoop},1088:{n:"BrtBeginSlicerCacheLevelsData",f:parsenoop},1089:{n:"BrtEndSlicerCacheLevelsData",f:parsenoop},1090:{n:"BrtBeginSlicerCacheLevelData",f:parsenoop},1091:{n:"BrtEndSlicerCacheLevelData",f:parsenoop},1092:{n:"BrtBeginSlicerCacheSiRanges",f:parsenoop},1093:{n:"BrtEndSlicerCacheSiRanges",f:parsenoop},1094:{n:"BrtBeginSlicerCacheSiRange",f:parsenoop},1095:{n:"BrtEndSlicerCacheSiRange",f:parsenoop},1096:{n:"BrtSlicerCacheOlapItem",f:parsenoop},1097:{n:"BrtBeginSlicerCacheSelections",f:parsenoop},1098:{n:"BrtSlicerCacheSelection",f:parsenoop},1099:{n:"BrtEndSlicerCacheSelections",f:parsenoop},1100:{n:"BrtBeginSlicerCacheNative",f:parsenoop},1101:{n:"BrtEndSlicerCacheNative",f:parsenoop},1102:{n:"BrtSlicerCacheNativeItem",f:parsenoop},1103:{n:"BrtRangeProtection14",f:parsenoop},1104:{n:"BrtRangeProtectionIso14",f:parsenoop},1105:{n:"BrtCellIgnoreEC14",f:parsenoop},1111:{n:"BrtList14",f:parsenoop},1112:{n:"BrtCFIcon",f:parsenoop},1113:{n:"BrtBeginSlicerCachesPivotCacheIDs",f:parsenoop},1114:{n:"BrtEndSlicerCachesPivotCacheIDs",f:parsenoop},1115:{n:"BrtBeginSlicers",f:parsenoop},1116:{n:"BrtEndSlicers",f:parsenoop},1117:{n:"BrtWbProp14",f:parsenoop},1118:{n:"BrtBeginSXEdit",f:parsenoop},1119:{n:"BrtEndSXEdit",f:parsenoop},1120:{n:"BrtBeginSXEdits",f:parsenoop},1121:{n:"BrtEndSXEdits",f:parsenoop},1122:{n:"BrtBeginSXChange",f:parsenoop},1123:{n:"BrtEndSXChange",f:parsenoop},1124:{n:"BrtBeginSXChanges",f:parsenoop},1125:{n:"BrtEndSXChanges",f:parsenoop},1126:{n:"BrtSXTupleItems",f:parsenoop},1128:{n:"BrtBeginSlicerStyle",f:parsenoop},1129:{n:"BrtEndSlicerStyle",f:parsenoop},1130:{n:"BrtSlicerStyleElement",f:parsenoop},1131:{n:"BrtBeginStyleSheetExt14",f:parsenoop},1132:{n:"BrtEndStyleSheetExt14",f:parsenoop},1133:{n:"BrtBeginSlicerCachesPivotCacheID",f:parsenoop},1134:{n:"BrtEndSlicerCachesPivotCacheID",f:parsenoop},1135:{n:"BrtBeginConditionalFormattings",f:parsenoop},1136:{n:"BrtEndConditionalFormattings",f:parsenoop},1137:{n:"BrtBeginPCDCalcMemExt",f:parsenoop},1138:{n:"BrtEndPCDCalcMemExt",f:parsenoop},1139:{n:"BrtBeginPCDCalcMemsExt",f:parsenoop},1140:{n:"BrtEndPCDCalcMemsExt",f:parsenoop},1141:{n:"BrtPCDField14",f:parsenoop},1142:{n:"BrtBeginSlicerStyles",f:parsenoop},1143:{n:"BrtEndSlicerStyles",f:parsenoop},1144:{n:"BrtBeginSlicerStyleElements",f:parsenoop},1145:{n:"BrtEndSlicerStyleElements",f:parsenoop},1146:{n:"BrtCFRuleExt",f:parsenoop},1147:{n:"BrtBeginSXCondFmt14",f:parsenoop},1148:{n:"BrtEndSXCondFmt14",f:parsenoop},1149:{n:"BrtBeginSXCondFmts14",f:parsenoop},1150:{n:"BrtEndSXCondFmts14",f:parsenoop},1152:{n:"BrtBeginSortCond14",f:parsenoop},1153:{n:"BrtEndSortCond14",f:parsenoop},1154:{n:"BrtEndDVals14",f:parsenoop},1155:{n:"BrtEndIconSet14",f:parsenoop},1156:{n:"BrtEndDatabar14",f:parsenoop},1157:{n:"BrtBeginColorScale14",f:parsenoop},1158:{n:"BrtEndColorScale14",f:parsenoop},1159:{n:"BrtBeginSxrules14",f:parsenoop},1160:{n:"BrtEndSxrules14",f:parsenoop},1161:{n:"BrtBeginPRule14",f:parsenoop},1162:{n:"BrtEndPRule14",f:parsenoop},1163:{n:"BrtBeginPRFilters14",f:parsenoop},1164:{n:"BrtEndPRFilters14",f:parsenoop},1165:{n:"BrtBeginPRFilter14",f:parsenoop},1166:{n:"BrtEndPRFilter14",f:parsenoop},1167:{n:"BrtBeginPRFItem14",f:parsenoop},1168:{n:"BrtEndPRFItem14",f:parsenoop},1169:{n:"BrtBeginCellIgnoreECs14",f:parsenoop},1170:{n:"BrtEndCellIgnoreECs14",f:parsenoop},1171:{n:"BrtDxf14",f:parsenoop},1172:{n:"BrtBeginDxF14s",f:parsenoop},1173:{n:"BrtEndDxf14s",f:parsenoop},1177:{n:"BrtFilter14",f:parsenoop},1178:{n:"BrtBeginCustomFilters14",f:parsenoop},1180:{n:"BrtCustomFilter14",f:parsenoop},1181:{n:"BrtIconFilter14",f:parsenoop},1182:{n:"BrtPivotCacheConnectionName",f:parsenoop},2048:{n:"BrtBeginDecoupledPivotCacheIDs",f:parsenoop},2049:{n:"BrtEndDecoupledPivotCacheIDs",f:parsenoop},2050:{n:"BrtDecoupledPivotCacheID",f:parsenoop},2051:{n:"BrtBeginPivotTableRefs",f:parsenoop},2052:{n:"BrtEndPivotTableRefs",f:parsenoop},2053:{n:"BrtPivotTableRef",f:parsenoop},2054:{n:"BrtSlicerCacheBookPivotTables",f:parsenoop},2055:{n:"BrtBeginSxvcells",f:parsenoop},2056:{n:"BrtEndSxvcells",f:parsenoop},2057:{n:"BrtBeginSxRow",f:parsenoop},2058:{n:"BrtEndSxRow",f:parsenoop},2060:{n:"BrtPcdCalcMem15",f:parsenoop},2067:{n:"BrtQsi15",f:parsenoop},2068:{n:"BrtBeginWebExtensions",f:parsenoop},2069:{n:"BrtEndWebExtensions",f:parsenoop},2070:{n:"BrtWebExtension",f:parsenoop},2071:{n:"BrtAbsPath15",f:parsenoop},2072:{n:"BrtBeginPivotTableUISettings",f:parsenoop},2073:{n:"BrtEndPivotTableUISettings",f:parsenoop},2075:{n:"BrtTableSlicerCacheIDs",f:parsenoop},2076:{n:"BrtTableSlicerCacheID",f:parsenoop},2077:{n:"BrtBeginTableSlicerCache",f:parsenoop},2078:{n:"BrtEndTableSlicerCache",f:parsenoop},2079:{n:"BrtSxFilter15",f:parsenoop},2080:{n:"BrtBeginTimelineCachePivotCacheIDs",f:parsenoop},2081:{n:"BrtEndTimelineCachePivotCacheIDs",f:parsenoop},2082:{n:"BrtTimelineCachePivotCacheID",f:parsenoop},2083:{n:"BrtBeginTimelineCacheIDs",f:parsenoop},2084:{n:"BrtEndTimelineCacheIDs",f:parsenoop},2085:{n:"BrtBeginTimelineCacheID",f:parsenoop},2086:{n:"BrtEndTimelineCacheID",f:parsenoop},2087:{n:"BrtBeginTimelinesEx",f:parsenoop},2088:{n:"BrtEndTimelinesEx",f:parsenoop},2089:{n:"BrtBeginTimelineEx",f:parsenoop},2090:{n:"BrtEndTimelineEx",f:parsenoop},2091:{n:"BrtWorkBookPr15",f:parsenoop},2092:{n:"BrtPCDH15",f:parsenoop},2093:{n:"BrtBeginTimelineStyle",f:parsenoop},2094:{n:"BrtEndTimelineStyle",f:parsenoop},2095:{n:"BrtTimelineStyleElement",f:parsenoop},2096:{n:"BrtBeginTimelineStylesheetExt15",f:parsenoop},2097:{n:"BrtEndTimelineStylesheetExt15",f:parsenoop},2098:{n:"BrtBeginTimelineStyles",f:parsenoop},2099:{n:"BrtEndTimelineStyles",f:parsenoop},2100:{n:"BrtBeginTimelineStyleElements",f:parsenoop},2101:{n:"BrtEndTimelineStyleElements",f:parsenoop},2102:{n:"BrtDxf15",f:parsenoop},2103:{n:"BrtBeginDxfs15",f:parsenoop},2104:{n:"brtEndDxfs15",f:parsenoop},2105:{n:"BrtSlicerCacheHideItemsWithNoData",f:parsenoop},2106:{n:"BrtBeginItemUniqueNames",f:parsenoop},2107:{n:"BrtEndItemUniqueNames",f:parsenoop},2108:{n:"BrtItemUniqueName",f:parsenoop},2109:{n:"BrtBeginExtConn15",f:parsenoop},2110:{n:"BrtEndExtConn15",f:parsenoop},2111:{n:"BrtBeginOledbPr15",f:parsenoop},2112:{n:"BrtEndOledbPr15",f:parsenoop},2113:{n:"BrtBeginDataFeedPr15",f:parsenoop},2114:{n:"BrtEndDataFeedPr15",f:parsenoop},2115:{n:"BrtTextPr15",f:parsenoop},2116:{n:"BrtRangePr15",f:parsenoop},2117:{n:"BrtDbCommand15",f:parsenoop},2118:{n:"BrtBeginDbTables15",f:parsenoop},2119:{n:"BrtEndDbTables15",f:parsenoop},2120:{n:"BrtDbTable15",f:parsenoop},2121:{n:"BrtBeginDataModel",f:parsenoop},2122:{n:"BrtEndDataModel",f:parsenoop},2123:{n:"BrtBeginModelTables",f:parsenoop},2124:{n:"BrtEndModelTables",f:parsenoop},2125:{n:"BrtModelTable",f:parsenoop},2126:{n:"BrtBeginModelRelationships",f:parsenoop},2127:{n:"BrtEndModelRelationships",f:parsenoop},2128:{n:"BrtModelRelationship",f:parsenoop},2129:{n:"BrtBeginECTxtWiz15",f:parsenoop},2130:{n:"BrtEndECTxtWiz15",f:parsenoop},2131:{n:"BrtBeginECTWFldInfoLst15",f:parsenoop},2132:{n:"BrtEndECTWFldInfoLst15",f:parsenoop},2133:{n:"BrtBeginECTWFldInfo15",f:parsenoop},2134:{n:"BrtFieldListActiveItem",f:parsenoop},2135:{n:"BrtPivotCacheIdVersion",f:parsenoop},2136:{n:"BrtSXDI15",f:parsenoop},65535:{n:"",f:parsenoop}};var evert_RE=evert_key(XLSBRecordEnum,"n");var XLSRecordEnum={3:{n:"BIFF2NUM",f:parse_BIFF2NUM},4:{n:"BIFF2STR",f:parse_BIFF2STR},6:{n:"Formula",f:parse_Formula},9:{n:"BOF",f:parse_BOF},10:{n:"EOF",f:parse_EOF},12:{n:"CalcCount",f:parse_CalcCount},13:{n:"CalcMode",f:parse_CalcMode},14:{n:"CalcPrecision",f:parse_CalcPrecision},15:{n:"CalcRefMode",f:parse_CalcRefMode},16:{n:"CalcDelta",f:parse_CalcDelta},17:{n:"CalcIter",f:parse_CalcIter},18:{n:"Protect",f:parse_Protect},19:{n:"Password",f:parse_Password},20:{n:"Header",f:parse_Header},21:{n:"Footer",f:parse_Footer},23:{n:"ExternSheet",f:parse_ExternSheet},24:{n:"Lbl",f:parse_Lbl},25:{n:"WinProtect",f:parse_WinProtect},26:{n:"VerticalPageBreaks",f:parse_VerticalPageBreaks},27:{n:"HorizontalPageBreaks",f:parse_HorizontalPageBreaks},28:{n:"Note",f:parse_Note},29:{n:"Selection",f:parse_Selection},34:{n:"Date1904",f:parse_Date1904},35:{n:"ExternName",f:parse_ExternName},38:{n:"LeftMargin",f:parse_LeftMargin},39:{n:"RightMargin",f:parse_RightMargin},40:{n:"TopMargin",f:parse_TopMargin},41:{n:"BottomMargin",f:parse_BottomMargin},42:{n:"PrintRowCol",f:parse_PrintRowCol},43:{n:"PrintGrid",f:parse_PrintGrid},47:{n:"FilePass",f:parse_FilePass},49:{n:"Font",f:parse_Font},51:{n:"PrintSize",f:parse_PrintSize},60:{n:"Continue",f:parse_Continue},61:{n:"Window1",f:parse_Window1},64:{n:"Backup",f:parse_Backup},65:{n:"Pane",f:parse_Pane},66:{n:"CodePage",f:parse_CodePage},77:{n:"Pls",f:parse_Pls},80:{n:"DCon",f:parse_DCon},81:{n:"DConRef",f:parse_DConRef},82:{n:"DConName",f:parse_DConName},85:{n:"DefColWidth",f:parse_DefColWidth},89:{n:"XCT",f:parse_XCT},90:{n:"CRN",f:parse_CRN},91:{n:"FileSharing",f:parse_FileSharing},92:{n:"WriteAccess",f:parse_WriteAccess},93:{n:"Obj",f:parse_Obj},94:{n:"Uncalced",f:parse_Uncalced},95:{n:"CalcSaveRecalc",f:parse_CalcSaveRecalc},96:{n:"Template",f:parse_Template},97:{n:"Intl",f:parse_Intl},99:{n:"ObjProtect",f:parse_ObjProtect},125:{n:"ColInfo",f:parse_ColInfo},128:{n:"Guts",f:parse_Guts},129:{n:"WsBool",f:parse_WsBool},130:{n:"GridSet",f:parse_GridSet},131:{n:"HCenter",f:parse_HCenter},132:{n:"VCenter",f:parse_VCenter},133:{n:"BoundSheet8",f:parse_BoundSheet8},134:{n:"WriteProtect",f:parse_WriteProtect},140:{n:"Country",f:parse_Country},141:{n:"HideObj",f:parse_HideObj},144:{n:"Sort",f:parse_Sort},146:{n:"Palette",f:parse_Palette},151:{n:"Sync",f:parse_Sync},152:{n:"LPr",f:parse_LPr},153:{n:"DxGCol",f:parse_DxGCol},154:{n:"FnGroupName",f:parse_FnGroupName},155:{n:"FilterMode",f:parse_FilterMode},156:{n:"BuiltInFnGroupCount",f:parse_BuiltInFnGroupCount},157:{n:"AutoFilterInfo",f:parse_AutoFilterInfo},158:{n:"AutoFilter",f:parse_AutoFilter},160:{n:"Scl",f:parse_Scl},161:{n:"Setup",f:parse_Setup},174:{n:"ScenMan",f:parse_ScenMan},175:{n:"SCENARIO",f:parse_SCENARIO},176:{n:"SxView",f:parse_SxView},177:{n:"Sxvd",f:parse_Sxvd},178:{n:"SXVI",f:parse_SXVI},180:{n:"SxIvd",f:parse_SxIvd},181:{n:"SXLI",f:parse_SXLI},182:{n:"SXPI",f:parse_SXPI},184:{n:"DocRoute",f:parse_DocRoute},185:{n:"RecipName",f:parse_RecipName},189:{n:"MulRk",f:parse_MulRk},190:{n:"MulBlank",f:parse_MulBlank},193:{n:"Mms",f:parse_Mms},197:{n:"SXDI",f:parse_SXDI},198:{n:"SXDB",f:parse_SXDB},199:{n:"SXFDB",f:parse_SXFDB},200:{n:"SXDBB",f:parse_SXDBB},201:{n:"SXNum",f:parse_SXNum},202:{n:"SxBool",f:parse_SxBool},203:{n:"SxErr",f:parse_SxErr},204:{n:"SXInt",f:parse_SXInt},205:{n:"SXString",f:parse_SXString},206:{n:"SXDtr",f:parse_SXDtr},207:{n:"SxNil",f:parse_SxNil},208:{n:"SXTbl",f:parse_SXTbl},209:{n:"SXTBRGIITM",f:parse_SXTBRGIITM},210:{n:"SxTbpg",f:parse_SxTbpg},211:{n:"ObProj",f:parse_ObProj},213:{n:"SXStreamID",f:parse_SXStreamID},215:{n:"DBCell",f:parse_DBCell},216:{n:"SXRng",f:parse_SXRng},217:{n:"SxIsxoper",f:parse_SxIsxoper},218:{n:"BookBool",f:parse_BookBool},220:{n:"DbOrParamQry",f:parse_DbOrParamQry},221:{n:"ScenarioProtect",f:parse_ScenarioProtect},222:{n:"OleObjectSize",f:parse_OleObjectSize},224:{n:"XF",f:parse_XF},225:{n:"InterfaceHdr",f:parse_InterfaceHdr},226:{n:"InterfaceEnd",f:parse_InterfaceEnd},227:{n:"SXVS",f:parse_SXVS},229:{n:"MergeCells",f:parse_MergeCells},233:{n:"BkHim",f:parse_BkHim},235:{n:"MsoDrawingGroup",f:parse_MsoDrawingGroup},236:{n:"MsoDrawing",f:parse_MsoDrawing},237:{n:"MsoDrawingSelection",f:parse_MsoDrawingSelection},239:{n:"PhoneticInfo",f:parse_PhoneticInfo},240:{n:"SxRule",f:parse_SxRule},241:{n:"SXEx",f:parse_SXEx},242:{n:"SxFilt",f:parse_SxFilt},244:{n:"SxDXF",f:parse_SxDXF},245:{n:"SxItm",f:parse_SxItm},246:{n:"SxName",f:parse_SxName},247:{n:"SxSelect",f:parse_SxSelect},248:{n:"SXPair",f:parse_SXPair},249:{n:"SxFmla",f:parse_SxFmla},251:{n:"SxFormat",f:parse_SxFormat},252:{n:"SST",f:parse_SST},253:{n:"LabelSst",f:parse_LabelSst},255:{n:"ExtSST",f:parse_ExtSST},256:{n:"SXVDEx",f:parse_SXVDEx},259:{n:"SXFormula",f:parse_SXFormula},290:{n:"SXDBEx",f:parse_SXDBEx},311:{n:"RRDInsDel",f:parse_RRDInsDel},312:{n:"RRDHead",f:parse_RRDHead},315:{n:"RRDChgCell",f:parse_RRDChgCell},317:{n:"RRTabId",f:parse_RRTabId},318:{n:"RRDRenSheet",f:parse_RRDRenSheet},319:{n:"RRSort",f:parse_RRSort},320:{n:"RRDMove",f:parse_RRDMove},330:{n:"RRFormat",f:parse_RRFormat},331:{n:"RRAutoFmt",f:parse_RRAutoFmt},333:{n:"RRInsertSh",f:parse_RRInsertSh},334:{n:"RRDMoveBegin",f:parse_RRDMoveBegin},335:{n:"RRDMoveEnd",f:parse_RRDMoveEnd},336:{n:"RRDInsDelBegin",f:parse_RRDInsDelBegin},337:{n:"RRDInsDelEnd",f:parse_RRDInsDelEnd},338:{n:"RRDConflict",f:parse_RRDConflict},339:{n:"RRDDefName",f:parse_RRDDefName},340:{n:"RRDRstEtxp",f:parse_RRDRstEtxp},351:{n:"LRng",f:parse_LRng},352:{n:"UsesELFs",f:parse_UsesELFs},353:{n:"DSF",f:parse_DSF},401:{n:"CUsr",f:parse_CUsr},402:{n:"CbUsr",f:parse_CbUsr},403:{n:"UsrInfo",f:parse_UsrInfo},404:{n:"UsrExcl",f:parse_UsrExcl},405:{n:"FileLock",f:parse_FileLock},406:{n:"RRDInfo",f:parse_RRDInfo},407:{n:"BCUsrs",f:parse_BCUsrs},408:{n:"UsrChk",f:parse_UsrChk},425:{n:"UserBView",f:parse_UserBView},426:{n:"UserSViewBegin",f:parse_UserSViewBegin},427:{n:"UserSViewEnd",f:parse_UserSViewEnd},428:{n:"RRDUserView",f:parse_RRDUserView},429:{n:"Qsi",f:parse_Qsi},430:{n:"SupBook",f:parse_SupBook},431:{n:"Prot4Rev",f:parse_Prot4Rev},432:{n:"CondFmt",f:parse_CondFmt},433:{n:"CF",f:parse_CF},434:{n:"DVal",f:parse_DVal},437:{n:"DConBin",f:parse_DConBin},438:{n:"TxO",f:parse_TxO},439:{n:"RefreshAll",f:parse_RefreshAll},440:{n:"HLink",f:parse_HLink},441:{n:"Lel",f:parse_Lel},442:{n:"CodeName",f:parse_XLSCodeName},443:{n:"SXFDBType",f:parse_SXFDBType},444:{n:"Prot4RevPass",f:parse_Prot4RevPass},445:{n:"ObNoMacros",f:parse_ObNoMacros},446:{n:"Dv",f:parse_Dv},448:{n:"Excel9File",f:parse_Excel9File},449:{n:"RecalcId",f:parse_RecalcId,r:2},450:{n:"EntExU2",f:parse_EntExU2},512:{n:"Dimensions",f:parse_Dimensions},513:{n:"Blank",f:parse_Blank},515:{n:"Number",f:parse_Number},516:{n:"Label",f:parse_Label},517:{n:"BoolErr",f:parse_BoolErr},518:{n:"Formula",f:parse_Formula},519:{n:"String",f:parse_String},520:{n:"Row",f:parse_Row},523:{n:"Index",f:parse_Index},545:{n:"Array",f:parse_Array},549:{n:"DefaultRowHeight",f:parse_DefaultRowHeight},566:{n:"Table",f:parse_Table},574:{n:"Window2",f:parse_Window2},638:{n:"RK",f:parse_RK},659:{n:"Style",f:parse_Style},1030:{n:"Formula",f:parse_Formula},1048:{n:"BigName",f:parse_BigName},1054:{n:"Format",f:parse_Format},1084:{n:"ContinueBigName",f:parse_ContinueBigName},1212:{n:"ShrFmla",f:parse_ShrFmla},2048:{n:"HLinkTooltip",f:parse_HLinkTooltip},2049:{n:"WebPub",f:parse_WebPub},2050:{n:"QsiSXTag",f:parse_QsiSXTag},2051:{n:"DBQueryExt",f:parse_DBQueryExt},2052:{n:"ExtString",f:parse_ExtString},2053:{n:"TxtQry",f:parse_TxtQry},2054:{n:"Qsir",f:parse_Qsir},2055:{n:"Qsif",f:parse_Qsif},2056:{n:"RRDTQSIF",f:parse_RRDTQSIF},2057:{n:"BOF",f:parse_BOF},2058:{n:"OleDbConn",f:parse_OleDbConn},2059:{n:"WOpt",f:parse_WOpt},2060:{n:"SXViewEx",f:parse_SXViewEx},2061:{n:"SXTH",f:parse_SXTH},2062:{n:"SXPIEx",f:parse_SXPIEx},2063:{n:"SXVDTEx",f:parse_SXVDTEx},2064:{n:"SXViewEx9",f:parse_SXViewEx9},2066:{n:"ContinueFrt",f:parse_ContinueFrt},2067:{n:"RealTimeData",f:parse_RealTimeData},2128:{n:"ChartFrtInfo",f:parse_ChartFrtInfo},2129:{n:"FrtWrapper",f:parse_FrtWrapper},2130:{n:"StartBlock",f:parse_StartBlock},2131:{n:"EndBlock",f:parse_EndBlock},2132:{n:"StartObject",f:parse_StartObject},2133:{n:"EndObject",f:parse_EndObject},2134:{n:"CatLab",f:parse_CatLab},2135:{n:"YMult",f:parse_YMult},2136:{n:"SXViewLink",f:parse_SXViewLink},2137:{n:"PivotChartBits",f:parse_PivotChartBits},2138:{n:"FrtFontList",f:parse_FrtFontList},2146:{n:"SheetExt",f:parse_SheetExt},2147:{n:"BookExt",f:parse_BookExt,r:12},2148:{n:"SXAddl",f:parse_SXAddl},2149:{n:"CrErr",f:parse_CrErr},2150:{n:"HFPicture",f:parse_HFPicture},2151:{n:"FeatHdr",f:parse_FeatHdr},2152:{n:"Feat",f:parse_Feat},2154:{n:"DataLabExt",f:parse_DataLabExt},2155:{n:"DataLabExtContents",f:parse_DataLabExtContents},2156:{n:"CellWatch",f:parse_CellWatch},2161:{n:"FeatHdr11",f:parse_FeatHdr11},2162:{n:"Feature11",f:parse_Feature11},2164:{n:"DropDownObjIds",f:parse_DropDownObjIds},2165:{n:"ContinueFrt11",f:parse_ContinueFrt11},2166:{n:"DConn",f:parse_DConn},2167:{n:"List12",f:parse_List12},2168:{n:"Feature12",f:parse_Feature12},2169:{n:"CondFmt12",f:parse_CondFmt12},2170:{n:"CF12",f:parse_CF12},2171:{n:"CFEx",f:parse_CFEx},2172:{n:"XFCRC",f:parse_XFCRC,r:12},2173:{n:"XFExt",f:parse_XFExt,r:12},2174:{n:"AutoFilter12",f:parse_AutoFilter12},2175:{n:"ContinueFrt12",f:parse_ContinueFrt12},2180:{n:"MDTInfo",f:parse_MDTInfo},2181:{n:"MDXStr",f:parse_MDXStr},2182:{n:"MDXTuple",f:parse_MDXTuple},2183:{n:"MDXSet",f:parse_MDXSet},2184:{n:"MDXProp",f:parse_MDXProp},2185:{n:"MDXKPI",f:parse_MDXKPI},2186:{n:"MDB",f:parse_MDB},2187:{n:"PLV",f:parse_PLV},2188:{n:"Compat12",f:parse_Compat12,r:12},2189:{n:"DXF",f:parse_DXF},2190:{n:"TableStyles",f:parse_TableStyles,r:12},2191:{n:"TableStyle",f:parse_TableStyle},2192:{n:"TableStyleElement",f:parse_TableStyleElement},2194:{n:"StyleExt",f:parse_StyleExt},2195:{n:"NamePublish",f:parse_NamePublish},2196:{n:"NameCmt",f:parse_NameCmt,r:12},2197:{n:"SortData",f:parse_SortData},2198:{n:"Theme",f:parse_Theme,r:12},2199:{n:"GUIDTypeLib",f:parse_GUIDTypeLib},2200:{n:"FnGrp12",f:parse_FnGrp12},2201:{n:"NameFnGrp12",f:parse_NameFnGrp12},2202:{n:"MTRSettings",f:parse_MTRSettings,r:12},2203:{n:"CompressPictures",f:parse_CompressPictures},2204:{n:"HeaderFooter",f:parse_HeaderFooter},2205:{n:"CrtLayout12",f:parse_CrtLayout12},2206:{n:"CrtMlFrt",f:parse_CrtMlFrt},2207:{n:"CrtMlFrtContinue",f:parse_CrtMlFrtContinue},2211:{n:"ForceFullCalculation",f:parse_ForceFullCalculation},2212:{n:"ShapePropsStream",f:parse_ShapePropsStream},2213:{n:"TextPropsStream",f:parse_TextPropsStream},2214:{n:"RichTextStream",f:parse_RichTextStream},2215:{n:"CrtLayout12A",f:parse_CrtLayout12A},4097:{n:"Units",f:parse_Units},4098:{n:"Chart",f:parse_Chart},4099:{n:"Series",f:parse_Series},4102:{n:"DataFormat",f:parse_DataFormat},4103:{n:"LineFormat",f:parse_LineFormat},4105:{n:"MarkerFormat",f:parse_MarkerFormat},4106:{n:"AreaFormat",f:parse_AreaFormat},4107:{n:"PieFormat",f:parse_PieFormat},4108:{n:"AttachedLabel",f:parse_AttachedLabel},4109:{n:"SeriesText",f:parse_SeriesText},4116:{n:"ChartFormat",f:parse_ChartFormat},4117:{n:"Legend",f:parse_Legend},4118:{n:"SeriesList",f:parse_SeriesList},4119:{n:"Bar",f:parse_Bar},4120:{n:"Line",f:parse_Line},4121:{n:"Pie",f:parse_Pie},4122:{n:"Area",f:parse_Area},4123:{n:"Scatter",f:parse_Scatter},4124:{n:"CrtLine",f:parse_CrtLine},4125:{n:"Axis",f:parse_Axis},4126:{n:"Tick",f:parse_Tick},4127:{n:"ValueRange",f:parse_ValueRange},4128:{n:"CatSerRange",f:parse_CatSerRange},4129:{n:"AxisLine",f:parse_AxisLine},4130:{n:"CrtLink",f:parse_CrtLink},4132:{n:"DefaultText",f:parse_DefaultText},4133:{n:"Text",f:parse_Text},4134:{n:"FontX",f:parse_FontX},4135:{n:"ObjectLink",f:parse_ObjectLink},4146:{n:"Frame",f:parse_Frame},4147:{n:"Begin",f:parse_Begin},4148:{n:"End",f:parse_End},4149:{n:"PlotArea",f:parse_PlotArea},4154:{n:"Chart3d",f:parse_Chart3d},4156:{n:"PicF",f:parse_PicF},4157:{n:"DropBar",f:parse_DropBar},4158:{n:"Radar",f:parse_Radar},4159:{n:"Surf",f:parse_Surf},4160:{n:"RadarArea",f:parse_RadarArea},4161:{n:"AxisParent",f:parse_AxisParent},4163:{n:"LegendException",f:parse_LegendException},4164:{n:"ShtProps",f:parse_ShtProps},4165:{n:"SerToCrt",f:parse_SerToCrt},4166:{n:"AxesUsed",f:parse_AxesUsed},4168:{n:"SBaseRef",f:parse_SBaseRef},4170:{n:"SerParent",f:parse_SerParent},4171:{n:"SerAuxTrend",f:parse_SerAuxTrend},4174:{n:"IFmtRecord",f:parse_IFmtRecord},4175:{n:"Pos",f:parse_Pos},4176:{n:"AlRuns",f:parse_AlRuns},4177:{n:"BRAI",f:parse_BRAI},4187:{n:"SerAuxErrBar",f:parse_SerAuxErrBar},4188:{n:"ClrtClient",f:parse_ClrtClient},4189:{n:"SerFmt",f:parse_SerFmt},4191:{n:"Chart3DBarShape",f:parse_Chart3DBarShape},4192:{n:"Fbi",f:parse_Fbi},4193:{n:"BopPop",f:parse_BopPop},4194:{n:"AxcExt",f:parse_AxcExt},4195:{n:"Dat",f:parse_Dat},4196:{n:"PlotGrowth",f:parse_PlotGrowth},4197:{n:"SIIndex",f:parse_SIIndex},4198:{n:"GelFrame",f:parse_GelFrame},4199:{n:"BopPopCustom",f:parse_BopPopCustom},4200:{n:"Fbi2",f:parse_Fbi2},0:{n:"Dimensions",f:parse_Dimensions},2:{n:"BIFF2INT",f:parse_BIFF2INT},5:{n:"BoolErr",f:parse_BoolErr},7:{n:"String",f:parse_BIFF2STRING},8:{n:"BIFF2ROW",f:parsenoop},11:{n:"Index",f:parse_Index},22:{n:"ExternCount",f:parsenoop},30:{n:"BIFF2FORMAT",f:parse_BIFF2Format},31:{n:"BIFF2FMTCNT",f:parsenoop},32:{n:"BIFF2COLINFO",f:parsenoop},33:{n:"Array",f:parse_Array},37:{n:"DefaultRowHeight",f:parse_DefaultRowHeight},50:{n:"BIFF2FONTXTRA",f:parse_BIFF2FONTXTRA},62:{n:"BIFF2WINDOW2",f:parsenoop},69:{n:"BIFF2FONTCLR",f:parsenoop},86:{n:"BIFF4FMTCNT",f:parsenoop},126:{n:"RK",f:parsenoop},127:{n:"ImData",f:parse_ImData},135:{n:"Addin",f:parsenoop},136:{n:"Edg",f:parsenoop},137:{n:"Pub",f:parsenoop},145:{n:"Sub",f:parsenoop},148:{n:"LHRecord",f:parsenoop},149:{n:"LHNGraph",f:parsenoop},150:{n:"Sound",f:parsenoop},169:{n:"CoordList",f:parsenoop},171:{n:"GCW",f:parsenoop},188:{n:"ShrFmla",f:parsenoop},194:{n:"AddMenu",f:parsenoop},195:{n:"DelMenu",f:parsenoop},214:{n:"RString",f:parse_RString},223:{n:"UDDesc",f:parsenoop},234:{n:"TabIdConf",f:parsenoop},354:{n:"XL5Modify",f:parsenoop},421:{n:"FileSharing2",f:parsenoop},521:{n:"BOF",f:parse_BOF},536:{n:"Lbl",f:parse_Lbl},547:{n:"ExternName",f:parse_ExternName},561:{n:"Font",f:parsenoop},1033:{n:"BOF",f:parse_BOF},2157:{n:"FeatInfo",f:parsenoop},2163:{n:"FeatInfo11",f:parsenoop},2177:{n:"SXAddl12",f:parsenoop},2240:{n:"AutoWebPub",f:parsenoop},2241:{n:"ListObj",f:parsenoop},2242:{n:"ListField",f:parsenoop},2243:{n:"ListDV",f:parsenoop},2244:{n:"ListCondFmt",f:parsenoop},2245:{n:"ListCF",f:parsenoop},2246:{n:"FMQry",f:parsenoop},2247:{n:"FMSQry",f:parsenoop},2248:{n:"PLV",f:parsenoop},2249:{n:"LnExt",f:parsenoop},2250:{n:"MkrExt",f:parsenoop},2251:{n:"CrtCoopt",f:parsenoop},67:{n:"BIFF2XF",f:parsenoop},579:{n:"BIFF3XF",f:parsenoop},1091:{n:"BIFF4XF",f:parsenoop},29282:{}};function write_biff_rec(ba,t,payload,length){var len=length||(payload||[]).length;var o=ba.next(4+len);o.write_shift(2,t);o.write_shift(2,len);if(len>0&&is_buf(payload))ba.push(payload)}function write_BOF(wb,o){if(o.bookType!="biff2")throw"unsupported BIFF version";var out=new_buf(4);out.write_shift(2,2);out.write_shift(2,16);return out}function write_BIFF2Cell(out,r,c){if(!out)out=new_buf(7);out.write_shift(2,r);out.write_shift(2,c);out.write_shift(1,0);out.write_shift(1,0);out.write_shift(1,0);return out}function write_BIFF2INT(r,c,val){var out=new_buf(9);write_BIFF2Cell(out,r,c);out.write_shift(2,val);return out}function write_BIFF2NUMBER(r,c,val){var out=new_buf(15);write_BIFF2Cell(out,r,c);out.write_shift(8,val,"f");return out}function write_BIFF2BERR(r,c,val,t){var out=new_buf(9);write_BIFF2Cell(out,r,c);if(t=="e"){out.write_shift(1,val);out.write_shift(1,1)}else{out.write_shift(1,val?1:0);out.write_shift(1,0)}return out}function write_BIFF2LABEL(r,c,val){var out=new_buf(8+2*val.length);write_BIFF2Cell(out,r,c);out.write_shift(1,val.length);out.write_shift(val.length,val,"sbcs");return out.l=0&&v<65536)write_biff_rec(ba,2,write_BIFF2INT(R,C,v));else write_biff_rec(ba,3,write_BIFF2NUMBER(R,C,v));return;case"b":;case"e":write_biff_rec(ba,5,write_BIFF2BERR(R,C,cell.v,cell.t));return;case"s":;case"str":write_biff_rec(ba,4,write_BIFF2LABEL(R,C,cell.v));return;}write_biff_rec(ba,1,write_BIFF2Cell(null,R,C))}function write_biff_ws(ba,ws,idx,opts,wb){var dense=Array.isArray(ws);var range=safe_decode_range(ws["!ref"]||"A1"),ref,rr="",cols=[];for(var R=range.s.r;R<=range.e.r;++R){rr=encode_row(R);for(var C=range.s.c;C<=range.e.c;++C){if(R===range.s.r)cols[C]=encode_col(C);ref=cols[C]+rr;var cell=dense?(ws[R]||[])[C]:ws[ref];if(!cell)continue;write_ws_biff_cell(ba,cell,R,C,opts)}}}function write_biff_buf(wb,opts){var o=opts||{};if(DENSE!=null&&o.dense==null)o.dense=DENSE;var ba=buf_array();var idx=0;for(var i=0;i / pair");var rows=str.slice(i,j).split(/(:?]*>)/);var R=-1,C=0,RS=0,CS=0;var range={s:{r:1e7,c:1e7},e:{r:0,c:0}};var merges=[],midx=0;for(i=0;i");for(j=0;j"))>-1)m=m.slice(cc+1);while(m.indexOf(">")>-1)m=m.slice(0,m.lastIndexOf("<"));var tag=parsexmltag(cell.slice(0,cell.indexOf(">")));CS=tag.colspan?+tag.colspan:1;if((RS=+tag.rowspan)>0||CS>1)merges.push({s:{r:R,c:C},e:{r:R+(RS||1)-1,c:C+CS-1}});if(!m.length){C+=CS;continue}m=unescapexml(m).replace(/[\r\n]/g,"");if(range.s.r>R)range.s.r=R;if(range.e.rC)range.s.c=C;if(range.e.c";for(var C=r.s.c;C<=r.e.c;++C){var RS=0,CS=0;for(var j=0;jR||M[j].s.c>C)continue;if(M[j].e.r1)sp.rowspan=RS;if(CS>1)sp.colspan=CS;if(o.editable)sp.contenteditable="true";sp.id="sjs-"+coord;oo.push(writextag("td",w,sp))}var preamble="";return preamble+oo.join("")+""}function make_html_preamble(ws,R,o){var out=[];return out.join("")+""}var _BEGIN='SheetJS Table Export';var _END="";function sheet_to_html(ws,opts,wb){var o=opts||{};var header=o.header!=null?o.header:_BEGIN;var footer=o.footer!=null?o.footer:_END;var out=[header];var r=decode_range(ws["!ref"]);o.dense=Array.isArray(ws);out.push(make_html_preamble(ws,r,o));for(var R=r.s.r;R<=r.e.r;++R)out.push(make_html_row(ws,r,R,o));out.push("
"+footer);return out.join("")}return{to_workbook:html_to_book,to_sheet:html_to_sheet,_row:make_html_row,BEGIN:_BEGIN,END:_END,_preamble:make_html_preamble,from_sheet:sheet_to_html}}();function parse_dom_table(table,_opts){var opts=_opts||{};if(DENSE!=null)opts.dense=DENSE;var ws=opts.dense?[]:{};var rows=table.getElementsByTagName("tr");var range={ -s:{r:0,c:0},e:{r:rows.length-1,c:0}};var merges=[],midx=0;var R=0,_C=0,C=0,RS=0,CS=0;for(;R0||CS>1)merges.push({s:{r:R,c:C},e:{r:R+(RS||1)-1,c:C+CS-1}});var o={t:"s",v:v};if(v!=null&&v.length){if(!isNaN(Number(v)))o={t:"n",v:Number(v)};else if(!isNaN(fuzzydate(v).getDate())){o={t:"d",v:parseDate(v)};if(!opts.cellDates)o={t:"n",v:datenum(o.v)};o.z=opts.dateNF||SSF._table[14]}}if(opts.dense){if(!ws[R])ws[R]=[];ws[R][C]=o}else ws[encode_cell({c:C,r:R})]=o;if(range.e.c/g," ").replace(/<[^>]*>/g,""))};var number_formats={day:["d","dd"],month:["m","mm"],year:["y","yy"],hours:["h","hh"],minutes:["m","mm"],seconds:["s","ss"],"am-pm":["A/P","AM/PM"],"day-of-week":["ddd","dddd"]};return function pcx(d,_opts){var opts=_opts||{};if(DENSE!=null&&opts.dense==null)opts.dense=DENSE;var str=xlml_normalize(d);var state=[],tmp;var tag;var NFtag={name:""},NF="",pidx=0;var sheetag;var rowtag;var Sheets={},SheetNames=[];var ws=opts.dense?[]:{};var Rn,q;var ctag={value:""};var textp="",textpidx=0,textptag;var R=-1,C=-1,range={s:{r:1e6,c:1e7},e:{r:0,c:0}};var number_format_map={};var merges=[],mrange={},mR=0,mC=0;var arrayf=[];var comments=[],comment={};var creator="",creatoridx=0;var rept=1,isstub=false;var i=0;xlmlregex.lastIndex=0;str=str.replace(//gm,"").replace(//gm,"");while(Rn=xlmlregex.exec(str))switch(Rn[3]=Rn[3].replace(/_.*$/,"")){case"table":;case"工作表":if(Rn[1]==="/"){if(range.e.c>=range.s.c&&range.e.r>=range.s.r)ws["!ref"]=encode_range(range);if(merges.length)ws["!merges"]=merges;sheetag.name=utf8read(sheetag["名称"]||sheetag.name);SheetNames.push(sheetag.name);Sheets[sheetag.name]=ws}else if(Rn[0].charAt(Rn[0].length-2)!=="/"){sheetag=parsexmltag(Rn[0],false);R=C=-1;range.s.r=range.s.c=1e7;range.e.r=range.e.c=0;ws=opts.dense?[]:{};merges=[]}break;case"table-row":;case"行":if(Rn[1]==="/")break;rowtag=parsexmltag(Rn[0],false);if(rowtag["行号"])R=rowtag["行号"]-1;else++R;C=-1;break;case"covered-table-cell":++C;if(opts.sheetStubs){if(opts.dense){if(!ws[R])ws[R]=[];ws[R][C]={t:"z"}}else ws[encode_cell({r:R,c:C})]={t:"z"}}break;case"table-cell":;case"数据":if(Rn[0].charAt(Rn[0].length-2)==="/"){ctag=parsexmltag(Rn[0],false);if(ctag["number-columns-repeated"])C+=parseInt(ctag["number-columns-repeated"],10);else++C}else if(Rn[1]!=="/"){++C;rept=1;if(C>range.e.c)range.e.c=C;if(R>range.e.r)range.e.r=R;if(C=arrayf[i][0].s.r&&R<=arrayf[i][0].e.r)if(C>=arrayf[i][0].s.c&&C<=arrayf[i][0].e.c)q.F=arrayf[i][1]}if(ctag["number-columns-spanned"]||ctag["number-rows-spanned"]){mR=parseInt(ctag["number-rows-spanned"],10)||0;mC=parseInt(ctag["number-columns-spanned"],10)||0;mrange={s:{r:R,c:C},e:{r:R+mR-1,c:C+mC-1}};merges.push(mrange)}if(ctag["number-columns-repeated"])rept=parseInt(ctag["number-columns-repeated"],10);switch(q.t){case"boolean":q.t="b";q.v=parsexmlbool(ctag["boolean-value"]);break;case"float":q.t="n";q.v=parseFloat(ctag.value);break;case"percentage":q.t="n";q.v=parseFloat(ctag.value);break;case"currency":q.t="n";q.v=parseFloat(ctag.value);break;case"date":q.t="d";q.v=parseDate(ctag["date-value"]);if(!opts.cellDates){q.t="n";q.v=datenum(q.v)}q.z="m/d/yy";break;case"time":q.t="n";q.v=parse_isodur(ctag["time-value"])/86400;break;case"number":q.t="n";q.v=parseFloat(ctag["数据数值"]);break;default:if(q.t==="string"||q.t==="text"||!q.t){q.t="s";if(ctag["string-value"]!=null)textp=unescapexml(ctag["string-value"])}else throw new Error("Unsupported value type "+q.t);}}else{isstub=false;if(q.t==="s"){q.v=textp||"";isstub=textpidx==0}if(comments.length>0){q.c=comments;comments=[]}if(textp&&opts.cellText!==false)q.w=textp;if(!isstub||opts.sheetStubs){if(!(opts.sheetRows&&opts.sheetRows0)ws[R][++C]=dup(q)}else{ws[encode_cell({r:R,c:C})]=q;while(--rept>0)ws[encode_cell({r:R,c:++C})]=dup(q)}if(range.e.c<=C)range.e.c=C}}else{C+=rept;rept=0}q={};textp=""}break;case"document":;case"document-content":;case"电子表格文档":;case"spreadsheet":;case"主体":;case"scripts":;case"styles":;case"font-face-decls":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].charAt(Rn[0].length-2)!=="/")state.push([Rn[3],true]);break;case"annotation":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp;comment.t=textp;comment.a=creator;comments.push(comment)}else if(Rn[0].charAt(Rn[0].length-2)!=="/"){state.push([Rn[3],false])}creator="";creatoridx=0;textp="";textpidx=0;break;case"creator":if(Rn[1]==="/"){creator=str.slice(creatoridx,Rn.index)}else creatoridx=Rn.index+Rn[0].length;break;case"meta":;case"元数据":;case"settings":;case"config-item-set":;case"config-item-map-indexed":;case"config-item-map-entry":;case"config-item-map-named":;case"shapes":;case"frame":;case"text-box":;case"image":;case"data-pilot-tables":;case"list-style":;case"form":;case"dde-links":;case"event-listeners":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].charAt(Rn[0].length-2)!=="/")state.push([Rn[3],false]);textp="";textpidx=0;break;case"scientific-number":break;case"currency-symbol":break;case"currency-style":break;case"number-style":;case"percentage-style":;case"date-style":;case"time-style":if(Rn[1]==="/"){number_format_map[NFtag.name]=NF;if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].charAt(Rn[0].length-2)!=="/"){NF="";NFtag=parsexmltag(Rn[0],false);state.push([Rn[3],true])}break;case"script":break;case"libraries":break;case"automatic-styles":break;case"master-styles":break;case"default-style":;case"page-layout":break;case"style":break;case"map":break;case"font-face":break;case"paragraph-properties":break;case"table-properties":break;case"table-column-properties":break;case"table-row-properties":break;case"table-cell-properties":break;case"number":switch(state[state.length-1][0]){case"time-style":;case"date-style":tag=parsexmltag(Rn[0],false);NF+=number_formats[Rn[3]][tag.style==="long"?1:0];break;}break;case"fraction":break;case"day":;case"month":;case"year":;case"era":;case"day-of-week":;case"week-of-year":;case"quarter":;case"hours":;case"minutes":;case"seconds":;case"am-pm":switch(state[state.length-1][0]){case"time-style":;case"date-style":tag=parsexmltag(Rn[0],false);NF+=number_formats[Rn[3]][tag.style==="long"?1:0];break;}break;case"boolean-style":break;case"boolean":break;case"text-style":break;case"text":if(Rn[0].slice(-2)==="/>")break;else if(Rn[1]==="/")switch(state[state.length-1][0]){case"number-style":;case"date-style":;case"time-style":NF+=str.slice(pidx,Rn.index);break;}else pidx=Rn.index+Rn[0].length;break;case"text-content":break;case"text-properties":break;case"body":;case"电子表格":break;case"forms":break;case"table-column":break;case"table-row-group":break;case"table-column-group":break;case"null-date":break;case"graphic-properties":break;case"calculation-settings":break;case"named-expressions":break;case"named-range":break;case"named-expression":break;case"sort":break;case"sort-by":break;case"sort-groups":break;case"span":break;case"line-break":break;case"p":;case"文本串":if(Rn[1]==="/")textp=(textp.length>0?textp+"\n":"")+parse_text_p(str.slice(textpidx,Rn.index),textptag);else{textptag=parsexmltag(Rn[0],false);textpidx=Rn.index+Rn[0].length}break;case"database-range":if(Rn[1]==="/")break;try{var AutoFilter=ods_to_csf_range_3D(parsexmltag(Rn[0])["target-range-address"]);Sheets[AutoFilter[0]]["!autofilter"]={ref:AutoFilter[1]}}catch(e){}break;case"s":break;case"date":break;case"object":break;case"title":;case"标题":break;case"desc":break;case"table-source":break;case"iteration":break;case"content-validations":break;case"content-validation":break;case"error-message":break;case"database-ranges":break;case"filter":break;case"filter-and":break;case"filter-or":break;case"filter-condition":break;case"list-level-style-bullet":break;case"list-level-style-number":break;case"list-level-properties":break;case"sender-firstname":;case"sender-lastname":;case"sender-initials":;case"sender-title":;case"sender-position":;case"sender-email":;case"sender-phone-private":;case"sender-fax":;case"sender-company":;case"sender-phone-work":;case"sender-street":;case"sender-city":;case"sender-postal-code":;case"sender-country":;case"sender-state-or-province":;case"author-name":;case"author-initials":;case"chapter":;case"file-name":;case"template-name":;case"sheet-name":break;case"event-listener":break;case"initial-creator":;case"creation-date":;case"generator":;case"document-statistic":;case"user-defined":break;case"config-item":break;case"page-number":break;case"page-count":break;case"time":break;case"data-pilot-table":;case"source-cell-range":;case"source-service":;case"data-pilot-field":;case"data-pilot-level":;case"data-pilot-subtotals":;case"data-pilot-subtotal":;case"data-pilot-members":;case"data-pilot-member":;case"data-pilot-display-info":;case"data-pilot-sort-info":;case"data-pilot-layout-info":;case"data-pilot-field-reference":;case"data-pilot-groups":;case"data-pilot-group":;case"data-pilot-group-member":break;case"rect":break;case"dde-connection-decls":;case"dde-connection-decl":;case"dde-link":;case"dde-source":break;case"properties":break;case"property":break;case"a":break;case"table-protection":break;case"data-pilot-grand-total":break;default:if(Rn[2]==="dc:")break;if(Rn[2]==="draw:")break;if(Rn[2]==="style:")break;if(Rn[2]==="calcext:")break;if(Rn[2]==="loext:")break;if(Rn[2]==="uof:")break;if(Rn[2]==="表:")break;if(Rn[2]==="字:")break;if(opts.WTF)throw new Error(Rn);}var out={Sheets:Sheets,SheetNames:SheetNames};return out}}();function parse_ods(zip,opts){opts=opts||{};var ods=!!safegetzipfile(zip,"objectdata");if(ods)var manifest=parse_manifest(getzipdata(zip,"META-INF/manifest.xml"),opts);var content=getzipstr(zip,"content.xml");if(!content)throw new Error("Missing content.xml in "+(ods?"ODS":"UOF")+" file");return parse_content_xml(ods?content:utf8read(content),opts)}function parse_fods(data,opts){return parse_content_xml(data,opts)}var write_styles_ods=function(){var payload='';return function wso(wb,opts){return payload}}();var write_content_ods=function(){var null_cell_xml=" \n";var covered_cell_xml=" \n";var write_ws=function(ws,wb,i,opts){var o=[];o.push(' \n');var R=0,C=0,range=decode_range(ws["!ref"]);var marr=ws["!merges"]||[],mi=0;var dense=Array.isArray(ws);for(R=0;R\n");for(;R<=range.e.r;++R){o.push(" \n");for(C=0;CC)continue;if(marr[mi].s.r>R)continue;if(marr[mi].e.c\n")}o.push(" \n");return o.join("")};var write_automatic_styles_ods=function(o){o.push(" \n");o.push(' \n');o.push(' \n');o.push(" /\n");o.push(' \n');o.push(" /\n");o.push(" \n");o.push(" \n");o.push(' \n');o.push(" \n")};return function wcx(wb,opts){var o=[XML_HEADER];var attr=wxt_helper({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"});var fods=wxt_helper({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});if(opts.bookType=="fods")o.push("\n");else o.push("\n");write_automatic_styles_ods(o);o.push(" \n");o.push(" \n");for(var i=0;i!=wb.SheetNames.length;++i)o.push(write_ws(wb.Sheets[wb.SheetNames[i]],wb,i,opts));o.push(" \n");o.push(" \n");if(opts.bookType=="fods")o.push("");else o.push("");return o.join("")}}();function write_ods(wb,opts){if(opts.bookType=="fods")return write_content_ods(wb,opts);var zip=new jszip;var f="";var manifest=[];var rdf=[];f="mimetype";zip.file(f,"application/vnd.oasis.opendocument.spreadsheet");f="content.xml";zip.file(f,write_content_ods(wb,opts));manifest.push([f,"text/xml"]);rdf.push([f,"ContentFile"]);f="styles.xml";zip.file(f,write_styles_ods(wb,opts));manifest.push([f,"text/xml"]);rdf.push([f,"StylesFile"]);f="manifest.rdf";zip.file(f,write_rdf(rdf,opts));manifest.push([f,"application/rdf+xml"]);f="meta.xml";zip.file(f,write_meta_ods(wb,opts));manifest.push([f,"text/xml"]);rdf.push([f,"MetadataFile"]);f="META-INF/manifest.xml";zip.file(f,write_manifest(manifest,opts));return zip}function write_obj_str(factory){return function write_str(wb,o){var idx=0;for(var i=0;i-1)return"sheet";if(RELS.CS&&n==RELS.CS)return"chart";if(RELS.DS&&n==RELS.DS)return"dialog";if(RELS.MS&&n==RELS.MS)return"macro";if(!n||!n.length)return"sheet";return n}function safe_parse_wbrels(wbrels,sheets){if(!wbrels)return 0;try{wbrels=sheets.map(function pwbr(w){if(!w.id)w.id=w.strRelID;return[w.name,wbrels["!id"][w.id].Target,get_sheet_type(wbrels["!id"][w.id].Type)]})}catch(e){return null}return!wbrels||wbrels.length===0?null:wbrels}function safe_parse_sheet(zip,path,relsPath,sheet,sheetRels,sheets,stype,opts,wb,themes,styles){try{sheetRels[sheet]=parse_rels(getzipstr(zip,relsPath,true),path);var data=getzipdata(zip,path);switch(stype){case"sheet":sheets[sheet]=parse_ws(data,path,opts,sheetRels[sheet],wb,themes,styles);break;case"chart":var cs=parse_cs(data,path,opts,sheetRels[sheet],wb,themes,styles);sheets[sheet]=cs;if(!cs||!cs["!chart"])break;var dfile=resolve_path(cs["!chart"].Target,path);var drelsp=get_rels_path(dfile);var draw=parse_drawing(getzipstr(zip,dfile,true),parse_rels(getzipstr(zip,drelsp,true),dfile));var chartp=resolve_path(draw,dfile);var crelsp=get_rels_path(chartp);cs=parse_chart(getzipstr(zip,chartp,true),chartp,opts,parse_rels(getzipstr(zip,crelsp,true),chartp),wb,cs);break;case"macro":sheets[sheet]=parse_ms(data,path,opts,sheetRels[sheet],wb,themes,styles);break;case"dialog":sheets[sheet]=parse_ds(data,path,opts,sheetRels[sheet],wb,themes,styles);break;}}catch(e){if(opts.WTF)throw e}}var nodirs=function nodirs(x){return x.slice(-1)!="/"};function parse_zip(zip,opts){make_ssf(SSF);opts=opts||{};fix_read_opts(opts);reset_cp();if(safegetzipfile(zip,"META-INF/manifest.xml"))return parse_ods(zip,opts);if(safegetzipfile(zip,"objectdata.xml"))return parse_ods(zip,opts);var entries=keys(zip.files).filter(nodirs).sort();var dir=parse_ct(getzipstr(zip,"[Content_Types].xml"),opts);var xlsb=false;var sheets,binname;if(dir.workbooks.length===0){binname="xl/workbook.xml";if(getzipdata(zip,binname,true))dir.workbooks.push(binname)}if(dir.workbooks.length===0){binname="xl/workbook.bin";if(!getzipdata(zip,binname,true))throw new Error("Could not find workbook");dir.workbooks.push(binname);xlsb=true}if(dir.workbooks[0].slice(-3)=="bin")xlsb=true;if(xlsb)set_cp(1200);var themes={};var styles={};if(!opts.bookSheets&&!opts.bookProps){strs=[];if(dir.sst)strs=parse_sst(getzipdata(zip,dir.sst.replace(/^\//,"")),dir.sst,opts);if(opts.cellStyles&&dir.themes.length)themes=parse_theme(getzipstr(zip,dir.themes[0].replace(/^\//,""),true)||"",dir.themes[0],opts);if(dir.style)styles=parse_sty(getzipdata(zip,dir.style.replace(/^\//,"")),dir.style,themes,opts)}var wb=parse_wb(getzipdata(zip,dir.workbooks[0].replace(/^\//,"")),dir.workbooks[0],opts);var props={},propdata="";if(dir.coreprops.length!==0){propdata=getzipstr(zip,dir.coreprops[0].replace(/^\//,""),true);if(propdata)props=parse_core_props(propdata);if(dir.extprops.length!==0){propdata=getzipstr(zip,dir.extprops[0].replace(/^\//,""),true);if(propdata)parse_ext_props(propdata,props)}}var custprops={};if(!opts.bookSheets||opts.bookProps){if(dir.custprops.length!==0){propdata=getzipstr(zip,dir.custprops[0].replace(/^\//,""),true);if(propdata)custprops=parse_cust_props(propdata,opts)}}var out={};if(opts.bookSheets||opts.bookProps){if(wb.Sheets)sheets=wb.Sheets.map(function pluck(x){return x.name});else if(props.Worksheets&&props.SheetNames.length>0)sheets=props.SheetNames;if(opts.bookProps){out.Props=props;out.Custprops=custprops}if(opts.bookSheets&&typeof sheets!=="undefined")out.SheetNames=sheets;if(opts.bookSheets?out.SheetNames:opts.bookProps)return out}sheets={};var deps={};if(opts.bookDeps&&dir.calcchain)deps=parse_cc(getzipdata(zip,dir.calcchain.replace(/^\//,"")),dir.calcchain,opts);var i=0;var sheetRels={};var path,relsPath;{var wbsheets=wb.Sheets;props.Worksheets=wbsheets.length;props.SheetNames=[];for(var j=0;j!=wbsheets.length;++j){props.SheetNames[j]=wbsheets[j].name}}var wbext=xlsb?"bin":"xml";var wbrelsfile="xl/_rels/workbook."+wbext+".rels";var wbrels=parse_rels(getzipstr(zip,wbrelsfile,true),wbrelsfile);if(wbrels)wbrels=safe_parse_wbrels(wbrels,wb.Sheets);var nmode=getzipdata(zip,"xl/worksheets/sheet.xml",true)?1:0;for(i=0;i!=props.Worksheets;++i){var stype="sheet";if(wbrels&&wbrels[i]){path="xl/"+wbrels[i][1].replace(/[\/]?xl\//,"");stype=wbrels[i][2]}else{path="xl/worksheets/sheet"+(i+1-nmode)+"."+wbext;path=path.replace(/sheet0\./,"sheet.")}relsPath=path.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels");safe_parse_sheet(zip,path,relsPath,props.SheetNames[i],sheetRels,sheets,stype,opts,wb,themes,styles)}if(dir.comments)parse_comments(zip,dir.comments,sheets,sheetRels,opts);out={Directory:dir,Workbook:wb,Props:props,Custprops:custprops,Deps:deps,Sheets:sheets,SheetNames:props.SheetNames,Strings:strs,Styles:styles,Themes:themes,SSF:SSF.get_table()};if(opts.bookFiles){out.keys=entries;out.files=zip.files}if(opts.bookVBA){if(dir.vba.length>0)out.vbaraw=getzipdata(zip,dir.vba[0].replace(/^\//,""),true);else if(dir.defaults&&dir.defaults.bin==="application/vnd.ms-office.vbaProject")out.vbaraw=getzipdata(zip,"xl/vbaProject.bin",true)}return out}function parse_xlsxcfb(cfb,opts){var f="Version";var data=cfb.find(f);if(!data)throw new Error("ECMA-376 Encrypted file missing "+f);var version=parse_DataSpaceVersionInfo(data.content);f="DataSpaceMap";data=cfb.find(f);if(!data)throw new Error("ECMA-376 Encrypted file missing "+f);var dsm=parse_DataSpaceMap(data.content);if(dsm.length!=1||dsm[0].comps.length!=1||dsm[0].comps[0].t!=0||dsm[0].name!="StrongEncryptionDataSpace"||dsm[0].comps[0].v!="EncryptedPackage")throw new Error("ECMA-376 Encrypted file bad "+f);f="StrongEncryptionDataSpace";data=cfb.find(f);if(!data)throw new Error("ECMA-376 Encrypted file missing "+f);var seds=parse_DataSpaceDefinition(data.content);if(seds.length!=1||seds[0]!="StrongEncryptionTransform")throw new Error("ECMA-376 Encrypted file bad "+f);f="!Primary";data=cfb.find(f);if(!data)throw new Error("ECMA-376 Encrypted file missing "+f);var hdr=parse_Primary(data.content);f="EncryptionInfo";data=cfb.find(f);if(!data)throw new Error("ECMA-376 Encrypted file missing "+f);var einfo=parse_EncryptionInfo(data.content);throw new Error("File is password-protected")}function write_zip(wb,opts){_shapeid=1024;if(opts.bookType=="ods")return write_ods(wb,opts);if(wb&&!wb.SSF){wb.SSF=SSF.get_table()}if(wb&&wb.SSF){make_ssf(SSF);SSF.load_table(wb.SSF);opts.revssf=evert_num(wb.SSF);opts.revssf[wb.SSF[65535]]=0;opts.ssf=wb.SSF}opts.rels={};opts.wbrels={};opts.Strings=[];opts.Strings.Count=0;opts.Strings.Unique=0;var wbext=opts.bookType=="xlsb"?"bin":"xml";var vbafmt=opts.bookType=="xlsb"||opts.bookType=="xlsm";var ct={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],TODO:[],xmlns:""};fix_write_opts(opts=opts||{});var zip=new jszip;var f="",rId=0;opts.cellXfs=[];get_cell_style(opts.cellXfs,{},{revssf:{General:0}});if(!wb.Props)wb.Props={};f="docProps/core.xml";zip.file(f,write_core_props(wb.Props,opts));ct.coreprops.push(f);add_rels(opts.rels,2,f,RELS.CORE_PROPS);f="docProps/app.xml";if(wb.Props&&wb.Props.SheetNames){}else if(!wb.Workbook||!wb.Workbook.Sheets)wb.Props.SheetNames=wb.SheetNames;else wb.Props.SheetNames=wb.SheetNames.map(function(x,i){return[(wb.Workbook.Sheets[i]||{}).Hidden!=2,x]}).filter(function(x){return x[0]}).map(function(x){return x[1]});wb.Props.Worksheets=wb.Props.SheetNames.length;zip.file(f,write_ext_props(wb.Props,opts));ct.extprops.push(f);add_rels(opts.rels,3,f,RELS.EXT_PROPS);if(wb.Custprops!==wb.Props&&keys(wb.Custprops||{}).length>0){f="docProps/custom.xml";zip.file(f,write_cust_props(wb.Custprops,opts));ct.custprops.push(f);add_rels(opts.rels,4,f,RELS.CUST_PROPS)}f="xl/workbook."+wbext;zip.file(f,write_wb(wb,f,opts));ct.workbooks.push(f);add_rels(opts.rels,1,f,RELS.WB);for(rId=1;rId<=wb.SheetNames.length;++rId){var wsrels={"!id":{}};var ws=wb.Sheets[wb.SheetNames[rId-1]];var _type=(ws||{})["!type"]||"sheet";switch(_type){case"chart":;default:f="xl/worksheets/sheet"+rId+"."+wbext;zip.file(f,write_ws(rId-1,f,opts,wb,wsrels));ct.sheets.push(f);add_rels(opts.wbrels,-1,"worksheets/sheet"+rId+"."+wbext,RELS.WS[0]);}if(ws){var comments=ws["!comments"];if(comments&&comments.length>0){var cf="xl/comments"+rId+"."+wbext;zip.file(cf,write_cmnt(comments,cf,opts));ct.comments.push(cf);add_rels(wsrels,-1,"../comments"+rId+"."+wbext,RELS.CMNT)}if(ws["!legacy"]){zip.file("xl/drawings/vmlDrawing"+rId+".vml",write_comments_vml(rId,ws["!comments"]))}delete ws["!comments"];delete ws["!legacy"]}if(wsrels["!id"].rId1)zip.file(get_rels_path(f),write_rels(wsrels))}if(opts.Strings!=null&&opts.Strings.length>0){f="xl/sharedStrings."+wbext;zip.file(f,write_sst(opts.Strings,f,opts));ct.strs.push(f);add_rels(opts.wbrels,-1,"sharedStrings."+wbext,RELS.SST)}f="xl/theme/theme1.xml";zip.file(f,write_theme(wb.Themes,opts));ct.themes.push(f);add_rels(opts.wbrels,-1,"theme/theme1.xml",RELS.THEME);f="xl/styles."+wbext;zip.file(f,write_sty(wb,f,opts));ct.styles.push(f);add_rels(opts.wbrels,-1,"styles."+wbext,RELS.STY);if(wb.vbaraw&&vbafmt){f="xl/vbaProject.bin";zip.file(f,wb.vbaraw);ct.vba.push(f);add_rels(opts.wbrels,-1,"vbaProject.bin",RELS.VBA)}zip.file("[Content_Types].xml",write_ct(ct,opts));zip.file("_rels/.rels",write_rels(opts.rels));zip.file("xl/_rels/workbook."+wbext+".rels",write_rels(opts.wbrels));delete opts.revssf;delete opts.ssf;return zip}function firstbyte(f,o){var x="";switch((o||{}).type||"base64"){case"buffer":return[f[0],f[1],f[2],f[3]];case"base64":x=Base64.decode(f.substr(0,24));break;case"binary":x=f;break;case"array":return[f[0],f[1],f[2],f[3]];default:throw new Error("Unrecognized type "+(o?o.type:"undefined"));}return[x.charCodeAt(0),x.charCodeAt(1),x.charCodeAt(2),x.charCodeAt(3)]}function read_cfb(cfb,opts){if(cfb.find("EncryptedPackage"))return parse_xlsxcfb(cfb,opts);return parse_xlscfb(cfb,opts)}function read_zip(data,opts){var zip,d=data;var o=opts||{};if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";switch(o.type){case"base64":zip=new jszip(d,{base64:true});break;case"binary":;case"array":zip=new jszip(d,{base64:false});break;case"buffer":zip=new jszip(d);break;default:throw new Error("Unrecognized type "+o.type);}return parse_zip(zip,o)}function read_utf16(data,o){var d=data;if(o.type=="base64")d=Base64.decode(d);d=cptable.utils.decode(1200,d.slice(2));o.type="binary";if(d.charCodeAt(0)==60)return parse_xlml(d,o);return PRN.to_workbook(d,o)}function readSync(data,opts){var zip,d=data,n=[0];var o=opts||{};_ssfopts={};if(o.dateNF)_ssfopts.dateNF=o.dateNF;if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";if(o.type=="file"){o.type="buffer";d=_fs.readFileSync(data)}switch((n=firstbyte(d,o))[0]){case 208:return read_cfb(CFB.read(d,o),o);case 9:return parse_xlscfb(s2a(o.type==="base64"?Base64.decode(d):d),o);case 60:return parse_xlml(d,o);case 73:if(n[1]==68)return read_wb_ID(d,o);break;case 84:if(n[1]==65&&n[2]==66&&n[3]==76)return DIF.to_workbook(d,o);break;case 80:if(n[1]==75&&n[2]<32&&n[3]<32)return read_zip(d,o);break;case 239:return n[3]==60?parse_xlml(d,o):PRN.to_workbook(d,o);case 255:if(n[1]==254){return read_utf16(d,o)}break;case 0:if(n[1]==0&&n[2]>=2&&n[3]==0)return WK_.to_workbook(d,o);break;case 3:;case 131:;case 139:return DBF.to_workbook(d,o);}if(n[2]<=12&&n[3]<=31)return DBF.to_workbook(d,o);if(32>n[0]||n[0]>127)throw new Error("Unsupported file "+n.join("|"));return PRN.to_workbook(d,o)}function readFileSync(filename,opts){var o=opts||{};o.type="file";return readSync(filename,o)}function write_zip_type(wb,opts){var o=opts||{};var z=write_zip(wb,o);var oopts={};if(o.compression)oopts.compression="DEFLATE";switch(o.type){case"base64":oopts.type="base64";break;case"binary":oopts.type="string";break;case"buffer":;case"file":oopts.type="nodebuffer";break;default:throw new Error("Unrecognized type "+o.type);}if(o.type==="file")return _fs.writeFileSync(o.file,z.generate(oopts));return z.generate(oopts)}function write_bstr_type(out,opts){switch(opts.type){case"base64":return Base64.encode(out);case"binary":return out;case"file":return _fs.writeFileSync(opts.file,out,"binary");case"buffer":{if(has_buf)return new Buffer(out,"utf8");else return out.split("").map(function(c){return c.charCodeAt(0)})};}throw new Error("Unrecognized type "+opts.type)}function write_string_type(out,opts){ -switch(opts.type){case"base64":return Base64.encode(out);case"binary":return out;case"file":return _fs.writeFileSync(opts.file,out,"utf8");case"buffer":{if(has_buf)return new Buffer(out,"utf8");else return out.split("").map(function(c){return c.charCodeAt(0)})};}throw new Error("Unrecognized type "+opts.type)}function write_binary_type(out,opts){switch(opts.type){case"base64":;case"binary":var bstr="";for(var i=0;i0)offset=0;var rr=encode_row(r.s.r);var cols=new Array(r.e.c-r.s.c+1);var out=new Array(r.e.r-r.s.r-offset+1);var outi=0,counter=0;var dense=Array.isArray(sheet);var R=r.s.r,C=0,CC=0;if(dense&&!sheet[R])sheet[R]=[];for(C=r.s.c;C<=r.e.c;++C){cols[C]=encode_col(C);val=dense?sheet[R][C]:sheet[cols[C]+rr];switch(header){case 1:hdr[C]=C-r.s.c;break;case 2:hdr[C]=cols[C];break;case 3:hdr[C]=o.header[C-r.s.c];break;default:if(val==null)continue;vv=v=format_cell(val,null,o);counter=0;for(CC=0;CC=0)txt='"'+txt.replace(qreg,'""')+'"'}else txt="";row+=(C===r.s.c?"":FS)+txt}if(o.blankrows===false&&isempty)return null;return row}function sheet_to_csv(sheet,opts){var out=[];var o=opts==null?{}:opts;if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]);var FS=o.FS!==undefined?o.FS:",",fs=FS.charCodeAt(0);var RS=o.RS!==undefined?o.RS:"\n",rs=RS.charCodeAt(0);var endregex=new RegExp((FS=="|"?"\\|":FS)+"+$");var row="",cols=[];o.dense=Array.isArray(sheet);for(var C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(var R=r.s.r;R<=r.e.r;++R){row=make_csv_row(sheet,r,R,cols,fs,rs,FS,o);if(row==null){continue}if(o.strip)row=row.replace(endregex,"");out.push(row+RS)}delete o.dense;return out.join("")}function sheet_to_txt(sheet,opts){if(!opts)opts={};opts.FS="\t";opts.RS="\n";var s=sheet_to_csv(sheet,opts);if(typeof cptable=="undefined")return s;var o=cptable.utils.encode(1200,s);return"ÿþ"+o}function sheet_to_formulae(sheet){var y="",x,val="";if(sheet==null||sheet["!ref"]==null)return[];var r=safe_decode_range(sheet["!ref"]),rr="",cols=[],C;var cmds=[];var dense=Array.isArray(sheet);for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(var R=r.s.r;R<=r.e.r;++R){rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){y=cols[C]+rr;x=dense?(sheet[R]||[])[C]:sheet[y];val="";if(x===undefined)continue;else if(x.F!=null){y=x.F;if(!x.f)continue;val=x.f;if(y.indexOf(":")==-1)y=y+":"+y}if(x.f!=null)val=x.f;else if(x.t=="z")continue;else if(x.t=="n"&&x.v!=null)val=""+x.v;else if(x.t=="b")val=x.v?"TRUE":"FALSE";else if(x.w!==undefined)val="'"+x.w;else if(x.v===undefined)continue;else if(x.t=="s")val="'"+x.v;else val=""+x.v;cmds[cmds.length]=y+"="+val}}return cmds}function json_to_sheet(js,opts){var o=opts||{};var ws={};var cell;var range={s:{c:0,r:0},e:{c:0,r:js.length}};var hdr=o.header||[],C=0;for(var R=0;R!=js.length;++R){Object.keys(js[R]).filter(function(x){return js[R].hasOwnProperty(x)}).forEach(function(k){if((C=hdr.indexOf(k))==-1)hdr[C=hdr.length]=k;var v=js[R][k];var t="z";var z="";if(typeof v=="number")t="n";else if(typeof v=="boolean")t="b";else if(typeof v=="string")t="s";else if(v instanceof Date){t="d";if(!o.cellDates){t="n";v=datenum(v)}z=o.dateNF||SSF._table[14]}ws[encode_cell({c:C,r:R+1})]=cell={t:t,v:v};if(z)cell.z=z})}range.e.c=hdr.length-1;for(C=0;C=0&&wb.SheetNames.length>sh)return sh;throw new Error("Cannot find sheet # "+sh)}else if(typeof sh=="string"){var idx=wb.SheetNames.indexOf(sh);if(idx>-1)return idx;throw new Error("Cannot find sheet name |"+sh+"|")}else throw new Error("Cannot find sheet |"+sh+"|")}utils.book_new=function(){return{SheetNames:[],Sheets:{}}};utils.book_append_sheet=function(wb,ws,name){if(!name)for(var i=1;i<=65535;++i)if(wb.SheetNames.indexOf(name="Sheet"+i)==-1)break;if(!name)throw new Error("Too many worksheets");check_ws_name(name);if(wb.SheetNames.indexOf(name)>=0)throw new Error("Worksheet with name |"+name+"| already exists!");wb.SheetNames.push(name);wb.Sheets[name]=ws};utils.book_set_sheet_visibility=function(wb,sh,vis){get_default(wb,"Workbook",{});get_default(wb.Workbook,"Sheets",[]);var idx=wb_sheet_idx(wb,sh);get_default(wb.Workbook.Sheets,idx,{});switch(vis){case 0:;case 1:;case 2:break;default:throw new Error("Bad sheet visibility setting "+vis);}wb.Workbook.Sheets[idx].Hidden=vis};add_consts([["SHEET_VISIBLE",0],["SHEET_HIDDEN",1],["SHEET_VERY_HIDDEN",2]]);utils.cell_set_number_format=function(cell,fmt){cell.z=fmt;return cell};utils.cell_set_hyperlink=function(cell,target,tooltip){if(!target){delete cell.l}else{cell.l={Target:target};if(tooltip)cell.l.Tooltip=tooltip}return cell};utils.cell_add_comment=function(cell,text,author){if(!cell.c)cell.c=[];cell.c.push({t:text,a:author||"SheetJS"})};utils.sheet_set_array_formula=function(ws,range,formula){var rng=typeof range!="string"?range:safe_decode_range(range);var rngstr=typeof range=="string"?range:encode_range(range);for(var R=rng.s.r;R<=rng.e.r;++R)for(var C=rng.s.c;C<=rng.e.c;++C){var cell=ws_get_cell_stub(ws,R,C);cell.t="n";cell.F=rngstr;delete cell.v;if(R==rng.s.r&&C==rng.s.c)cell.f=formula}return ws};return utils})(utils);if(has_buf&&typeof require!="undefined")(function(){var Readable=require("stream").Readable;var write_csv_stream=function(sheet,opts){var stream=Readable();var out="";var o=opts==null?{}:opts;if(sheet==null||sheet["!ref"]==null){stream.push(null);return stream}var r=safe_decode_range(sheet["!ref"]);var FS=o.FS!==undefined?o.FS:",",fs=FS.charCodeAt(0);var RS=o.RS!==undefined?o.RS:"\n",rs=RS.charCodeAt(0);var endregex=new RegExp((FS=="|"?"\\|":FS)+"+$");var row="",cols=[];o.dense=Array.isArray(sheet);for(var C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);var R=r.s.r;stream._read=function(){if(R>r.e.r)return stream.push(null);while(R<=r.e.r){row=make_csv_row(sheet,r,R,cols,fs,rs,FS,o);++R;if(row!=null){if(o.strip)row=row.replace(endregex,"");stream.push(row+RS);break}}};return stream};var write_html_stream=function(ws,opts){var stream=Readable();var o=opts||{};var header=o.header!=null?o.header:HTML_.BEGIN;var footer=o.footer!=null?o.footer:HTML_.END;stream.push(header);var r=decode_range(ws["!ref"]);o.dense=Array.isArray(ws);stream.push(HTML_._preamble(ws,r,o));var R=r.s.r;var end=false;stream._read=function(){if(R>r.e.r){if(!end){end=true;stream.push(""+footer)}return stream.push(null)}while(R<=r.e.r){stream.push(HTML_._row(ws,r,R,o));++R;break}};return stream};XLSX.stream={to_html:write_html_stream,to_csv:write_csv_stream}})();XLSX.parse_xlscfb=parse_xlscfb;XLSX.parse_ods=parse_ods;XLSX.parse_fods=parse_fods;XLSX.write_ods=write_ods;XLSX.parse_zip=parse_zip;XLSX.read=readSync;XLSX.readFile=readFileSync;XLSX.readFileSync=readFileSync;XLSX.write=writeSync;XLSX.writeFile=writeFileSync;XLSX.writeFileSync=writeFileSync;XLSX.writeFileAsync=writeFileAsync;XLSX.utils=utils;XLSX.SSF=SSF})(typeof exports!=="undefined"?exports:XLSX);var XLS=XLSX;var ODS=XLSX; diff --git a/muk_web_preview_msoffice/static/lib/handsontable/handsontable.css b/muk_web_preview_msoffice/static/lib/handsontable/handsontable.css deleted file mode 100644 index d15e79f..0000000 --- a/muk_web_preview_msoffice/static/lib/handsontable/handsontable.css +++ /dev/null @@ -1,1491 +0,0 @@ -/*! - * (The MIT License) - * - * Copyright (c) 2012-2014 Marcin Warpechowski - * Copyright (c) 2015 Handsoncode sp. z o.o. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * 'Software'), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Version: 0.33.0 - * Date: Mon Jul 10 2017 10:08:33 GMT+0200 (CEST) - */ -/** - * Fix for bootstrap styles - */ -.handsontable .table th, .handsontable .table td { - border-top: none; -} - -.handsontable tr { - background: #fff; -} - -.handsontable td { - background-color: inherit; -} - -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 1px solid #CCCCCC; -} - -/* table-bordered */ -.handsontable .table-bordered { - border: 0; - border-collapse: separate; -} - -.handsontable .table-bordered th, -.handsontable .table-bordered td { - border-left: none; -} - -.handsontable .table-bordered th:first-child, -.handsontable .table-bordered td:first-child { - border-left: 1px solid #CCCCCC; -} - -.table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th { - line-height: 21px; - padding: 0 4px; -} - -.col-lg-1.handsontable, .col-lg-10.handsontable, .col-lg-11.handsontable, .col-lg-12.handsontable, -.col-lg-2.handsontable, .col-lg-3.handsontable, .col-lg-4.handsontable, .col-lg-5.handsontable, .col-lg-6.handsontable, .col-lg-7.handsontable, .col-lg-8.handsontable, .col-lg-9.handsontable, -.col-md-1.handsontable, .col-md-10.handsontable, .col-md-11.handsontable, .col-md-12.handsontable, -.col-md-2.handsontable, .col-md-3.handsontable, .col-md-4.handsontable, .col-md-5.handsontable, .col-md-6.handsontable, .col-md-7.handsontable, .col-md-8.handsontable, .col-md-9.handsontable -.col-sm-1.handsontable, .col-sm-10.handsontable, .col-sm-11.handsontable, .col-sm-12.handsontable, -.col-sm-2.handsontable, .col-sm-3.handsontable, .col-sm-4.handsontable, .col-sm-5.handsontable, .col-sm-6.handsontable, .col-sm-7.handsontable, .col-sm-8.handsontable, .col-sm-9.handsontable -.col-xs-1.handsontable, .col-xs-10.handsontable, .col-xs-11.handsontable, .col-xs-12.handsontable, -.col-xs-2.handsontable, .col-xs-3.handsontable, .col-xs-4.handsontable, .col-xs-5.handsontable, .col-xs-6.handsontable, .col-xs-7.handsontable, .col-xs-8.handsontable, .col-xs-9.handsontable { - padding-left: 0; - padding-right: 0; -} - -.table-striped > tbody > tr:nth-of-type(even) { - background-color: #FFF; -} -.handsontable { - position: relative; -} - -.handsontable .hide{ - display: none; -} -.handsontable .relative { - position: relative; -} - -.handsontable.htAutoSize { - visibility: hidden; - left: -99000px; - position: absolute; - top: -99000px; -} - -.handsontable .wtHider { - width: 0; -} - -.handsontable .wtSpreader { - position: relative; - width: 0; /*must be 0, otherwise blank space appears in scroll demo after scrolling max to the right */ - height: auto; -} - -.handsontable table, -.handsontable tbody, -.handsontable thead, -.handsontable td, -.handsontable th, -.handsontable input, -.handsontable textarea, -.handsontable div { - box-sizing: content-box; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; -} - -.handsontable input, -.handsontable textarea { - min-height: initial; -} - -.handsontable table.htCore { - border-collapse: separate; - /* it must be separate, otherwise there are offset miscalculations in WebKit: http://stackoverflow.com/questions/2655987/border-collapse-differences-in-ff-and-webkit */ - /* this actually only changes appearance of user selection - does not make text unselectable */ - /* -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -o-user-select: none; - -ms-user-select: none; - user-select: none; */ /* no browser supports unprefixed version */ - border-spacing: 0; - margin: 0; - border-width: 0; - table-layout: fixed; - width: 0; - outline-width: 0; - /* reset bootstrap table style. for more info see: https://github.com/handsontable/handsontable/issues/224 */ - max-width: none; - max-height: none; -} - -.handsontable col { - width: 50px; -} - -.handsontable col.rowHeader { - width: 50px; -} - -.handsontable th, -.handsontable td { - border-top-width: 0; - border-left-width: 0; - border-right: 1px solid #CCC; - border-bottom: 1px solid #CCC; - height: 22px; - empty-cells: show; - line-height: 21px; - padding: 0 4px 0 4px; - /* top, bottom padding different than 0 is handled poorly by FF with HTML5 doctype */ - background-color: #FFF; - vertical-align: top; - overflow: hidden; - outline-width: 0; - white-space: pre-line; - /* preserve new line character in cell */ - background-clip: padding-box; -} - -.handsontable td.htInvalid { - background-color: #ff4c42 !important; /*gives priority over td.area selection background*/ -} - -.handsontable td.htNoWrap { - white-space: nowrap; -} - -.handsontable th:last-child { - /*Foundation framework fix*/ - border-right: 1px solid #CCC; - border-bottom: 1px solid #CCC; -} - -.handsontable tr:first-child th.htNoFrame, -.handsontable th:first-child.htNoFrame, -.handsontable th.htNoFrame { - border-left-width: 0; - background-color: white; - border-color: #FFF; -} - -.handsontable th:first-child, -.handsontable th:nth-child(2), -.handsontable td:first-of-type, -.handsontable .htNoFrame + th, -.handsontable .htNoFrame + td { - border-left: 1px solid #CCC; -} - -.handsontable.htRowHeaders thead tr th:nth-child(2) { - border-left: 1px solid #CCC; -} - -.handsontable tr:first-child th, -.handsontable tr:first-child td { - border-top: 1px solid #CCC; -} - -.ht_master:not(.innerBorderLeft):not(.emptyColumns) ~ .handsontable tbody tr th, -.ht_master:not(.innerBorderLeft):not(.emptyColumns) ~ .handsontable:not(.ht_clone_top) thead tr th:first-child { - border-right-width: 0; -} - -.ht_master:not(.innerBorderTop) thead tr:last-child th, -.ht_master:not(.innerBorderTop) ~ .handsontable thead tr:last-child th, -.ht_master:not(.innerBorderTop) thead tr.lastChild th, -.ht_master:not(.innerBorderTop) ~ .handsontable thead tr.lastChild th { - border-bottom-width: 0; -} - -.handsontable th { - background-color: #f3f3f3; - color: #222; - text-align: center; - font-weight: normal; - white-space: nowrap; -} - -.handsontable thead th { - padding: 0; -} - -.handsontable th.active { - background-color: #CCC; -} -.handsontable thead th .relative { - padding: 2px 4px; -} - -/* selection */ -.handsontable tbody th.ht__highlight, -.handsontable thead th.ht__highlight { - background-color: #dcdcdc; -} -.handsontable.ht__selection--columns thead th.ht__highlight, -.handsontable.ht__selection--rows tbody th.ht__highlight { - background-color: #8eb0e7; - color: #000; -} - -/* plugins */ - -/* row + column resizer*/ -.handsontable .manualColumnResizer { - position: fixed; - top: 0; - cursor: col-resize; - z-index: 110; - width: 5px; - height: 25px; -} - -.handsontable .manualRowResizer { - position: fixed; - left: 0; - cursor: row-resize; - z-index: 110; - height: 5px; - width: 50px; -} - -.handsontable .manualColumnResizer:hover, -.handsontable .manualColumnResizer.active, -.handsontable .manualRowResizer:hover, -.handsontable .manualRowResizer.active { - background-color: #AAB; -} - -.handsontable .manualColumnResizerGuide { - position: fixed; - right: 0; - top: 0; - background-color: #AAB; - display: none; - width: 0; - border-right: 1px dashed #777; - margin-left: 5px; -} - -.handsontable .manualRowResizerGuide { - position: fixed; - left: 0; - bottom: 0; - background-color: #AAB; - display: none; - height: 0; - border-bottom: 1px dashed #777; - margin-top: 5px; -} - -.handsontable .manualColumnResizerGuide.active, -.handsontable .manualRowResizerGuide.active { - display: block; - z-index: 199; -} - -.handsontable .columnSorting { - position: relative; -} - -.handsontable .columnSorting:hover { - text-decoration: underline; - cursor: pointer; -} - -.handsontable .columnSorting.ascending::after { - content: '\25B2'; - color: #5f5f5f; - position: absolute; - right: -15px; -} - -.handsontable .columnSorting.descending::after { - content: '\25BC'; - color: #5f5f5f; - position: absolute; - right: -15px; -} - -/* border line */ - -.handsontable .wtBorder { - position: absolute; - font-size: 0; -} -.handsontable .wtBorder.hidden{ - display:none !important; -} - -.handsontable td.area { - background: -moz-linear-gradient(top, rgba(181,209,255,0.34) 0%, rgba(181,209,255,0.34) 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(181,209,255,0.34)), color-stop(100%,rgba(181,209,255,0.34))); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, rgba(181,209,255,0.34) 0%,rgba(181,209,255,0.34) 100%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, rgba(181,209,255,0.34) 0%,rgba(181,209,255,0.34) 100%); /* Opera 11.10+ */ - background: -ms-linear-gradient(top, rgba(181,209,255,0.34) 0%,rgba(181,209,255,0.34) 100%); /* IE10+ */ - background: linear-gradient(to bottom, rgba(181,209,255,0.34) 0%,rgba(181,209,255,0.34) 100%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#57b5d1ff', endColorstr='#57b5d1ff',GradientType=0 ); /* IE6-9 */ - background-color: #fff; -} - -/* fill handle */ - -.handsontable .wtBorder.corner { - font-size: 0; - cursor: crosshair; -} - -.handsontable .htBorder.htFillBorder { - background: red; - width: 1px; - height: 1px; -} - -.handsontableInput { - border:none; - outline-width: 0; - margin: 0 ; - padding: 1px 5px 0 5px; - font-family: inherit; - line-height: 21px; - font-size: inherit; - box-shadow: 0 0 0 2px #5292F7 inset; - resize: none; - /*below are needed to overwrite stuff added by jQuery UI Bootstrap theme*/ - display: block; - color: #000; - border-radius: 0; - background-color: #FFF; - /*overwrite styles potentionally made by a framework*/ -} - -.handsontableInputHolder { - position: absolute; - top: 0; - left: 0; - z-index: 100; -} - -.htSelectEditor { - -webkit-appearance: menulist-button !important; - position: absolute; - width: auto; -} - -/* -TextRenderer readOnly cell -*/ - -.handsontable .htDimmed { - color: #777; -} - -.handsontable .htSubmenu { - position: relative; -} - -.handsontable .htSubmenu :after{ - content: '\25B6'; - color: #777; - position: absolute; - right: 5px; -} - - -/* -TextRenderer horizontal alignment -*/ -.handsontable .htLeft{ - text-align: left; -} -.handsontable .htCenter{ - text-align: center; -} -.handsontable .htRight{ - text-align: right; -} -.handsontable .htJustify{ - text-align: justify; -} -/* -TextRenderer vertical alignment -*/ -.handsontable .htTop{ - vertical-align: top; -} -.handsontable .htMiddle{ - vertical-align: middle; -} -.handsontable .htBottom{ - vertical-align: bottom; -} - -/* -TextRenderer placeholder value -*/ - -.handsontable .htPlaceholder { - color: #999; -} - -/* -AutocompleteRenderer down arrow -*/ - -.handsontable .htAutocompleteArrow { - float: right; - font-size: 10px; - color: #EEE; - cursor: default; - width: 16px; - text-align: center; -} - -.handsontable td .htAutocompleteArrow:hover { - color: #777; -} - -.handsontable td.area .htAutocompleteArrow { - color: #d3d3d3; -} - -/* -CheckboxRenderer -*/ -.handsontable .htCheckboxRendererInput { - display: inline-block; - vertical-align: middle; -} -.handsontable .htCheckboxRendererInput.noValue { - opacity: 0.5; -} -.handsontable .htCheckboxRendererLabel { - cursor: pointer; - display: inline-block; - width: 100%; -} - -@-webkit-keyframes opacity-hide { - from { - opacity: 1; - } - to { - opacity: 0; - /*display: none;*/ - } -} -@keyframes opacity-hide { - from { - /*display: block;*/ - opacity: 1; - } - to { - opacity: 0; - /*display: none;*/ - } -} - -@-webkit-keyframes opacity-show { - from { - opacity: 0; - /*display: none;*/ - } - to { - opacity: 1; - /*display: block;*/ - } -} -@keyframes opacity-show { - from { - opacity: 0; - /*display: none;*/ - } - to { - opacity: 1; - /*display: block;*/ - } -} - -/** - * Handsontable in Handsontable - */ - -.handsontable .handsontable.ht_clone_top .wtHider { - padding: 0 0 5px 0; -} - -/** -* Autocomplete Editor -*/ -.handsontable .autocompleteEditor.handsontable { - padding-right: 17px; -} -.handsontable .autocompleteEditor.handsontable.htMacScroll { - padding-right: 15px; -} - - -/** - * Handsontable listbox theme - */ - -.handsontable.listbox { - margin: 0; -} - -.handsontable.listbox .ht_master table { - border: 1px solid #ccc; - border-collapse: separate; - background: white; -} - -.handsontable.listbox th, -.handsontable.listbox tr:first-child th, -.handsontable.listbox tr:last-child th, -.handsontable.listbox tr:first-child td, -.handsontable.listbox td { - border-color: transparent; -} - -.handsontable.listbox th, -.handsontable.listbox td { - white-space: nowrap; - text-overflow: ellipsis; -} - -.handsontable.listbox td.htDimmed { - cursor: default; - color: inherit; - font-style: inherit; -} - -.handsontable.listbox .wtBorder { - visibility: hidden; -} - -.handsontable.listbox tr td.current, -.handsontable.listbox tr:hover td { - background: #eee; -} - -.ht_clone_top { - z-index: 101; -} - -.ht_clone_left { - z-index: 102; -} - -.ht_clone_top_left_corner, -.ht_clone_bottom_left_corner { - z-index: 103; -} - -.ht_clone_debug { - z-index: 103; -} - -.handsontable td.htSearchResult { - background: #fcedd9; - color: #583707; -} - -/* -Cell borders -*/ -.htBordered{ - /*box-sizing: border-box !important;*/ - border-width: 1px; -} -.htBordered.htTopBorderSolid { - border-top-style: solid; - border-top-color: #000; -} -.htBordered.htRightBorderSolid { - border-right-style: solid; - border-right-color: #000; -} -.htBordered.htBottomBorderSolid { - border-bottom-style: solid; - border-bottom-color: #000; -} -.htBordered.htLeftBorderSolid { - border-left-style: solid; - border-left-color: #000; -} - -.handsontable tbody tr th:nth-last-child(2) { - border-right: 1px solid #CCC; -} - -.handsontable thead tr:nth-last-child(2) th.htGroupIndicatorContainer { - border-bottom: 1px solid #CCC; - padding-bottom: 5px; -} - - -.ht_clone_top_left_corner thead tr th:nth-last-child(2) { - border-right: 1px solid #CCC; -} - -.htCollapseButton { - width: 10px; - height: 10px; - line-height: 10px; - text-align: center; - border-radius: 5px; - border: 1px solid #f3f3f3; - -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4); - box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4); - cursor: pointer; - margin-bottom: 3px; - position: relative; -} - -.htCollapseButton:after { - content: ""; - height: 300%; - width: 1px; - display: block; - background: #ccc; - margin-left: 4px; - position: absolute; - /*top: -300%;*/ - bottom: 10px; -} - - -thead .htCollapseButton { - right: 5px; - position: absolute; - top: 5px; - background: #fff; -} - -thead .htCollapseButton:after { - height: 1px; - width: 700%; - right: 10px; - top: 4px; -} - -.handsontable tr th .htExpandButton { - position: absolute; - width: 10px; - height: 10px; - line-height: 10px; - text-align: center; - border-radius: 5px; - border: 1px solid #f3f3f3; - -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4); - box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4); - cursor: pointer; - top: 0; - display: none; -} - -.handsontable thead tr th .htExpandButton { - /*left: 5px;*/ - top: 5px; -} - -.handsontable tr th .htExpandButton.clickable { - display: block; -} - -.collapsibleIndicator { - position: absolute; - top: 50%; - transform: translate(0% ,-50%); - right: 5px; - border: 1px solid #A6A6A6; - line-height: 10px; - color: #222; - border-radius: 10px; - font-size: 10px; - width: 10px; - height: 10px; - cursor: pointer; - -webkit-box-shadow: 0 0 0 6px rgba(238,238,238,1); - -moz-box-shadow: 0 0 0 6px rgba(238,238,238,1); - box-shadow: 0 0 0 6px rgba(238,238,238,1); - background: #eee; -} - -.handsontable col.hidden { - width: 0 !important; -} - -.handsontable table tr th.lightRightBorder { - border-right: 1px solid #E6E6E6; -} - -.handsontable tr.hidden, -.handsontable tr.hidden td, -.handsontable tr.hidden th { - display: none; -} - -.ht_master, -.ht_clone_left, -.ht_clone_top, -.ht_clone_bottom { - overflow: hidden; -} - -.ht_master .wtHolder { - overflow: auto; -} - -.ht_clone_left .wtHolder { - overflow-x: hidden; - overflow-y: auto; -} - -.ht_clone_top .wtHolder, -.ht_clone_bottom .wtHolder { - overflow-x: auto; - overflow-y: hidden; -} - - -/*WalkontableDebugOverlay*/ - -.wtDebugHidden { - display: none; -} - -.wtDebugVisible { - display: block; - -webkit-animation-duration: 0.5s; - -webkit-animation-name: wtFadeInFromNone; - animation-duration: 0.5s; - animation-name: wtFadeInFromNone; -} - -@keyframes wtFadeInFromNone { - 0% { - display: none; - opacity: 0; - } - - 1% { - display: block; - opacity: 0; - } - - 100% { - display: block; - opacity: 1; - } -} - -@-webkit-keyframes wtFadeInFromNone { - 0% { - display: none; - opacity: 0; - } - - 1% { - display: block; - opacity: 0; - } - - 100% { - display: block; - opacity: 1; - } -} -/* - - Handsontable Mobile Text Editor stylesheet - - */ - -.handsontable.mobile, -.handsontable.mobile .wtHolder { - -webkit-touch-callout:none; - -webkit-user-select:none; - -khtml-user-select:none; - -moz-user-select:none; - -ms-user-select:none; - user-select:none; - -webkit-tap-highlight-color:rgba(0,0,0,0); - -webkit-overflow-scrolling: touch; -} - -.htMobileEditorContainer { - display: none; - position: absolute; - top: 0; - width: 70%; - height: 54pt; - background: #f8f8f8; - border-radius: 20px; - border: 1px solid #ebebeb; - z-index: 999; - box-sizing: border-box; - -webkit-box-sizing: border-box; - -webkit-text-size-adjust: none; -} - -.topLeftSelectionHandle:not(.ht_master .topLeftSelectionHandle), -.topLeftSelectionHandle-HitArea:not(.ht_master .topLeftSelectionHandle-HitArea) { - z-index: 9999; -} - -/* Initial left/top coordinates - overwritten when actual position is set */ -.topLeftSelectionHandle, -.topLeftSelectionHandle-HitArea, -.bottomRightSelectionHandle, -.bottomRightSelectionHandle-HitArea { - left: -10000px; - top: -10000px; -} - -.htMobileEditorContainer.active { - display: block; -} - -.htMobileEditorContainer .inputs { - position: absolute; - right: 210pt; - bottom: 10pt; - top: 10pt; - left: 14px; - height: 34pt; -} - -.htMobileEditorContainer .inputs textarea { - font-size: 13pt; - border: 1px solid #a1a1a1; - -webkit-appearance: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - position: absolute; - left: 14px; - right: 14px; - top: 0; - bottom: 0; - padding: 7pt; -} - -.htMobileEditorContainer .cellPointer { - position: absolute; - top: -13pt; - height: 0; - width: 0; - left: 30px; - - border-left: 13pt solid transparent; - border-right: 13pt solid transparent; - border-bottom: 13pt solid #ebebeb; -} - -.htMobileEditorContainer .cellPointer.hidden { - display: none; -} - -.htMobileEditorContainer .cellPointer:before { - content: ''; - display: block; - position: absolute; - top: 2px; - height: 0; - width: 0; - left: -13pt; - - border-left: 13pt solid transparent; - border-right: 13pt solid transparent; - border-bottom: 13pt solid #f8f8f8; -} - -.htMobileEditorContainer .moveHandle { - position: absolute; - top: 10pt; - left: 5px; - width: 30px; - bottom: 0px; - cursor: move; - z-index: 9999; -} - -.htMobileEditorContainer .moveHandle:after { - content: "..\A..\A..\A.."; - white-space: pre; - line-height: 10px; - font-size: 20pt; - display: inline-block; - margin-top: -8px; - color: #ebebeb; -} - -.htMobileEditorContainer .positionControls { - width: 205pt; - position: absolute; - right: 5pt; - top: 0; - bottom: 0; -} - -.htMobileEditorContainer .positionControls > div { - width: 50pt; - height: 100%; - float: left; -} - -.htMobileEditorContainer .positionControls > div:after { - content: " "; - display: block; - width: 15pt; - height: 15pt; - text-align: center; - line-height: 50pt; -} - -.htMobileEditorContainer .leftButton:after, -.htMobileEditorContainer .rightButton:after, -.htMobileEditorContainer .upButton:after, -.htMobileEditorContainer .downButton:after { - transform-origin: 5pt 5pt; - -webkit-transform-origin: 5pt 5pt; - margin: 21pt 0 0 21pt; -} - -.htMobileEditorContainer .leftButton:after { - border-top: 2px solid #288ffe; - border-left: 2px solid #288ffe; - -webkit-transform: rotate(-45deg); - /*margin-top: 17pt;*/ - /*margin-left: 20pt;*/ -} -.htMobileEditorContainer .leftButton:active:after { - border-color: #cfcfcf; -} - -.htMobileEditorContainer .rightButton:after { - border-top: 2px solid #288ffe; - border-left: 2px solid #288ffe; - -webkit-transform: rotate(135deg); - /*margin-top: 17pt;*/ - /*margin-left: 10pt;*/ -} -.htMobileEditorContainer .rightButton:active:after { - border-color: #cfcfcf; -} - -.htMobileEditorContainer .upButton:after { - /*border-top: 2px solid #cfcfcf;*/ - border-top: 2px solid #288ffe; - border-left: 2px solid #288ffe; - -webkit-transform: rotate(45deg); - /*margin-top: 22pt;*/ - /*margin-left: 15pt;*/ -} -.htMobileEditorContainer .upButton:active:after { - border-color: #cfcfcf; -} - -.htMobileEditorContainer .downButton:after { - border-top: 2px solid #288ffe; - border-left: 2px solid #288ffe; - -webkit-transform: rotate(225deg); - /*margin-top: 15pt;*/ - /*margin-left: 15pt;*/ -} -.htMobileEditorContainer .downButton:active:after { - border-color: #cfcfcf; -} - -.handsontable.hide-tween { - -webkit-animation: opacity-hide 0.3s; - animation: opacity-hide 0.3s; - animation-fill-mode: forwards; - -webkit-animation-fill-mode: forwards; -} - -.handsontable.show-tween { - -webkit-animation: opacity-show 0.3s; - animation: opacity-show 0.3s; - animation-fill-mode: forwards; - -webkit-animation-fill-mode: forwards; -} -@charset "UTF-8"; - -/*! - * Pikaday - * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ - */ - -.pika-single { - z-index: 9999; - display: block; - position: relative; - color: #333; - background: #fff; - border: 1px solid #ccc; - border-bottom-color: #bbb; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -/* -clear child float (pika-lendar), using the famous micro clearfix hack -http://nicolasgallagher.com/micro-clearfix-hack/ -*/ -.pika-single:before, -.pika-single:after { - content: " "; - display: table; -} -.pika-single:after { clear: both } -.pika-single { *zoom: 1 } - -.pika-single.is-hidden { - display: none; -} - -.pika-single.is-bound { - position: absolute; - box-shadow: 0 5px 15px -5px rgba(0,0,0,.5); -} - -.pika-lendar { - float: left; - width: 240px; - margin: 8px; -} - -.pika-title { - position: relative; - text-align: center; -} - -.pika-label { - display: inline-block; - *display: inline; - position: relative; - z-index: 9999; - overflow: hidden; - margin: 0; - padding: 5px 3px; - font-size: 14px; - line-height: 20px; - font-weight: bold; - background-color: #fff; -} -.pika-title select { - cursor: pointer; - position: absolute; - z-index: 9998; - margin: 0; - left: 0; - top: 5px; - filter: alpha(opacity=0); - opacity: 0; -} - -.pika-prev, -.pika-next { - display: block; - cursor: pointer; - position: relative; - outline: none; - border: 0; - padding: 0; - width: 20px; - height: 30px; - /* hide text using text-indent trick, using width value (it's enough) */ - text-indent: 20px; - white-space: nowrap; - overflow: hidden; - background-color: transparent; - background-position: center center; - background-repeat: no-repeat; - background-size: 75% 75%; - opacity: .5; - *position: absolute; - *top: 0; -} - -.pika-prev:hover, -.pika-next:hover { - opacity: 1; -} - -.pika-prev, -.is-rtl .pika-next { - float: left; - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg=='); - *left: 0; -} - -.pika-next, -.is-rtl .pika-prev { - float: right; - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII='); - *right: 0; -} - -.pika-prev.is-disabled, -.pika-next.is-disabled { - cursor: default; - opacity: .2; -} - -.pika-select { - display: inline-block; - *display: inline; -} - -.pika-table { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - border: 0; -} - -.pika-table th, -.pika-table td { - width: 14.285714285714286%; - padding: 0; -} - -.pika-table th { - color: #999; - font-size: 12px; - line-height: 25px; - font-weight: bold; - text-align: center; -} - -.pika-button { - cursor: pointer; - display: block; - box-sizing: border-box; - -moz-box-sizing: border-box; - outline: none; - border: 0; - margin: 0; - width: 100%; - padding: 5px; - color: #666; - font-size: 12px; - line-height: 15px; - text-align: right; - background: #f5f5f5; -} - -.pika-week { - font-size: 11px; - color: #999; -} - -.is-today .pika-button { - color: #33aaff; - font-weight: bold; -} - -.is-selected .pika-button { - color: #fff; - font-weight: bold; - background: #33aaff; - box-shadow: inset 0 1px 3px #178fe5; - border-radius: 3px; -} - -.is-inrange .pika-button { - background: #D5E9F7; -} - -.is-startrange .pika-button { - color: #fff; - background: #6CB31D; - box-shadow: none; - border-radius: 3px; -} - -.is-endrange .pika-button { - color: #fff; - background: #33aaff; - box-shadow: none; - border-radius: 3px; -} - -.is-disabled .pika-button, -.is-outside-current-month .pika-button { - pointer-events: none; - cursor: default; - color: #999; - opacity: .3; -} - -.pika-button:hover { - color: #fff; - background: #ff8000; - box-shadow: none; - border-radius: 3px; -} - -/* styling for abbr */ -.pika-table abbr { - border-bottom: none; - cursor: help; -} - -.htCommentCell { - position: relative; -} - -.htCommentCell:after { - content: ''; - position: absolute; - top: 0; - right: 0; - border-left: 6px solid transparent; - border-top: 6px solid black; -} - -.htComments { - display: none; - z-index: 1059; - position: absolute; -} - -.htCommentTextArea { - box-shadow: rgba(0, 0, 0, 0.117647) 0 1px 3px, rgba(0, 0, 0, 0.239216) 0 1px 2px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border: none; - border-left: 3px solid #ccc; - background-color: #fff; - width: 215px; - height: 90px; - font-size: 12px; - padding: 5px; - outline: 0px !important; - -webkit-appearance: none; -} - -.htCommentTextArea:focus { - box-shadow: rgba(0, 0, 0, 0.117647) 0 1px 3px, rgba(0, 0, 0, 0.239216) 0 1px 2px, inset 0 0 0 1px #5292f7; - border-left: 3px solid #5292f7; -} -/*! - * Handsontable ContextMenu - */ - -.htContextMenu { - display: none; - position: absolute; - z-index: 1060; /* needs to be higher than 1050 - z-index for Twitter Bootstrap modal (#1569) */ -} - -.htContextMenu .ht_clone_top, -.htContextMenu .ht_clone_left, -.htContextMenu .ht_clone_corner, -.htContextMenu .ht_clone_debug { - display: none; -} - -.htContextMenu table.htCore { - border: 1px solid #ccc; - border-bottom-width: 2px; - border-right-width: 2px; -} - -.htContextMenu .wtBorder { - visibility: hidden; -} - -.htContextMenu table tbody tr td { - background: white; - border-width: 0; - padding: 4px 6px 0 6px; - cursor: pointer; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.htContextMenu table tbody tr td:first-child { - border: 0; -} - -.htContextMenu table tbody tr td.htDimmed { - font-style: normal; - color: #323232; -} - -.htContextMenu table tbody tr td.current, -.htContextMenu table tbody tr td.zeroclipboard-is-hover { - background: #f3f3f3; -} - -.htContextMenu table tbody tr td.htSeparator { - border-top: 1px solid #bbb; - height: 0; - padding: 0; - cursor: default; -} - -.htContextMenu table tbody tr td.htDisabled { - color: #999; - cursor: default; -} - -.htContextMenu table tbody tr td.htDisabled:hover { - background: #fff; - color: #999; - cursor: default; -} - -.htContextMenu table tbody tr.htHidden { - display: none; -} - -.htContextMenu table tbody tr td .htItemWrapper { - margin-left: 10px; - margin-right: 6px; -} - -.htContextMenu table tbody tr td div span.selected { - margin-top: -2px; - position: absolute; - left: 4px; -} - -.htContextMenu .ht_master .wtHolder { - overflow: hidden; -} -textarea#HandsontableCopyPaste { - position: fixed !important; - bottom: 100% !important; - right: 100% !important; - outline: 0 none !important; -} -.htRowHeaders .ht_master.innerBorderLeft ~ .ht_clone_top_left_corner th:nth-child(2), -.htRowHeaders .ht_master.innerBorderLeft ~ .ht_clone_left td:first-of-type { - border-left: 0 none; -} -.handsontable .wtHider { - position: relative; -} -.handsontable.ht__manualColumnMove.after-selection--columns thead th.ht__highlight { - cursor: move; - cursor: -moz-grab; - cursor: -webkit-grab; - cursor: grab; -} -.handsontable.ht__manualColumnMove.on-moving--columns, -.handsontable.ht__manualColumnMove.on-moving--columns thead th.ht__highlight { - cursor: move; - cursor: -moz-grabbing; - cursor: -webkit-grabbing; - cursor: grabbing; -} -.handsontable.ht__manualColumnMove.on-moving--columns .manualColumnResizer { - display: none; -} -.handsontable .ht__manualColumnMove--guideline, -.handsontable .ht__manualColumnMove--backlight { - position: absolute; - height: 100%; - display: none; -} -.handsontable .ht__manualColumnMove--guideline { - background: #757575; - width: 2px; - top: 0; - margin-left: -1px; - z-index: 105; -} -.handsontable .ht__manualColumnMove--backlight { - background: #343434; - background: rgba(52, 52, 52, 0.25); - display: none; - z-index: 105; - pointer-events: none; -} -.handsontable.on-moving--columns.show-ui .ht__manualColumnMove--guideline, -.handsontable.on-moving--columns .ht__manualColumnMove--backlight { - display: block; -} -.handsontable .wtHider { - position: relative; -} -.handsontable.ht__manualRowMove.after-selection--rows tbody th.ht__highlight { - cursor: move; - cursor: -moz-grab; - cursor: -webkit-grab; - cursor: grab; -} -.handsontable.ht__manualRowMove.on-moving--rows, -.handsontable.ht__manualRowMove.on-moving--rows tbody th.ht__highlight { - cursor: move; - cursor: -moz-grabbing; - cursor: -webkit-grabbing; - cursor: grabbing; -} -.handsontable.ht__manualRowMove.on-moving--rows .manualRowResizer { - display: none; -} -.handsontable .ht__manualRowMove--guideline, -.handsontable .ht__manualRowMove--backlight { - position: absolute; - width: 100%; - display: none; -} -.handsontable .ht__manualRowMove--guideline { - background: #757575; - height: 2px; - left: 0; - margin-top: -1px; - z-index: 105; -} -.handsontable .ht__manualRowMove--backlight { - background: #343434; - background: rgba(52, 52, 52, 0.25); - display: none; - z-index: 105; - pointer-events: none; -} -.handsontable.on-moving--rows.show-ui .ht__manualRowMove--guideline, -.handsontable.on-moving--rows .ht__manualRowMove--backlight { - display: block; -} diff --git a/muk_web_preview_msoffice/static/lib/handsontable/handsontable.js b/muk_web_preview_msoffice/static/lib/handsontable/handsontable.js deleted file mode 100644 index 760d8fb..0000000 --- a/muk_web_preview_msoffice/static/lib/handsontable/handsontable.js +++ /dev/null @@ -1,48095 +0,0 @@ -/*! - * (The MIT License) - * - * Copyright (c) 2012-2014 Marcin Warpechowski - * Copyright (c) 2015 Handsoncode sp. z o.o. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * 'Software'), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Version: 0.34.0 - * Date: Thu Jul 27 2017 13:34:25 GMT+0200 (CEST) - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(require("moment"), require("numbro"), require("pikaday")); - else if(typeof define === 'function' && define.amd) - define("Handsontable", ["moment", "numbro", "pikaday"], factory); - else if(typeof exports === 'object') - exports["Handsontable"] = factory(require("moment"), require("numbro"), require("pikaday")); - else - root["Handsontable"] = factory(root["moment"], root["numbro"], root["Pikaday"]); -})(this, function(__WEBPACK_EXTERNAL_MODULE_61__, __WEBPACK_EXTERNAL_MODULE_87__, __WEBPACK_EXTERNAL_MODULE_302__) { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 208); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.HTML_CHARACTERS = undefined; -exports.getParent = getParent; -exports.closest = closest; -exports.closestDown = closestDown; -exports.isChildOf = isChildOf; -exports.isChildOfWebComponentTable = isChildOfWebComponentTable; -exports.polymerWrap = polymerWrap; -exports.polymerUnwrap = polymerUnwrap; -exports.index = index; -exports.overlayContainsElement = overlayContainsElement; -exports.hasClass = hasClass; -exports.addClass = addClass; -exports.removeClass = removeClass; -exports.removeTextNodes = removeTextNodes; -exports.empty = empty; -exports.fastInnerHTML = fastInnerHTML; -exports.fastInnerText = fastInnerText; -exports.isVisible = isVisible; -exports.offset = offset; -exports.getWindowScrollTop = getWindowScrollTop; -exports.getWindowScrollLeft = getWindowScrollLeft; -exports.getScrollTop = getScrollTop; -exports.getScrollLeft = getScrollLeft; -exports.getScrollableElement = getScrollableElement; -exports.getTrimmingContainer = getTrimmingContainer; -exports.getStyle = getStyle; -exports.getComputedStyle = getComputedStyle; -exports.outerWidth = outerWidth; -exports.outerHeight = outerHeight; -exports.innerHeight = innerHeight; -exports.innerWidth = innerWidth; -exports.addEvent = addEvent; -exports.removeEvent = removeEvent; -exports.getCaretPosition = getCaretPosition; -exports.getSelectionEndPosition = getSelectionEndPosition; -exports.getSelectionText = getSelectionText; -exports.setCaretPosition = setCaretPosition; -exports.getScrollbarWidth = getScrollbarWidth; -exports.hasVerticalScrollbar = hasVerticalScrollbar; -exports.hasHorizontalScrollbar = hasHorizontalScrollbar; -exports.setOverlayPosition = setOverlayPosition; -exports.getCssTransform = getCssTransform; -exports.resetCssTransform = resetCssTransform; -exports.isInput = isInput; -exports.isOutsideInput = isOutsideInput; - -var _browser = __webpack_require__(25); - -var _feature = __webpack_require__(34); - -/** - * Get the parent of the specified node in the DOM tree. - * - * @param {HTMLElement} element Element from which traversing is started. - * @param {Number} [level=0] Traversing deep level. - * @return {HTMLElement|null} - */ -function getParent(element) { - var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - var iteration = -1; - var parent = null; - - while (element != null) { - if (iteration === level) { - parent = element; - break; - } - - if (element.host && element.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { - element = element.host; - } else { - iteration++; - element = element.parentNode; - } - } - - return parent; -} - -/** - * Goes up the DOM tree (including given element) until it finds an element that matches the nodes or nodes name. - * This method goes up through web components. - * - * @param {HTMLElement} element Element from which traversing is started - * @param {Array} nodes Array of elements or Array of elements name - * @param {HTMLElement} [until] - * @returns {HTMLElement|null} - */ -function closest(element, nodes, until) { - while (element != null && element !== until) { - if (element.nodeType === Node.ELEMENT_NODE && (nodes.indexOf(element.nodeName) > -1 || nodes.indexOf(element) > -1)) { - return element; - } - if (element.host && element.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { - element = element.host; - } else { - element = element.parentNode; - } - } - - return null; -} - -/** - * Goes "down" the DOM tree (including given element) until it finds an element that matches the nodes or nodes name. - * - * @param {HTMLElement} element Element from which traversing is started - * @param {Array} nodes Array of elements or Array of elements name - * @param {HTMLElement} [until] - * @returns {HTMLElement|null} - */ -function closestDown(element, nodes, until) { - var matched = []; - - while (element) { - element = closest(element, nodes, until); - - if (!element || until && !until.contains(element)) { - break; - } - matched.push(element); - - if (element.host && element.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { - element = element.host; - } else { - element = element.parentNode; - } - } - var length = matched.length; - - return length ? matched[length - 1] : null; -} - -/** - * Goes up the DOM tree and checks if element is child of another element. - * - * @param child Child element - * @param {Object|String} parent Parent element OR selector of the parent element. - * If string provided, function returns `true` for the first occurrence of element with that class. - * @returns {Boolean} - */ -function isChildOf(child, parent) { - var node = child.parentNode; - var queriedParents = []; - - if (typeof parent === 'string') { - queriedParents = Array.prototype.slice.call(document.querySelectorAll(parent), 0); - } else { - queriedParents.push(parent); - } - - while (node != null) { - if (queriedParents.indexOf(node) > -1) { - return true; - } - node = node.parentNode; - } - - return false; -} - -/** - * Check if an element is part of `hot-table` web component. - * - * @param {Element} element - * @returns {Boolean} - */ -function isChildOfWebComponentTable(element) { - var hotTableName = 'hot-table', - result = false, - parentNode; - - parentNode = polymerWrap(element); - - function isHotTable(element) { - return element.nodeType === Node.ELEMENT_NODE && element.nodeName === hotTableName.toUpperCase(); - } - - while (parentNode != null) { - if (isHotTable(parentNode)) { - result = true; - break; - } else if (parentNode.host && parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { - result = isHotTable(parentNode.host); - - if (result) { - break; - } - parentNode = parentNode.host; - } - parentNode = parentNode.parentNode; - } - - return result; -} - -/** - * Wrap element into polymer/webcomponent container if exists - * - * @param element - * @returns {*} - */ -function polymerWrap(element) { - /* global Polymer */ - return typeof Polymer !== 'undefined' && typeof wrap === 'function' ? wrap(element) : element; -} - -/** - * Unwrap element from polymer/webcomponent container if exists - * - * @param element - * @returns {*} - */ -function polymerUnwrap(element) { - /* global Polymer */ - return typeof Polymer !== 'undefined' && typeof unwrap === 'function' ? unwrap(element) : element; -} - -/** - * Counts index of element within its parent - * WARNING: for performance reasons, assumes there are only element nodes (no text nodes). This is true for Walkotnable - * Otherwise would need to check for nodeType or use previousElementSibling - * - * @see http://jsperf.com/sibling-index/10 - * @param {Element} element - * @return {Number} - */ -function index(element) { - var i = 0; - - if (element.previousSibling) { - /* eslint-disable no-cond-assign */ - while (element = element.previousSibling) { - ++i; - } - } - - return i; -} - -/** - * Check if the provided overlay contains the provided element - * - * @param {String} overlay - * @param {HTMLElement} element - * @returns {boolean} - */ -function overlayContainsElement(overlayType, element) { - var overlayElement = document.querySelector('.ht_clone_' + overlayType); - return overlayElement ? overlayElement.contains(element) : null; -} - -var classListSupport = !!document.documentElement.classList; -var _hasClass, _addClass, _removeClass; - -function filterEmptyClassNames(classNames) { - var len = 0, - result = []; - - if (!classNames || !classNames.length) { - return result; - } - while (classNames[len]) { - result.push(classNames[len]); - len++; - } - - return result; -} - -if (classListSupport) { - var isSupportMultipleClassesArg = function () { - var element = document.createElement('div'); - - element.classList.add('test', 'test2'); - - return element.classList.contains('test2'); - }(); - - _hasClass = function _hasClass(element, className) { - if (className === '') { - return false; - } - - return element.classList.contains(className); - }; - - _addClass = function _addClass(element, className) { - var len = 0; - - if (typeof className === 'string') { - className = className.split(' '); - } - className = filterEmptyClassNames(className); - - if (isSupportMultipleClassesArg) { - element.classList.add.apply(element.classList, className); - } else { - while (className && className[len]) { - element.classList.add(className[len]); - len++; - } - } - }; - - _removeClass = function _removeClass(element, className) { - var len = 0; - - if (typeof className === 'string') { - className = className.split(' '); - } - className = filterEmptyClassNames(className); - - if (isSupportMultipleClassesArg) { - element.classList.remove.apply(element.classList, className); - } else { - while (className && className[len]) { - element.classList.remove(className[len]); - len++; - } - } - }; -} else { - var createClassNameRegExp = function createClassNameRegExp(className) { - return new RegExp('(\\s|^)' + className + '(\\s|$)'); - }; - - _hasClass = function _hasClass(element, className) { - // http://snipplr.com/view/3561/addclass-removeclass-hasclass/ - return !!element.className.match(createClassNameRegExp(className)); - }; - - _addClass = function _addClass(element, className) { - var len = 0, - _className = element.className; - - if (typeof className === 'string') { - className = className.split(' '); - } - if (_className === '') { - _className = className.join(' '); - } else { - while (className && className[len]) { - if (!createClassNameRegExp(className[len]).test(_className)) { - _className += ' ' + className[len]; - } - len++; - } - } - element.className = _className; - }; - - _removeClass = function _removeClass(element, className) { - var len = 0, - _className = element.className; - - if (typeof className === 'string') { - className = className.split(' '); - } - while (className && className[len]) { - // String.prototype.trim is defined in polyfill.js - _className = _className.replace(createClassNameRegExp(className[len]), ' ').trim(); - len++; - } - if (element.className !== _className) { - element.className = _className; - } - }; -} - -/** - * Checks if element has class name - * - * @param {HTMLElement} element - * @param {String} className Class name to check - * @returns {Boolean} - */ -function hasClass(element, className) { - return _hasClass(element, className); -} - -/** - * Add class name to an element - * - * @param {HTMLElement} element - * @param {String|Array} className Class name as string or array of strings - */ -function addClass(element, className) { - return _addClass(element, className); -} - -/** - * Remove class name from an element - * - * @param {HTMLElement} element - * @param {String|Array} className Class name as string or array of strings - */ -function removeClass(element, className) { - return _removeClass(element, className); -} - -function removeTextNodes(element, parent) { - if (element.nodeType === 3) { - parent.removeChild(element); // bye text nodes! - } else if (['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR'].indexOf(element.nodeName) > -1) { - var childs = element.childNodes; - for (var i = childs.length - 1; i >= 0; i--) { - removeTextNodes(childs[i], element); - } - } -} - -/** - * Remove childs function - * WARNING - this doesn't unload events and data attached by jQuery - * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/9 - * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/11 - no siginificant improvement with Chrome remove() method - * - * @param element - * @returns {void} - */ -// -function empty(element) { - var child; - /* eslint-disable no-cond-assign */ - while (child = element.lastChild) { - element.removeChild(child); - } -} - -var HTML_CHARACTERS = exports.HTML_CHARACTERS = /(<(.*)>|&(.*);)/; - -/** - * Insert content into element trying avoid innerHTML method. - * @return {void} - */ -function fastInnerHTML(element, content) { - if (HTML_CHARACTERS.test(content)) { - element.innerHTML = content; - } else { - fastInnerText(element, content); - } -} - -/** - * Insert text content into element - * @return {void} - */ - -var textContextSupport = !!document.createTextNode('test').textContent; - -function fastInnerText(element, content) { - var child = element.firstChild; - - if (child && child.nodeType === 3 && child.nextSibling === null) { - // fast lane - replace existing text node - - if (textContextSupport) { - // http://jsperf.com/replace-text-vs-reuse - child.textContent = content; - } else { - // http://jsperf.com/replace-text-vs-reuse - child.data = content; - } - } else { - // slow lane - empty element and insert a text node - empty(element); - element.appendChild(document.createTextNode(content)); - } -} - -/** - * Returns true if element is attached to the DOM and visible, false otherwise - * @param elem - * @returns {boolean} - */ -function isVisible(elem) { - var next = elem; - - while (polymerUnwrap(next) !== document.documentElement) { - // until reached - if (next === null) { - // parent detached from DOM - return false; - } else if (next.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { - if (next.host) { - // this is Web Components Shadow DOM - // see: http://w3c.github.io/webcomponents/spec/shadow/#encapsulation - // according to spec, should be if (next.ownerDocument !== window.document), but that doesn't work yet - if (next.host.impl) { - // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features disabled - return isVisible(next.host.impl); - } else if (next.host) { - // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features enabled - return isVisible(next.host); - } - throw new Error('Lost in Web Components world'); - } else { - return false; // this is a node detached from document in IE8 - } - } else if (next.style.display === 'none') { - return false; - } - next = next.parentNode; - } - - return true; -} - -/** - * Returns elements top and left offset relative to the document. Function is not compatible with jQuery offset. - * - * @param {HTMLElement} elem - * @return {Object} Returns object with `top` and `left` props - */ -function offset(elem) { - var offsetLeft, offsetTop, lastElem, docElem, box; - - docElem = document.documentElement; - - if ((0, _feature.hasCaptionProblem)() && elem.firstChild && elem.firstChild.nodeName === 'CAPTION') { - // fixes problem with Firefox ignoring in TABLE offset (see also export outerHeight) - // http://jsperf.com/offset-vs-getboundingclientrect/8 - box = elem.getBoundingClientRect(); - - return { - top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0), - left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0) - }; - } - offsetLeft = elem.offsetLeft; - offsetTop = elem.offsetTop; - lastElem = elem; - - /* eslint-disable no-cond-assign */ - while (elem = elem.offsetParent) { - // from my observation, document.body always has scrollLeft/scrollTop == 0 - if (elem === document.body) { - break; - } - offsetLeft += elem.offsetLeft; - offsetTop += elem.offsetTop; - lastElem = elem; - } - - // slow - http://jsperf.com/offset-vs-getboundingclientrect/6 - if (lastElem && lastElem.style.position === 'fixed') { - // if(lastElem !== document.body) { //faster but does gives false positive in Firefox - offsetLeft += window.pageXOffset || docElem.scrollLeft; - offsetTop += window.pageYOffset || docElem.scrollTop; - } - - return { - left: offsetLeft, - top: offsetTop - }; -} - -/** - * Returns the document's scrollTop property. - * - * @returns {Number} - */ -function getWindowScrollTop() { - var res = window.scrollY; - - if (res === void 0) { - // IE8-11 - res = document.documentElement.scrollTop; - } - - return res; -} - -/** - * Returns the document's scrollLeft property. - * - * @returns {Number} - */ -function getWindowScrollLeft() { - var res = window.scrollX; - - if (res === void 0) { - // IE8-11 - res = document.documentElement.scrollLeft; - } - - return res; -} - -/** - * Returns the provided element's scrollTop property. - * - * @param element - * @returns {Number} - */ -function getScrollTop(element) { - if (element === window) { - return getWindowScrollTop(); - } - return element.scrollTop; -} - -/** - * Returns the provided element's scrollLeft property. - * - * @param element - * @returns {Number} - */ -function getScrollLeft(element) { - if (element === window) { - return getWindowScrollLeft(); - } - return element.scrollLeft; -} - -/** - * Returns a DOM element responsible for scrolling of the provided element. - * - * @param {HTMLElement} element - * @returns {HTMLElement} Element's scrollable parent - */ -function getScrollableElement(element) { - var el = element.parentNode, - props = ['auto', 'scroll'], - overflow, - overflowX, - overflowY, - computedStyle = '', - computedOverflow = '', - computedOverflowY = '', - computedOverflowX = ''; - - while (el && el.style && document.body !== el) { - overflow = el.style.overflow; - overflowX = el.style.overflowX; - overflowY = el.style.overflowY; - - if (overflow == 'scroll' || overflowX == 'scroll' || overflowY == 'scroll') { - return el; - } else if (window.getComputedStyle) { - computedStyle = window.getComputedStyle(el); - computedOverflow = computedStyle.getPropertyValue('overflow'); - computedOverflowY = computedStyle.getPropertyValue('overflow-y'); - computedOverflowX = computedStyle.getPropertyValue('overflow-x'); - - if (computedOverflow === 'scroll' || computedOverflowX === 'scroll' || computedOverflowY === 'scroll') { - return el; - } - } - - if (el.clientHeight <= el.scrollHeight && (props.indexOf(overflowY) !== -1 || props.indexOf(overflow) !== -1 || props.indexOf(computedOverflow) !== -1 || props.indexOf(computedOverflowY) !== -1)) { - return el; - } - if (el.clientWidth <= el.scrollWidth && (props.indexOf(overflowX) !== -1 || props.indexOf(overflow) !== -1 || props.indexOf(computedOverflow) !== -1 || props.indexOf(computedOverflowX) !== -1)) { - return el; - } - el = el.parentNode; - } - - return window; -} - -/** - * Returns a DOM element responsible for trimming the provided element. - * - * @param {HTMLElement} base Base element - * @returns {HTMLElement} Base element's trimming parent - */ -function getTrimmingContainer(base) { - var el = base.parentNode; - - while (el && el.style && document.body !== el) { - if (el.style.overflow !== 'visible' && el.style.overflow !== '') { - return el; - } else if (window.getComputedStyle) { - var computedStyle = window.getComputedStyle(el); - - if (computedStyle.getPropertyValue('overflow') !== 'visible' && computedStyle.getPropertyValue('overflow') !== '') { - return el; - } - } - - el = el.parentNode; - } - - return window; -} - -/** - * Returns a style property for the provided element. (Be it an inline or external style). - * - * @param {HTMLElement} element - * @param {String} prop Wanted property - * @returns {String|undefined} Element's style property - */ -function getStyle(element, prop) { - /* eslint-disable */ - if (!element) { - return; - } else if (element === window) { - if (prop === 'width') { - return window.innerWidth + 'px'; - } else if (prop === 'height') { - return window.innerHeight + 'px'; - } - - return; - } - - var styleProp = element.style[prop], - computedStyle; - - if (styleProp !== '' && styleProp !== void 0) { - return styleProp; - } else { - computedStyle = getComputedStyle(element); - - if (computedStyle[prop] !== '' && computedStyle[prop] !== void 0) { - return computedStyle[prop]; - } - } -} - -/** - * Returns a computed style object for the provided element. (Needed if style is declared in external stylesheet). - * - * @param element - * @returns {IEElementStyle|CssStyle} Elements computed style object - */ -function getComputedStyle(element) { - return element.currentStyle || document.defaultView.getComputedStyle(element); -} - -/** - * Returns the element's outer width. - * - * @param element - * @returns {number} Element's outer width - */ -function outerWidth(element) { - return element.offsetWidth; -} - -/** - * Returns the element's outer height - * - * @param elem - * @returns {number} Element's outer height - */ -function outerHeight(elem) { - if ((0, _feature.hasCaptionProblem)() && elem.firstChild && elem.firstChild.nodeName === 'CAPTION') { - // fixes problem with Firefox ignoring in TABLE.offsetHeight - // jQuery (1.10.1) still has this unsolved - // may be better to just switch to getBoundingClientRect - // http://bililite.com/blog/2009/03/27/finding-the-size-of-a-table/ - // http://lists.w3.org/Archives/Public/www-style/2009Oct/0089.html - // http://bugs.jquery.com/ticket/2196 - // http://lists.w3.org/Archives/Public/www-style/2009Oct/0140.html#start140 - return elem.offsetHeight + elem.firstChild.offsetHeight; - } - - return elem.offsetHeight; -} - -/** - * Returns the element's inner height. - * - * @param element - * @returns {number} Element's inner height - */ -function innerHeight(element) { - return element.clientHeight || element.innerHeight; -} - -/** - * Returns the element's inner width. - * - * @param element - * @returns {number} Element's inner width - */ -function innerWidth(element) { - return element.clientWidth || element.innerWidth; -} - -function addEvent(element, event, callback) { - if (window.addEventListener) { - element.addEventListener(event, callback, false); - } else { - element.attachEvent('on' + event, callback); - } -} - -function removeEvent(element, event, callback) { - if (window.removeEventListener) { - element.removeEventListener(event, callback, false); - } else { - element.detachEvent('on' + event, callback); - } -} - -/** - * Returns caret position in text input - * - * @author http://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea - * @return {Number} - */ -function getCaretPosition(el) { - if (el.selectionStart) { - return el.selectionStart; - } else if (document.selection) { - // IE8 - el.focus(); - - var r = document.selection.createRange(); - - if (r == null) { - return 0; - } - var re = el.createTextRange(); - var rc = re.duplicate(); - - re.moveToBookmark(r.getBookmark()); - rc.setEndPoint('EndToStart', re); - - return rc.text.length; - } - - return 0; -} - -/** - * Returns end of the selection in text input - * - * @return {Number} - */ -function getSelectionEndPosition(el) { - if (el.selectionEnd) { - return el.selectionEnd; - } else if (document.selection) { - // IE8 - var r = document.selection.createRange(); - - if (r == null) { - return 0; - } - var re = el.createTextRange(); - - return re.text.indexOf(r.text) + r.text.length; - } - - return 0; -} - -/** - * Returns text under selection. - * - * @returns {String} - */ -function getSelectionText() { - var text = ''; - - if (window.getSelection) { - text = window.getSelection().toString(); - } else if (document.selection && document.selection.type !== 'Control') { - text = document.selection.createRange().text; - } - - return text; -} - -/** - * Sets caret position in text input. - * - * @author http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/ - * @param {Element} element - * @param {Number} pos - * @param {Number} endPos - */ -function setCaretPosition(element, pos, endPos) { - if (endPos === void 0) { - endPos = pos; - } - if (element.setSelectionRange) { - element.focus(); - - try { - element.setSelectionRange(pos, endPos); - } catch (err) { - var elementParent = element.parentNode; - var parentDisplayValue = elementParent.style.display; - elementParent.style.display = 'block'; - element.setSelectionRange(pos, endPos); - elementParent.style.display = parentDisplayValue; - } - } else if (element.createTextRange) { - // IE8 - var range = element.createTextRange(); - range.collapse(true); - range.moveEnd('character', endPos); - range.moveStart('character', pos); - range.select(); - } -} - -var cachedScrollbarWidth; - -// http://stackoverflow.com/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes -function walkontableCalculateScrollbarWidth() { - var inner = document.createElement('div'); - inner.style.height = '200px'; - inner.style.width = '100%'; - - var outer = document.createElement('div'); - outer.style.boxSizing = 'content-box'; - outer.style.height = '150px'; - outer.style.left = '0px'; - outer.style.overflow = 'hidden'; - outer.style.position = 'absolute'; - outer.style.top = '0px'; - outer.style.width = '200px'; - outer.style.visibility = 'hidden'; - outer.appendChild(inner); - - (document.body || document.documentElement).appendChild(outer); - var w1 = inner.offsetWidth; - outer.style.overflow = 'scroll'; - var w2 = inner.offsetWidth; - if (w1 == w2) { - w2 = outer.clientWidth; - } - - (document.body || document.documentElement).removeChild(outer); - - return w1 - w2; -} - -/** - * Returns the computed width of the native browser scroll bar. - * - * @return {Number} width - */ -function getScrollbarWidth() { - if (cachedScrollbarWidth === void 0) { - cachedScrollbarWidth = walkontableCalculateScrollbarWidth(); - } - - return cachedScrollbarWidth; -} - -/** - * Checks if the provided element has a vertical scrollbar. - * - * @param {HTMLElement} element - * @returns {Boolean} - */ -function hasVerticalScrollbar(element) { - return element.offsetWidth !== element.clientWidth; -} - -/** - * Checks if the provided element has a vertical scrollbar. - * - * @param {HTMLElement} element - * @returns {Boolean} - */ -function hasHorizontalScrollbar(element) { - return element.offsetHeight !== element.clientHeight; -} - -/** - * Sets overlay position depending on it's type and used browser - */ -function setOverlayPosition(overlayElem, left, top) { - if ((0, _browser.isIE8)() || (0, _browser.isIE9)()) { - overlayElem.style.top = top; - overlayElem.style.left = left; - } else if ((0, _browser.isSafari)()) { - overlayElem.style['-webkit-transform'] = 'translate3d(' + left + ',' + top + ',0)'; - } else { - overlayElem.style.transform = 'translate3d(' + left + ',' + top + ',0)'; - } -} - -function getCssTransform(element) { - var transform; - - if (element.style.transform && (transform = element.style.transform) !== '') { - return ['transform', transform]; - } else if (element.style['-webkit-transform'] && (transform = element.style['-webkit-transform']) !== '') { - - return ['-webkit-transform', transform]; - } - - return -1; -} - -function resetCssTransform(element) { - if (element.style.transform && element.style.transform !== '') { - element.style.transform = ''; - } else if (element.style['-webkit-transform'] && element.style['-webkit-transform'] !== '') { - element.style['-webkit-transform'] = ''; - } -} - -/** - * Determines if the given DOM element is an input field. - * Notice: By 'input' we mean input, textarea and select nodes - * - * @param {HTMLElement} element - DOM element - * @returns {Boolean} - */ -function isInput(element) { - var inputs = ['INPUT', 'SELECT', 'TEXTAREA']; - - return element && (inputs.indexOf(element.nodeName) > -1 || element.contentEditable === 'true'); -} - -/** - * Determines if the given DOM element is an input field placed OUTSIDE of HOT. - * Notice: By 'input' we mean input, textarea and select nodes - * - * @param {HTMLElement} element - DOM element - * @returns {Boolean} - */ -function isOutsideInput(element) { - return isInput(element) && element.className.indexOf('handsontableInput') == -1 && element.className.indexOf('copyPaste') == -1; -} - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.duckSchema = duckSchema; -exports.inherit = inherit; -exports.extend = extend; -exports.deepExtend = deepExtend; -exports.deepClone = deepClone; -exports.clone = clone; -exports.mixin = mixin; -exports.isObjectEquals = isObjectEquals; -exports.isObject = isObject; -exports.defineGetter = defineGetter; -exports.objectEach = objectEach; -exports.getProperty = getProperty; -exports.deepObjectSize = deepObjectSize; -exports.createObjectPropListener = createObjectPropListener; -exports.hasOwnProperty = hasOwnProperty; - -var _array = __webpack_require__(2); - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/** - * Generate schema for passed object. - * - * @param {Array|Object} object - * @returns {Array|Object} - */ -function duckSchema(object) { - var schema; - - if (Array.isArray(object)) { - schema = []; - } else { - schema = {}; - - objectEach(object, function (value, key) { - if (key === '__children') { - return; - } - - if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && !Array.isArray(value)) { - schema[key] = duckSchema(value); - } else if (Array.isArray(value)) { - if (value.length && _typeof(value[0]) === 'object' && !Array.isArray(value[0])) { - schema[key] = [duckSchema(value[0])]; - } else { - schema[key] = []; - } - } else { - schema[key] = null; - } - }); - } - - return schema; -} - -/** - * Inherit without without calling parent constructor, and setting `Child.prototype.constructor` to `Child` instead of `Parent`. - * Creates temporary dummy function to call it as constructor. - * Described in ticket: https://github.com/handsontable/handsontable/pull/516 - * - * @param {Object} Child child class - * @param {Object} Parent parent class - * @return {Object} extended Child - */ -function inherit(Child, Parent) { - Parent.prototype.constructor = Parent; - Child.prototype = new Parent(); - Child.prototype.constructor = Child; - - return Child; -} - -/** - * Perform shallow extend of a target object with extension's own properties. - * - * @param {Object} target An object that will receive the new properties. - * @param {Object} extension An object containing additional properties to merge into the target. - */ -function extend(target, extension) { - objectEach(extension, function (value, key) { - target[key] = value; - }); - - return target; -} - -/** - * Perform deep extend of a target object with extension's own properties. - * - * @param {Object} target An object that will receive the new properties. - * @param {Object} extension An object containing additional properties to merge into the target. - */ -function deepExtend(target, extension) { - objectEach(extension, function (value, key) { - if (extension[key] && _typeof(extension[key]) === 'object') { - if (!target[key]) { - if (Array.isArray(extension[key])) { - target[key] = []; - } else if (Object.prototype.toString.call(extension[key]) === '[object Date]') { - target[key] = extension[key]; - } else { - target[key] = {}; - } - } - deepExtend(target[key], extension[key]); - } else { - target[key] = extension[key]; - } - }); -} - -/** - * Perform deep clone of an object. - * WARNING! Only clones JSON properties. Will cause error when `obj` contains a function, Date, etc. - * - * @param {Object} obj An object that will be cloned - * @return {Object} - */ -function deepClone(obj) { - if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object') { - return JSON.parse(JSON.stringify(obj)); - } - - return obj; -} - -/** - * Shallow clone object. - * - * @param {Object} object - * @returns {Object} - */ -function clone(object) { - var result = {}; - - objectEach(object, function (value, key) { - result[key] = value; - }); - - return result; -} - -/** - * Extend the Base object (usually prototype) of the functionality the `mixins` objects. - * - * @param {Object} Base Base object which will be extended. - * @param {Object} mixins The object of the functionality will be "copied". - * @returns {Object} - */ -function mixin(Base) { - if (!Base.MIXINS) { - Base.MIXINS = []; - } - - for (var _len = arguments.length, mixins = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - mixins[_key - 1] = arguments[_key]; - } - - (0, _array.arrayEach)(mixins, function (mixin) { - Base.MIXINS.push(mixin.MIXIN_NAME); - - objectEach(mixin, function (value, key) { - if (Base.prototype[key] !== void 0) { - throw new Error('Mixin conflict. Property \'' + key + '\' already exist and cannot be overwritten.'); - } - if (typeof value === 'function') { - Base.prototype[key] = value; - } else { - var getter = function _getter(propertyName, initialValue) { - propertyName = '_' + propertyName; - - var initValue = function initValue(value) { - if (Array.isArray(value) || isObject(value)) { - value = deepClone(value); - } - - return value; - }; - - return function () { - if (this[propertyName] === void 0) { - this[propertyName] = initValue(initialValue); - } - - return this[propertyName]; - }; - }; - var setter = function _setter(propertyName) { - propertyName = '_' + propertyName; - - return function (value) { - this[propertyName] = value; - }; - }; - Object.defineProperty(Base.prototype, key, { - get: getter(key, value), - set: setter(key), - configurable: true - }); - } - }); - }); - - return Base; -} - -/** - * Checks if two objects or arrays are (deep) equal - * - * @param {Object|Array} object1 - * @param {Object|Array} object2 - * @returns {Boolean} - */ -function isObjectEquals(object1, object2) { - return JSON.stringify(object1) === JSON.stringify(object2); -} - -/** - * Determines whether given object is a plain Object. - * Note: String and Array are not plain Objects - * @param {*} obj - * @returns {boolean} - */ -function isObject(obj) { - return Object.prototype.toString.call(obj) == '[object Object]'; -} - -function defineGetter(object, property, value, options) { - options.value = value; - options.writable = options.writable !== false; - options.enumerable = options.enumerable !== false; - options.configurable = options.configurable !== false; - - Object.defineProperty(object, property, options); -} - -/** - * A specialized version of `.forEach` for objects. - * - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function objectEach(object, iteratee) { - for (var key in object) { - if (!object.hasOwnProperty || object.hasOwnProperty && Object.prototype.hasOwnProperty.call(object, key)) { - if (iteratee(object[key], key, object) === false) { - break; - } - } - } - - return object; -} - -/** - * Get object property by its name. Access to sub properties can be achieved by dot notation (e.q. `'foo.bar.baz'`). - * - * @param {Object} object Object which value will be exported. - * @param {String} name Object property name. - * @returns {*} - */ -function getProperty(object, name) { - var names = name.split('.'); - var result = object; - - objectEach(names, function (name) { - result = result[name]; - - if (result === void 0) { - result = void 0; - - return false; - } - }); - - return result; -} - -/** - * Return object length (recursively). - * - * @param {*} object Object for which we want get length. - * @returns {Number} - */ -function deepObjectSize(object) { - if (!isObject(object)) { - return 0; - } - var recursObjLen = function recursObjLen(obj) { - var result = 0; - - if (isObject(obj)) { - objectEach(obj, function (key) { - result += recursObjLen(key); - }); - } else { - result++; - } - - return result; - }; - - return recursObjLen(object); -} - -/** - * Create object with property where its value change will be observed. - * - * @param {*} [defaultValue=undefined] Default value. - * @param {String} [propertyToListen='value'] Property to listen. - * @returns {Object} - */ -function createObjectPropListener(defaultValue) { - var _holder; - - var propertyToListen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'value'; - - var privateProperty = '_' + propertyToListen; - var holder = (_holder = { - _touched: false - }, _defineProperty(_holder, privateProperty, defaultValue), _defineProperty(_holder, 'isTouched', function isTouched() { - return this._touched; - }), _holder); - - Object.defineProperty(holder, propertyToListen, { - get: function get() { - return this[privateProperty]; - }, - set: function set(value) { - this._touched = true; - this[privateProperty] = value; - }, - - enumerable: true, - configurable: true - }); - - return holder; -} - -/** - * Check if at specified `key` there is any value for `object`. - * - * @param {Object} object Object to search value at specyfic key. - * @param {String} key String key to check. - */ -function hasOwnProperty(object, key) { - return Object.prototype.hasOwnProperty.call(object, key); -} - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.to2dArray = to2dArray; -exports.extendArray = extendArray; -exports.pivot = pivot; -exports.arrayReduce = arrayReduce; -exports.arrayFilter = arrayFilter; -exports.arrayMap = arrayMap; -exports.arrayEach = arrayEach; -exports.arraySum = arraySum; -exports.arrayMax = arrayMax; -exports.arrayMin = arrayMin; -exports.arrayAvg = arrayAvg; -exports.arrayFlatten = arrayFlatten; -exports.arrayUnique = arrayUnique; -function to2dArray(arr) { - var i = 0, - ilen = arr.length; - - while (i < ilen) { - arr[i] = [arr[i]]; - i++; - } -} - -function extendArray(arr, extension) { - var i = 0, - ilen = extension.length; - - while (i < ilen) { - arr.push(extension[i]); - i++; - } -} - -function pivot(arr) { - var pivotedArr = []; - - if (!arr || arr.length === 0 || !arr[0] || arr[0].length === 0) { - return pivotedArr; - } - - var rowCount = arr.length; - var colCount = arr[0].length; - - for (var i = 0; i < rowCount; i++) { - for (var j = 0; j < colCount; j++) { - if (!pivotedArr[j]) { - pivotedArr[j] = []; - } - - pivotedArr[j][i] = arr[i][j]; - } - } - - return pivotedArr; -} - -/** - * A specialized version of `.reduce` for arrays without support for callback - * shorthands and `this` binding. - * - * {@link https://github.com/lodash/lodash/blob/master/lodash.js} - * - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {Boolean} [initFromArray] Specify using the first element of `array` as the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initFromArray) { - var index = -1, - length = array.length; - - if (initFromArray && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - - return accumulator; -} - -/** - * A specialized version of `.filter` for arrays without support for callback - * shorthands and `this` binding. - * - * {@link https://github.com/lodash/lodash/blob/master/lodash.js} - * - * @param {Array} array The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array.length, - resIndex = -1, - result = []; - - while (++index < length) { - var value = array[index]; - - if (predicate(value, index, array)) { - result[++resIndex] = value; - } - } - - return result; -} - -/** - * A specialized version of `.map` for arrays without support for callback - * shorthands and `this` binding. - * - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array.length, - resIndex = -1, - result = []; - - while (++index < length) { - var value = array[index]; - - result[++resIndex] = iteratee(value, index, array); - } - - return result; -} - -/** - * A specialized version of `.forEach` for arrays without support for callback - * shorthands and `this` binding. - * - * {@link https://github.com/lodash/lodash/blob/master/lodash.js} - * - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - - return array; -} - -/** - * Calculate sum value for each item of the array. - * - * @param {Array} array The array to process. - * @returns {Number} Returns calculated sum value. - */ -function arraySum(array) { - return arrayReduce(array, function (a, b) { - return a + b; - }, 0); -} - -/** - * Returns the highest value from an array. Can be array of numbers or array of strings. - * NOTICE: Mixed values is not supported. - * - * @param {Array} array The array to process. - * @returns {Number} Returns the highest value from an array. - */ -function arrayMax(array) { - return arrayReduce(array, function (a, b) { - return a > b ? a : b; - }, Array.isArray(array) ? array[0] : void 0); -} - -/** - * Returns the lowest value from an array. Can be array of numbers or array of strings. - * NOTICE: Mixed values is not supported. - * - * @param {Array} array The array to process. - * @returns {Number} Returns the lowest value from an array. - */ -function arrayMin(array) { - return arrayReduce(array, function (a, b) { - return a < b ? a : b; - }, Array.isArray(array) ? array[0] : void 0); -} - -/** - * Calculate average value for each item of the array. - * - * @param {Array} array The array to process. - * @returns {Number} Returns calculated average value. - */ -function arrayAvg(array) { - if (!array.length) { - return 0; - } - - return arraySum(array) / array.length; -} - -/** - * Flatten multidimensional array. - * - * @param {Array} array Array of Arrays - * @returns {Array} - */ -function arrayFlatten(array) { - return arrayReduce(array, function (initial, value) { - return initial.concat(Array.isArray(value) ? arrayFlatten(value) : value); - }, []); -} - -/** - * Unique values in the array. - * - * @param {Array} array The array to process. - * @returns {Array} - */ -function arrayUnique(array) { - var unique = []; - - arrayEach(array, function (value) { - if (unique.indexOf(value) === -1) { - unique.push(value); - } - }); - - return unique; -} - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(13) - , core = __webpack_require__(44) - , hide = __webpack_require__(32) - , redefine = __webpack_require__(33) - , ctx = __webpack_require__(29) - , PROTOTYPE = 'prototype'; - -var $export = function(type, name, source){ - var IS_FORCED = type & $export.F - , IS_GLOBAL = type & $export.G - , IS_STATIC = type & $export.S - , IS_PROTO = type & $export.P - , IS_BIND = type & $export.B - , target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE] - , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) - , expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}) - , key, own, out, exp; - if(IS_GLOBAL)source = name; - for(key in source){ - // contains in native - own = !IS_FORCED && target && target[key] !== undefined; - // export native or passed - out = (own ? target : source)[key]; - // bind timers to global for call from export context - exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - // extend global - if(target)redefine(target, key, out, type & $export.U); - // export - if(exports[key] != out)hide(exports, key, exp); - if(IS_PROTO && expProto[key] != out)expProto[key] = out; - } -}; -global.core = core; -// type bitmap -$export.F = 1; // forced -$export.G = 2; // global -$export.S = 4; // static -$export.P = 8; // proto -$export.B = 16; // bind -$export.W = 32; // wrap -$export.U = 64; // safe -$export.R = 128; // real proto method for `library` -module.exports = $export; - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // import Core from './core'; - - -exports.getListenersCounter = getListenersCounter; - -var _element = __webpack_require__(0); - -var _feature = __webpack_require__(34); - -var _event = __webpack_require__(7); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * Counter which tracks unregistered listeners (useful for detecting memory leaks). - * - * @type {Number} - */ -var listenersCounter = 0; - -/** - * Event DOM manager for internal use in Handsontable. - * - * @class EventManager - * @util - */ - -var EventManager = function () { - /** - * @param {Object} [context=null] - * @private - */ - function EventManager() { - var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - _classCallCheck(this, EventManager); - - this.context = context || this; - - if (!this.context.eventListeners) { - this.context.eventListeners = []; - } - } - - /** - * Register specified listener (`eventName`) to the element. - * - * @param {Element} element Target element. - * @param {String} eventName Event name. - * @param {Function} callback Function which will be called after event occur. - * @returns {Function} Returns function which you can easily call to remove that event - */ - - - _createClass(EventManager, [{ - key: 'addEventListener', - value: function addEventListener(element, eventName, callback) { - var _this = this; - - var context = this.context; - - function callbackProxy(event) { - event = extendEvent(context, event); - - callback.call(this, event); - } - this.context.eventListeners.push({ - element: element, - event: eventName, - callback: callback, - callbackProxy: callbackProxy - }); - - if (window.addEventListener) { - element.addEventListener(eventName, callbackProxy, false); - } else { - element.attachEvent('on' + eventName, callbackProxy); - } - listenersCounter++; - - return function () { - _this.removeEventListener(element, eventName, callback); - }; - } - - /** - * Remove the event listener previously registered. - * - * @param {Element} element Target element. - * @param {String} eventName Event name. - * @param {Function} callback Function to remove from the event target. It must be the same as during registration listener. - */ - - }, { - key: 'removeEventListener', - value: function removeEventListener(element, eventName, callback) { - var len = this.context.eventListeners.length; - var tmpEvent = void 0; - - while (len--) { - tmpEvent = this.context.eventListeners[len]; - - if (tmpEvent.event == eventName && tmpEvent.element == element) { - if (callback && callback != tmpEvent.callback) { - /* eslint-disable no-continue */ - continue; - } - this.context.eventListeners.splice(len, 1); - - if (tmpEvent.element.removeEventListener) { - tmpEvent.element.removeEventListener(tmpEvent.event, tmpEvent.callbackProxy, false); - } else { - tmpEvent.element.detachEvent('on' + tmpEvent.event, tmpEvent.callbackProxy); - } - listenersCounter--; - } - } - } - - /** - * Clear all previously registered events. - * - * @private - * @since 0.15.0-beta3 - */ - - }, { - key: 'clearEvents', - value: function clearEvents() { - if (!this.context) { - return; - } - var len = this.context.eventListeners.length; - - while (len--) { - var event = this.context.eventListeners[len]; - - if (event) { - this.removeEventListener(event.element, event.event, event.callback); - } - } - } - - /** - * Clear all previously registered events. - */ - - }, { - key: 'clear', - value: function clear() { - this.clearEvents(); - } - - /** - * Destroy instance of EventManager. - */ - - }, { - key: 'destroy', - value: function destroy() { - this.clearEvents(); - this.context = null; - } - - /** - * Trigger event at the specified target element. - * - * @param {Element} element Target element. - * @param {String} eventName Event name. - */ - - }, { - key: 'fireEvent', - value: function fireEvent(element, eventName) { - var options = { - bubbles: true, - cancelable: eventName !== 'mousemove', - view: window, - detail: 0, - screenX: 0, - screenY: 0, - clientX: 1, - clientY: 1, - ctrlKey: false, - altKey: false, - shiftKey: false, - metaKey: false, - button: 0, - relatedTarget: undefined - }; - var event; - - if (document.createEvent) { - event = document.createEvent('MouseEvents'); - event.initMouseEvent(eventName, options.bubbles, options.cancelable, options.view, options.detail, options.screenX, options.screenY, options.clientX, options.clientY, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, options.relatedTarget || document.body.parentNode); - } else { - event = document.createEventObject(); - } - - if (element.dispatchEvent) { - element.dispatchEvent(event); - } else { - element.fireEvent('on' + eventName, event); - } - } - }]); - - return EventManager; -}(); - -/** - * @param {Object} context - * @param {Event} event - * @private - * @returns {*} - */ - - -function extendEvent(context, event) { - var componentName = 'HOT-TABLE'; - var isHotTableSpotted = void 0; - var fromElement = void 0; - var realTarget = void 0; - var target = void 0; - var len = void 0; - var nativeStopImmediatePropagation = void 0; - - event.isTargetWebComponent = false; - event.realTarget = event.target; - - nativeStopImmediatePropagation = event.stopImmediatePropagation; - event.stopImmediatePropagation = function () { - nativeStopImmediatePropagation.apply(this); - (0, _event.stopImmediatePropagation)(this); - }; - - if (!EventManager.isHotTableEnv) { - return event; - } - event = (0, _element.polymerWrap)(event); - len = event.path ? event.path.length : 0; - - while (len--) { - if (event.path[len].nodeName === componentName) { - isHotTableSpotted = true; - } else if (isHotTableSpotted && event.path[len].shadowRoot) { - target = event.path[len]; - - break; - } - if (len === 0 && !target) { - target = event.path[len]; - } - } - if (!target) { - target = event.target; - } - event.isTargetWebComponent = true; - - if ((0, _feature.isWebComponentSupportedNatively)()) { - event.realTarget = event.srcElement || event.toElement; - } else if (context instanceof Core || context instanceof Walkontable) { - // Polymer doesn't support `event.target` property properly we must emulate it ourselves - if (context instanceof Core) { - fromElement = context.view ? context.view.wt.wtTable.TABLE : null; - } else if (context instanceof Walkontable) { - // .wtHider - fromElement = context.wtTable.TABLE.parentNode.parentNode; - } - realTarget = (0, _element.closest)(event.target, [componentName], fromElement); - - if (realTarget) { - event.realTarget = fromElement.querySelector(componentName) || event.target; - } else { - event.realTarget = event.target; - } - } - - Object.defineProperty(event, 'target', { - get: function get() { - return (0, _element.polymerWrap)(target); - }, - - enumerable: true, - configurable: true - }); - - return event; -} - -exports.default = EventManager; -function getListenersCounter() { - return listenersCounter; -}; - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.getPluginName = exports.getRegistredPluginNames = exports.getPlugin = exports.registerPlugin = undefined; - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _object = __webpack_require__(1); - -var _string = __webpack_require__(27); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var registeredPlugins = new WeakMap(); - -/** - * Registers plugin under given name - * - * @param {String} pluginName - * @param {Function} PluginClass - */ -/** - * Utility to register plugins and common namespace for keeping reference to all plugins classes - */ -function registerPlugin(pluginName, PluginClass) { - pluginName = (0, _string.toUpperCaseFirst)(pluginName); - - _pluginHooks2.default.getSingleton().add('construct', function () { - var holder = void 0; - - if (!registeredPlugins.has(this)) { - registeredPlugins.set(this, {}); - } - holder = registeredPlugins.get(this); - - if (!holder[pluginName]) { - holder[pluginName] = new PluginClass(this); - } - }); - _pluginHooks2.default.getSingleton().add('afterDestroy', function () { - if (registeredPlugins.has(this)) { - var pluginsHolder = registeredPlugins.get(this); - - (0, _object.objectEach)(pluginsHolder, function (plugin) { - return plugin.destroy(); - }); - registeredPlugins.delete(this); - } - }); -} - -/** - * @param {Object} instance - * @param {String|Function} pluginName - * @returns {Function} pluginClass Returns plugin instance if exists or `undefined` if not exists. - */ -function getPlugin(instance, pluginName) { - if (typeof pluginName != 'string') { - throw Error('Only strings can be passed as "plugin" parameter'); - } - var _pluginName = (0, _string.toUpperCaseFirst)(pluginName); - - if (!registeredPlugins.has(instance) || !registeredPlugins.get(instance)[_pluginName]) { - return void 0; - } - - return registeredPlugins.get(instance)[_pluginName]; -} - -/** - * Get all registred plugins names for concrete Handsontable instance. - * - * @param {Object} hotInstance - * @returns {Array} - */ -function getRegistredPluginNames(hotInstance) { - return registeredPlugins.has(hotInstance) ? Object.keys(registeredPlugins.get(hotInstance)) : []; -} - -/** - * Get plugin name. - * - * @param {Object} hotInstance - * @param {Object} plugin - * @returns {String|null} - */ -function getPluginName(hotInstance, plugin) { - var pluginName = null; - - if (registeredPlugins.has(hotInstance)) { - (0, _object.objectEach)(registeredPlugins.get(hotInstance), function (pluginInstance, name) { - if (pluginInstance === plugin) { - pluginName = name; - } - }); - } - - return pluginName; -} - -exports.registerPlugin = registerPlugin; -exports.getPlugin = getPlugin; -exports.getRegistredPluginNames = getRegistredPluginNames; -exports.getPluginName = getPluginName; - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.isNumeric = isNumeric; -exports.rangeEach = rangeEach; -exports.rangeEachReverse = rangeEachReverse; -exports.valueAccordingPercent = valueAccordingPercent; -/** - * Checks if value of n is a numeric one - * http://jsperf.com/isnan-vs-isnumeric/4 - * @param n - * @returns {boolean} - */ -function isNumeric(n) { - /* eslint-disable */ - var t = typeof n === 'undefined' ? 'undefined' : _typeof(n); - - return t == 'number' ? !isNaN(n) && isFinite(n) : t == 'string' ? !n.length ? false : n.length == 1 ? /\d/.test(n) : /^\s*[+-]?\s*(?:(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?)|(?:0x[a-f\d]+))\s*$/i.test(n) : t == 'object' ? !!n && typeof n.valueOf() == 'number' && !(n instanceof Date) : false; -} - -/** - * A specialized version of `.forEach` defined by ranges. - * - * @param {Number} rangeFrom The number from start iterate. - * @param {Number|Function} rangeTo The number where finish iterate or function as a iteratee. - * @param {Function} [iteratee] The function invoked per iteration. - */ -function rangeEach(rangeFrom, rangeTo, iteratee) { - var index = -1; - - if (typeof rangeTo === 'function') { - iteratee = rangeTo; - rangeTo = rangeFrom; - } else { - index = rangeFrom - 1; - } - while (++index <= rangeTo) { - if (iteratee(index) === false) { - break; - } - } -} - -/** - * A specialized version of `.forEach` defined by ranges iterable in reverse order. - * - * @param {Number} rangeFrom The number from start iterate. - * @param {Number} rangeTo The number where finish iterate. - * @param {Function} iteratee The function invoked per iteration. - */ -function rangeEachReverse(rangeFrom, rangeTo, iteratee) { - var index = rangeFrom + 1; - - if (typeof rangeTo === 'function') { - iteratee = rangeTo; - rangeTo = 0; - } - while (--index >= rangeTo) { - if (iteratee(index) === false) { - break; - } - } -} - -/** - * Calculate value from percent. - * - * @param {Number} value Base value from percent will be calculated. - * @param {String|Number} percent Can be Number or String (eq. `'33%'`). - * @returns {Number} - */ -function valueAccordingPercent(value, percent) { - percent = parseInt(percent.toString().replace('%', ''), 10); - percent = parseInt(value * percent / 100, 10); - - return percent; -} - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.stopImmediatePropagation = stopImmediatePropagation; -exports.isImmediatePropagationStopped = isImmediatePropagationStopped; -exports.stopPropagation = stopPropagation; -exports.pageX = pageX; -exports.pageY = pageY; -exports.isRightClick = isRightClick; -exports.isLeftClick = isLeftClick; - -var _element = __webpack_require__(0); - -/** - * Prevent other listeners of the same event from being called. - * - * @param {Event} event - */ -function stopImmediatePropagation(event) { - event.isImmediatePropagationEnabled = false; - event.cancelBubble = true; -} - -/** - * Check if event was stopped by `stopImmediatePropagation`. - * - * @param event {Event} - * @returns {Boolean} - */ -function isImmediatePropagationStopped(event) { - return event.isImmediatePropagationEnabled === false; -} - -/** - * Prevent further propagation of the current event (prevent bubbling). - * - * @param event {Event} - */ -function stopPropagation(event) { - // ie8 - // http://msdn.microsoft.com/en-us/library/ie/ff975462(v=vs.85).aspx - if (typeof event.stopPropagation === 'function') { - event.stopPropagation(); - } else { - event.cancelBubble = true; - } -} - -/** - * Get horizontal coordinate of the event object relative to the whole document. - * - * @param {Event} event - * @returns {Number} - */ -function pageX(event) { - if (event.pageX) { - return event.pageX; - } - - return event.clientX + (0, _element.getWindowScrollLeft)(); -} - -/** - * Get vertical coordinate of the event object relative to the whole document. - * - * @param {Event} event - * @returns {Number} - */ -function pageY(event) { - if (event.pageY) { - return event.pageY; - } - - return event.clientY + (0, _element.getWindowScrollTop)(); -} - -/** - * Check if provided event was triggered by clicking the right mouse button. - * - * @param {Event} event DOM Event. - * @returns {Boolean} - */ -function isRightClick(event) { - return event.button === 2; -} - -/** - * Check if provided event was triggered by clicking the left mouse button. - * - * @param {Event} event DOM Event. - * @returns {Boolean} - */ -function isLeftClick(event) { - return event.button === 0; -} - -/***/ }), -/* 8 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _array = __webpack_require__(2); - -var _object = __webpack_require__(1); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @description - * Handsontable events are the common interface that function in 2 ways: as __callbacks__ and as __hooks__. - * - * @example - * - * ```js - * // Using events as callbacks: - * ... - * var hot1 = new Handsontable(document.getElementById('example1'), { - * afterChange: function(changes, source) { - * $.ajax({ - * url: "save.php', - * data: change - * }); - * } - * }); - * ... - * ``` - * - * ```js - * // Using events as plugin hooks: - * ... - * var hot1 = new Handsontable(document.getElementById('example1'), { - * myPlugin: true - * }); - * - * var hot2 = new Handsontable(document.getElementById('example2'), { - * myPlugin: false - * }); - * - * // global hook - * Handsontable.hooks.add('afterChange', function() { - * // Fired twice - for hot1 and hot2 - * if (this.getSettings().myPlugin) { - * // function body - will only run for hot1 - * } - * }); - * - * // local hook (has same effect as a callback) - * hot2.addHook('afterChange', function() { - * // function body - will only run in #example2 - * }); - * ``` - * ... - */ - -// @TODO: Move plugin description hooks to plugin? -var REGISTERED_HOOKS = [ -/** - * Callback fired after resetting a cell's meta. - * - * @event Hooks#afterCellMetaReset - * @since 0.11 - */ -'afterCellMetaReset', - -/** - * @description - * Callback fired after one or more cells has been changed. Its main use case is to save the input. - * - * __Note:__ For performance reasons, the `changes` array is null for `"loadData"` source. - * - * @event Hooks#afterChange - * @param {Array} changes 2D array containing information about each of the edited cells `[[row, prop, oldVal, newVal], ...]`. - * @param {String} [source] String that identifies source of hook call - * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}). - */ -'afterChange', - -/** - * @description - * Fired after observing changes. - * - * @event Hooks#afterChangesObserved - */ -'afterChangesObserved', - -/** - * @description - * Fired after setting up the Context Menu's default options. These options are a collection which user can select by setting - * an array of keys or an array of objects in `contextMenu` option. - * - * @event Hooks#afterContextMenuDefaultOptions - * @param {Array} predefinedItems Array of objects containing information about the pre-defined Context Menu items. - */ -'afterContextMenuDefaultOptions', - -/** - * @description - * Fired before setting up the Context Menu's items but after filtering these options by user (`contextMenu` option). This hook - * can by helpful to determine if user use specified menu item or to set up one of the menu item to by always visible. - * - * @event Hooks#beforeContextMenuSetItems - * @param {Array} menuItems Array of objects containing information about to generated Context Menu items. - */ -'beforeContextMenuSetItems', - -/** - * @description - * Fired after setting up the Context Menu's default options. These options are a collection which user can select by setting - * an array of keys or an array of objects in `contextMenu` option. - * - * @pro - * @event Hooks#afterDropdownMenuDefaultOptions - * @param {Array} predefinedItems Array of objects containing information about the pre-defined Context Menu items. - */ -'afterDropdownMenuDefaultOptions', - -/** - * @description - * Fired before setting up the Dropdown Menu's items but after filtering these options by user (`dropdownMenu` option). This hook - * can by helpful to determine if user use specified menu item or to set up one of the menu item to by always visible. - * - * @pro - * @event Hooks#beforeDropdownMenuSetItems - * @param {Array} menuItems Array of objects containing information about to generated Dropdown Menu items. - */ -'beforeDropdownMenuSetItems', - -/** - * @description - * Fired after hiding the Context Menu. - * - * @event Hooks#afterContextMenuHide - * @param {Object} context The Context menu instance. - */ -'afterContextMenuHide', - -/** - * @description - * Fired after opening the Context Menu. - * - * @event Hooks#afterContextMenuShow - * @param {Object} context The Context Menu instance. - */ -'afterContextMenuShow', - -/** - * @description - * Fired after reaching the copy limit while copying data. - * - * @event Hooks#afterCopyLimit - * @param {Number} selectedRows Count of selected copyable rows. - * @param {Number} selectedColumns Count of selected copyable columns. - * @param {Number} copyRowsLimit Current copy rows limit. - * @param {Number} copyColumnsLimit Current copy columns limit. - */ -'afterCopyLimit', - -/** - * Callback is fired before a new column was created. - * - * @since 0.28.0 - * @event Hooks#beforeCreateCol - * @param {Number} index Represents the visual index of first newly created column in the data source array. - * @param {Number} amount Number of newly created columns in the data source array. - * @param {String} [source] String that identifies source of hook call - * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}). - */ -'beforeCreateCol', - -/** - * Callback is fired after a new column was created. - * - * @event Hooks#afterCreateCol - * @param {Number} index Represents the visual index of first newly created column in the data source array. - * @param {Number} amount Number of newly created columns in the data source array. - * @param {String} [source] String that identifies source of hook call - * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}). - */ -'afterCreateCol', - -/** - * Callback is fired before a new row was created. - * - * @since 0.28.0 - * @event Hooks#beforeCreateRow - * @param {Number} index Represents the visual index of first newly created row in the data source array. - * @param {Number} amount Number of newly created rows in the data source array. - * @param {String} [source] String that identifies source of hook call - * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}). - */ -'beforeCreateRow', - -/** - * Callback is fired after a new row was created. - * - * @event Hooks#afterCreateRow - * @param {Number} index Represents the visual index of first newly created row in the data source array. - * @param {Number} amount Number of newly created rows in the data source array. - * @param {String} [source] String that identifies source of hook call - * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}). - */ -'afterCreateRow', - -/** - * Fired after the current cell is deselected. - * - * @event Hooks#afterDeselect - */ -'afterDeselect', - -/** - * Fired after destroying the Handsontable instance. - * - * @event Hooks#afterDestroy - */ -'afterDestroy', - -/** - * Fired on a `keydown` event on the document body. - * - * @event Hooks#afterDocumentKeyDown - * @param {Event} event A `keydown` event. - */ -'afterDocumentKeyDown', - -/** - * Callback fired after getting the cell settings. - * - * @event Hooks#afterGetCellMeta - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {Object} cellProperties Object containing the cell properties. - */ -'afterGetCellMeta', - -/** - * Callback fired after retrieving information about a column header and appending it to the table header. - * - * @event Hooks#afterGetColHeader - * @param {Number} col Visual column index. - * @param {Element} TH Header's TH element. - */ -'afterGetColHeader', - -/** - * Callback fired after retrieving information about a column header and appending it to the table header. - * - * @event Hooks#afterGetRowHeader - * @param {Number} row Visual row index. - * @param {Element} TH Header's TH element. - */ -'afterGetRowHeader', - -/** - * Callback fired after Handsontable instance is initiated. - * - * @event Hooks#afterInit - */ -'afterInit', - -/** - * Callback fired after new data is loaded (by `loadData` method) into the data source array. - * - * @event Hooks#afterLoadData - * @param {Boolean} firstTime flag that determines whether the data has been loaded during the initialization. - */ -'afterLoadData', - -/** - * Fired after a scroll event, which is identified as a momentum scroll (e.g. on an iPad). - * - * @event Hooks#afterMomentumScroll - */ -'afterMomentumScroll', - -/** - * Fired after a `mousedown` event is triggered on the cell corner (the drag handle). - * - * @event Hooks#afterOnCellCornerMouseDown - * @since 0.11 - * @param {Object} event `mousedown` event object. - */ -'afterOnCellCornerMouseDown', - -/** - * Fired after a `dblclick` event is triggered on the cell corner (the drag handle). - * - * @event Hooks#afterOnCellCornerDblClick - * @since 0.30.0 - * @param {Object} event `dblclick` event object. - */ -'afterOnCellCornerDblClick', - -/** - * Callback fired after clicking on a cell or row/column header. - * In case the row/column header was clicked, the index is negative. - * For example clicking on the row header of cell (0, 0) results with `afterOnCellMouseDown` called - * with coords `{row: 0, col: -1}`. - * - * @event Hooks#afterOnCellMouseDown - * @since 0.11 - * @param {Object} event `mousedown` event object. - * @param {Object} coords Coordinates object containing the visual row and visual column indexes of the clicked cell. - * @param {Element} TD Cell's TD (or TH) element. - */ -'afterOnCellMouseDown', - -/** - * Callback fired after hovering a cell or row/column header with the mouse cursor. - * In case the row/column header was hovered, the index is negative. - * For example, hovering over the row header of cell (0, 0) results with `afterOnCellMouseOver` called - * with coords `{row: 0, col: -1}`. - * - * @event Hooks#afterOnCellMouseOver - * @since 0.11 - * @param {Object} event `mouseover` event object. - * @param {Object} coords Hovered cell's visual coordinate object. - * @param {Element} TD Cell's TD (or TH) element. - */ -'afterOnCellMouseOver', - -/** - * Callback fired after leaving a cell or row/column header with the mouse cursor. - * - * @event Hooks#afterOnCellMouseOut - * @since 0.31.1 - * @param {Object} event `mouseout` event object. - * @param {Object} coords Leaved cell's visual coordinate object. - * @param {Element} TD Cell's TD (or TH) element. - */ -'afterOnCellMouseOut', - -/** - * Callback is fired when one or more columns are removed. - * - * @event Hooks#afterRemoveCol - * @param {Number} index Is an visual index of starter column. - * @param {Number} amount Is an amount of removed columns. - */ -'afterRemoveCol', - -/** - * Callback is fired when one or more rows are removed. - * - * @event Hooks#afterRemoveRow - * @param {Number} index Is an visual index of starter row. - * @param {Number} amount Is an amount of removed rows. - */ -'afterRemoveRow', - -/** - * Callback fired after the Handsontable table is rendered. - * - * @event Hooks#afterRender - * @param {Boolean} isForced Is `true` if rendering was triggered by a change of settings or data; or `false` if - * rendering was triggered by scrolling or moving selection. - */ -'afterRender', - -/** - * Fired before starting rendering the cell. - * - * @event Hooks#beforeRenderer - * @since 0.24.2 - * @param {Element} TD Currently rendered cell's TD element. - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {String|Number} prop Column property name or a column index, if datasource is an array of arrays. - * @param {String} value Value of the rendered cell. - * @param {Object} cellProperties Object containing the cell's properties. - */ -'beforeRenderer', - -/** - * Fired after finishing rendering the cell (after the renderer finishes). - * - * @event Hooks#afterRenderer - * @since 0.11.0 - * @param {Element} TD Currently rendered cell's TD element. - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {String|Number} prop Column property name or a column index, if datasource is an array of arrays. - * @param {String} value Value of the rendered cell. - * @param {Object} cellProperties Object containing the cell's properties. - */ -'afterRenderer', - -/** - * Fired after the horizontal scroll event. - * - * @event Hooks#afterScrollHorizontally - * @since 0.11 - */ -'afterScrollHorizontally', - -/** - * Fired after the vertical scroll event. - * - * @event Hooks#afterScrollVertically - * @since 0.11 - */ -'afterScrollVertically', - -/** - * Callback fired after one or more cells are selected (e.g. during mouse move). - * - * @event Hooks#afterSelection - * @param {Number} r Selection start visual row index. - * @param {Number} c Selection start visual column index. - * @param {Number} r2 Selection end visual row index. - * @param {Number} c2 Selection end visual column index. - * @param {Object} preventScrolling Object with `value` property where its value change will be observed. - * * @example - * ```js - * handsontable({ - * afterSelection: function (r, c, r2, c2, preventScrolling) { - * // setting if prevent scrolling after selection - * - * preventScrolling.value = true; - * } - * }) - * ``` - */ -'afterSelection', - -/** - * Callback fired after one or more cells are selected. The `p` argument represents the source object property name instead of the column number. - * - * @event Hooks#afterSelectionByProp - * @param {Number} r Selection start visual row index. - * @param {String} p Selection start data source object property name. - * @param {Number} r2 Selection end visual row index. - * @param {String} p2 Selection end data source object property name. - * @param {Object} preventScrolling Object with `value` property where its value change will be observed. - * * @example - * ```js - * handsontable({ - * afterSelectionByProp: function (r, c, r2, c2, preventScrolling) { - * // setting if prevent scrolling after selection - * - * preventScrolling.value = true; - * } - * }) - * ``` - */ -'afterSelectionByProp', - -/** - * Callback fired after one or more cells are selected (e.g. on mouse up). - * - * @event Hooks#afterSelectionEnd - * @param {Number} r Selection start visual row index. - * @param {Number} c Selection start visual column index. - * @param {Number} r2 Selection end visual row index. - * @param {Number} c2 Selection end visual column index. - */ -'afterSelectionEnd', - -/** - * Callback fired after one or more cells are selected (e.g. on mouse up). The `p` argument represents the data source object - * property name instead of the column number. - * - * @event Hooks#afterSelectionEndByProp - * @param {Number} r Selection start visual row index. - * @param {String} p Selection start data source object property index. - * @param {Number} r2 Selection end visual row index. - * @param {String} p2 Selection end data source object property index. - */ -'afterSelectionEndByProp', - -/** - * Called after cell meta is changed. - * - * @event Hooks#afterSetCellMeta - * @since 0.11.0 - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {String} key The updated meta key. - * @param {*} value The updated meta value. - */ -'afterSetCellMeta', - -/** - * Called after cell meta is removed. - * - * @event Hooks#afterRemoveCellMeta - * @since 0.33.1 - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {String} key The removed meta key. - * @param {*} value Value which was under removed key of cell meta. - */ -'afterRemoveCellMeta', - -/** - * Called after cell data was changed. - * - * @event Hooks#afterSetDataAtCell - * @since 0.28.0 - * @param {Array} changes An array of changes in format `[[row, col, oldValue, value], ...]`. - * @param {String} [source] String that identifies source of hook call - * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}). - */ -'afterSetDataAtCell', - -/** - * Called after cell data was changed. - * - * @event Hooks#afterSetDataAtRowProp - * @since 0.28.0 - * @param {Array} changes An array of changes in format `[[row, prop, oldValue, value], ...]`. - * @param {String} [source] String that identifies source of hook call - * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}). - */ -'afterSetDataAtRowProp', - -/** - * Fired after calling the `updateSettings` method. - * - * @event Hooks#afterUpdateSettings - * @param {Object} settings New settings object. - */ -'afterUpdateSettings', - -/** - * @description - * A plugin hook executed after validator function, only if validator function is defined. - * Validation result is the first parameter. This can be used to determinate if validation passed successfully or not. - * - * __Returning false from the callback will mark the cell as invalid.__ - * - * @event Hooks#afterValidate - * @since 0.9.5 - * @param {Boolean} isValid `true` if valid, `false` if not. - * @param {*} value The value in question. - * @param {Number} row Row index. - * @param {String|Number} prop Property name / column index. - * @param {String} [source] String that identifies source of hook call - * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}). - */ -'afterValidate', - -/** - * Fired before populating the data in the autofill feature. - * - * @event Hooks#beforeAutofill - * @param {Object} start Object containing information about first filled cell: `{row: 2, col: 0}`. - * @param {Object} end Object containing information about last filled cell: `{row: 4, col: 1}`. - * @param {Array} data 2D array containing information about fill pattern: `[["1', "Ted"], ["1', "John"]]`. - */ -'beforeAutofill', - -/** - * Fired before aligning the cell contents. - * - * @event Hooks#beforeCellAlignment - * @param stateBefore - * @param range - * @param {String} type Type of the alignment - either `horizontal` or `vertical` - * @param {String} alignmentClass String defining the alignment class added to the cell. - * Possible values: - * * `htLeft`, - * * `htCenter`, - * * `htRight`, - * * `htJustify` - * for horizontal alignment, - * - * - * * `htTop`, - * * `htMiddle`, - * * `htBottom` - * for vertical alignment. - */ -'beforeCellAlignment', - -/** - * Callback fired before one or more cells is changed. Its main purpose is to alter changes silently before input. - * - * @event Hooks#beforeChange - * @param {Array} changes 2D array containing information about each of the edited cells. - * @param {String} [source] String that identifies source of hook call - * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}). - * @example - * ```js - * // To disregard a single change, set changes[i] to null or remove it from array using changes.splice(i, 1). - * ... - * new Handsontable(document.getElementById('example'), { - * beforeChange: function(changes, source) { - * // [[row, prop, oldVal, newVal], ...] - * changes[0] = null; - * } - * }); - * ... - * - * // To alter a single change, overwrite the desired value to changes[i][3]. - * ... - * new Handsontable(document.getElementById('example'), { - * beforeChange: function(changes, source) { - * // [[row, prop, oldVal, newVal], ...] - * changes[0][3] = 10; - * } - * }); - * ... - * - * // To cancel all edit, return false from the callback or set array length to 0 (changes.length = 0). - * ... - * new Handsontable(document.getElementById('example'), { - * beforeChange: function(changes, source) { - * // [[row, prop, oldVal, newVal], ...] - * return false; - * } - * }); - * ... - * ``` - */ -'beforeChange', - -/** - * Fired right before rendering the changes. - * - * @event Hooks#beforeChangeRender - * @since 0.11 - * @param {Array} changes Array in form of [row, prop, oldValue, newValue]. - * @param {String} [source] String that identifies source of hook call - * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}). - */ -'beforeChangeRender', - -/** - * Fired before drawing the borders. - * - * @event Hooks#beforeDrawBorders - * @param {Array} corners Array specifying the current selection borders. - * @param {String} borderClassName Specifies the border class name. - */ -'beforeDrawBorders', - -/** - * Callback fired before getting cell settings. - * - * @event Hooks#beforeGetCellMeta - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {Object} cellProperties Object containing the cell's properties. - */ -'beforeGetCellMeta', - -/** - * Called before cell meta is removed. - * - * @event Hooks#beforeRemoveCellMeta - * @since 0.33.1 - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {String} key The removed meta key. - * @param {*} value Value which is under removed key of cell meta. - */ -'beforeRemoveCellMeta', - -/** - * @description - * Callback fired before Handsontable instance is initiated. - * - * @event Hooks#beforeInit - */ -'beforeInit', - -/** - * Callback fired before Walkontable instance is initiated. - * - * @since 0.11 - * @event Hooks#beforeInitWalkontable - * @param {Object} walkontableConfig Walkontable configuration object. - */ -'beforeInitWalkontable', - -/** - * Callback fired before keydown event is handled. It can be used to overwrite default key bindings. - * Caution - in your `beforeKeyDown` handler you need to call `event.stopImmediatePropagation()` to prevent default key behavior. - * - * @event Hooks#beforeKeyDown - * @since 0.9.0 - * @param {Event} event Original DOM event. - */ -'beforeKeyDown', - -/** - * Fired after the user clicked a cell, but before all the calculations related with it. - * - * @event Hooks#beforeOnCellMouseDown - * @param {Event} event The `mousedown` event object. - * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell. - * @param {Element} TD TD element. - */ -'beforeOnCellMouseDown', - -/** - * Fired after the user moved cursor over a cell, but before all the calculations related with it. - * - * @event Hooks#beforeOnCellMouseOver - * @param {Event} event The `mouseover` event object. - * @param {CellCoords} coords CellCoords object containing the visual coordinates of the clicked cell. - * @param {Element} TD TD element. - * @param {Object} blockCalculations Contain keys 'row' and 'column' with boolean value. - */ -'beforeOnCellMouseOver', - -/** - * Fired after the user moved cursor out from a cell, but before all the calculations related with it. - * - * @event Hooks#beforeOnCellMouseOut - * @since 0.31.1 - * @param {Event} event The `mouseout` event object. - * @param {WalkontableCellCoords} coords WalkontableCellCoords object containing the visual coordinates of the leaved cell. - * @param {Element} TD TD element. - */ -'beforeOnCellMouseOut', - -/** - * Callback is fired when one or more columns are about to be removed. - * - * @event Hooks#beforeRemoveCol - * @param {Number} index Visual index of starter column. - * @param {Number} amount Amount of columns to be removed. - * @param {Array} [visualCols] Consists of visual indexes of processed columns. - */ -'beforeRemoveCol', - -/** - * Callback is fired when one or more rows are about to be removed. - * - * @event Hooks#beforeRemoveRow - * @param {Number} index Visual index of starter column. - * @param {Number} amount Amount of columns to be removed. - * @param {Array} [visualRows] Consists of visual indexes of processed rows. - */ -'beforeRemoveRow', - -/** - * Callback fired before Handsontable table is rendered. - * - * @event Hooks#beforeRender - * @param {Boolean} isForced If `true` rendering was triggered by a change of settings or data; or `false` if - * rendering was triggered by scrolling or moving selection. - */ -'beforeRender', - -/** - * Callback fired before setting range is started. - * - * @event Hooks#beforeSetRangeStart - * @param {Array} coords CellCoords array. - */ -'beforeSetRangeStart', - -/** - * Callback fired before setting range is ended. - * - * @event Hooks#beforeSetRangeEnd - * @param {Array} coords CellCoords array. - */ -'beforeSetRangeEnd', - -/** - * Fired before the logic of handling a touch scroll, when user started scrolling on a touch-enabled device. - * - * @event Hooks#beforeTouchScroll - */ -'beforeTouchScroll', - -/** - * @description - * A plugin hook executed before validator function, only if validator function is defined. - * This can be used to manipulate the value of changed cell before it is applied to the validator function. - * - * __Notice:__ this will not affect values of changes. This will change value ONLY for validation! - * - * @event Hooks#beforeValidate - * @since 0.9.5 - * @param {*} value Value of the cell. - * @param {Number} row Row index. - * @param {String|Number} prop Property name / column index. - * @param {String} [source] String that identifies source of hook call - * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}). - */ -'beforeValidate', - -/** - * Callback fired before cell value is rendered into the DOM (through renderer function). - * - * @event Hooks#beforeValueRender - * @since 0.29.0 - * @param {*} value Cell value to render. - */ -'beforeValueRender', - -/** - * Callback fired after Handsontable instance is constructed (via `new` operator). - * - * @event Hooks#construct - * @since 0.16.1 - */ -'construct', - -/** - * Callback fired after Handsontable instance is initiated but before table is rendered. - * - * @event Hooks#init - * @since 0.16.1 - */ -'init', - -/** - * Fired when a column index is about to be modified by a callback function. - * - * @event Hooks#modifyCol - * @since 0.11 - * @param {Number} col Visual column index. - */ -'modifyCol', - -/** - * Fired when a column index is about to be de-modified by a callback function. - * - * @event Hooks#unmodifyCol - * @since 0.23.0 - * @param {Number} col Physical column index. - */ -'unmodifyCol', - -/** - * Fired when a physical row index is about to be de-modified by a callback function. - * - * @event Hooks#unmodifyRow - * @since 0.26.2 - * @param {Number} row Physical row index. - */ -'unmodifyRow', -/** - * Fired when a column header index is about to be modified by a callback function. - * - * @event Hooks#modifyColHeader - * @since 0.20.0 - * @param {Number} column Visual column header index. - */ -'modifyColHeader', - -/** - * Fired when a column width is about to be modified by a callback function. - * - * @event Hooks#modifyColWidth - * @since 0.11 - * @param {Number} width Current column width. - * @param {Number} col Column index. - */ -'modifyColWidth', - -/** - * Fired when a row index is about to be modified by a callback function. - * - * @event Hooks#modifyRow - * @since 0.11 - * @param {Number} row Row index. - */ -'modifyRow', - -/** - * Fired when a row header index is about to be modified by a callback function. - * - * @event Hooks#modifyRowHeader - * @since 0.20.0 - * @param {Number} row Row header index. - */ -'modifyRowHeader', - -/** - * Fired when a row height is about to be modified by a callback function. - * - * @event Hooks#modifyRowHeight - * @since 0.11.0 - * @param {Number} height Row height. - * @param {Number} row Row index. - */ -'modifyRowHeight', - -/** - * Fired when a data was retrieved or modified. - * - * @event Hooks#modifyData - * @since 0.28.0 - * @param {Number} row Row height. - * @param {Number} column Column index. - * @param {Object} valueHolder Object which contains original value which can be modified by overwriting `.value` property. - * @param {String} ioMode String which indicates for what operation hook is fired (`get` or `set`). - */ -'modifyData', - -/** - * Fired when a data was retrieved or modified. - * - * @event Hooks#modifyRowData - * @since 0.28.0 - * @param {Number} row Physical row index. - */ -'modifyRowData', - -/** - * Fired after loading data using the Persistent State plugin. - * - * @event Hooks#persistentStateLoad - * @param {String} key Key string. - * @param {Object} valuePlaceholder Object containing the loaded data. - */ -'persistentStateLoad', - -/** - * Fired after resetting data using the Persistent State plugin. - * - * @event Hooks#persistentStateReset - * @param {String} key Key string. - */ -'persistentStateReset', - -/** - * Fired after resetting data using the Persistent State plugin. - * - * @event Hooks#persistentStateSave - * @param {String} key Key string. - * @param {Mixed} value Value to save. - */ -'persistentStateSave', - -/** - * Fired before sorting the column. If you return `false` value then sorting will be not applied by - * Handsontable (useful for server-side sorting). - * - * @event Hooks#beforeColumnSort - * @param {Number} column Sorted visual column index. - * @param {Boolean} order Soring order where: - * * `true` means ascending order, - * * `false` means descending order, - * * `undefined` means original order. - */ -'beforeColumnSort', - -/** - * Fired after sorting the column. - * - * @event Hooks#afterColumnSort - * @param {Number} column Sorted visual column index. - * @param {Boolean} order Soring order where: - * * `true` means ascending order - * * `false` means descending order - * * `undefined` means original order - */ -'afterColumnSort', - -/** - * @description - * Fired after setting range of autofill. - * Both arguments are provided in the following format: - * ```js - * [startRow, startColumn, endRow, endColumn] - * ``` - * - * @event Hooks#modifyAutofillRange - * @param {Array} startArea Array of visual coordinates of the starting point for the drag-down operation. - * @param {Array} entireArea Array of visual coordinates of the entire area of the drag-down operation. - */ -'modifyAutofillRange', - -/** - * Fired to allow modifying the copyable range with a callback function. - * - * @since 0.19.0 - * @event Hooks#modifyCopyableRange - * @param {Array} copyableRanges Array of objects defining copyable cells. - */ -'modifyCopyableRange', - -/** - * Called before copying the values into clipboard and before clearing values of the selected cells. - * - * @event Hooks#beforeCut - * @since 0.31.1 - * @param {Array} data An array of arrays which contains data to cut. - * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`) - * which will be cut out. - * @returns {*} If returns `false` then operation of the cutting out is cancelled. - * - * @example - * ```js - * // To disregard a single row, remove it from array using data.splice(i, 1). - * ... - * new Handsontable(document.getElementById('example'), { - * beforeCut: function(data, coords) { - * // data -> [[1, 2, 3], [4, 5, 6]] - * data.splice(0, 1); - * // data -> [[4, 5, 6]] - * // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}] - * } - * }); - * ... - * - * // To cancel cutting out, return false from the callback. - * ... - * new Handsontable(document.getElementById('example'), { - * beforeCut: function(data, coords) { - * return false; - * } - * }); - * ... - * ``` - */ -'beforeCut', - -/** - * Fired after data are cutted out from the table. - * - * @event Hooks#afterCut - * @since 0.31.1 - * @param {Array} data An array of arrays which contains the cutted out data. - * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`) - * which was cut out. - */ -'afterCut', - -/** - * Fired before values are copied into clipboard. - * - * @event Hooks#beforeCopy - * @since 0.31.1 - * @param {Array} data An array of arrays which contains data to copied. - * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`) - * which will copied. - * @returns {*} If returns `false` then copying is cancelled. - * - * @example - * ```js - * // To disregard a single row, remove it from array using data.splice(i, 1). - * ... - * new Handsontable(document.getElementById('example'), { - * beforeCopy: function(data, coords) { - * // data -> [[1, 2, 3], [4, 5, 6]] - * data.splice(0, 1); - * // data -> [[4, 5, 6]] - * // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}] - * } - * }); - * ... - * - * // To cancel copying, return false from the callback. - * ... - * new Handsontable(document.getElementById('example'), { - * beforeCopy: function(data, coords) { - * return false; - * } - * }); - * ... - * ``` - */ -'beforeCopy', - -/** - * Fired after data are pasted into table. - * - * @event Hooks#afterCopy - * @since 0.31.1 - * @param {Array} data An array of arrays which contains the copied data. - * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`) - * which was copied. - */ -'afterCopy', - -/** - * Fired before values are pasted into table. - * - * @event Hooks#beforePaste - * @since 0.31.1 - * @param {Array} data An array of arrays which contains data to paste. - * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`) - * that correspond to the previously selected area. - * @returns {*} If returns `false` then pasting is cancelled. - * - * @example - * ```js - * // To disregard a single row, remove it from array using data.splice(i, 1). - * ... - * new Handsontable(document.getElementById('example'), { - * beforePaste: function(data, coords) { - * // data -> [[1, 2, 3], [4, 5, 6]] - * data.splice(0, 1); - * // data -> [[4, 5, 6]] - * // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}] - * } - * }); - * ... - * - * // To cancel pasting, return false from the callback. - * ... - * new Handsontable(document.getElementById('example'), { - * beforePaste: function(data, coords) { - * return false; - * } - * }); - * ... - * ``` - */ -'beforePaste', - -/** - * Fired after values are pasted into table. - * - * @event Hooks#afterePaste - * @since 0.31.1 - * @param {Array} data An array of arrays which contains the pasted data. - * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`) - * that correspond to the previously selected area. - */ -'afterPaste', - -/** - * Fired before change order of the visual indexes. - * - * @event Hooks#beforeColumnMove - * @param {Array} columns Array of visual column indexes to be moved. - * @param {Number} target Visual column index being a target for moved columns. - */ -'beforeColumnMove', - -/** - * Fired after change order of the visual indexes. - * - * @event Hooks#afterColumnMove - * @param {Array} columns Array of visual column indexes that were moved. - * @param {Number} target Visual column index being a target for moved columns. - */ -'afterColumnMove', - -/** - * Fired before change order of the visual indexes. - * - * @event Hooks#beforeRowMove - * @param {Array} rows Array of visual row indexes to be moved. - * @param {Number} target Visual row index being a target for moved rows. - */ -'beforeRowMove', - -/** - * Fired after change order of the visual indexes. - * - * @event Hooks#afterRowMove - * @param {Array} rows Array of visual row indexes that were moved. - * @param {Number} target Visual row index being a target for moved rows. - */ -'afterRowMove', - -/** - * Fired before rendering the table with modified column sizes. - * - * @event Hooks#beforeColumnResize - * @param {Number} currentColumn Visual index of the resized column. - * @param {Number} newSize Calculated new column width. - * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click. - * @returns {Number} Returns a new column size or `undefined`, if column size should be calculated automatically. - */ -'beforeColumnResize', - -/** - * Fired after rendering the table with modified column sizes. - * - * @event Hooks#afterColumnResize - * @param {Number} currentColumn Visual index of the resized column. - * @param {Number} newSize Calculated new column width. - * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click. - */ -'afterColumnResize', - -/** - * Fired before rendering the table with modified row sizes. - * - * @event Hooks#beforeRowResize - * @param {Number} currentRow Visual index of the resized row. - * @param {Number} newSize Calculated new row height. - * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click. - * @returns {Number} Returns the new row size or `undefined` if row size should be calculated automatically. - */ -'beforeRowResize', - -/** - * Fired after rendering the table with modified row sizes. - * - * @event Hooks#afterRowResize - * @param {Number} currentRow Visual index of the resized row. - * @param {Number} newSize Calculated new row height. - * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click. - */ -'afterRowResize', - -/** - * Fired after getting the column header renderers. - * - * @event Hooks#afterGetColumnHeaderRenderers - * @param {Array} array Array of the column header renderers. - */ -'afterGetColumnHeaderRenderers', - -/** - * Fired after getting the row header renderers. - * - * @event Hooks#afterGetRowHeaderRenderers - * @param {Array} array Array of the row header renderers. - */ -'afterGetRowHeaderRenderers', - -/** - * Fired before applying stretched column width to column. - * - * @event Hooks#beforeStretchingColumnWidth - * @param {Number} stretchedWidth Calculated width. - * @param {Number} column Visual column index. - * @returns {Number} Returns new width which will be applied to the column element. - */ -'beforeStretchingColumnWidth', - -/** - * Fired before applying [filtering]{@link http://docs.handsontable.com/pro/demo-filtering.html}. - * - * @pro - * @event Hooks#beforeFilter - * @param {Array} conditionsStack An array of objects with added formulas. - * @returns {Boolean} If hook returns `false` value then filtering won't be applied on the UI side (server-side filtering). - */ -'beforeFilter', - -/** - * Fired after applying [filtering]{@link http://docs.handsontable.com/pro/demo-filtering.html}. - * - * @pro - * @event Hooks#afterFilter - * @param {Array} conditionsStack An array of objects with added formulas. - */ -'afterFilter', - -/** - * Used to modify the column header height. - * - * @event Hooks#modifyColumnHeaderHeight - * @since 0.25.0 - * @param {Number} col Visual column index. - */ -'modifyColumnHeaderHeight', - -/** - * Fired before the undo action. Contains information about the action that is being undone. - * - * @event Hooks#beforeUndo - * @since 0.26.2 - * @param {Object} action The action object. Contains information about the action being undone. The `actionType` - * property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`). - */ -'beforeUndo', - -/** - * Fired after the undo action. Contains information about the action that is being undone. - * - * @event Hooks#afterUndo - * @since 0.26.2 - * @param {Object} action The action object. Contains information about the action being undone. The `actionType` - * property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`). - */ -'afterUndo', - -/** - * Fired before the redo action. Contains information about the action that is being redone. - * - * @event Hooks#beforeRedo - * @since 0.26.2 - * @param {Object} action The action object. Contains information about the action being redone. The `actionType` - * property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`). - */ -'beforeRedo', - -/** - * Fired after the redo action. Contains information about the action that is being redone. - * - * @event Hooks#afterRedo - * @since 0.26.2 - * @param {Object} action The action object. Contains information about the action being redone. The `actionType` - * property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`). - */ -'afterRedo', - -/** - * Used to modify the row header width. - * - * @event Hooks#modifyRowHeaderWidth - * @param {Number} rowHeaderWidth Row header width. - */ -'modifyRowHeaderWidth', - -/** - * Fired from the `populateFromArray` method during the `autofill` process. Fired for each "autofilled" cell individually. - * - * @event Hooks#beforeAutofillInsidePopulate - * @param {Object} index Object containing `row` and `col` properties, defining the number of rows/columns from the initial cell of the autofill. - * @param {String} direction Declares the direction of the autofill. Possible values: `up`, `down`, `left`, `right`. - * @param {Array} input Array of arrays. Contains an array of rows with data being used in the autofill. - * @param {Array} deltas The deltas array passed to the `populateFromArray` method. - */ -'beforeAutofillInsidePopulate', - -/** - * Fired when the start of the selection is being modified. (e.g. moving the selection with the arrow keys). - * - * @event Hooks#modifyTransformStart - * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one. - */ -'modifyTransformStart', - -/** - * Fired when the end of the selection is being modified. (e.g. moving the selection with the arrow keys). - * - * @event Hooks#modifyTransformEnd - * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one. - */ -'modifyTransformEnd', - -/** - * Fired after the start of the selection is being modified. (e.g. moving the selection with the arrow keys). - * - * @event Hooks#afterModifyTransformStart - * @param {CellCoords} coords Coords of the freshly selected cell. - * @param {Number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise. - * @param {Number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise. - */ -'afterModifyTransformStart', - -/** - * Fired after the end of the selection is being modified. (e.g. moving the selection with the arrow keys). - * - * @event Hooks#afterModifyTransformEnd - * @param {CellCoords} coords Visual coords of the freshly selected cell. - * @param {Number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise. - * @param {Number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise. - */ -'afterModifyTransformEnd', - -/** - * Fired inside the `viewportRowCalculatorOverride` method. Allows modifying the row calculator parameters. - * - * @event Hooks#afterViewportRowCalculatorOverride - * @param {Object} calc The row calculator. - */ -'afterViewportRowCalculatorOverride', - -/** - * Fired inside the `viewportColumnCalculatorOverride` method. Allows modifying the row calculator parameters. - * - * @event Hooks#afterViewportColumnCalculatorOverride - * @param {Object} calc The row calculator. - */ -'afterViewportColumnCalculatorOverride', - -/** - * Fired after initializing all the plugins. - * - * @event Hooks#afterPluginsInitialized - */ -'afterPluginsInitialized', - -/** - * Used when saving/loading the manual row heights state. - * - * @event Hooks#manualRowHeights - * @param {Array} state The current manual row heights state. - */ -'manualRowHeights', - -/** - * Used to skip the length cache calculation for a defined period of time. - * - * @event Hooks#skipLengthCache - * @param {Number} delay The delay in milliseconds. - */ -'skipLengthCache', - -/** - * Fired after trimming rows in the TrimRows plugin. - * - * @pro - * @event Hooks#afterTrimRow - * @param {Array} rows Physical indexes of trimmed rows. - */ -'afterTrimRow', - -/** - * Fired after untrimming rows in the TrimRows plugin. - * - * @pro - * @event Hooks#afterUntrimRow - * @param {Array} rows Physical indexes of untrimmed rows. - */ -'afterUntrimRow', - -/** - * Fired after opening the dropdown menu. - * - * @pro - * @event Hooks#afterDropdownMenuShow - * @param {DropdownMenu} instance The DropdownMenu instance. - */ -'afterDropdownMenuShow', - -/** - * Fired after hiding the dropdown menu. - * - * @pro - * @event Hooks#afterDropdownMenuHide - * @param {DropdownMenu} instance The DropdownMenu instance. - */ -'afterDropdownMenuHide', - -/** - * Used to check whether the provided row index is hidden. - * - * @pro - * @event Hooks#hiddenRow - * @param {Number} row The visual row index in question. - */ -'hiddenRow', - -/** - * Used to check whether the provided column index is hidden. - * - * @pro - * @event Hooks#hiddenColumn - * @param {Number} column The visual column index in question. - */ -'hiddenColumn', - -/** - * Fired before adding a children to the NestedRows structure. - * - * @pro - * @event Hooks#beforeAddChild - * @param {Object} parent The parent object. - * @param {Object|undefined} element The element added as a child. If `undefined`, a blank child was added. - * @param {Number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child. - */ -'beforeAddChild', - -/** - * Fired after adding a children to the NestedRows structure. - * - * @pro - * @event Hooks#afterAddChild - * @param {Object} parent The parent object. - * @param {Object|undefined} element The element added as a child. If `undefined`, a blank child was added. - * @param {Number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child. - */ -'afterAddChild', - -/** - * Fired before detaching a child from its parent in the NestedRows plugin. - * - * @pro - * @event Hooks#beforeDetachChild - * @param {Object} parent An object representing the parent from which the element is to be detached. - * @param {Object} element The detached element. - */ -'beforeDetachChild', - -/** - * Fired after detaching a child from its parent in the NestedRows plugin. - * - * @pro - * @event Hooks#afterDetachChild - * @param {Object} parent An object representing the parent from which the element was detached. - * @param {Object} element The detached element. - */ -'afterDetachChild', - -/** - * Fired after the editor is opened and rendered. - * - * @event Hooks#afterBeginEditing - * @param {Number} row Row index of the edited cell. - * @param {Number} column Column index of the edited cell. - */ -'afterBeginEditing']; - -var Hooks = function () { - _createClass(Hooks, null, [{ - key: 'getSingleton', - value: function getSingleton() { - return globalSingleton; - } - - /** - * - */ - - }]); - - function Hooks() { - _classCallCheck(this, Hooks); - - this.globalBucket = this.createEmptyBucket(); - } - - /** - * Returns a new object with empty handlers related to every registered hook name. - * - * @returns {Object} The empty bucket object. - * - * @example - * ```js - * Handsontable.hooks.createEmptyBucket(); - * // Results: - * { - * ... - * afterCreateCol: [], - * afterCreateRow: [], - * beforeInit: [], - * ... - * } - * ``` - */ - - - _createClass(Hooks, [{ - key: 'createEmptyBucket', - value: function createEmptyBucket() { - var bucket = Object.create(null); - - // eslint-disable-next-line no-return-assign - (0, _array.arrayEach)(REGISTERED_HOOKS, function (hook) { - return bucket[hook] = []; - }); - - return bucket; - } - - /** - * Get hook bucket based on the context of the object or if argument is `undefined`, get the global hook bucket. - * - * @param {Object} [context=null] A Handsontable instance. - * @returns {Object} Returns a global or Handsontable instance bucket. - */ - - }, { - key: 'getBucket', - value: function getBucket() { - var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - if (context) { - if (!context.pluginHookBucket) { - context.pluginHookBucket = this.createEmptyBucket(); - } - - return context.pluginHookBucket; - } - - return this.globalBucket; - } - - /** - * Adds a listener (globally or locally) to a specified hook name. - * If the `context` parameter is provided, the hook will be added only to the instance it references. - * Otherwise, the callback will be used everytime the hook fires on any Handsontable instance. - * You can provide an array of callback functions as the `callback` argument, this way they will all be fired - * once the hook is triggered. - * - * @see Core#addHook - * @param {String} key Hook name. - * @param {Function|Array} callback Callback function or an array of functions. - * @param {Object} [context=null] The context for the hook callback to be added - a Handsontable instance or leave empty. - * @returns {Hooks} Instance of Hooks. - * - * @example - * ```js - * // single callback, added locally - * Handsontable.hooks.add('beforeInit', myCallback, hotInstance); - * - * // single callback, added globally - * Handsontable.hooks.add('beforeInit', myCallback); - * - * // multiple callbacks, added locally - * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback], hotInstance); - * - * // multiple callbacks, added globally - * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback]); - * ``` - */ - - }, { - key: 'add', - value: function add(key, callback) { - var _this = this; - - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - - if (Array.isArray(callback)) { - (0, _array.arrayEach)(callback, function (c) { - return _this.add(key, c, context); - }); - } else { - var bucket = this.getBucket(context); - - if (typeof bucket[key] === 'undefined') { - this.register(key); - bucket[key] = []; - } - callback.skip = false; - - if (bucket[key].indexOf(callback) === -1) { - // only add a hook if it has not already been added (adding the same hook twice is now silently ignored) - var foundInitialHook = false; - - if (callback.initialHook) { - (0, _array.arrayEach)(bucket[key], function (cb, i) { - if (cb.initialHook) { - bucket[key][i] = callback; - foundInitialHook = true; - - return false; - } - }); - } - - if (!foundInitialHook) { - bucket[key].push(callback); - } - } - } - - return this; - } - - /** - * Adds a listener to a specified hook. After the hook runs this listener will be automatically removed from the bucket. - * - * @see Core#addHookOnce - * @param {String} key Hook/Event name. - * @param {Function|Array} callback Callback function. - * @param {Object} [context=null] A Handsontable instance. - * - * @example - * ```js - * Handsontable.hooks.once('beforeInit', myCallback, hotInstance); - * ``` - */ - - }, { - key: 'once', - value: function once(key, callback) { - var _this2 = this; - - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - - if (Array.isArray(callback)) { - (0, _array.arrayEach)(callback, function (c) { - return _this2.once(key, c, context); - }); - } else { - callback.runOnce = true; - this.add(key, callback, context); - } - } - - /** - * Removes a listener from a hook with a given name. If the `context` argument is provided, it removes a listener from a local hook assigned to the given Handsontable instance. - * - * @see Core#removeHook - * @param {String} key Hook/Event name. - * @param {Function} callback Callback function (needs the be the function that was previously added to the hook). - * @param {Object} [context=null] Handsontable instance. - * @return {Boolean} Returns `true` if hook was removed, `false` otherwise. - * - * @example - * ```js - * Handsontable.hooks.remove('beforeInit', myCallback); - * ``` - */ - - }, { - key: 'remove', - value: function remove(key, callback) { - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - - var bucket = this.getBucket(context); - - if (typeof bucket[key] !== 'undefined') { - if (bucket[key].indexOf(callback) >= 0) { - callback.skip = true; - - return true; - } - } - - return false; - } - - /** - * Checks whether there are any registered listeners for the provided hook name. - * If the `context` parameter is provided, it only checks for listeners assigned to the given Handsontable instance. - * - * @param {String} key Hook name. - * @param {Object} [context=null] A Handsontable instance. - * @returns {Boolean} `true` for success, `false` otherwise. - */ - - }, { - key: 'has', - value: function has(key) { - var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - var bucket = this.getBucket(context); - - return !!(bucket[key] !== void 0 && bucket[key].length); - } - - /** - * Runs all local and global callbacks assigned to the hook identified by the `key` parameter. - * It returns either a return value from the last called callback or the first parameter (`p1`) passed to the `run` function. - * - * @see Core#runHooks - * @param {Object} context Handsontable instance. - * @param {String} key Hook/Event name. - * @param {*} [p1] Parameter to be passed as an argument to the callback function. - * @param {*} [p2] Parameter to be passed as an argument to the callback function. - * @param {*} [p3] Parameter to be passed as an argument to the callback function. - * @param {*} [p4] Parameter to be passed as an argument to the callback function. - * @param {*} [p5] Parameter to be passed as an argument to the callback function. - * @param {*} [p6] Parameter to be passed as an argument to the callback function. - * @returns {*} Either a return value from the last called callback or `p1`. - * - * @example - * ```js - * Handsontable.hooks.run(hot, 'beforeInit'); - * ``` - */ - - }, { - key: 'run', - value: function run(context, key, p1, p2, p3, p4, p5, p6) { - { - var globalHandlers = this.globalBucket[key]; - var index = -1; - var length = globalHandlers ? globalHandlers.length : 0; - - if (length) { - // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC. - while (++index < length) { - if (!globalHandlers[index] || globalHandlers[index].skip) { - /* eslint-disable no-continue */ - continue; - } - // performance considerations - http://jsperf.com/call-vs-apply-for-a-plugin-architecture - var res = globalHandlers[index].call(context, p1, p2, p3, p4, p5, p6); - - if (res !== void 0) { - p1 = res; - } - if (globalHandlers[index] && globalHandlers[index].runOnce) { - this.remove(key, globalHandlers[index]); - } - } - } - } - { - var localHandlers = this.getBucket(context)[key]; - var _index = -1; - var _length = localHandlers ? localHandlers.length : 0; - - if (_length) { - // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC. - while (++_index < _length) { - if (!localHandlers[_index] || localHandlers[_index].skip) { - /* eslint-disable no-continue */ - continue; - } - // performance considerations - http://jsperf.com/call-vs-apply-for-a-plugin-architecture - var _res = localHandlers[_index].call(context, p1, p2, p3, p4, p5, p6); - - if (_res !== void 0) { - p1 = _res; - } - if (localHandlers[_index] && localHandlers[_index].runOnce) { - this.remove(key, localHandlers[_index], context); - } - } - } - } - - return p1; - } - - /** - * Destroy all listeners connected to the context. If no context is provided, the global listeners will be destroyed. - * - * @param {Object} [context=null] A Handsontable instance. - * @example - * ```js - * // destroy the global listeners - * Handsontable.hooks.destroy(); - * - * // destroy the local listeners - * Handsontable.hooks.destroy(hotInstance); - * ``` - */ - - }, { - key: 'destroy', - value: function destroy() { - var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - // eslint-disable-next-line no-return-assign - (0, _object.objectEach)(this.getBucket(context), function (value, key, bucket) { - return bucket[key].length = 0; - }); - } - - /** - * Registers a hook name (adds it to the list of the known hook names). Used by plugins. - * It is not necessary to call register, but if you use it, your plugin hook will be used returned by - * the `getRegistered` method. (which itself is used in the demo http://docs.handsontable.com/tutorial-callbacks.html). - * - * @param key {String} The hook name. - * - * @example - * ```js - * Handsontable.hooks.register('myHook'); - * ``` - */ - - }, { - key: 'register', - value: function register(key) { - if (!this.isRegistered(key)) { - REGISTERED_HOOKS.push(key); - } - } - - /** - * Deregisters a hook name (removes it from the list of known hook names). - * - * @param key {String} Hook name. - * - * @example - * ```js - * Handsontable.hooks.deregister('myHook'); - * ``` - */ - - }, { - key: 'deregister', - value: function deregister(key) { - if (this.isRegistered(key)) { - REGISTERED_HOOKS.splice(REGISTERED_HOOKS.indexOf(key), 1); - } - } - - /** - * Returns a boolean depending on if a hook by such name has been registered. - * - * @param key {String} Hook name. - * @returns {Boolean} `true` for success, `false` otherwise. - * - * @example - * ```js - * Handsontable.hooks.isRegistered('beforeInit'); - * - * // Results: - * true - * ``` - */ - - }, { - key: 'isRegistered', - value: function isRegistered(key) { - return REGISTERED_HOOKS.indexOf(key) >= 0; - } - - /** - * Returns an array of registered hooks. - * - * @returns {Array} An array of registered hooks. - * - * @example - * ```js - * Handsontable.hooks.getRegistered(); - * - * // Results: - * [ - * ... - * 'beforeInit', - * 'beforeRender', - * 'beforeSetRangeEnd', - * 'beforeDrawBorders', - * 'beforeChange', - * ... - * ] - * ``` - */ - - }, { - key: 'getRegistered', - value: function getRegistered() { - return REGISTERED_HOOKS; - } - }]); - - return Hooks; -}(); - -var globalSingleton = new Hooks(); - -exports.default = Hooks; - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.getRegisteredRenderers = exports.getRegisteredRendererNames = exports.hasRenderer = exports.getRenderer = exports.registerRenderer = undefined; - -var _staticRegister2 = __webpack_require__(50); - -var _staticRegister3 = _interopRequireDefault(_staticRegister2); - -var _cellDecorator = __webpack_require__(262); - -var _cellDecorator2 = _interopRequireDefault(_cellDecorator); - -var _autocompleteRenderer = __webpack_require__(263); - -var _autocompleteRenderer2 = _interopRequireDefault(_autocompleteRenderer); - -var _checkboxRenderer = __webpack_require__(264); - -var _checkboxRenderer2 = _interopRequireDefault(_checkboxRenderer); - -var _htmlRenderer = __webpack_require__(265); - -var _htmlRenderer2 = _interopRequireDefault(_htmlRenderer); - -var _numericRenderer = __webpack_require__(266); - -var _numericRenderer2 = _interopRequireDefault(_numericRenderer); - -var _passwordRenderer = __webpack_require__(267); - -var _passwordRenderer2 = _interopRequireDefault(_passwordRenderer); - -var _textRenderer = __webpack_require__(268); - -var _textRenderer2 = _interopRequireDefault(_textRenderer); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var _staticRegister = (0, _staticRegister3.default)('renderers'), - register = _staticRegister.register, - getItem = _staticRegister.getItem, - hasItem = _staticRegister.hasItem, - getNames = _staticRegister.getNames, - getValues = _staticRegister.getValues; - -register('base', _cellDecorator2.default); -register('autocomplete', _autocompleteRenderer2.default); -register('checkbox', _checkboxRenderer2.default); -register('html', _htmlRenderer2.default); -register('numeric', _numericRenderer2.default); -register('password', _passwordRenderer2.default); -register('text', _textRenderer2.default); - -/** - * Retrieve renderer function. - * - * @param {String} name Renderer identification. - * @returns {Function} Returns renderer function. - */ -function _getItem(name) { - if (typeof name === 'function') { - return name; - } - if (!hasItem(name)) { - throw Error('No registered renderer found under "' + name + '" name'); - } - - return getItem(name); -} - -exports.registerRenderer = register; -exports.getRenderer = _getItem; -exports.hasRenderer = hasItem; -exports.getRegisteredRendererNames = getNames; -exports.getRegisteredRenderers = getValues; - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - -var store = __webpack_require__(83)('wks') - , uid = __webpack_require__(49) - , Symbol = __webpack_require__(13).Symbol - , USE_SYMBOL = typeof Symbol == 'function'; - -var $exports = module.exports = function(name){ - return store[name] || (store[name] = - USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); -}; - -$exports.store = store; - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.Viewport = exports.TableRenderer = exports.Table = exports.Settings = exports.Selection = exports.Scroll = exports.Overlays = exports.Event = exports.Core = exports.default = exports.Border = exports.TopLeftCornerOverlay = exports.TopOverlay = exports.LeftOverlay = exports.DebugOverlay = exports.RowFilter = exports.ColumnFilter = exports.CellRange = exports.CellCoords = exports.ViewportRowsCalculator = exports.ViewportColumnsCalculator = undefined; - -__webpack_require__(97); - -__webpack_require__(114); - -__webpack_require__(123); - -__webpack_require__(124); - -__webpack_require__(108); - -__webpack_require__(122); - -__webpack_require__(105); - -__webpack_require__(106); - -__webpack_require__(107); - -__webpack_require__(96); - -__webpack_require__(119); - -__webpack_require__(117); - -__webpack_require__(115); - -__webpack_require__(120); - -__webpack_require__(121); - -__webpack_require__(116); - -__webpack_require__(118); - -__webpack_require__(109); - -__webpack_require__(110); - -__webpack_require__(111); - -__webpack_require__(113); - -__webpack_require__(112); - -__webpack_require__(94); - -__webpack_require__(95); - -__webpack_require__(90); - -__webpack_require__(93); - -__webpack_require__(92); - -__webpack_require__(91); - -__webpack_require__(67); - -__webpack_require__(99); - -__webpack_require__(100); - -__webpack_require__(102); - -__webpack_require__(101); - -__webpack_require__(98); - -__webpack_require__(104); - -__webpack_require__(103); - -__webpack_require__(125); - -__webpack_require__(128); - -__webpack_require__(126); - -__webpack_require__(127); - -__webpack_require__(130); - -__webpack_require__(129); - -__webpack_require__(132); - -__webpack_require__(131); - -var _viewportColumns = __webpack_require__(136); - -var _viewportColumns2 = _interopRequireDefault(_viewportColumns); - -var _viewportRows = __webpack_require__(137); - -var _viewportRows2 = _interopRequireDefault(_viewportRows); - -var _coords = __webpack_require__(42); - -var _coords2 = _interopRequireDefault(_coords); - -var _range = __webpack_require__(68); - -var _range2 = _interopRequireDefault(_range); - -var _column = __webpack_require__(140); - -var _column2 = _interopRequireDefault(_column); - -var _row = __webpack_require__(141); - -var _row2 = _interopRequireDefault(_row); - -var _debug = __webpack_require__(184); - -var _debug2 = _interopRequireDefault(_debug); - -var _left = __webpack_require__(185); - -var _left2 = _interopRequireDefault(_left); - -var _top = __webpack_require__(186); - -var _top2 = _interopRequireDefault(_top); - -var _topLeftCorner = __webpack_require__(187); - -var _topLeftCorner2 = _interopRequireDefault(_topLeftCorner); - -var _border = __webpack_require__(135); - -var _border2 = _interopRequireDefault(_border); - -var _core = __webpack_require__(138); - -var _core2 = _interopRequireDefault(_core); - -var _event = __webpack_require__(139); - -var _event2 = _interopRequireDefault(_event); - -var _overlays = __webpack_require__(142); - -var _overlays2 = _interopRequireDefault(_overlays); - -var _scroll = __webpack_require__(143); - -var _scroll2 = _interopRequireDefault(_scroll); - -var _selection = __webpack_require__(188); - -var _selection2 = _interopRequireDefault(_selection); - -var _settings = __webpack_require__(144); - -var _settings2 = _interopRequireDefault(_settings); - -var _table = __webpack_require__(145); - -var _table2 = _interopRequireDefault(_table); - -var _tableRenderer = __webpack_require__(146); - -var _tableRenderer2 = _interopRequireDefault(_tableRenderer); - -var _viewport = __webpack_require__(147); - -var _viewport2 = _interopRequireDefault(_viewport); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.ViewportColumnsCalculator = _viewportColumns2.default; -exports.ViewportRowsCalculator = _viewportRows2.default; -exports.CellCoords = _coords2.default; -exports.CellRange = _range2.default; -exports.ColumnFilter = _column2.default; -exports.RowFilter = _row2.default; -exports.DebugOverlay = _debug2.default; -exports.LeftOverlay = _left2.default; -exports.TopOverlay = _top2.default; -exports.TopLeftCornerOverlay = _topLeftCorner2.default; -exports.Border = _border2.default; -exports.default = _core2.default; -exports.Core = _core2.default; -exports.Event = _event2.default; -exports.Overlays = _overlays2.default; -exports.Scroll = _scroll2.default; -exports.Selection = _selection2.default; -exports.Settings = _settings2.default; -exports.Table = _table2.default; -exports.TableRenderer = _tableRenderer2.default; -exports.Viewport = _viewport2.default; - -/***/ }), -/* 12 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _object = __webpack_require__(1); - -var _array = __webpack_require__(2); - -var _recordTranslator = __webpack_require__(153); - -var _plugins = __webpack_require__(5); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var privatePool = new WeakMap(); -var initializedPlugins = null; - -/** - * @private - */ - -var BasePlugin = function () { - /** - * @param {Object} hotInstance Handsontable instance. - */ - function BasePlugin(hotInstance) { - var _this = this; - - _classCallCheck(this, BasePlugin); - - /** - * Handsontable instance. - * - * @type {Core} - */ - (0, _object.defineGetter)(this, 'hot', hotInstance, { - writable: false - }); - (0, _object.defineGetter)(this, 't', (0, _recordTranslator.getTranslator)(hotInstance), { - writable: false - }); - - privatePool.set(this, { hooks: {} }); - initializedPlugins = null; - - this.pluginName = null; - this.pluginsInitializedCallbacks = []; - this.isPluginsReady = false; - this.enabled = false; - this.initialized = false; - - this.hot.addHook('afterPluginsInitialized', function () { - return _this.onAfterPluginsInitialized(); - }); - this.hot.addHook('afterUpdateSettings', function () { - return _this.onUpdateSettings(); - }); - this.hot.addHook('beforeInit', function () { - return _this.init(); - }); - } - - _createClass(BasePlugin, [{ - key: 'init', - value: function init() { - this.pluginName = (0, _plugins.getPluginName)(this.hot, this); - - if (this.isEnabled && this.isEnabled()) { - this.enablePlugin(); - } - if (!initializedPlugins) { - initializedPlugins = (0, _plugins.getRegistredPluginNames)(this.hot); - } - if (initializedPlugins.indexOf(this.pluginName) >= 0) { - initializedPlugins.splice(initializedPlugins.indexOf(this.pluginName), 1); - } - if (!initializedPlugins.length) { - this.hot.runHooks('afterPluginsInitialized'); - } - this.initialized = true; - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - this.enabled = true; - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - if (this.eventManager) { - this.eventManager.clear(); - } - this.clearHooks(); - this.enabled = false; - } - - /** - * Add listener to plugin hooks system. - * - * @param {String} name - * @param {Function} callback - */ - - }, { - key: 'addHook', - value: function addHook(name, callback) { - privatePool.get(this).hooks[name] = privatePool.get(this).hooks[name] || []; - - var hooks = privatePool.get(this).hooks[name]; - - this.hot.addHook(name, callback); - hooks.push(callback); - privatePool.get(this).hooks[name] = hooks; - } - - /** - * Remove all hooks listeners by hook name. - * - * @param {String} name - */ - - }, { - key: 'removeHooks', - value: function removeHooks(name) { - var _this2 = this; - - (0, _array.arrayEach)(privatePool.get(this).hooks[name] || [], function (callback) { - _this2.hot.removeHook(name, callback); - }); - } - - /** - * Clear all hooks. - */ - - }, { - key: 'clearHooks', - value: function clearHooks() { - var _this3 = this; - - var hooks = privatePool.get(this).hooks; - - (0, _object.objectEach)(hooks, function (callbacks, name) { - return _this3.removeHooks(name); - }); - hooks.length = 0; - } - - /** - * Register function which will be immediately called after all plugins initialized. - * - * @param {Function} callback - */ - - }, { - key: 'callOnPluginsReady', - value: function callOnPluginsReady(callback) { - if (this.isPluginsReady) { - callback(); - } else { - this.pluginsInitializedCallbacks.push(callback); - } - } - - /** - * On after plugins initialized listener. - * - * @private - */ - - }, { - key: 'onAfterPluginsInitialized', - value: function onAfterPluginsInitialized() { - (0, _array.arrayEach)(this.pluginsInitializedCallbacks, function (callback) { - return callback(); - }); - this.pluginsInitializedCallbacks.length = 0; - this.isPluginsReady = true; - } - - /** - * On update settings listener. - * - * @private - */ - - }, { - key: 'onUpdateSettings', - value: function onUpdateSettings() { - if (this.isEnabled) { - if (this.enabled && !this.isEnabled()) { - this.disablePlugin(); - } - if (!this.enabled && this.isEnabled()) { - this.enablePlugin(); - } - if (this.enabled && this.isEnabled()) { - this.updatePlugin(); - } - } - } - - /** - * Updates the plugin to use the latest options you have specified. - * - * @private - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() {} - - /** - * Destroy plugin. - */ - - }, { - key: 'destroy', - value: function destroy() { - var _this4 = this; - - if (this.eventManager) { - this.eventManager.destroy(); - } - this.clearHooks(); - - (0, _object.objectEach)(this, function (value, property) { - if (property !== 'hot' && property !== 't') { - _this4[property] = null; - } - }); - delete this.t; - delete this.hot; - } - }]); - - return BasePlugin; -}(); - -exports.default = BasePlugin; - -/***/ }), -/* 13 */ -/***/ (function(module, exports) { - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -var global = module.exports = typeof window != 'undefined' && window.Math == Math - ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); -if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.getRegisteredEditors = exports.getRegisteredEditorNames = exports.hasEditor = exports.getEditorInstance = exports.getEditor = exports.registerEditor = undefined; -exports.RegisteredEditor = RegisteredEditor; -exports._getEditorInstance = _getEditorInstance; - -var _staticRegister2 = __webpack_require__(50); - -var _staticRegister3 = _interopRequireDefault(_staticRegister2); - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _baseEditor = __webpack_require__(36); - -var _baseEditor2 = _interopRequireDefault(_baseEditor); - -var _autocompleteEditor = __webpack_require__(148); - -var _autocompleteEditor2 = _interopRequireDefault(_autocompleteEditor); - -var _checkboxEditor = __webpack_require__(201); - -var _checkboxEditor2 = _interopRequireDefault(_checkboxEditor); - -var _dateEditor = __webpack_require__(202); - -var _dateEditor2 = _interopRequireDefault(_dateEditor); - -var _dropdownEditor = __webpack_require__(203); - -var _dropdownEditor2 = _interopRequireDefault(_dropdownEditor); - -var _handsontableEditor = __webpack_require__(149); - -var _handsontableEditor2 = _interopRequireDefault(_handsontableEditor); - -var _mobileTextEditor = __webpack_require__(204); - -var _mobileTextEditor2 = _interopRequireDefault(_mobileTextEditor); - -var _numericEditor = __webpack_require__(205); - -var _numericEditor2 = _interopRequireDefault(_numericEditor); - -var _passwordEditor = __webpack_require__(206); - -var _passwordEditor2 = _interopRequireDefault(_passwordEditor); - -var _selectEditor = __webpack_require__(207); - -var _selectEditor2 = _interopRequireDefault(_selectEditor); - -var _textEditor = __webpack_require__(43); - -var _textEditor2 = _interopRequireDefault(_textEditor); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var registeredEditorClasses = new WeakMap(); /** - * Utility to register editors and common namespace for keeping reference to all editor classes - */ - -var _staticRegister = (0, _staticRegister3.default)('editors'), - register = _staticRegister.register, - getItem = _staticRegister.getItem, - hasItem = _staticRegister.hasItem, - getNames = _staticRegister.getNames, - getValues = _staticRegister.getValues; - -_register('base', _baseEditor2.default); -_register('autocomplete', _autocompleteEditor2.default); -_register('checkbox', _checkboxEditor2.default); -_register('date', _dateEditor2.default); -_register('dropdown', _dropdownEditor2.default); -_register('handsontable', _handsontableEditor2.default); -_register('mobile', _mobileTextEditor2.default); -_register('numeric', _numericEditor2.default); -_register('password', _passwordEditor2.default); -_register('select', _selectEditor2.default); -_register('text', _textEditor2.default); - -function RegisteredEditor(editorClass) { - var instances = {}; - var Clazz = editorClass; - - this.getConstructor = function () { - return editorClass; - }; - - this.getInstance = function (hotInstance) { - if (!(hotInstance.guid in instances)) { - instances[hotInstance.guid] = new Clazz(hotInstance); - } - - return instances[hotInstance.guid]; - }; - - _pluginHooks2.default.getSingleton().add('afterDestroy', function () { - instances = {}; - }); -} - -/** - * Returns instance (singleton) of editor class. - * - * @param {String} name Name of an editor under which it has been stored. - * @param {Object} hotInstance Instance of Handsontable. - * @returns {Function} Returns instance of editor. - */ -function _getEditorInstance(name, hotInstance) { - var editor = void 0; - - if (typeof name === 'function') { - if (!registeredEditorClasses.get(name)) { - _register(null, name); - } - editor = registeredEditorClasses.get(name); - } else if (typeof name === 'string') { - editor = getItem(name); - } else { - throw Error('Only strings and functions can be passed as "editor" parameter'); - } - - if (!editor) { - throw Error('No editor registered under name "' + name + '"'); - } - - return editor.getInstance(hotInstance); -} - -/** - * Retrieve editor class. - * - * @param {String} name Editor identification. - * @returns {Function} Returns editor class. - */ -function _getItem(name) { - if (!hasItem(name)) { - throw Error('No registered editor found under "' + name + '" name'); - } - - return getItem(name).getConstructor(); -} - -/** - * Register editor class under specified name. - * - * @param {String} name Editor identification. - * @param {Function} editorClass Editor class. - */ -function _register(name, editorClass) { - var editorWrapper = new RegisteredEditor(editorClass); - - if (typeof name === 'string') { - register(name, editorWrapper); - } - registeredEditorClasses.set(editorClass, editorWrapper); -} - -exports.registerEditor = _register; -exports.getEditor = _getItem; -exports.getEditorInstance = _getEditorInstance; -exports.hasEditor = hasItem; -exports.getRegisteredEditorNames = getNames; -exports.getRegisteredEditors = getValues; - -/***/ }), -/* 15 */ -/***/ (function(module, exports) { - -module.exports = function(it){ - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.KEY_CODES = undefined; -exports.isPrintableChar = isPrintableChar; -exports.isMetaKey = isMetaKey; -exports.isCtrlKey = isCtrlKey; -exports.isKey = isKey; - -var _array = __webpack_require__(2); - -var KEY_CODES = exports.KEY_CODES = { - MOUSE_LEFT: 1, - MOUSE_RIGHT: 3, - MOUSE_MIDDLE: 2, - BACKSPACE: 8, - COMMA: 188, - INSERT: 45, - DELETE: 46, - END: 35, - ENTER: 13, - ESCAPE: 27, - CONTROL_LEFT: 91, - COMMAND_LEFT: 17, - COMMAND_RIGHT: 93, - ALT: 18, - HOME: 36, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - SPACE: 32, - SHIFT: 16, - CAPS_LOCK: 20, - TAB: 9, - ARROW_RIGHT: 39, - ARROW_LEFT: 37, - ARROW_UP: 38, - ARROW_DOWN: 40, - F1: 112, - F2: 113, - F3: 114, - F4: 115, - F5: 116, - F6: 117, - F7: 118, - F8: 119, - F9: 120, - F10: 121, - F11: 122, - F12: 123, - A: 65, - X: 88, - C: 67, - V: 86 -}; - -/** - * Returns true if keyCode represents a printable character. - * - * @param {Number} keyCode - * @returns {Boolean} - */ -function isPrintableChar(keyCode) { - return keyCode == 32 || // space - keyCode >= 48 && keyCode <= 57 || // 0-9 - keyCode >= 96 && keyCode <= 111 || // numpad - keyCode >= 186 && keyCode <= 192 || // ;=,-./` - keyCode >= 219 && keyCode <= 222 || // []{}\|"' - keyCode >= 226 || // special chars (229 for Asian chars) - keyCode >= 65 && keyCode <= 90; // a-z -} - -/** - * @param {Number} keyCode - * @returns {Boolean} - */ -function isMetaKey(keyCode) { - var metaKeys = [KEY_CODES.ARROW_DOWN, KEY_CODES.ARROW_UP, KEY_CODES.ARROW_LEFT, KEY_CODES.ARROW_RIGHT, KEY_CODES.HOME, KEY_CODES.END, KEY_CODES.DELETE, KEY_CODES.BACKSPACE, KEY_CODES.F1, KEY_CODES.F2, KEY_CODES.F3, KEY_CODES.F4, KEY_CODES.F5, KEY_CODES.F6, KEY_CODES.F7, KEY_CODES.F8, KEY_CODES.F9, KEY_CODES.F10, KEY_CODES.F11, KEY_CODES.F12, KEY_CODES.TAB, KEY_CODES.PAGE_DOWN, KEY_CODES.PAGE_UP, KEY_CODES.ENTER, KEY_CODES.ESCAPE, KEY_CODES.SHIFT, KEY_CODES.CAPS_LOCK, KEY_CODES.ALT]; - - return metaKeys.indexOf(keyCode) !== -1; -} - -/** - * @param {Number} keyCode - * @returns {Boolean} - */ -function isCtrlKey(keyCode) { - return [KEY_CODES.CONTROL_LEFT, 224, KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT].indexOf(keyCode) !== -1; -} - -/** - * @param {Number} keyCode - * @param {String} baseCode - * @returns {Boolean} - */ -function isKey(keyCode, baseCode) { - var keys = baseCode.split('|'); - var result = false; - - (0, _array.arrayEach)(keys, function (key) { - if (keyCode === KEY_CODES[key]) { - result = true; - - return false; - } - }); - - return result; -} - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.normalizeSelection = normalizeSelection; -exports.isSeparator = isSeparator; -exports.hasSubMenu = hasSubMenu; -exports.isDisabled = isDisabled; -exports.isSelectionDisabled = isSelectionDisabled; -exports.getValidSelection = getValidSelection; -exports.prepareVerticalAlignClass = prepareVerticalAlignClass; -exports.prepareHorizontalAlignClass = prepareHorizontalAlignClass; -exports.getAlignmentClasses = getAlignmentClasses; -exports.align = align; -exports.checkSelectionConsistency = checkSelectionConsistency; -exports.markLabelAsSelected = markLabelAsSelected; -exports.isItemHidden = isItemHidden; -exports.filterSeparators = filterSeparators; - -var _array = __webpack_require__(2); - -var _element = __webpack_require__(0); - -var _separator = __webpack_require__(71); - -function normalizeSelection(selRange) { - return { - start: selRange.getTopLeftCorner(), - end: selRange.getBottomRightCorner() - }; -} - -function isSeparator(cell) { - return (0, _element.hasClass)(cell, 'htSeparator'); -} - -function hasSubMenu(cell) { - return (0, _element.hasClass)(cell, 'htSubmenu'); -} - -function isDisabled(cell) { - return (0, _element.hasClass)(cell, 'htDisabled'); -} - -function isSelectionDisabled(cell) { - return (0, _element.hasClass)(cell, 'htSelectionDisabled'); -} - -function getValidSelection(hot) { - var selected = hot.getSelected(); - - if (!selected) { - return null; - } - if (selected[0] < 0) { - return null; - } - - return selected; -} - -function prepareVerticalAlignClass(className, alignment) { - if (className.indexOf(alignment) != -1) { - return className; - } - className = className.replace('htTop', '').replace('htMiddle', '').replace('htBottom', '').replace(' ', ''); - - className += ' ' + alignment; - - return className; -} - -function prepareHorizontalAlignClass(className, alignment) { - if (className.indexOf(alignment) != -1) { - return className; - } - className = className.replace('htLeft', '').replace('htCenter', '').replace('htRight', '').replace('htJustify', '').replace(' ', ''); - - className += ' ' + alignment; - - return className; -} - -function getAlignmentClasses(range, callback) { - var classes = {}; - - for (var row = range.from.row; row <= range.to.row; row++) { - for (var col = range.from.col; col <= range.to.col; col++) { - if (!classes[row]) { - classes[row] = []; - } - classes[row][col] = callback(row, col); - } - } - - return classes; -} - -function align(range, type, alignment, cellDescriptor, propertySetter) { - if (range.from.row == range.to.row && range.from.col == range.to.col) { - applyAlignClassName(range.from.row, range.from.col, type, alignment, cellDescriptor, propertySetter); - } else { - for (var row = range.from.row; row <= range.to.row; row++) { - for (var col = range.from.col; col <= range.to.col; col++) { - applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter); - } - } - } -} - -function applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter) { - var cellMeta = cellDescriptor(row, col); - var className = alignment; - - if (cellMeta.className) { - if (type === 'vertical') { - className = prepareVerticalAlignClass(cellMeta.className, alignment); - } else { - className = prepareHorizontalAlignClass(cellMeta.className, alignment); - } - } - - propertySetter(row, col, 'className', className); -} - -function checkSelectionConsistency(range, comparator) { - var result = false; - - if (range) { - range.forAll(function (row, col) { - if (comparator(row, col)) { - result = true; - - return false; - } - }); - } - - return result; -} - -function markLabelAsSelected(label) { - // workaround for https://github.com/handsontable/handsontable/issues/1946 - return '' + String.fromCharCode(10003) + '' + label; -} - -function isItemHidden(item, instance) { - return !item.hidden || !(typeof item.hidden == 'function' && item.hidden.call(instance)); -} - -function shiftSeparators(items, separator) { - var result = items.slice(0); - - for (var i = 0; i < result.length;) { - if (result[i].name === separator) { - result.shift(); - } else { - break; - } - } - return result; -} - -function popSeparators(items, separator) { - var result = items.slice(0); - - result.reverse(); - result = shiftSeparators(result, separator); - result.reverse(); - - return result; -} - -function removeDuplicatedSeparators(items) { - var result = []; - - (0, _array.arrayEach)(items, function (value, index) { - if (index > 0) { - if (result[result.length - 1].name !== value.name) { - result.push(value); - } - } else { - result.push(value); - } - }); - - return result; -} - -function filterSeparators(items) { - var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _separator.KEY; - - var result = items.slice(0); - - result = shiftSeparators(result, separator); - result = popSeparators(result, separator); - result = removeDuplicatedSeparators(result); - - return result; -} - -/***/ }), -/* 18 */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(15); -module.exports = function(it){ - if(!isObject(it))throw TypeError(it + ' is not an object!'); - return it; -}; - -/***/ }), -/* 19 */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(18) - , IE8_DOM_DEFINE = __webpack_require__(160) - , toPrimitive = __webpack_require__(86) - , dP = Object.defineProperty; - -exports.f = __webpack_require__(21) ? Object.defineProperty : function defineProperty(O, P, Attributes){ - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if(IE8_DOM_DEFINE)try { - return dP(O, P, Attributes); - } catch(e){ /* empty */ } - if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); - if('value' in Attributes)O[P] = Attributes.value; - return O; -}; - -/***/ }), -/* 20 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.stringify = stringify; -exports.isDefined = isDefined; -exports.isUndefined = isUndefined; -exports.isEmpty = isEmpty; -exports.isRegExp = isRegExp; - -/** - * Converts any value to string. - * - * @param {*} value - * @returns {String} - */ -function stringify(value) { - var result = void 0; - - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case 'string': - case 'number': - result = '' + value; - break; - - case 'object': - result = value === null ? '' : value.toString(); - break; - case 'undefined': - result = ''; - break; - default: - result = value.toString(); - break; - } - - return result; -} - -/** - * Checks if given variable is defined. - * - * @param {*} variable Variable to check. - * @returns {Boolean} - */ -function isDefined(variable) { - return typeof variable !== 'undefined'; -} - -/** - * Checks if given variable is undefined. - * - * @param {*} variable Variable to check. - * @returns {Boolean} - */ -function isUndefined(variable) { - return typeof variable === 'undefined'; -} - -/** - * Check if given variable is null, empty string or undefined. - * - * @param {*} variable Variable to check. - * @returns {Boolean} - */ -function isEmpty(variable) { - return variable === null || variable === '' || isUndefined(variable); -} - -/** - * Check if given variable is a regular expression. - * - * @param {*} variable Variable to check. - * @returns {Boolean} - */ -function isRegExp(variable) { - return Object.prototype.toString.call(variable) === '[object RegExp]'; -} - -/***/ }), -/* 21 */ -/***/ (function(module, exports, __webpack_require__) { - -// Thank's IE8 for his funny defineProperty -module.exports = !__webpack_require__(31)(function(){ - return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; -}); - -/***/ }), -/* 22 */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; -module.exports = function(it, key){ - return hasOwnProperty.call(it, key); -}; - -/***/ }), -/* 23 */ -/***/ (function(module, exports, __webpack_require__) { - -// to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = __webpack_require__(77) - , defined = __webpack_require__(30); -module.exports = function(it){ - return IObject(defined(it)); -}; - -/***/ }), -/* 24 */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.15 ToLength -var toInteger = __webpack_require__(60) - , min = Math.min; -module.exports = function(it){ - return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 -}; - -/***/ }), -/* 25 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.isIE8 = isIE8; -exports.isIE9 = isIE9; -exports.isSafari = isSafari; -exports.isChrome = isChrome; -exports.isMobileBrowser = isMobileBrowser; - -var _isIE8 = !document.createTextNode('test').textContent; - -function isIE8() { - return _isIE8; -} - -var _isIE9 = !!document.documentMode; - -function isIE9() { - return _isIE9; -} - -var _isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor); - -function isSafari() { - return _isSafari; -} - -var _isChrome = /Chrome/.test(navigator.userAgent) && /Google/.test(navigator.vendor); - -function isChrome() { - return _isChrome; -} - -function isMobileBrowser(userAgent) { - if (!userAgent) { - userAgent = navigator.userAgent; - } - - return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) - ); -} - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.getRegisteredValidators = exports.getRegisteredValidatorNames = exports.hasValidator = exports.getValidator = exports.registerValidator = undefined; - -var _staticRegister2 = __webpack_require__(50); - -var _staticRegister3 = _interopRequireDefault(_staticRegister2); - -var _autocompleteValidator = __webpack_require__(273); - -var _autocompleteValidator2 = _interopRequireDefault(_autocompleteValidator); - -var _dateValidator = __webpack_require__(274); - -var _dateValidator2 = _interopRequireDefault(_dateValidator); - -var _numericValidator = __webpack_require__(275); - -var _numericValidator2 = _interopRequireDefault(_numericValidator); - -var _timeValidator = __webpack_require__(276); - -var _timeValidator2 = _interopRequireDefault(_timeValidator); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var _staticRegister = (0, _staticRegister3.default)('validators'), - register = _staticRegister.register, - getItem = _staticRegister.getItem, - hasItem = _staticRegister.hasItem, - getNames = _staticRegister.getNames, - getValues = _staticRegister.getValues; - -register('autocomplete', _autocompleteValidator2.default); -register('date', _dateValidator2.default); -register('numeric', _numericValidator2.default); -register('time', _timeValidator2.default); - -/** - * Retrieve validator function. - * - * @param {String} name Validator identification. - * @returns {Function} Returns validator function. - */ -function _getItem(name) { - if (typeof name === 'function') { - return name; - } - if (!hasItem(name)) { - throw Error('No registered validator found under "' + name + '" name'); - } - - return getItem(name); -} - -exports.registerValidator = register; -exports.getValidator = _getItem; -exports.hasValidator = hasItem; -exports.getRegisteredValidatorNames = getNames; -exports.getRegisteredValidators = getValues; - -/***/ }), -/* 27 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.toUpperCaseFirst = toUpperCaseFirst; -exports.equalsIgnoreCase = equalsIgnoreCase; -exports.randomString = randomString; -exports.isPercentValue = isPercentValue; -exports.substitute = substitute; -exports.stripTags = stripTags; - -var _mixed = __webpack_require__(20); - -var _number = __webpack_require__(6); - -/** - * Convert string to upper case first letter. - * - * @param {String} string String to convert. - * @returns {String} - */ -function toUpperCaseFirst(string) { - return string[0].toUpperCase() + string.substr(1); -} - -/** - * Compare strings case insensitively. - * - * @param {...String} strings Strings to compare. - * @returns {Boolean} - */ -function equalsIgnoreCase() { - var unique = []; - - for (var _len = arguments.length, strings = Array(_len), _key = 0; _key < _len; _key++) { - strings[_key] = arguments[_key]; - } - - var length = strings.length; - - while (length--) { - var string = (0, _mixed.stringify)(strings[length]).toLowerCase(); - - if (unique.indexOf(string) === -1) { - unique.push(string); - } - } - - return unique.length === 1; -} - -/** - * Generates a random hex string. Used as namespace for Handsontable instance events. - * - * @return {String} Returns 16-long character random string (eq. `'92b1bfc74ec4'`). - */ -function randomString() { - function s4() { - return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); - } - - return s4() + s4() + s4() + s4(); -} - -/** - * Checks if value is valid percent. - * - * @param {String} value - * @returns {Boolean} - */ -function isPercentValue(value) { - return (/^([0-9][0-9]?%$)|(^100%$)/.test(value) - ); -} - -/** - * Substitute strings placed beetwen square brackets into value defined in `variables` object. String names defined in - * square brackets must be the same as property name of `variables` object. - * - * @param {String} template Template string. - * @param {Object} variables Object which contains all available values which can be injected into template. - * @returns {String} - */ -function substitute(template) { - var variables = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - return ('' + template).replace(/(?:\\)?\[([^[\]]+)]/g, function (match, name) { - if (match.charAt(0) === '\\') { - return match.substr(1, match.length - 1); - } - - return variables[name] === void 0 ? '' : variables[name]; - }); -} - -var STRIP_TAGS_REGEX = /<\/?\w+\/?>|<\w+[\s|/][^>]*>/gi; - -/** - * Strip any HTML tag from the string. - * - * @param {String} string String to cut HTML from. - * @return {String} - */ -function stripTags(string) { - string += ''; - - return string.replace(STRIP_TAGS_REGEX, ''); -} - -/***/ }), -/* 28 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _object = __webpack_require__(1); - -var _array = __webpack_require__(2); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _core = __webpack_require__(138); - -var _core2 = _interopRequireDefault(_core); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var registeredOverlays = {}; - -/** - * Creates an overlay over the original Walkontable instance. The overlay renders the clone of the original Walkontable - * and (optionally) implements behavior needed for native horizontal and vertical scrolling. - * - * @class Overlay - */ - -var Overlay = function () { - _createClass(Overlay, null, [{ - key: 'registerOverlay', - - - /** - * Register overlay class. - * - * @param {String} type Overlay type, one of the CLONE_TYPES value - * @param {Overlay} overlayClass Overlay class extended from base overlay class {@link Overlay} - */ - value: function registerOverlay(type, overlayClass) { - if (Overlay.CLONE_TYPES.indexOf(type) === -1) { - throw new Error('Unsupported overlay (' + type + ').'); - } - registeredOverlays[type] = overlayClass; - } - - /** - * Create new instance of overlay type. - * - * @param {String} type Overlay type, one of the CLONE_TYPES value - * @param {Walkontable} wot Walkontable instance - */ - - }, { - key: 'createOverlay', - value: function createOverlay(type, wot) { - return new registeredOverlays[type](wot); - } - - /** - * Check if specified overlay was registered. - * - * @param {String} type Overlay type, one of the CLONE_TYPES value - * @returns {Boolean} - */ - - }, { - key: 'hasOverlay', - value: function hasOverlay(type) { - return registeredOverlays[type] !== void 0; - } - - /** - * Checks if overlay object (`overlay`) is instance of overlay type (`type`). - * - * @param {Overlay} overlay Overlay object - * @param {String} type Overlay type, one of the CLONE_TYPES value - * @returns {Boolean} - */ - - }, { - key: 'isOverlayTypeOf', - value: function isOverlayTypeOf(overlay, type) { - if (!overlay || !registeredOverlays[type]) { - return false; - } - - return overlay instanceof registeredOverlays[type]; - } - - /** - * @param {Walkontable} wotInstance - */ - - }, { - key: 'CLONE_TOP', - - /** - * @type {String} - */ - get: function get() { - return 'top'; - } - - /** - * @type {String} - */ - - }, { - key: 'CLONE_BOTTOM', - get: function get() { - return 'bottom'; - } - - /** - * @type {String} - */ - - }, { - key: 'CLONE_LEFT', - get: function get() { - return 'left'; - } - - /** - * @type {String} - */ - - }, { - key: 'CLONE_TOP_LEFT_CORNER', - get: function get() { - return 'top_left_corner'; - } - - /** - * @type {String} - */ - - }, { - key: 'CLONE_BOTTOM_LEFT_CORNER', - get: function get() { - return 'bottom_left_corner'; - } - - /** - * @type {String} - */ - - }, { - key: 'CLONE_DEBUG', - get: function get() { - return 'debug'; - } - - /** - * List of all availables clone types - * - * @type {Array} - */ - - }, { - key: 'CLONE_TYPES', - get: function get() { - return [Overlay.CLONE_TOP, Overlay.CLONE_BOTTOM, Overlay.CLONE_LEFT, Overlay.CLONE_TOP_LEFT_CORNER, Overlay.CLONE_BOTTOM_LEFT_CORNER, Overlay.CLONE_DEBUG]; - } - }]); - - function Overlay(wotInstance) { - _classCallCheck(this, Overlay); - - (0, _object.defineGetter)(this, 'wot', wotInstance, { - writable: false - }); - - // legacy support, deprecated in the future - this.instance = this.wot; - - this.type = ''; - this.mainTableScrollableElement = null; - this.TABLE = this.wot.wtTable.TABLE; - this.hider = this.wot.wtTable.hider; - this.spreader = this.wot.wtTable.spreader; - this.holder = this.wot.wtTable.holder; - this.wtRootElement = this.wot.wtTable.wtRootElement; - this.trimmingContainer = (0, _element.getTrimmingContainer)(this.hider.parentNode.parentNode); - this.areElementSizesAdjusted = false; - this.updateStateOfRendering(); - } - - /** - * Update internal state of object with an information about the need of full rendering of the overlay. - * - * @returns {Boolean} Returns `true` if the state has changed since the last check. - */ - - - _createClass(Overlay, [{ - key: 'updateStateOfRendering', - value: function updateStateOfRendering() { - var previousState = this.needFullRender; - - this.needFullRender = this.shouldBeRendered(); - - var changed = previousState !== this.needFullRender; - - if (changed && !this.needFullRender) { - this.reset(); - } - - return changed; - } - - /** - * Checks if overlay should be fully rendered - * - * @returns {Boolean} - */ - - }, { - key: 'shouldBeRendered', - value: function shouldBeRendered() { - return true; - } - - /** - * Update the trimming container. - */ - - }, { - key: 'updateTrimmingContainer', - value: function updateTrimmingContainer() { - this.trimmingContainer = (0, _element.getTrimmingContainer)(this.hider.parentNode.parentNode); - } - - /** - * Update the main scrollable element. - */ - - }, { - key: 'updateMainScrollableElement', - value: function updateMainScrollableElement() { - this.mainTableScrollableElement = (0, _element.getScrollableElement)(this.wot.wtTable.TABLE); - } - - /** - * Make a clone of table for overlay - * - * @param {String} direction Can be `Overlay.CLONE_TOP`, `Overlay.CLONE_LEFT`, - * `Overlay.CLONE_TOP_LEFT_CORNER`, `Overlay.CLONE_DEBUG` - * @returns {Walkontable} - */ - - }, { - key: 'makeClone', - value: function makeClone(direction) { - if (Overlay.CLONE_TYPES.indexOf(direction) === -1) { - throw new Error('Clone type "' + direction + '" is not supported.'); - } - var clone = document.createElement('DIV'); - var clonedTable = document.createElement('TABLE'); - - clone.className = 'ht_clone_' + direction + ' handsontable'; - clone.style.position = 'absolute'; - clone.style.top = 0; - clone.style.left = 0; - clone.style.overflow = 'hidden'; - - clonedTable.className = this.wot.wtTable.TABLE.className; - clone.appendChild(clonedTable); - - this.type = direction; - this.wot.wtTable.wtRootElement.parentNode.appendChild(clone); - - var preventOverflow = this.wot.getSetting('preventOverflow'); - - if (preventOverflow === true || preventOverflow === 'horizontal' && this.type === Overlay.CLONE_TOP || preventOverflow === 'vertical' && this.type === Overlay.CLONE_LEFT) { - this.mainTableScrollableElement = window; - } else { - this.mainTableScrollableElement = (0, _element.getScrollableElement)(this.wot.wtTable.TABLE); - } - - return new _core2.default({ - cloneSource: this.wot, - cloneOverlay: this, - table: clonedTable - }); - } - - /** - * Refresh/Redraw overlay - * - * @param {Boolean} [fastDraw=false] - */ - - }, { - key: 'refresh', - value: function refresh() { - var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - // When hot settings are changed we allow to refresh overlay once before blocking - var nextCycleRenderFlag = this.shouldBeRendered(); - - if (this.clone && (this.needFullRender || nextCycleRenderFlag)) { - this.clone.draw(fastDraw); - } - this.needFullRender = nextCycleRenderFlag; - } - - /** - * Reset overlay styles to initial values. - */ - - }, { - key: 'reset', - value: function reset() { - if (!this.clone) { - return; - } - var holder = this.clone.wtTable.holder; - var hider = this.clone.wtTable.hider; - var holderStyle = holder.style; - var hidderStyle = hider.style; - var rootStyle = holder.parentNode.style; - - (0, _array.arrayEach)([holderStyle, hidderStyle, rootStyle], function (style) { - style.width = ''; - style.height = ''; - }); - } - - /** - * Destroy overlay instance - */ - - }, { - key: 'destroy', - value: function destroy() { - new _eventManager2.default(this.clone).destroy(); - } - }]); - - return Overlay; -}(); - -exports.default = Overlay; - -/***/ }), -/* 29 */ -/***/ (function(module, exports, __webpack_require__) { - -// optional / simple context binding -var aFunction = __webpack_require__(72); -module.exports = function(fn, that, length){ - aFunction(fn); - if(that === undefined)return fn; - switch(length){ - case 1: return function(a){ - return fn.call(that, a); - }; - case 2: return function(a, b){ - return fn.call(that, a, b); - }; - case 3: return function(a, b, c){ - return fn.call(that, a, b, c); - }; - } - return function(/* ...args */){ - return fn.apply(that, arguments); - }; -}; - -/***/ }), -/* 30 */ -/***/ (function(module, exports) { - -// 7.2.1 RequireObjectCoercible(argument) -module.exports = function(it){ - if(it == undefined)throw TypeError("Can't call method on " + it); - return it; -}; - -/***/ }), -/* 31 */ -/***/ (function(module, exports) { - -module.exports = function(exec){ - try { - return !!exec(); - } catch(e){ - return true; - } -}; - -/***/ }), -/* 32 */ -/***/ (function(module, exports, __webpack_require__) { - -var dP = __webpack_require__(19) - , createDesc = __webpack_require__(40); -module.exports = __webpack_require__(21) ? function(object, key, value){ - return dP.f(object, key, createDesc(1, value)); -} : function(object, key, value){ - object[key] = value; - return object; -}; - -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(13) - , hide = __webpack_require__(32) - , has = __webpack_require__(22) - , SRC = __webpack_require__(49)('src') - , TO_STRING = 'toString' - , $toString = Function[TO_STRING] - , TPL = ('' + $toString).split(TO_STRING); - -__webpack_require__(44).inspectSource = function(it){ - return $toString.call(it); -}; - -(module.exports = function(O, key, val, safe){ - var isFunction = typeof val == 'function'; - if(isFunction)has(val, 'name') || hide(val, 'name', key); - if(O[key] === val)return; - if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); - if(O === global){ - O[key] = val; - } else { - if(!safe){ - delete O[key]; - hide(O, key, val); - } else { - if(O[key])O[key] = val; - else hide(O, key, val); - } - } -// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative -})(Function.prototype, TO_STRING, function toString(){ - return typeof this == 'function' && this[SRC] || $toString.call(this); -}); - -/***/ }), -/* 34 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.requestAnimationFrame = requestAnimationFrame; -exports.cancelAnimationFrame = cancelAnimationFrame; -exports.isTouchSupported = isTouchSupported; -exports.isWebComponentSupportedNatively = isWebComponentSupportedNatively; -exports.hasCaptionProblem = hasCaptionProblem; -exports.getComparisonFunction = getComparisonFunction; -// https://gist.github.com/paulirish/1579671 -var lastTime = 0; -var vendors = ['ms', 'moz', 'webkit', 'o']; -var _requestAnimationFrame = window.requestAnimationFrame; -var _cancelAnimationFrame = window.cancelAnimationFrame; - -for (var x = 0; x < vendors.length && !_requestAnimationFrame; ++x) { - _requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; - _cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame']; -} - -if (!_requestAnimationFrame) { - _requestAnimationFrame = function _requestAnimationFrame(callback) { - var currTime = new Date().getTime(); - var timeToCall = Math.max(0, 16 - (currTime - lastTime)); - var id = window.setTimeout(function () { - callback(currTime + timeToCall); - }, timeToCall); - lastTime = currTime + timeToCall; - - return id; - }; -} - -if (!_cancelAnimationFrame) { - _cancelAnimationFrame = function _cancelAnimationFrame(id) { - clearTimeout(id); - }; -} - -/** - * Polyfill for requestAnimationFrame - * - * @param {Function} callback - * @returns {Number} - */ -function requestAnimationFrame(callback) { - return _requestAnimationFrame.call(window, callback); -} - -/** - * Polyfill for cancelAnimationFrame - * - * @param {Number} id - */ -function cancelAnimationFrame(id) { - _cancelAnimationFrame.call(window, id); -} - -function isTouchSupported() { - return 'ontouchstart' in window; -} - -/** - * Checks if browser is support web components natively - * - * @returns {Boolean} - */ -function isWebComponentSupportedNatively() { - var test = document.createElement('div'); - - return !!(test.createShadowRoot && test.createShadowRoot.toString().match(/\[native code\]/)); -} - -var _hasCaptionProblem; - -function detectCaptionProblem() { - var TABLE = document.createElement('TABLE'); - TABLE.style.borderSpacing = 0; - TABLE.style.borderWidth = 0; - TABLE.style.padding = 0; - var TBODY = document.createElement('TBODY'); - TABLE.appendChild(TBODY); - TBODY.appendChild(document.createElement('TR')); - TBODY.firstChild.appendChild(document.createElement('TD')); - TBODY.firstChild.firstChild.innerHTML = 't
t'; - - var CAPTION = document.createElement('CAPTION'); - CAPTION.innerHTML = 'c
c
c
c'; - CAPTION.style.padding = 0; - CAPTION.style.margin = 0; - TABLE.insertBefore(CAPTION, TBODY); - - document.body.appendChild(TABLE); - _hasCaptionProblem = TABLE.offsetHeight < 2 * TABLE.lastChild.offsetHeight; // boolean - document.body.removeChild(TABLE); -} - -function hasCaptionProblem() { - if (_hasCaptionProblem === void 0) { - detectCaptionProblem(); - } - - return _hasCaptionProblem; -} - -var comparisonFunction = void 0; - -/** - * Get string comparison function for sorting purposes. It supports multilingual string comparison base on Internationalization API. - * - * @param {String} [language] - * @param {Object} [options] - * @returns {*} - */ -function getComparisonFunction(language) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (comparisonFunction) { - return comparisonFunction; - } - - if ((typeof Intl === 'undefined' ? 'undefined' : _typeof(Intl)) === 'object') { - comparisonFunction = new Intl.Collator(language, options).compare; - } else if (typeof String.prototype.localeCompare === 'function') { - comparisonFunction = function comparisonFunction(a, b) { - return ('' + a).localeCompare(b); - }; - } else { - comparisonFunction = function comparisonFunction(a, b) { - if (a === b) { - return 0; - } - - return a > b ? -1 : 1; - }; - } - - return comparisonFunction; -} - -/***/ }), -/* 35 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.isFunction = isFunction; -exports.throttle = throttle; -exports.throttleAfterHits = throttleAfterHits; -exports.debounce = debounce; -exports.pipe = pipe; -exports.partial = partial; -exports.curry = curry; -exports.curryRight = curryRight; - -var _array = __webpack_require__(2); - -/** - * Checks if given variable is function. - * - * @param {*} func Variable to check. - * @returns {Boolean} - */ -function isFunction(func) { - return typeof func === 'function'; -} - -/** - * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over time (`wait`). - * - * @param {Function} func Function to invoke. - * @param {Number} wait Delay in miliseconds. - * @returns {Function} - */ -function throttle(func) { - var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200; - - var lastCalled = 0; - var result = { - lastCallThrottled: true - }; - var lastTimer = null; - - function _throttle() { - var _this = this; - - var args = arguments; - var stamp = Date.now(); - var needCall = false; - - result.lastCallThrottled = true; - - if (!lastCalled) { - lastCalled = stamp; - needCall = true; - } - var remaining = wait - (stamp - lastCalled); - - if (needCall) { - result.lastCallThrottled = false; - func.apply(this, args); - } else { - if (lastTimer) { - clearTimeout(lastTimer); - } - lastTimer = setTimeout(function () { - result.lastCallThrottled = false; - func.apply(_this, args); - lastCalled = 0; - lastTimer = void 0; - }, remaining); - } - - return result; - } - - return _throttle; -} - -/** - * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over - * time (`wait`) after specified hits. - * - * @param {Function} func Function to invoke. - * @param {Number} wait Delay in miliseconds. - * @param {Number} hits Number of hits after throttling will be applied. - * @returns {Function} - */ -function throttleAfterHits(func) { - var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200; - var hits = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10; - - var funcThrottle = throttle(func, wait); - var remainHits = hits; - - function _clearHits() { - remainHits = hits; - } - function _throttleAfterHits() { - if (remainHits) { - remainHits--; - - return func.apply(this, arguments); - } - - return funcThrottle.apply(this, arguments); - } - _throttleAfterHits.clearHits = _clearHits; - - return _throttleAfterHits; -} - -/** - * Creates debounce function that enforces a function (`func`) not be called again until a certain amount of time (`wait`) - * has passed without it being called. - * - * @param {Function} func Function to invoke. - * @param {Number} wait Delay in milliseconds. - * @returns {Function} - */ -function debounce(func) { - var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200; - - var lastTimer = null; - var result = void 0; - - function _debounce() { - var _this2 = this; - - var args = arguments; - - if (lastTimer) { - clearTimeout(lastTimer); - } - lastTimer = setTimeout(function () { - result = func.apply(_this2, args); - }, wait); - - return result; - } - - return _debounce; -} - -/** - * Creates the function that returns the result of calling the given functions. Result of the first function is passed to - * the second as an argument and so on. Only first function in the chain can handle multiple arguments. - * - * @param {Function} functions Functions to compose. - * @returns {Function} - */ -function pipe() { - for (var _len = arguments.length, functions = Array(_len), _key = 0; _key < _len; _key++) { - functions[_key] = arguments[_key]; - } - - var firstFunc = functions[0], - restFunc = functions.slice(1); - - - return function _pipe() { - return (0, _array.arrayReduce)(restFunc, function (acc, fn) { - return fn(acc); - }, firstFunc.apply(this, arguments)); - }; -} - -/** - * Creates the function that returns the function with cached arguments. - * - * @param {Function} func Function to partialization. - * @param {Array} params Function arguments to cache. - * @returns {Function} - */ -function partial(func) { - for (var _len2 = arguments.length, params = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - params[_key2 - 1] = arguments[_key2]; - } - - return function _partial() { - for (var _len3 = arguments.length, restParams = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - restParams[_key3] = arguments[_key3]; - } - - return func.apply(this, params.concat(restParams)); - }; -} - -/** - * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched - * to the arguments defined in `func` then function will be invoked. - * Arguments are added to the stack in direction from the left to the right. - * - * @example - * ``` - * var replace = curry(function(find, replace, string) { - * return string.replace(find, replace); - * }); - * - * // returns function with bounded first argument - * var replace = replace('foo') - * - * // returns replaced string - all arguments was passed so function was invoked - * replace('bar', 'Some test with foo...'); - * - * ``` - * - * @param {Function} func Function to currying. - * @returns {Function} - */ -function curry(func) { - var argsLength = func.length; - - function given(argsSoFar) { - return function _curry() { - for (var _len4 = arguments.length, params = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - params[_key4] = arguments[_key4]; - } - - var passedArgsSoFar = argsSoFar.concat(params); - var result = void 0; - - if (passedArgsSoFar.length >= argsLength) { - result = func.apply(this, passedArgsSoFar); - } else { - result = given(passedArgsSoFar); - } - - return result; - }; - } - - return given([]); -} - -/** - * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched - * to the arguments defined in `func` then function will be invoked. - * Arguments are added to the stack in direction from the right to the left. - * - * @example - * ``` - * var replace = curry(function(find, replace, string) { - * return string.replace(find, replace); - * }); - * - * // returns function with bounded first argument - * var replace = replace('Some test with foo...') - * - * // returns replaced string - all arguments was passed so function was invoked - * replace('bar', 'foo'); - * - * ``` - * - * @param {Function} func Function to currying. - * @returns {Function} - */ -function curryRight(func) { - var argsLength = func.length; - - function given(argsSoFar) { - return function _curry() { - for (var _len5 = arguments.length, params = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - params[_key5] = arguments[_key5]; - } - - var passedArgsSoFar = argsSoFar.concat(params.reverse()); - var result = void 0; - - if (passedArgsSoFar.length >= argsLength) { - result = func.apply(this, passedArgsSoFar); - } else { - result = given(passedArgsSoFar); - } - - return result; - }; - } - - return given([]); -} - -/***/ }), -/* 36 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.EditorState = undefined; - -var _src = __webpack_require__(11); - -var _mixed = __webpack_require__(20); - -var EditorState = exports.EditorState = { - VIRGIN: 'STATE_VIRGIN', // before editing - EDITING: 'STATE_EDITING', - WAITING: 'STATE_WAITING', // waiting for async validation - FINISHED: 'STATE_FINISHED' -}; - -function BaseEditor(instance) { - this.instance = instance; - this.state = EditorState.VIRGIN; - - this._opened = false; - this._fullEditMode = false; - this._closeCallback = null; - - this.init(); -} - -BaseEditor.prototype._fireCallbacks = function (result) { - if (this._closeCallback) { - this._closeCallback(result); - this._closeCallback = null; - } -}; - -BaseEditor.prototype.init = function () {}; - -BaseEditor.prototype.getValue = function () { - throw Error('Editor getValue() method unimplemented'); -}; - -BaseEditor.prototype.setValue = function (newValue) { - throw Error('Editor setValue() method unimplemented'); -}; - -BaseEditor.prototype.open = function () { - throw Error('Editor open() method unimplemented'); -}; - -BaseEditor.prototype.close = function () { - throw Error('Editor close() method unimplemented'); -}; - -BaseEditor.prototype.prepare = function (row, col, prop, td, originalValue, cellProperties) { - this.TD = td; - this.row = row; - this.col = col; - this.prop = prop; - this.originalValue = originalValue; - this.cellProperties = cellProperties; - this.state = EditorState.VIRGIN; -}; - -BaseEditor.prototype.extend = function () { - var baseClass = this.constructor; - - function Editor() { - baseClass.apply(this, arguments); - } - - function inherit(Child, Parent) { - function Bridge() {} - Bridge.prototype = Parent.prototype; - Child.prototype = new Bridge(); - Child.prototype.constructor = Child; - - return Child; - } - - return inherit(Editor, baseClass); -}; - -BaseEditor.prototype.saveValue = function (value, ctrlDown) { - var selection = void 0; - var tmp = void 0; - - // if ctrl+enter and multiple cells selected, behave like Excel (finish editing and apply to all cells) - if (ctrlDown) { - selection = this.instance.getSelected(); - - if (selection[0] > selection[2]) { - tmp = selection[0]; - selection[0] = selection[2]; - selection[2] = tmp; - } - if (selection[1] > selection[3]) { - tmp = selection[1]; - selection[1] = selection[3]; - selection[3] = tmp; - } - } else { - selection = [this.row, this.col, null, null]; - } - - this.instance.populateFromArray(selection[0], selection[1], value, selection[2], selection[3], 'edit'); -}; - -BaseEditor.prototype.beginEditing = function (initialValue, event) { - if (this.state != EditorState.VIRGIN) { - return; - } - this.instance.view.scrollViewport(new _src.CellCoords(this.row, this.col)); - this.instance.view.render(); - this.state = EditorState.EDITING; - - initialValue = typeof initialValue == 'string' ? initialValue : this.originalValue; - this.setValue((0, _mixed.stringify)(initialValue)); - - this.open(event); - this._opened = true; - this.focus(); - - // only rerender the selections (FillHandle should disappear when beginediting is triggered) - this.instance.view.render(); - - this.instance.runHooks('afterBeginEditing', this.row, this.col); -}; - -BaseEditor.prototype.finishEditing = function (restoreOriginalValue, ctrlDown, callback) { - var _this = this, - val; - - if (callback) { - var previousCloseCallback = this._closeCallback; - - this._closeCallback = function (result) { - if (previousCloseCallback) { - previousCloseCallback(result); - } - - callback(result); - _this.instance.view.render(); - }; - } - - if (this.isWaiting()) { - return; - } - - if (this.state == EditorState.VIRGIN) { - this.instance._registerTimeout(setTimeout(function () { - _this._fireCallbacks(true); - }, 0)); - - return; - } - - if (this.state == EditorState.EDITING) { - if (restoreOriginalValue) { - this.cancelChanges(); - this.instance.view.render(); - - return; - } - - var value = this.getValue(); - - if (this.instance.getSettings().trimWhitespace) { - // We trim only string values - val = [[typeof value === 'string' ? String.prototype.trim.call(value || '') : value]]; - } else { - val = [[value]]; - } - - this.state = EditorState.WAITING; - this.saveValue(val, ctrlDown); - - if (this.instance.getCellValidator(this.cellProperties)) { - this.instance.addHookOnce('postAfterValidate', function (result) { - _this.state = EditorState.FINISHED; - _this.discardEditor(result); - }); - } else { - this.state = EditorState.FINISHED; - this.discardEditor(true); - } - } -}; - -BaseEditor.prototype.cancelChanges = function () { - this.state = EditorState.FINISHED; - this.discardEditor(); -}; - -BaseEditor.prototype.discardEditor = function (result) { - if (this.state !== EditorState.FINISHED) { - return; - } - // validator was defined and failed - if (result === false && this.cellProperties.allowInvalid !== true) { - this.instance.selectCell(this.row, this.col); - this.focus(); - this.state = EditorState.EDITING; - this._fireCallbacks(false); - } else { - this.close(); - this._opened = false; - this._fullEditMode = false; - this.state = EditorState.VIRGIN; - this._fireCallbacks(true); - } -}; - -/** - * Switch editor into full edit mode. In this state navigation keys don't close editor. This mode is activated - * automatically after hit ENTER or F2 key on the cell or while editing cell press F2 key. - */ -BaseEditor.prototype.enableFullEditMode = function () { - this._fullEditMode = true; -}; - -/** - * Checks if editor is in full edit mode. - * - * @returns {Boolean} - */ -BaseEditor.prototype.isInFullEditMode = function () { - return this._fullEditMode; -}; - -BaseEditor.prototype.isOpened = function () { - return this._opened; -}; - -BaseEditor.prototype.isWaiting = function () { - return this.state === EditorState.WAITING; -}; - -BaseEditor.prototype.checkEditorSection = function () { - var totalRows = this.instance.countRows(); - var section = ''; - - if (this.row < this.instance.getSettings().fixedRowsTop) { - if (this.col < this.instance.getSettings().fixedColumnsLeft) { - section = 'top-left-corner'; - } else { - section = 'top'; - } - } else if (this.instance.getSettings().fixedRowsBottom && this.row >= totalRows - this.instance.getSettings().fixedRowsBottom) { - if (this.col < this.instance.getSettings().fixedColumnsLeft) { - section = 'bottom-left-corner'; - } else { - section = 'bottom'; - } - } else if (this.col < this.instance.getSettings().fixedColumnsLeft) { - section = 'left'; - } - - return section; -}; - -exports.default = BaseEditor; - -/***/ }), -/* 37 */ -/***/ (function(module, exports, __webpack_require__) { - -// 22.1.3.31 Array.prototype[@@unscopables] -var UNSCOPABLES = __webpack_require__(10)('unscopables') - , ArrayProto = Array.prototype; -if(ArrayProto[UNSCOPABLES] == undefined)__webpack_require__(32)(ArrayProto, UNSCOPABLES, {}); -module.exports = function(key){ - ArrayProto[UNSCOPABLES][key] = true; -}; - -/***/ }), -/* 38 */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function(it){ - return toString.call(it).slice(8, -1); -}; - -/***/ }), -/* 39 */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.14 / 15.2.3.14 Object.keys(O) -var $keys = __webpack_require__(169) - , enumBugKeys = __webpack_require__(75); - -module.exports = Object.keys || function keys(O){ - return $keys(O, enumBugKeys); -}; - -/***/ }), -/* 40 */ -/***/ (function(module, exports) { - -module.exports = function(bitmap, value){ - return { - enumerable : !(bitmap & 1), - configurable: !(bitmap & 2), - writable : !(bitmap & 4), - value : value - }; -}; - -/***/ }), -/* 41 */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.13 ToObject(argument) -var defined = __webpack_require__(30); -module.exports = function(it){ - return Object(defined(it)); -}; - -/***/ }), -/* 42 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * CellCoords holds cell coordinates (row, column) and few method to validate them and - * retrieve as an array or an object - * - * @class CellCoords - */ -var CellCoords = function () { - /** - * @param {Number} row Row index - * @param {Number} col Column index - */ - function CellCoords(row, col) { - _classCallCheck(this, CellCoords); - - if (typeof row !== 'undefined' && typeof col !== 'undefined') { - this.row = row; - this.col = col; - } else { - this.row = null; - this.col = null; - } - } - - /** - * Checks if given set of coordinates is valid in context of a given Walkontable instance - * - * @param {Walkontable} wotInstance - * @returns {Boolean} - */ - - - _createClass(CellCoords, [{ - key: 'isValid', - value: function isValid(wotInstance) { - // is it a valid cell index (0 or higher) - if (this.row < 0 || this.col < 0) { - return false; - } - // is selection within total rows and columns - if (this.row >= wotInstance.getSetting('totalRows') || this.col >= wotInstance.getSetting('totalColumns')) { - return false; - } - - return true; - } - - /** - * Checks if this cell coords are the same as cell coords given as a parameter - * - * @param {CellCoords} cellCoords - * @returns {Boolean} - */ - - }, { - key: 'isEqual', - value: function isEqual(cellCoords) { - if (cellCoords === this) { - return true; - } - - return this.row === cellCoords.row && this.col === cellCoords.col; - } - - /** - * Checks if tested coordinates are positioned in south-east from this cell coords - * - * @param {Object} testedCoords - * @returns {Boolean} - */ - - }, { - key: 'isSouthEastOf', - value: function isSouthEastOf(testedCoords) { - return this.row >= testedCoords.row && this.col >= testedCoords.col; - } - - /** - * Checks if tested coordinates are positioned in north-east from this cell coords - * - * @param {Object} testedCoords - * @returns {Boolean} - */ - - }, { - key: 'isNorthWestOf', - value: function isNorthWestOf(testedCoords) { - return this.row <= testedCoords.row && this.col <= testedCoords.col; - } - - /** - * Checks if tested coordinates are positioned in south-west from this cell coords - * - * @param {Object} testedCoords - * @returns {Boolean} - */ - - }, { - key: 'isSouthWestOf', - value: function isSouthWestOf(testedCoords) { - return this.row >= testedCoords.row && this.col <= testedCoords.col; - } - - /** - * Checks if tested coordinates are positioned in north-east from this cell coords - * - * @param {Object} testedCoords - * @returns {Boolean} - */ - - }, { - key: 'isNorthEastOf', - value: function isNorthEastOf(testedCoords) { - return this.row <= testedCoords.row && this.col >= testedCoords.col; - } - }]); - - return CellCoords; -}(); - -exports.default = CellCoords; - -/***/ }), -/* 43 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _element = __webpack_require__(0); - -var _autoResize = __webpack_require__(183); - -var _autoResize2 = _interopRequireDefault(_autoResize); - -var _baseEditor = __webpack_require__(36); - -var _baseEditor2 = _interopRequireDefault(_baseEditor); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _unicode = __webpack_require__(16); - -var _event = __webpack_require__(7); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var TextEditor = _baseEditor2.default.prototype.extend(); - -/** - * @private - * @editor TextEditor - * @class TextEditor - * @dependencies autoResize - */ -TextEditor.prototype.init = function () { - var that = this; - this.createElements(); - this.eventManager = new _eventManager2.default(this); - this.bindEvents(); - this.autoResize = (0, _autoResize2.default)(); - - this.instance.addHook('afterDestroy', function () { - that.destroy(); - }); -}; - -TextEditor.prototype.getValue = function () { - return this.TEXTAREA.value; -}; - -TextEditor.prototype.setValue = function (newValue) { - this.TEXTAREA.value = newValue; -}; - -var onBeforeKeyDown = function onBeforeKeyDown(event) { - var instance = this, - that = instance.getActiveEditor(), - ctrlDown; - - // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL) - ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey; - - // Process only events that have been fired in the editor - if (event.target !== that.TEXTAREA || (0, _event.isImmediatePropagationStopped)(event)) { - return; - } - - if (event.keyCode === 17 || event.keyCode === 224 || event.keyCode === 91 || event.keyCode === 93) { - // when CTRL or its equivalent is pressed and cell is edited, don't prepare selectable text in textarea - (0, _event.stopImmediatePropagation)(event); - return; - } - - switch (event.keyCode) { - case _unicode.KEY_CODES.ARROW_RIGHT: - if (that.isInFullEditMode()) { - if (!that.isWaiting() && !that.allowKeyEventPropagation || !that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode)) { - (0, _event.stopImmediatePropagation)(event); - } - } - break; - case _unicode.KEY_CODES.ARROW_LEFT: - if (that.isInFullEditMode()) { - if (!that.isWaiting() && !that.allowKeyEventPropagation || !that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode)) { - (0, _event.stopImmediatePropagation)(event); - } - } - break; - case _unicode.KEY_CODES.ARROW_UP: - case _unicode.KEY_CODES.ARROW_DOWN: - if (that.isInFullEditMode()) { - if (!that.isWaiting() && !that.allowKeyEventPropagation || !that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode)) { - (0, _event.stopImmediatePropagation)(event); - } - } - break; - - case _unicode.KEY_CODES.ENTER: - var selected = that.instance.getSelected(); - var isMultipleSelection = !(selected[0] === selected[2] && selected[1] === selected[3]); - if (ctrlDown && !isMultipleSelection || event.altKey) { - // if ctrl+enter or alt+enter, add new line - if (that.isOpened()) { - var caretPosition = (0, _element.getCaretPosition)(that.TEXTAREA), - value = that.getValue(); - - var newValue = value.slice(0, caretPosition) + '\n' + value.slice(caretPosition); - - that.setValue(newValue); - - (0, _element.setCaretPosition)(that.TEXTAREA, caretPosition + 1); - } else { - that.beginEditing(that.originalValue + '\n'); - } - (0, _event.stopImmediatePropagation)(event); - } - event.preventDefault(); // don't add newline to field - break; - - case _unicode.KEY_CODES.A: - case _unicode.KEY_CODES.X: - case _unicode.KEY_CODES.C: - case _unicode.KEY_CODES.V: - if (ctrlDown) { - (0, _event.stopImmediatePropagation)(event); // CTRL+A, CTRL+C, CTRL+V, CTRL+X should only work locally when cell is edited (not in table context) - } - break; - - case _unicode.KEY_CODES.BACKSPACE: - case _unicode.KEY_CODES.DELETE: - case _unicode.KEY_CODES.HOME: - case _unicode.KEY_CODES.END: - (0, _event.stopImmediatePropagation)(event); // backspace, delete, home, end should only work locally when cell is edited (not in table context) - break; - default: - break; - } - - if ([_unicode.KEY_CODES.ARROW_UP, _unicode.KEY_CODES.ARROW_RIGHT, _unicode.KEY_CODES.ARROW_DOWN, _unicode.KEY_CODES.ARROW_LEFT].indexOf(event.keyCode) === -1) { - that.autoResize.resize(String.fromCharCode(event.keyCode)); - } -}; - -TextEditor.prototype.open = function () { - this.refreshDimensions(); // need it instantly, to prevent https://github.com/handsontable/handsontable/issues/348 - - this.instance.addHook('beforeKeyDown', onBeforeKeyDown); -}; - -TextEditor.prototype.close = function (tdOutside) { - this.textareaParentStyle.display = 'none'; - - this.autoResize.unObserve(); - - if (document.activeElement === this.TEXTAREA) { - this.instance.listen(); // don't refocus the table if user focused some cell outside of HT on purpose - } - this.instance.removeHook('beforeKeyDown', onBeforeKeyDown); -}; - -TextEditor.prototype.focus = function () { - this.TEXTAREA.focus(); - (0, _element.setCaretPosition)(this.TEXTAREA, this.TEXTAREA.value.length); -}; - -TextEditor.prototype.createElements = function () { - // this.$body = $(document.body); - - this.TEXTAREA = document.createElement('TEXTAREA'); - - (0, _element.addClass)(this.TEXTAREA, 'handsontableInput'); - - this.textareaStyle = this.TEXTAREA.style; - this.textareaStyle.width = 0; - this.textareaStyle.height = 0; - - this.TEXTAREA_PARENT = document.createElement('DIV'); - (0, _element.addClass)(this.TEXTAREA_PARENT, 'handsontableInputHolder'); - - this.textareaParentStyle = this.TEXTAREA_PARENT.style; - this.textareaParentStyle.top = 0; - this.textareaParentStyle.left = 0; - this.textareaParentStyle.display = 'none'; - - this.TEXTAREA_PARENT.appendChild(this.TEXTAREA); - - this.instance.rootElement.appendChild(this.TEXTAREA_PARENT); - - var that = this; - this.instance._registerTimeout(setTimeout(function () { - that.refreshDimensions(); - }, 0)); -}; - -TextEditor.prototype.getEditedCell = function () { - var editorSection = this.checkEditorSection(), - editedCell; - - switch (editorSection) { - case 'top': - editedCell = this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.getCell({ - row: this.row, - col: this.col - }); - this.textareaParentStyle.zIndex = 101; - break; - case 'top-left-corner': - editedCell = this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell({ - row: this.row, - col: this.col - }); - this.textareaParentStyle.zIndex = 103; - break; - case 'bottom-left-corner': - editedCell = this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell({ - row: this.row, - col: this.col - }); - this.textareaParentStyle.zIndex = 103; - break; - case 'left': - editedCell = this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.getCell({ - row: this.row, - col: this.col - }); - this.textareaParentStyle.zIndex = 102; - break; - case 'bottom': - editedCell = this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.getCell({ - row: this.row, - col: this.col - }); - this.textareaParentStyle.zIndex = 102; - break; - default: - editedCell = this.instance.getCell(this.row, this.col); - this.textareaParentStyle.zIndex = ''; - break; - } - - return editedCell != -1 && editedCell != -2 ? editedCell : void 0; -}; - -TextEditor.prototype.refreshValue = function () { - var sourceData = this.instance.getSourceDataAtCell(this.row, this.prop); - this.originalValue = sourceData; - - this.setValue(sourceData); - this.refreshDimensions(); -}; - -TextEditor.prototype.refreshDimensions = function () { - if (this.state !== _baseEditor.EditorState.EDITING) { - return; - } - this.TD = this.getEditedCell(); - - // TD is outside of the viewport. - if (!this.TD) { - this.close(true); - - return; - } - var currentOffset = (0, _element.offset)(this.TD), - containerOffset = (0, _element.offset)(this.instance.rootElement), - scrollableContainer = (0, _element.getScrollableElement)(this.TD), - totalRowsCount = this.instance.countRows(), - - - // If colHeaders is disabled, cells in the first row have border-top - editTopModifier = currentOffset.top === containerOffset.top ? 0 : 1, - editTop = currentOffset.top - containerOffset.top - editTopModifier - (scrollableContainer.scrollTop || 0), - editLeft = currentOffset.left - containerOffset.left - 1 - (scrollableContainer.scrollLeft || 0), - settings = this.instance.getSettings(), - rowHeadersCount = this.instance.hasRowHeaders(), - colHeadersCount = this.instance.hasColHeaders(), - editorSection = this.checkEditorSection(), - backgroundColor = this.TD.style.backgroundColor, - cssTransformOffset; - - // TODO: Refactor this to the new instance.getCell method (from #ply-59), after 0.12.1 is released - switch (editorSection) { - case 'top': - cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.holder.parentNode); - break; - case 'left': - cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.holder.parentNode); - break; - case 'top-left-corner': - cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode); - break; - case 'bottom-left-corner': - cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode); - break; - case 'bottom': - cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode); - break; - default: - break; - } - - if (colHeadersCount && this.instance.getSelected()[0] === 0 || settings.fixedRowsBottom && this.instance.getSelected()[0] === totalRowsCount - settings.fixedRowsBottom) { - editTop += 1; - } - - if (this.instance.getSelected()[1] === 0) { - editLeft += 1; - } - - if (cssTransformOffset && cssTransformOffset != -1) { - this.textareaParentStyle[cssTransformOffset[0]] = cssTransformOffset[1]; - } else { - (0, _element.resetCssTransform)(this.TEXTAREA_PARENT); - } - - this.textareaParentStyle.top = editTop + 'px'; - this.textareaParentStyle.left = editLeft + 'px'; - - var firstRowOffset = this.instance.view.wt.wtViewport.rowsRenderCalculator.startPosition; - var firstColumnOffset = this.instance.view.wt.wtViewport.columnsRenderCalculator.startPosition; - var horizontalScrollPosition = this.instance.view.wt.wtOverlays.leftOverlay.getScrollPosition(); - var verticalScrollPosition = this.instance.view.wt.wtOverlays.topOverlay.getScrollPosition(); - var scrollbarWidth = (0, _element.getScrollbarWidth)(); - - var cellTopOffset = this.TD.offsetTop + firstRowOffset - verticalScrollPosition; - var cellLeftOffset = this.TD.offsetLeft + firstColumnOffset - horizontalScrollPosition; - - var width = (0, _element.innerWidth)(this.TD) - 8; - var actualVerticalScrollbarWidth = (0, _element.hasVerticalScrollbar)(scrollableContainer) ? scrollbarWidth : 0; - var actualHorizontalScrollbarWidth = (0, _element.hasHorizontalScrollbar)(scrollableContainer) ? scrollbarWidth : 0; - var maxWidth = this.instance.view.maximumVisibleElementWidth(cellLeftOffset) - 9 - actualVerticalScrollbarWidth; - var height = this.TD.scrollHeight + 1; - var maxHeight = Math.max(this.instance.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth, 23); - - var cellComputedStyle = (0, _element.getComputedStyle)(this.TD); - - this.TEXTAREA.style.fontSize = cellComputedStyle.fontSize; - this.TEXTAREA.style.fontFamily = cellComputedStyle.fontFamily; - this.TEXTAREA.style.backgroundColor = ''; // RESET STYLE - this.TEXTAREA.style.backgroundColor = backgroundColor ? backgroundColor : (0, _element.getComputedStyle)(this.TEXTAREA).backgroundColor; - - this.autoResize.init(this.TEXTAREA, { - minHeight: Math.min(height, maxHeight), - maxHeight: maxHeight, // TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar) - minWidth: Math.min(width, maxWidth), - maxWidth: maxWidth // TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar) - }, true); - - this.textareaParentStyle.display = 'block'; -}; - -TextEditor.prototype.bindEvents = function () { - var editor = this; - - this.eventManager.addEventListener(this.TEXTAREA, 'cut', function (event) { - (0, _event.stopPropagation)(event); - }); - - this.eventManager.addEventListener(this.TEXTAREA, 'paste', function (event) { - (0, _event.stopPropagation)(event); - }); - - this.instance.addHook('afterScrollHorizontally', function () { - editor.refreshDimensions(); - }); - - this.instance.addHook('afterScrollVertically', function () { - editor.refreshDimensions(); - }); - - this.instance.addHook('afterColumnResize', function () { - editor.refreshDimensions(); - editor.focus(); - }); - - this.instance.addHook('afterRowResize', function () { - editor.refreshDimensions(); - editor.focus(); - }); - - this.instance.addHook('afterDestroy', function () { - editor.eventManager.destroy(); - }); -}; - -TextEditor.prototype.destroy = function () { - this.eventManager.destroy(); -}; - -exports.default = TextEditor; - -/***/ }), -/* 44 */ -/***/ (function(module, exports) { - -var core = module.exports = {version: '2.4.0'}; -if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef - -/***/ }), -/* 45 */ -/***/ (function(module, exports) { - -module.exports = {}; - -/***/ }), -/* 46 */ -/***/ (function(module, exports, __webpack_require__) { - -var META = __webpack_require__(49)('meta') - , isObject = __webpack_require__(15) - , has = __webpack_require__(22) - , setDesc = __webpack_require__(19).f - , id = 0; -var isExtensible = Object.isExtensible || function(){ - return true; -}; -var FREEZE = !__webpack_require__(31)(function(){ - return isExtensible(Object.preventExtensions({})); -}); -var setMeta = function(it){ - setDesc(it, META, {value: { - i: 'O' + ++id, // object ID - w: {} // weak collections IDs - }}); -}; -var fastKey = function(it, create){ - // return primitive with prefix - if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; - if(!has(it, META)){ - // can't set metadata to uncaught frozen object - if(!isExtensible(it))return 'F'; - // not necessary to add metadata - if(!create)return 'E'; - // add missing metadata - setMeta(it); - // return object ID - } return it[META].i; -}; -var getWeak = function(it, create){ - if(!has(it, META)){ - // can't set metadata to uncaught frozen object - if(!isExtensible(it))return true; - // not necessary to add metadata - if(!create)return false; - // add missing metadata - setMeta(it); - // return hash weak collections IDs - } return it[META].w; -}; -// add metadata on freeze-family methods calling -var onFreeze = function(it){ - if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it); - return it; -}; -var meta = module.exports = { - KEY: META, - NEED: false, - fastKey: fastKey, - getWeak: getWeak, - onFreeze: onFreeze -}; - -/***/ }), -/* 47 */ -/***/ (function(module, exports) { - -exports.f = {}.propertyIsEnumerable; - -/***/ }), -/* 48 */ -/***/ (function(module, exports, __webpack_require__) { - -var def = __webpack_require__(19).f - , has = __webpack_require__(22) - , TAG = __webpack_require__(10)('toStringTag'); - -module.exports = function(it, tag, stat){ - if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); -}; - -/***/ }), -/* 49 */ -/***/ (function(module, exports) { - -var id = 0 - , px = Math.random(); -module.exports = function(key){ - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); -}; - -/***/ }), -/* 50 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = staticRegister; - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -var collection = exports.collection = new Map(); - -function staticRegister() { - var namespace = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'common'; - - if (!collection.has(namespace)) { - collection.set(namespace, new Map()); - } - var subCollection = collection.get(namespace); - - /** - * Register an item to the collection. If the item under the same was exist earlier then this item will be replaced with new one. - * - * @param {String} name Identification of the item. - * @param {*} item Item to save in the collection. - */ - function register(name, item) { - subCollection.set(name, item); - } - - /** - * Retrieve the item from the collection. - * - * @param {String} name Identification of the item. - * @returns {*} Returns item which was saved in the collection. - */ - function getItem(name) { - return subCollection.get(name); - } - - /** - * Check if item under specyfied name is exists. - * - * @param {String} name Identification of the item. - * @returns {Boolean} Returns `true` or `false` depends on if element exists in the collection. - */ - function hasItem(name) { - return subCollection.has(name); - } - - /** - * Retrieve list of names registered from the collection. - * - * @returns {Array} Returns an array of strings with all names under which objects are stored. - */ - function getNames() { - return [].concat(_toConsumableArray(subCollection.keys())); - } - - /** - * Retrieve all registered values from the collection. - * - * @returns {Array} Returns an array with all values stored in the collection. - */ - function getValues() { - return [].concat(_toConsumableArray(subCollection.values())); - } - - return { - register: register, - getItem: getItem, - hasItem: hasItem, - getNames: getNames, - getValues: getValues - }; -} - -/***/ }), -/* 51 */ -/***/ (function(module, exports) { - -module.exports = function(it, Constructor, name, forbiddenField){ - if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){ - throw TypeError(name + ': incorrect invocation!'); - } return it; -}; - -/***/ }), -/* 52 */ -/***/ (function(module, exports, __webpack_require__) { - -// 0 -> Array#forEach -// 1 -> Array#map -// 2 -> Array#filter -// 3 -> Array#some -// 4 -> Array#every -// 5 -> Array#find -// 6 -> Array#findIndex -var ctx = __webpack_require__(29) - , IObject = __webpack_require__(77) - , toObject = __webpack_require__(41) - , toLength = __webpack_require__(24) - , asc = __webpack_require__(280); -module.exports = function(TYPE, $create){ - var IS_MAP = TYPE == 1 - , IS_FILTER = TYPE == 2 - , IS_SOME = TYPE == 3 - , IS_EVERY = TYPE == 4 - , IS_FIND_INDEX = TYPE == 6 - , NO_HOLES = TYPE == 5 || IS_FIND_INDEX - , create = $create || asc; - return function($this, callbackfn, that){ - var O = toObject($this) - , self = IObject(O) - , f = ctx(callbackfn, that, 3) - , length = toLength(self.length) - , index = 0 - , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined - , val, res; - for(;length > index; index++)if(NO_HOLES || index in self){ - val = self[index]; - res = f(val, index, O); - if(TYPE){ - if(IS_MAP)result[index] = res; // map - else if(res)switch(TYPE){ - case 3: return true; // some - case 5: return val; // find - case 6: return index; // findIndex - case 2: result.push(val); // filter - } else if(IS_EVERY)return false; // every - } - } - return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; - }; -}; - -/***/ }), -/* 53 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var global = __webpack_require__(13) - , $export = __webpack_require__(3) - , redefine = __webpack_require__(33) - , redefineAll = __webpack_require__(58) - , meta = __webpack_require__(46) - , forOf = __webpack_require__(55) - , anInstance = __webpack_require__(51) - , isObject = __webpack_require__(15) - , fails = __webpack_require__(31) - , $iterDetect = __webpack_require__(78) - , setToStringTag = __webpack_require__(48) - , inheritIfRequired = __webpack_require__(283); - -module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ - var Base = global[NAME] - , C = Base - , ADDER = IS_MAP ? 'set' : 'add' - , proto = C && C.prototype - , O = {}; - var fixMethod = function(KEY){ - var fn = proto[KEY]; - redefine(proto, KEY, - KEY == 'delete' ? function(a){ - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'has' ? function has(a){ - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'get' ? function get(a){ - return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; } - : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; } - ); - }; - if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){ - new C().entries().next(); - }))){ - // create collection constructor - C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); - redefineAll(C.prototype, methods); - meta.NEED = true; - } else { - var instance = new C - // early implementations not supports chaining - , HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance - // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false - , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); }) - // most early implementations doesn't supports iterables, most modern - not close it correctly - , ACCEPT_ITERABLES = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new - // for early implementations -0 and +0 not the same - , BUGGY_ZERO = !IS_WEAK && fails(function(){ - // V8 ~ Chromium 42- fails only with 5+ elements - var $instance = new C() - , index = 5; - while(index--)$instance[ADDER](index, index); - return !$instance.has(-0); - }); - if(!ACCEPT_ITERABLES){ - C = wrapper(function(target, iterable){ - anInstance(target, C, NAME); - var that = inheritIfRequired(new Base, target, C); - if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); - return that; - }); - C.prototype = proto; - proto.constructor = C; - } - if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){ - fixMethod('delete'); - fixMethod('has'); - IS_MAP && fixMethod('get'); - } - if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER); - // weak collections should not contains .clear method - if(IS_WEAK && proto.clear)delete proto.clear; - } - - setToStringTag(C, NAME); - - O[NAME] = C; - $export($export.G + $export.W + $export.F * (C != Base), O); - - if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP); - - return C; -}; - -/***/ }), -/* 54 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var hide = __webpack_require__(32) - , redefine = __webpack_require__(33) - , fails = __webpack_require__(31) - , defined = __webpack_require__(30) - , wks = __webpack_require__(10); - -module.exports = function(KEY, length, exec){ - var SYMBOL = wks(KEY) - , fns = exec(defined, SYMBOL, ''[KEY]) - , strfn = fns[0] - , rxfn = fns[1]; - if(fails(function(){ - var O = {}; - O[SYMBOL] = function(){ return 7; }; - return ''[KEY](O) != 7; - })){ - redefine(String.prototype, KEY, strfn); - hide(RegExp.prototype, SYMBOL, length == 2 - // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) - // 21.2.5.11 RegExp.prototype[@@split](string, limit) - ? function(string, arg){ return rxfn.call(string, this, arg); } - // 21.2.5.6 RegExp.prototype[@@match](string) - // 21.2.5.9 RegExp.prototype[@@search](string) - : function(string){ return rxfn.call(string, this); } - ); - } -}; - -/***/ }), -/* 55 */ -/***/ (function(module, exports, __webpack_require__) { - -var ctx = __webpack_require__(29) - , call = __webpack_require__(165) - , isArrayIter = __webpack_require__(161) - , anObject = __webpack_require__(18) - , toLength = __webpack_require__(24) - , getIterFn = __webpack_require__(176) - , BREAK = {} - , RETURN = {}; -var exports = module.exports = function(iterable, entries, fn, that, ITERATOR){ - var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable) - , f = ctx(fn, that, entries ? 2 : 1) - , index = 0 - , length, step, iterator, result; - if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!'); - // fast case for arrays with default iterator - if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){ - result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); - if(result === BREAK || result === RETURN)return result; - } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){ - result = call(iterator, f, step.value, entries); - if(result === BREAK || result === RETURN)return result; - } -}; -exports.BREAK = BREAK; -exports.RETURN = RETURN; - -/***/ }), -/* 56 */ -/***/ (function(module, exports) { - -module.exports = false; - -/***/ }), -/* 57 */ -/***/ (function(module, exports) { - -exports.f = Object.getOwnPropertySymbols; - -/***/ }), -/* 58 */ -/***/ (function(module, exports, __webpack_require__) { - -var redefine = __webpack_require__(33); -module.exports = function(target, src, safe){ - for(var key in src)redefine(target, key, src[key], safe); - return target; -}; - -/***/ }), -/* 59 */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(60) - , max = Math.max - , min = Math.min; -module.exports = function(index, length){ - index = toInteger(index); - return index < 0 ? max(index + length, 0) : min(index, length); -}; - -/***/ }), -/* 60 */ -/***/ (function(module, exports) { - -// 7.1.4 ToInteger -var ceil = Math.ceil - , floor = Math.floor; -module.exports = function(it){ - return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); -}; - -/***/ }), -/* 61 */ -/***/ (function(module, exports) { - -module.exports = __WEBPACK_EXTERNAL_MODULE_61__; - -/***/ }), -/* 62 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.getRegisteredCellTypes = exports.getRegisteredCellTypeNames = exports.hasCellType = exports.getCellType = exports.registerCellType = undefined; - -var _staticRegister2 = __webpack_require__(50); - -var _staticRegister3 = _interopRequireDefault(_staticRegister2); - -var _editors = __webpack_require__(14); - -var _renderers = __webpack_require__(9); - -var _validators = __webpack_require__(26); - -var _autocompleteType = __webpack_require__(189); - -var _autocompleteType2 = _interopRequireDefault(_autocompleteType); - -var _checkboxType = __webpack_require__(190); - -var _checkboxType2 = _interopRequireDefault(_checkboxType); - -var _dateType = __webpack_require__(191); - -var _dateType2 = _interopRequireDefault(_dateType); - -var _dropdownType = __webpack_require__(192); - -var _dropdownType2 = _interopRequireDefault(_dropdownType); - -var _handsontableType = __webpack_require__(193); - -var _handsontableType2 = _interopRequireDefault(_handsontableType); - -var _numericType = __webpack_require__(194); - -var _numericType2 = _interopRequireDefault(_numericType); - -var _passwordType = __webpack_require__(195); - -var _passwordType2 = _interopRequireDefault(_passwordType); - -var _textType = __webpack_require__(196); - -var _textType2 = _interopRequireDefault(_textType); - -var _timeType = __webpack_require__(197); - -var _timeType2 = _interopRequireDefault(_timeType); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var _staticRegister = (0, _staticRegister3.default)('cellTypes'), - register = _staticRegister.register, - getItem = _staticRegister.getItem, - hasItem = _staticRegister.hasItem, - getNames = _staticRegister.getNames, - getValues = _staticRegister.getValues; - -_register('autocomplete', _autocompleteType2.default); -_register('checkbox', _checkboxType2.default); -_register('date', _dateType2.default); -_register('dropdown', _dropdownType2.default); -_register('handsontable', _handsontableType2.default); -_register('numeric', _numericType2.default); -_register('password', _passwordType2.default); -_register('text', _textType2.default); -_register('time', _timeType2.default); - -/** - * Retrieve cell type object. - * - * @param {String} name Cell type identification. - * @returns {Object} Returns cell type object. - */ -function _getItem(name) { - if (!hasItem(name)) { - throw Error('You declared cell type "' + name + '" as a string that is not mapped to a known object.\n Cell type must be an object or a string mapped to an object registered by "Handsontable.cellTypes.registerCellType" method'); - } - - return getItem(name); -} - -/** - * Register cell type under specified name. - * - * @param {String} name Cell type identification. - * @param {Object} type An object with contains keys (eq: `editor`, `renderer`, `validator`) which describes specified behaviour of the cell. - */ -function _register(name, type) { - var editor = type.editor, - renderer = type.renderer, - validator = type.validator; - - - if (editor) { - (0, _editors.registerEditor)(name, editor); - } - if (renderer) { - (0, _renderers.registerRenderer)(name, renderer); - } - if (validator) { - (0, _validators.registerValidator)(name, validator); - } - - register(name, type); -} - -exports.registerCellType = _register; -exports.getCellType = _getItem; -exports.hasCellType = hasItem; -exports.getRegisteredCellTypeNames = getNames; -exports.getRegisteredCellTypes = getValues; - -/***/ }), -/* 63 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.default = Core; - -var _numbro = __webpack_require__(87); - -var _numbro2 = _interopRequireDefault(_numbro); - -var _element = __webpack_require__(0); - -var _setting = __webpack_require__(65); - -var _function = __webpack_require__(35); - -var _mixed = __webpack_require__(20); - -var _browser = __webpack_require__(25); - -var _dataMap = __webpack_require__(198); - -var _dataMap2 = _interopRequireDefault(_dataMap); - -var _editorManager = __webpack_require__(200); - -var _editorManager2 = _interopRequireDefault(_editorManager); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _object = __webpack_require__(1); - -var _array = __webpack_require__(2); - -var _plugins = __webpack_require__(5); - -var _renderers = __webpack_require__(9); - -var _validators = __webpack_require__(26); - -var _string = __webpack_require__(27); - -var _number = __webpack_require__(6); - -var _tableView = __webpack_require__(269); - -var _tableView2 = _interopRequireDefault(_tableView); - -var _dataSource = __webpack_require__(199); - -var _dataSource2 = _interopRequireDefault(_dataSource); - -var _data = __webpack_require__(64); - -var _recordTranslator = __webpack_require__(153); - -var _src = __webpack_require__(11); - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _defaultSettings = __webpack_require__(88); - -var _defaultSettings2 = _interopRequireDefault(_defaultSettings); - -var _cellTypes = __webpack_require__(62); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -var activeGuid = null; - -/** - * Handsontable constructor - * - * @core - * @dependencies numbro - * @constructor Core - * @description - * - * After Handsontable is constructed, you can modify the grid behavior using the available public methods. - * - * --- - * ## How to call methods - * - * These are 2 equal ways to call a Handsontable method: - * - * ```js - * // all following examples assume that you constructed Handsontable like this - * var ht = new Handsontable(document.getElementById('example1'), options); - * - * // now, to use setDataAtCell method, you can either: - * ht.setDataAtCell(0, 0, 'new value'); - * ``` - * - * Alternatively, you can call the method using jQuery wrapper (__obsolete__, requires initialization using our jQuery guide - * ```js - * $('#example1').handsontable('setDataAtCell', 0, 0, 'new value'); - * ``` - * --- - */ -function Core(rootElement, userSettings) { - var priv, - datamap, - dataSource, - grid, - selection, - editorManager, - instance = this, - GridSettings = function GridSettings() {}, - eventManager = new _eventManager2.default(instance); - - (0, _object.extend)(GridSettings.prototype, _defaultSettings2.default.prototype); // create grid settings as a copy of default settings - (0, _object.extend)(GridSettings.prototype, userSettings); // overwrite defaults with user settings - (0, _object.extend)(GridSettings.prototype, expandType(userSettings)); - - this.rootElement = rootElement; - this.isHotTableEnv = (0, _element.isChildOfWebComponentTable)(this.rootElement); - _eventManager2.default.isHotTableEnv = this.isHotTableEnv; - - this.container = document.createElement('DIV'); - this.renderCall = false; - - rootElement.insertBefore(this.container, rootElement.firstChild); - - this.guid = 'ht_' + (0, _string.randomString)(); // this is the namespace for global events - - var recordTranslator = (0, _recordTranslator.getTranslator)(instance); - - dataSource = new _dataSource2.default(instance); - - if (!this.rootElement.id || this.rootElement.id.substring(0, 3) === 'ht_') { - this.rootElement.id = this.guid; // if root element does not have an id, assign a random id - } - priv = { - cellSettings: [], - columnSettings: [], - columnsSettingConflicts: ['data', 'width'], - settings: new GridSettings(), // current settings instance - selRange: null, // exposed by public method `getSelectedRange` - isPopulated: null, - scrollable: null, - firstRun: true - }; - - grid = { - /** - * Inserts or removes rows and columns - * - * @memberof Core# - * @function alter - * @private - * @param {String} action Possible values: "insert_row", "insert_col", "remove_row", "remove_col" - * @param {Number} index - * @param {Number} amount - * @param {String} [source] Optional. Source of hook runner. - * @param {Boolean} [keepEmptyRows] Optional. Flag for preventing deletion of empty rows. - */ - alter: function alter(action, index, amount, source, keepEmptyRows) { - var delta; - - amount = amount || 1; - - function spliceWith(data, index, count, toInject) { - var valueFactory = function valueFactory() { - var result = void 0; - - if (toInject === 'array') { - result = []; - } else if (toInject === 'object') { - result = {}; - } - - return result; - }; - var spliceArgs = (0, _array.arrayMap)(new Array(count), function () { - return valueFactory(); - }); - - spliceArgs.unshift(index, 0); - data.splice.apply(data, _toConsumableArray(spliceArgs)); - } - - /* eslint-disable no-case-declarations */ - switch (action) { - case 'insert_row': - - var numberOfSourceRows = instance.countSourceRows(); - - if (instance.getSettings().maxRows === numberOfSourceRows) { - return; - } - - index = (0, _mixed.isDefined)(index) ? index : numberOfSourceRows; - - delta = datamap.createRow(index, amount, source); - spliceWith(priv.cellSettings, index, amount, 'array'); - - if (delta) { - if (selection.isSelected() && priv.selRange.from.row >= index) { - priv.selRange.from.row += delta; - selection.transformEnd(delta, 0); // will call render() internally - } else { - selection.refreshBorders(); // it will call render and prepare methods - } - } - break; - - case 'insert_col': - delta = datamap.createCol(index, amount, source); - - for (var row = 0, len = instance.countSourceRows(); row < len; row++) { - if (priv.cellSettings[row]) { - spliceWith(priv.cellSettings[row], index, amount); - } - } - - if (delta) { - if (Array.isArray(instance.getSettings().colHeaders)) { - var spliceArray = [index, 0]; - spliceArray.length += delta; // inserts empty (undefined) elements at the end of an array - Array.prototype.splice.apply(instance.getSettings().colHeaders, spliceArray); // inserts empty (undefined) elements into the colHeader array - } - - if (selection.isSelected() && priv.selRange.from.col >= index) { - priv.selRange.from.col += delta; - selection.transformEnd(0, delta); // will call render() internally - } else { - selection.refreshBorders(); // it will call render and prepare methods - } - } - break; - - case 'remove_row': - datamap.removeRow(index, amount, source); - priv.cellSettings.splice(index, amount); - - var totalRows = instance.countRows(); - var fixedRowsTop = instance.getSettings().fixedRowsTop; - if (fixedRowsTop >= index + 1) { - instance.getSettings().fixedRowsTop -= Math.min(amount, fixedRowsTop - index); - } - - var fixedRowsBottom = instance.getSettings().fixedRowsBottom; - if (fixedRowsBottom && index >= totalRows - fixedRowsBottom) { - instance.getSettings().fixedRowsBottom -= Math.min(amount, fixedRowsBottom); - } - - grid.adjustRowsAndCols(); - selection.refreshBorders(); // it will call render and prepare methods - break; - - case 'remove_col': - var visualColumnIndex = recordTranslator.toPhysicalColumn(index); - - datamap.removeCol(index, amount, source); - - for (var _row = 0, _len = instance.countSourceRows(); _row < _len; _row++) { - if (priv.cellSettings[_row]) { - // if row hasn't been rendered it wouldn't have cellSettings - priv.cellSettings[_row].splice(visualColumnIndex, amount); - } - } - var fixedColumnsLeft = instance.getSettings().fixedColumnsLeft; - - if (fixedColumnsLeft >= index + 1) { - instance.getSettings().fixedColumnsLeft -= Math.min(amount, fixedColumnsLeft - index); - } - - if (Array.isArray(instance.getSettings().colHeaders)) { - if (typeof visualColumnIndex === 'undefined') { - visualColumnIndex = -1; - } - instance.getSettings().colHeaders.splice(visualColumnIndex, amount); - } - - grid.adjustRowsAndCols(); - selection.refreshBorders(); // it will call render and prepare methods - - break; - default: - throw new Error('There is no such action "' + action + '"'); - } - - if (!keepEmptyRows) { - grid.adjustRowsAndCols(); // makes sure that we did not add rows that will be removed in next refresh - } - }, - - - /** - * Makes sure there are empty rows at the bottom of the table - */ - adjustRowsAndCols: function adjustRowsAndCols() { - if (priv.settings.minRows) { - // should I add empty rows to data source to meet minRows? - var rows = instance.countRows(); - - if (rows < priv.settings.minRows) { - for (var r = 0, minRows = priv.settings.minRows; r < minRows - rows; r++) { - datamap.createRow(instance.countRows(), 1, 'auto'); - } - } - } - if (priv.settings.minSpareRows) { - var emptyRows = instance.countEmptyRows(true); - - // should I add empty rows to meet minSpareRows? - if (emptyRows < priv.settings.minSpareRows) { - for (; emptyRows < priv.settings.minSpareRows && instance.countSourceRows() < priv.settings.maxRows; emptyRows++) { - datamap.createRow(instance.countRows(), 1, 'auto'); - } - } - } - { - var emptyCols = void 0; - - // count currently empty cols - if (priv.settings.minCols || priv.settings.minSpareCols) { - emptyCols = instance.countEmptyCols(true); - } - - // should I add empty cols to meet minCols? - if (priv.settings.minCols && !priv.settings.columns && instance.countCols() < priv.settings.minCols) { - for (; instance.countCols() < priv.settings.minCols; emptyCols++) { - datamap.createCol(instance.countCols(), 1, 'auto'); - } - } - // should I add empty cols to meet minSpareCols? - if (priv.settings.minSpareCols && !priv.settings.columns && instance.dataType === 'array' && emptyCols < priv.settings.minSpareCols) { - for (; emptyCols < priv.settings.minSpareCols && instance.countCols() < priv.settings.maxCols; emptyCols++) { - datamap.createCol(instance.countCols(), 1, 'auto'); - } - } - } - var rowCount = instance.countRows(); - var colCount = instance.countCols(); - - if (rowCount === 0 || colCount === 0) { - selection.deselect(); - } - - if (selection.isSelected()) { - var selectionChanged = false; - var fromRow = priv.selRange.from.row; - var fromCol = priv.selRange.from.col; - var toRow = priv.selRange.to.row; - var toCol = priv.selRange.to.col; - - // if selection is outside, move selection to last row - if (fromRow > rowCount - 1) { - fromRow = rowCount - 1; - selectionChanged = true; - - if (toRow > fromRow) { - toRow = fromRow; - } - } else if (toRow > rowCount - 1) { - toRow = rowCount - 1; - selectionChanged = true; - - if (fromRow > toRow) { - fromRow = toRow; - } - } - // if selection is outside, move selection to last row - if (fromCol > colCount - 1) { - fromCol = colCount - 1; - selectionChanged = true; - - if (toCol > fromCol) { - toCol = fromCol; - } - } else if (toCol > colCount - 1) { - toCol = colCount - 1; - selectionChanged = true; - - if (fromCol > toCol) { - fromCol = toCol; - } - } - - if (selectionChanged) { - instance.selectCell(fromRow, fromCol, toRow, toCol); - } - } - if (instance.view) { - instance.view.wt.wtOverlays.adjustElementsSize(); - } - }, - - - /** - * Populate the data from the provided 2d array from the given cell coordinates. - * - * @private - * @param {Object} start Start selection position. Visual indexes. - * @param {Array} input 2d data array. - * @param {Object} [end] End selection position (only for drag-down mode). Visual indexes. - * @param {String} [source="populateFromArray"] Source information string. - * @param {String} [method="overwrite"] Populate method. Possible options: `shift_down`, `shift_right`, `overwrite`. - * @param {String} direction (left|right|up|down) String specifying the direction. - * @param {Array} deltas The deltas array. A difference between values of adjacent cells. - * Useful **only** when the type of handled cells is `numeric`. - * @returns {Object|undefined} ending td in pasted area (only if any cell was changed). - */ - populateFromArray: function populateFromArray(start, input, end, source, method, direction, deltas) { - // TODO: either remove or implement the `direction` argument. Currently it's not working at all. - var r, - rlen, - c, - clen, - setData = [], - current = {}; - - rlen = input.length; - - if (rlen === 0) { - return false; - } - - var repeatCol, - repeatRow, - cmax, - rmax, - baseEnd = { - row: end === null ? null : end.row, - col: end === null ? null : end.col - }; - - /* eslint-disable no-case-declarations */ - // insert data with specified pasteMode method - switch (method) { - case 'shift_down': - repeatCol = end ? end.col - start.col + 1 : 0; - repeatRow = end ? end.row - start.row + 1 : 0; - input = (0, _data.translateRowsToColumns)(input); - for (c = 0, clen = input.length, cmax = Math.max(clen, repeatCol); c < cmax; c++) { - if (c < clen) { - var _instance; - - for (r = 0, rlen = input[c].length; r < repeatRow - rlen; r++) { - input[c].push(input[c][r % rlen]); - } - input[c].unshift(start.col + c, start.row, 0); - (_instance = instance).spliceCol.apply(_instance, _toConsumableArray(input[c])); - } else { - var _instance2; - - input[c % clen][0] = start.col + c; - (_instance2 = instance).spliceCol.apply(_instance2, _toConsumableArray(input[c % clen])); - } - } - break; - - case 'shift_right': - repeatCol = end ? end.col - start.col + 1 : 0; - repeatRow = end ? end.row - start.row + 1 : 0; - for (r = 0, rlen = input.length, rmax = Math.max(rlen, repeatRow); r < rmax; r++) { - if (r < rlen) { - var _instance3; - - for (c = 0, clen = input[r].length; c < repeatCol - clen; c++) { - input[r].push(input[r][c % clen]); - } - input[r].unshift(start.row + r, start.col, 0); - (_instance3 = instance).spliceRow.apply(_instance3, _toConsumableArray(input[r])); - } else { - var _instance4; - - input[r % rlen][0] = start.row + r; - (_instance4 = instance).spliceRow.apply(_instance4, _toConsumableArray(input[r % rlen])); - } - } - break; - - case 'overwrite': - default: - // overwrite and other not specified options - current.row = start.row; - current.col = start.col; - - var selected = { // selected range - row: end && start ? end.row - start.row + 1 : 1, - col: end && start ? end.col - start.col + 1 : 1 - }; - var skippedRow = 0; - var skippedColumn = 0; - var pushData = true; - var cellMeta = void 0; - - var getInputValue = function getInputValue(row) { - var col = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - var rowValue = input[row % input.length]; - - if (col !== null) { - return rowValue[col % rowValue.length]; - } - - return rowValue; - }; - var rowInputLength = input.length; - var rowSelectionLength = end ? end.row - start.row + 1 : 0; - - if (end) { - rlen = rowSelectionLength; - } else { - rlen = Math.max(rowInputLength, rowSelectionLength); - } - for (r = 0; r < rlen; r++) { - if (end && current.row > end.row && rowSelectionLength > rowInputLength || !priv.settings.allowInsertRow && current.row > instance.countRows() - 1 || current.row >= priv.settings.maxRows) { - break; - } - var visualRow = r - skippedRow; - var colInputLength = getInputValue(visualRow).length; - var colSelectionLength = end ? end.col - start.col + 1 : 0; - - if (end) { - clen = colSelectionLength; - } else { - clen = Math.max(colInputLength, colSelectionLength); - } - current.col = start.col; - cellMeta = instance.getCellMeta(current.row, current.col); - - if ((source === 'CopyPaste.paste' || source === 'Autofill.autofill') && cellMeta.skipRowOnPaste) { - skippedRow++; - current.row++; - rlen++; - /* eslint-disable no-continue */ - continue; - } - skippedColumn = 0; - - for (c = 0; c < clen; c++) { - if (end && current.col > end.col && colSelectionLength > colInputLength || !priv.settings.allowInsertColumn && current.col > instance.countCols() - 1 || current.col >= priv.settings.maxCols) { - break; - } - cellMeta = instance.getCellMeta(current.row, current.col); - - if ((source === 'CopyPaste.paste' || source === 'Autofill.fill') && cellMeta.skipColumnOnPaste) { - skippedColumn++; - current.col++; - clen++; - continue; - } - if (cellMeta.readOnly) { - current.col++; - /* eslint-disable no-continue */ - continue; - } - var visualColumn = c - skippedColumn; - var value = getInputValue(visualRow, visualColumn); - var orgValue = instance.getDataAtCell(current.row, current.col); - var index = { - row: visualRow, - col: visualColumn - }; - - if (source === 'Autofill.fill') { - var result = instance.runHooks('beforeAutofillInsidePopulate', index, direction, input, deltas, {}, selected); - - if (result) { - value = (0, _mixed.isUndefined)(result.value) ? value : result.value; - } - } - if (value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { - if (orgValue === null || (typeof orgValue === 'undefined' ? 'undefined' : _typeof(orgValue)) !== 'object') { - pushData = false; - } else { - var orgValueSchema = (0, _object.duckSchema)(orgValue[0] || orgValue); - var valueSchema = (0, _object.duckSchema)(value[0] || value); - - /* eslint-disable max-depth */ - if ((0, _object.isObjectEquals)(orgValueSchema, valueSchema)) { - value = (0, _object.deepClone)(value); - } else { - pushData = false; - } - } - } else if (orgValue !== null && (typeof orgValue === 'undefined' ? 'undefined' : _typeof(orgValue)) === 'object') { - pushData = false; - } - if (pushData) { - setData.push([current.row, current.col, value]); - } - pushData = true; - current.col++; - } - current.row++; - } - instance.setDataAtCell(setData, null, null, source || 'populateFromArray'); - break; - } - } - }; - - /* eslint-disable no-multi-assign */ - this.selection = selection = { // this public assignment is only temporary - inProgress: false, - - selectedHeader: { - cols: false, - rows: false - }, - - /** - * @param {Boolean} [rows=false] - * @param {Boolean} [cols=false] - * @param {Boolean} [corner=false] - */ - setSelectedHeaders: function setSelectedHeaders() { - var rows = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var cols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var corner = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - instance.selection.selectedHeader.rows = rows; - instance.selection.selectedHeader.cols = cols; - instance.selection.selectedHeader.corner = corner; - }, - - - /** - * Sets inProgress to `true`. This enables onSelectionEnd and onSelectionEndByProp to function as desired. - */ - begin: function begin() { - instance.selection.inProgress = true; - }, - - - /** - * Sets inProgress to `false`. Triggers onSelectionEnd and onSelectionEndByProp. - */ - finish: function finish() { - var sel = instance.getSelected(); - instance.runHooks('afterSelectionEnd', sel[0], sel[1], sel[2], sel[3]); - instance.runHooks('afterSelectionEndByProp', sel[0], instance.colToProp(sel[1]), sel[2], instance.colToProp(sel[3])); - instance.selection.inProgress = false; - }, - - - /** - * @returns {Boolean} - */ - isInProgress: function isInProgress() { - return instance.selection.inProgress; - }, - - - /** - * Starts selection range on given td object. - * - * @param {CellCoords} coords Visual coords. - * @param keepEditorOpened - */ - setRangeStart: function setRangeStart(coords, keepEditorOpened) { - instance.runHooks('beforeSetRangeStart', coords); - priv.selRange = new _src.CellRange(coords, coords, coords); - selection.setRangeEnd(coords, null, keepEditorOpened); - }, - - - /** - * Starts selection range on given td object. - * - * @param {CellCoords} coords Visual coords. - * @param keepEditorOpened - */ - setRangeStartOnly: function setRangeStartOnly(coords) { - instance.runHooks('beforeSetRangeStartOnly', coords); - priv.selRange = new _src.CellRange(coords, coords, coords); - }, - - - /** - * Ends selection range on given td object. - * - * @param {CellCoords} coords Visual coords. - * @param {Boolean} [scrollToCell=true] If `true`, viewport will be scrolled to range end - * @param {Boolean} [keepEditorOpened] If `true`, cell editor will be still opened after changing selection range - */ - setRangeEnd: function setRangeEnd(coords, scrollToCell, keepEditorOpened) { - if (priv.selRange === null) { - return; - } - var disableVisualSelection, - isHeaderSelected = false, - areCoordsPositive = true; - - var firstVisibleRow = instance.view.wt.wtTable.getFirstVisibleRow(); - var firstVisibleColumn = instance.view.wt.wtTable.getFirstVisibleColumn(); - var newRangeCoords = { - row: null, - col: null - }; - - // trigger handlers - instance.runHooks('beforeSetRangeEnd', coords); - instance.selection.begin(); - - newRangeCoords.row = coords.row < 0 ? firstVisibleRow : coords.row; - newRangeCoords.col = coords.col < 0 ? firstVisibleColumn : coords.col; - - priv.selRange.to = new _src.CellCoords(newRangeCoords.row, newRangeCoords.col); - - if (!priv.settings.multiSelect) { - priv.selRange.from = coords; - } - // set up current selection - instance.view.wt.selections.current.clear(); - - disableVisualSelection = instance.getCellMeta(priv.selRange.highlight.row, priv.selRange.highlight.col).disableVisualSelection; - - if (typeof disableVisualSelection === 'string') { - disableVisualSelection = [disableVisualSelection]; - } - - if (disableVisualSelection === false || Array.isArray(disableVisualSelection) && disableVisualSelection.indexOf('current') === -1) { - instance.view.wt.selections.current.add(priv.selRange.highlight); - } - // set up area selection - instance.view.wt.selections.area.clear(); - - if ((disableVisualSelection === false || Array.isArray(disableVisualSelection) && disableVisualSelection.indexOf('area') === -1) && selection.isMultiple()) { - instance.view.wt.selections.area.add(priv.selRange.from); - instance.view.wt.selections.area.add(priv.selRange.to); - } - // set up highlight - if (priv.settings.currentHeaderClassName || priv.settings.currentRowClassName || priv.settings.currentColClassName) { - instance.view.wt.selections.highlight.clear(); - instance.view.wt.selections.highlight.add(priv.selRange.from); - instance.view.wt.selections.highlight.add(priv.selRange.to); - } - - var preventScrolling = (0, _object.createObjectPropListener)('value'); - - // trigger handlers - instance.runHooks('afterSelection', priv.selRange.from.row, priv.selRange.from.col, priv.selRange.to.row, priv.selRange.to.col, preventScrolling); - instance.runHooks('afterSelectionByProp', priv.selRange.from.row, datamap.colToProp(priv.selRange.from.col), priv.selRange.to.row, datamap.colToProp(priv.selRange.to.col), preventScrolling); - - if (priv.selRange.from.row === 0 && priv.selRange.to.row === instance.countRows() - 1 && instance.countRows() > 1 || priv.selRange.from.col === 0 && priv.selRange.to.col === instance.countCols() - 1 && instance.countCols() > 1) { - isHeaderSelected = true; - } - - if (coords.row < 0 || coords.col < 0) { - areCoordsPositive = false; - } - - if (preventScrolling.isTouched()) { - scrollToCell = !preventScrolling.value; - } - - if (scrollToCell !== false && !isHeaderSelected && areCoordsPositive) { - if (priv.selRange.from && !selection.isMultiple()) { - instance.view.scrollViewport(priv.selRange.from); - } else { - instance.view.scrollViewport(coords); - } - } - - if (selection.selectedHeader.rows && selection.selectedHeader.cols) { - (0, _element.addClass)(instance.rootElement, ['ht__selection--rows', 'ht__selection--columns']); - } else if (selection.selectedHeader.rows) { - (0, _element.removeClass)(instance.rootElement, 'ht__selection--columns'); - (0, _element.addClass)(instance.rootElement, 'ht__selection--rows'); - } else if (selection.selectedHeader.cols) { - (0, _element.removeClass)(instance.rootElement, 'ht__selection--rows'); - (0, _element.addClass)(instance.rootElement, 'ht__selection--columns'); - } else { - (0, _element.removeClass)(instance.rootElement, ['ht__selection--rows', 'ht__selection--columns']); - } - - selection.refreshBorders(null, keepEditorOpened); - }, - - - /** - * Destroys editor, redraws borders around cells, prepares editor. - * - * @param {Boolean} [revertOriginal] - * @param {Boolean} [keepEditor] - */ - refreshBorders: function refreshBorders(revertOriginal, keepEditor) { - if (!keepEditor) { - editorManager.destroyEditor(revertOriginal); - } - instance.view.render(); - - if (selection.isSelected() && !keepEditor) { - editorManager.prepareEditor(); - } - }, - - - /** - * Returns information if we have a multiselection. - * - * @returns {Boolean} - */ - isMultiple: function isMultiple() { - var isMultiple = !(priv.selRange.to.col === priv.selRange.from.col && priv.selRange.to.row === priv.selRange.from.row), - modifier = instance.runHooks('afterIsMultipleSelection', isMultiple); - - if (isMultiple) { - return modifier; - } - }, - - - /** - * Selects cell relative to current cell (if possible). - */ - transformStart: function transformStart(rowDelta, colDelta, force, keepEditorOpened) { - var delta = new _src.CellCoords(rowDelta, colDelta), - rowTransformDir = 0, - colTransformDir = 0, - totalRows, - totalCols, - coords, - fixedRowsBottom; - - instance.runHooks('modifyTransformStart', delta); - totalRows = instance.countRows(); - totalCols = instance.countCols(); - fixedRowsBottom = instance.getSettings().fixedRowsBottom; - - if (priv.selRange.highlight.row + rowDelta > totalRows - 1) { - if (force && priv.settings.minSpareRows > 0 && !(fixedRowsBottom && priv.selRange.highlight.row >= totalRows - fixedRowsBottom - 1)) { - instance.alter('insert_row', totalRows); - totalRows = instance.countRows(); - } else if (priv.settings.autoWrapCol) { - delta.row = 1 - totalRows; - delta.col = priv.selRange.highlight.col + delta.col == totalCols - 1 ? 1 - totalCols : 1; - } - } else if (priv.settings.autoWrapCol && priv.selRange.highlight.row + delta.row < 0 && priv.selRange.highlight.col + delta.col >= 0) { - delta.row = totalRows - 1; - delta.col = priv.selRange.highlight.col + delta.col == 0 ? totalCols - 1 : -1; - } - - if (priv.selRange.highlight.col + delta.col > totalCols - 1) { - if (force && priv.settings.minSpareCols > 0) { - instance.alter('insert_col', totalCols); - totalCols = instance.countCols(); - } else if (priv.settings.autoWrapRow) { - delta.row = priv.selRange.highlight.row + delta.row == totalRows - 1 ? 1 - totalRows : 1; - delta.col = 1 - totalCols; - } - } else if (priv.settings.autoWrapRow && priv.selRange.highlight.col + delta.col < 0 && priv.selRange.highlight.row + delta.row >= 0) { - delta.row = priv.selRange.highlight.row + delta.row == 0 ? totalRows - 1 : -1; - delta.col = totalCols - 1; - } - - coords = new _src.CellCoords(priv.selRange.highlight.row + delta.row, priv.selRange.highlight.col + delta.col); - - if (coords.row < 0) { - rowTransformDir = -1; - coords.row = 0; - } else if (coords.row > 0 && coords.row >= totalRows) { - rowTransformDir = 1; - coords.row = totalRows - 1; - } - - if (coords.col < 0) { - colTransformDir = -1; - coords.col = 0; - } else if (coords.col > 0 && coords.col >= totalCols) { - colTransformDir = 1; - coords.col = totalCols - 1; - } - instance.runHooks('afterModifyTransformStart', coords, rowTransformDir, colTransformDir); - selection.setRangeStart(coords, keepEditorOpened); - }, - - - /** - * Sets selection end cell relative to current selection end cell (if possible). - */ - transformEnd: function transformEnd(rowDelta, colDelta) { - var delta = new _src.CellCoords(rowDelta, colDelta), - rowTransformDir = 0, - colTransformDir = 0, - totalRows, - totalCols, - coords; - - instance.runHooks('modifyTransformEnd', delta); - - totalRows = instance.countRows(); - totalCols = instance.countCols(); - coords = new _src.CellCoords(priv.selRange.to.row + delta.row, priv.selRange.to.col + delta.col); - - if (coords.row < 0) { - rowTransformDir = -1; - coords.row = 0; - } else if (coords.row > 0 && coords.row >= totalRows) { - rowTransformDir = 1; - coords.row = totalRows - 1; - } - - if (coords.col < 0) { - colTransformDir = -1; - coords.col = 0; - } else if (coords.col > 0 && coords.col >= totalCols) { - colTransformDir = 1; - coords.col = totalCols - 1; - } - instance.runHooks('afterModifyTransformEnd', coords, rowTransformDir, colTransformDir); - selection.setRangeEnd(coords, true); - }, - - - /** - * Returns `true` if currently there is a selection on screen, `false` otherwise. - * - * @returns {Boolean} - */ - isSelected: function isSelected() { - return priv.selRange !== null; - }, - - - /** - * Returns `true` if coords is within current selection coords. - * - * @param {CellCoords} coords - * @returns {Boolean} - */ - inInSelection: function inInSelection(coords) { - if (!selection.isSelected()) { - return false; - } - - return priv.selRange.includes(coords); - }, - - - /** - * Deselects all selected cells - */ - deselect: function deselect() { - if (!selection.isSelected()) { - return; - } - instance.selection.inProgress = false; // needed by HT inception - priv.selRange = null; - instance.view.wt.selections.current.clear(); - instance.view.wt.selections.area.clear(); - if (priv.settings.currentHeaderClassName || priv.settings.currentRowClassName || priv.settings.currentColClassName) { - instance.view.wt.selections.highlight.clear(); - } - editorManager.destroyEditor(); - selection.refreshBorders(); - (0, _element.removeClass)(instance.rootElement, ['ht__selection--rows', 'ht__selection--columns']); - instance.runHooks('afterDeselect'); - }, - - - /** - * Select all cells - */ - selectAll: function selectAll() { - if (!priv.settings.multiSelect) { - return; - } - selection.setSelectedHeaders(true, true, true); - selection.setRangeStart(new _src.CellCoords(0, 0)); - selection.setRangeEnd(new _src.CellCoords(instance.countRows() - 1, instance.countCols() - 1), false); - }, - - - /** - * Deletes data from selected cells - */ - empty: function empty() { - if (!selection.isSelected()) { - return; - } - var topLeft = priv.selRange.getTopLeftCorner(); - var bottomRight = priv.selRange.getBottomRightCorner(); - var r, - c, - changes = []; - - for (r = topLeft.row; r <= bottomRight.row; r++) { - for (c = topLeft.col; c <= bottomRight.col; c++) { - if (!instance.getCellMeta(r, c).readOnly) { - changes.push([r, c, '']); - } - } - } - instance.setDataAtCell(changes); - } - }; - - this.init = function () { - dataSource.setData(priv.settings.data); - instance.runHooks('beforeInit'); - - if ((0, _browser.isMobileBrowser)()) { - (0, _element.addClass)(instance.rootElement, 'mobile'); - } - - this.updateSettings(priv.settings, true); - - this.view = new _tableView2.default(this); - editorManager = new _editorManager2.default(instance, priv, selection, datamap); - - this.forceFullRender = true; // used when data was changed - - instance.runHooks('init'); - this.view.render(); - - if (_typeof(priv.firstRun) === 'object') { - instance.runHooks('afterChange', priv.firstRun[0], priv.firstRun[1]); - priv.firstRun = false; - } - instance.runHooks('afterInit'); - }; - - function ValidatorsQueue() { - // moved this one level up so it can be used in any function here. Probably this should be moved to a separate file - var resolved = false; - - return { - validatorsInQueue: 0, - valid: true, - addValidatorToQueue: function addValidatorToQueue() { - this.validatorsInQueue++; - resolved = false; - }, - removeValidatorFormQueue: function removeValidatorFormQueue() { - this.validatorsInQueue = this.validatorsInQueue - 1 < 0 ? 0 : this.validatorsInQueue - 1; - this.checkIfQueueIsEmpty(); - }, - onQueueEmpty: function onQueueEmpty(valid) {}, - checkIfQueueIsEmpty: function checkIfQueueIsEmpty() { - if (this.validatorsInQueue == 0 && resolved == false) { - resolved = true; - this.onQueueEmpty(this.valid); - } - } - }; - } - - function validateChanges(changes, source, callback) { - var waitingForValidator = new ValidatorsQueue(); - waitingForValidator.onQueueEmpty = resolve; - - for (var i = changes.length - 1; i >= 0; i--) { - if (changes[i] === null) { - changes.splice(i, 1); - } else { - var row = changes[i][0]; - var col = datamap.propToCol(changes[i][1]); - - var cellProperties = instance.getCellMeta(row, col); - - if (cellProperties.type === 'numeric' && typeof changes[i][3] === 'string') { - if (changes[i][3].length > 0 && (/^-?[\d\s]*(\.|,)?\d*$/.test(changes[i][3]) || cellProperties.format)) { - var len = changes[i][3].length; - - if ((0, _mixed.isUndefined)(cellProperties.language)) { - _numbro2.default.culture('en-US'); - } else if (changes[i][3].indexOf('.') === len - 3 && changes[i][3].indexOf(',') === -1) { - // this input in format XXXX.XX is likely to come from paste. Let's parse it using international rules - _numbro2.default.culture('en-US'); - } else { - - _numbro2.default.culture(cellProperties.language); - } - - var _numbro$cultureData = _numbro2.default.cultureData(_numbro2.default.culture()), - delimiters = _numbro$cultureData.delimiters; - - // try to parse to float - https://github.com/foretagsplatsen/numbro/pull/183 - - - if (_numbro2.default.validate(changes[i][3]) && !isNaN(changes[i][3])) { - changes[i][3] = parseFloat(changes[i][3]); - } else { - changes[i][3] = (0, _numbro2.default)().unformat(changes[i][3]) || changes[i][3]; - } - } - } - - /* eslint-disable no-loop-func */ - if (instance.getCellValidator(cellProperties)) { - waitingForValidator.addValidatorToQueue(); - instance.validateCell(changes[i][3], cellProperties, function (i, cellProperties) { - return function (result) { - if (typeof result !== 'boolean') { - throw new Error('Validation error: result is not boolean'); - } - if (result === false && cellProperties.allowInvalid === false) { - changes.splice(i, 1); // cancel the change - cellProperties.valid = true; // we cancelled the change, so cell value is still valid - var cell = instance.getCell(cellProperties.row, cellProperties.col); - (0, _element.removeClass)(cell, instance.getSettings().invalidCellClassName); - --i; - } - waitingForValidator.removeValidatorFormQueue(); - }; - }(i, cellProperties), source); - } - } - } - waitingForValidator.checkIfQueueIsEmpty(); - - function resolve() { - var beforeChangeResult; - - if (changes.length) { - beforeChangeResult = instance.runHooks('beforeChange', changes, source); - if ((0, _function.isFunction)(beforeChangeResult)) { - console.warn('Your beforeChange callback returns a function. It\'s not supported since Handsontable 0.12.1 (and the returned function will not be executed).'); - } else if (beforeChangeResult === false) { - changes.splice(0, changes.length); // invalidate all changes (remove everything from array) - } - } - callback(); // called when async validators are resolved and beforeChange was not async - } - } - - /** - * Internal function to apply changes. Called after validateChanges - * - * @private - * @param {Array} changes Array in form of [row, prop, oldValue, newValue] - * @param {String} source String that identifies how this change will be described in changes array (useful in onChange callback) - * @fires Hooks#beforeChangeRender - * @fires Hooks#afterChange - */ - function applyChanges(changes, source) { - var i = changes.length - 1; - - if (i < 0) { - return; - } - - for (; i >= 0; i--) { - var skipThisChange = false; - - if (changes[i] === null) { - changes.splice(i, 1); - /* eslint-disable no-continue */ - continue; - } - - if (changes[i][2] == null && changes[i][3] == null) { - /* eslint-disable no-continue */ - continue; - } - - if (priv.settings.allowInsertRow) { - while (changes[i][0] > instance.countRows() - 1) { - var numberOfCreatedRows = datamap.createRow(void 0, void 0, source); - - if (numberOfCreatedRows === 0) { - skipThisChange = true; - break; - } - } - } - - if (skipThisChange) { - /* eslint-disable no-continue */ - continue; - } - - if (instance.dataType === 'array' && (!priv.settings.columns || priv.settings.columns.length === 0) && priv.settings.allowInsertColumn) { - while (datamap.propToCol(changes[i][1]) > instance.countCols() - 1) { - datamap.createCol(void 0, void 0, source); - } - } - - datamap.set(changes[i][0], changes[i][1], changes[i][3]); - } - - instance.forceFullRender = true; // used when data was changed - grid.adjustRowsAndCols(); - instance.runHooks('beforeChangeRender', changes, source); - selection.refreshBorders(null, true); - instance.view.wt.wtOverlays.adjustElementsSize(); - instance.runHooks('afterChange', changes, source || 'edit'); - - var activeEditor = instance.getActiveEditor(); - - if (activeEditor && (0, _mixed.isDefined)(activeEditor.refreshValue)) { - activeEditor.refreshValue(); - } - } - - this.validateCell = function (value, cellProperties, callback, source) { - var validator = instance.getCellValidator(cellProperties); - - function done(valid) { - var col = cellProperties.visualCol, - row = cellProperties.visualRow, - td = instance.getCell(row, col, true); - - if (td && td.nodeName != 'TH') { - instance.view.wt.wtSettings.settings.cellRenderer(row, col, td); - } - callback(valid); - } - - if ((0, _mixed.isRegExp)(validator)) { - validator = function (validator) { - return function (value, callback) { - callback(validator.test(value)); - }; - }(validator); - } - - if ((0, _function.isFunction)(validator)) { - - value = instance.runHooks('beforeValidate', value, cellProperties.visualRow, cellProperties.prop, source); - - // To provide consistent behaviour, validation should be always asynchronous - instance._registerTimeout(setTimeout(function () { - validator.call(cellProperties, value, function (valid) { - valid = instance.runHooks('afterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source); - cellProperties.valid = valid; - - done(valid); - instance.runHooks('postAfterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source); - }); - }, 0)); - } else { - // resolve callback even if validator function was not found - instance._registerTimeout(setTimeout(function () { - cellProperties.valid = true; - done(cellProperties.valid); - }, 0)); - } - }; - - function setDataInputToArray(row, propOrCol, value) { - if ((typeof row === 'undefined' ? 'undefined' : _typeof(row)) === 'object') { - // is it an array of changes - return row; - } - return [[row, propOrCol, value]]; - } - - /** - * @description - * Set new value to a cell. To change many cells at once, pass an array of `changes` in format `[[row, col, value], ...]` as - * the only parameter. `col` is the index of a __visible__ column (note that if columns were reordered, - * the current visible order will be used). `source` is a flag for before/afterChange events. If you pass only array of - * changes then `source` could be set as second parameter. - * - * @memberof Core# - * @function setDataAtCell - * @param {Number|Array} row Visual row index or array of changes in format `[[row, col, value], ...]`. - * @param {Number} col Visual column index. - * @param {String} value New value. - * @param {String} [source] String that identifies how this change will be described in the changes array (useful in onAfterChange or onBeforeChange callback). - */ - this.setDataAtCell = function (row, col, value, source) { - var input = setDataInputToArray(row, col, value), - i, - ilen, - changes = [], - prop; - - for (i = 0, ilen = input.length; i < ilen; i++) { - if (_typeof(input[i]) !== 'object') { - throw new Error('Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter'); - } - if (typeof input[i][1] !== 'number') { - throw new Error('Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`'); - } - prop = datamap.colToProp(input[i][1]); - changes.push([input[i][0], prop, dataSource.getAtCell(recordTranslator.toPhysicalRow(input[i][0]), input[i][1]), input[i][2]]); - } - - if (!source && (typeof row === 'undefined' ? 'undefined' : _typeof(row)) === 'object') { - source = col; - } - - instance.runHooks('afterSetDataAtCell', changes, source); - - validateChanges(changes, source, function () { - applyChanges(changes, source); - }); - }; - - /** - * @description - * Set new value to a cell. To change many cells at once, pass an array of `changes` in format `[[row, prop, value], ...]` as - * the only parameter. `prop` is the name of the object property (e.g. `first.name`). `source` is a flag for before/afterChange events. - * If you pass only array of changes then `source` could be set as second parameter. - * - * @memberof Core# - * @function setDataAtRowProp - * @param {Number|Array} row Visual row index or array of changes in format `[[row, prop, value], ...]`. - * @param {String} prop Property name or the source string. - * @param {String} value Value to be set. - * @param {String} [source] String that identifies how this change will be described in changes array (useful in onChange callback). - */ - this.setDataAtRowProp = function (row, prop, value, source) { - var input = setDataInputToArray(row, prop, value), - i, - ilen, - changes = []; - - for (i = 0, ilen = input.length; i < ilen; i++) { - changes.push([input[i][0], input[i][1], dataSource.getAtCell(recordTranslator.toPhysicalRow(input[i][0]), input[i][1]), input[i][2]]); - } - - if (!source && (typeof row === 'undefined' ? 'undefined' : _typeof(row)) === 'object') { - source = prop; - } - - instance.runHooks('afterSetDataAtRowProp', changes, source); - - validateChanges(changes, source, function () { - applyChanges(changes, source); - }); - }; - - /** - * Listen to the keyboard input on document body. - * - * @memberof Core# - * @function listen - * @since 0.11 - */ - this.listen = function () { - var invalidActiveElement = !document.activeElement || document.activeElement && document.activeElement.nodeName === void 0; - - if (document.activeElement && document.activeElement !== document.body && !invalidActiveElement) { - document.activeElement.blur(); - } else if (invalidActiveElement) { - // IE - document.body.focus(); - } - - activeGuid = instance.guid; - }; - - /** - * Stop listening to keyboard input on the document body. - * - * @memberof Core# - * @function unlisten - * @since 0.11 - */ - this.unlisten = function () { - if (this.isListening()) { - activeGuid = null; - } - }; - - /** - * Returns `true` if the current Handsontable instance is listening to keyboard input on document body. - * - * @memberof Core# - * @function isListening - * @since 0.11 - * @returns {Boolean} `true` if the instance is listening, `false` otherwise. - */ - this.isListening = function () { - return activeGuid === instance.guid; - }; - - /** - * Destroys the current editor, renders and selects the current cell. - * - * @memberof Core# - * @function destroyEditor - * @param {Boolean} [revertOriginal] If != `true`, edited data is saved. Otherwise the previous value is restored. - */ - this.destroyEditor = function (revertOriginal) { - selection.refreshBorders(revertOriginal); - }; - - /** - * Populate cells at position with 2D input array (e.g. `[[1, 2], [3, 4]]`). - * Use `endRow`, `endCol` when you want to cut input when a certain row is reached. - * Optional `source` parameter (default value "populateFromArray") is used to identify this call in the resulting events (beforeChange, afterChange). - * Optional `populateMethod` parameter (default value "overwrite", possible values "shift_down" and "shift_right") - * has the same effect as pasteMode option {@link Options#pasteMode} - * - * @memberof Core# - * @function populateFromArray - * @since 0.9.0 - * @param {Number} row Start visual row index. - * @param {Number} col Start visual column index. - * @param {Array} input 2d array - * @param {Number} [endRow] End visual row index (use when you want to cut input when certain row is reached). - * @param {Number} [endCol] End visual column index (use when you want to cut input when certain column is reached). - * @param {String} [source="populateFromArray"] Source string. - * @param {String} [method="overwrite"] Populate method. Possible options: `shift_down`, `shift_right`, `overwrite`. - * @param {String} direction Populate direction. (left|right|up|down) - * @param {Array} deltas Deltas array. - * @returns {Object|undefined} The ending TD element in pasted area (only if any cells were changed). - */ - this.populateFromArray = function (row, col, input, endRow, endCol, source, method, direction, deltas) { - var c; - - if (!((typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object' && _typeof(input[0]) === 'object')) { - throw new Error('populateFromArray parameter `input` must be an array of arrays'); // API changed in 0.9-beta2, let's check if you use it correctly - } - c = typeof endRow === 'number' ? new _src.CellCoords(endRow, endCol) : null; - - return grid.populateFromArray(new _src.CellCoords(row, col), input, c, source, method, direction, deltas); - }; - - /** - * Adds/removes data from the column. This function is modelled after Array.splice. - * Parameter `col` is the index of the column in which do you want to do splice. - * Parameter `index` is the row index at which to start changing the array. - * If negative, will begin that many elements from the end. Parameter `amount`, is the number of the old array elements to remove. - * If the amount is 0, no elements are removed. Fourth and further parameters are the `elements` to add to the array. - * If you don't specify any elements, spliceCol simply removes elements from the array. - * {@link DataMap#spliceCol} - * - * @memberof Core# - * @function spliceCol - * @since 0.9-beta2 - * @param {Number} col Index of the column in which do you want to do splice. - * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end. - * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed. - * @param {*} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array. - */ - this.spliceCol = function (col, index, amount /* , elements... */) { - var _datamap; - - return (_datamap = datamap).spliceCol.apply(_datamap, arguments); - }; - - /** - * Adds/removes data from the row. This function works is modelled after Array.splice. - * Parameter `row` is the index of row in which do you want to do splice. - * Parameter `index` is the column index at which to start changing the array. - * If negative, will begin that many elements from the end. Parameter `amount`, is the number of old array elements to remove. - * If the amount is 0, no elements are removed. Fourth and further parameters are the `elements` to add to the array. - * If you don't specify any elements, spliceCol simply removes elements from the array. - * {@link DataMap#spliceRow} - * - * @memberof Core# - * @function spliceRow - * @since 0.11 - * @param {Number} row Index of column in which do you want to do splice. - * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end. - * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed. - * @param {*} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array. - */ - this.spliceRow = function (row, index, amount /* , elements... */) { - var _datamap2; - - return (_datamap2 = datamap).spliceRow.apply(_datamap2, arguments); - }; - - /** - * Returns indexes of the currently selected cells as an array `[startRow, startCol, endRow, endCol]`. - * - * Start row and start col are the coordinates of the active cell (where the selection was started). - * - * @memberof Core# - * @function getSelected - * @returns {Array} Array of the selection's indexes. - */ - this.getSelected = function () { - // https://github.com/handsontable/handsontable/issues/44 //cjl - if (selection.isSelected()) { - return [priv.selRange.from.row, priv.selRange.from.col, priv.selRange.to.row, priv.selRange.to.col]; - } - }; - - /** - * Returns the current selection as a CellRange object. - * - * @memberof Core# - * @function getSelectedRange - * @since 0.11 - * @returns {CellRange} Selected range object or undefined` if there is no selection. - */ - this.getSelectedRange = function () { - // https://github.com/handsontable/handsontable/issues/44 //cjl - if (selection.isSelected()) { - return priv.selRange; - } - }; - - /** - * Rerender the table. - * - * @memberof Core# - * @function render - */ - this.render = function () { - if (instance.view) { - instance.renderCall = true; - instance.forceFullRender = true; // used when data was changed - selection.refreshBorders(null, true); - } - }; - - /** - * Reset all cells in the grid to contain data from the data array. - * - * @memberof Core# - * @function loadData - * @param {Array} data Array of arrays or array of objects containing data. - * @fires Hooks#afterLoadData - * @fires Hooks#afterChange - */ - this.loadData = function (data) { - if (Array.isArray(priv.settings.dataSchema)) { - instance.dataType = 'array'; - } else if ((0, _function.isFunction)(priv.settings.dataSchema)) { - instance.dataType = 'function'; - } else { - instance.dataType = 'object'; - } - - if (datamap) { - datamap.destroy(); - } - datamap = new _dataMap2.default(instance, priv, GridSettings); - - if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object' && data !== null) { - if (!(data.push && data.splice)) { - // check if data is array. Must use duck-type check so Backbone Collections also pass it - // when data is not an array, attempt to make a single-row array of it - data = [data]; - } - } else if (data === null) { - data = []; - var row; - var r = 0; - var rlen = 0; - var dataSchema = datamap.getSchema(); - - for (r = 0, rlen = priv.settings.startRows; r < rlen; r++) { - if ((instance.dataType === 'object' || instance.dataType === 'function') && priv.settings.dataSchema) { - row = (0, _object.deepClone)(dataSchema); - data.push(row); - } else if (instance.dataType === 'array') { - row = (0, _object.deepClone)(dataSchema[0]); - data.push(row); - } else { - row = []; - - for (var c = 0, clen = priv.settings.startCols; c < clen; c++) { - row.push(null); - } - - data.push(row); - } - } - } else { - throw new Error('loadData only accepts array of objects or array of arrays (' + (typeof data === 'undefined' ? 'undefined' : _typeof(data)) + ' given)'); - } - - priv.isPopulated = false; - GridSettings.prototype.data = data; - - if (Array.isArray(data[0])) { - instance.dataType = 'array'; - } - - datamap.dataSource = data; - dataSource.data = data; - dataSource.dataType = instance.dataType; - dataSource.colToProp = datamap.colToProp.bind(datamap); - dataSource.propToCol = datamap.propToCol.bind(datamap); - - clearCellSettingCache(); - - grid.adjustRowsAndCols(); - instance.runHooks('afterLoadData', priv.firstRun); - - if (priv.firstRun) { - priv.firstRun = [null, 'loadData']; - } else { - instance.runHooks('afterChange', null, 'loadData'); - instance.render(); - } - priv.isPopulated = true; - - function clearCellSettingCache() { - priv.cellSettings.length = 0; - } - }; - - /** - * Returns the current data object (the same one that was passed by `data` configuration option or `loadData` method, - * unless the `modifyRow` hook was used to trim some of the rows. If that's the case - use the {@link Core#getSourceData} method.). - * Optionally you can provide cell range by defining `row`, `col`, `row2`, `col2` to get only a fragment of grid data. - * - * Note: getData functionality changed with the release of version 0.20. If you're looking for the previous functionality, - * you should use the {@link Core#getSourceData} method. - * - * @memberof Core# - * @function getData - * @param {Number} [r] From visual row index. - * @param {Number} [c] From visual column index. - * @param {Number} [r2] To visual row index. - * @param {Number} [c2] To visual column index. - * @returns {Array} Array with the data. - */ - this.getData = function (r, c, r2, c2) { - if ((0, _mixed.isUndefined)(r)) { - return datamap.getAll(); - } - return datamap.getRange(new _src.CellCoords(r, c), new _src.CellCoords(r2, c2), datamap.DESTINATION_RENDERER); - }; - - /** - * Returns a string value of the selected range. Each column is separated by tab, each row is separated by a new line character. - * {@link DataMap#getCopyableText} - * - * @memberof Core# - * @function getCopyableText - * @since 0.11 - * @param {Number} startRow From visual row index. - * @param {Number} startCol From visual column index. - * @param {Number} endRow To visual row index. - * @param {Number} endCol To visual column index. - * @returns {String} - */ - this.getCopyableText = function (startRow, startCol, endRow, endCol) { - return datamap.getCopyableText(new _src.CellCoords(startRow, startCol), new _src.CellCoords(endRow, endCol)); - }; - - /** - * Returns the data's copyable value at specified row and column index ({@link DataMap#getCopyable}). - * - * @memberof Core# - * @function getCopyableData - * @since 0.19.0 - * @param {Number} row Visual row index. - * @param {Number} column Visual column index. - * @returns {String} - */ - this.getCopyableData = function (row, column) { - return datamap.getCopyable(row, datamap.colToProp(column)); - }; - - /** - * Returns schema provided by constructor settings. If it doesn't exist then it returns the schema based on the data - * structure in the first row. - * - * @memberof Core# - * @function getSchema - * @since 0.13.2 - * @returns {Object} Schema object. - */ - this.getSchema = function () { - return datamap.getSchema(); - }; - - /** - * Use it if you need to change configuration after initialization. The `settings` parameter is an object containing the new - * settings, declared the same way as in the initial settings object. - * Note, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset - * the settings made post-initialization. (for example - ignore changes made using the columnResize feature). - * - * @memberof Core# - * @function updateSettings - * @param {Object} settings New settings object. - * @param {Boolean} init Calls this method in the initialization mode. Internal use only. - * Used by API could be cause of the unexpected behaviour of the Handsontable. - * @example - * ```js - * hot.updateSettings({ - * contextMenu: true, - * colHeaders: true, - * fixedRowsTop: 2 - * }); - * ``` - * @fires Hooks#afterCellMetaReset - * @fires Hooks#afterUpdateSettings - */ - this.updateSettings = function (settings, init) { - var columnsAsFunc = false; - var i = void 0; - var j = void 0; - var clen = void 0; - - if ((0, _mixed.isDefined)(settings.rows)) { - throw new Error('"rows" setting is no longer supported. do you mean startRows, minRows or maxRows?'); - } - if ((0, _mixed.isDefined)(settings.cols)) { - throw new Error('"cols" setting is no longer supported. do you mean startCols, minCols or maxCols?'); - } - - for (i in settings) { - if (i === 'data') { - /* eslint-disable no-continue */ - continue; // loadData will be triggered later - } else if (_pluginHooks2.default.getSingleton().getRegistered().indexOf(i) > -1) { - if ((0, _function.isFunction)(settings[i]) || Array.isArray(settings[i])) { - settings[i].initialHook = true; - instance.addHook(i, settings[i]); - } - } else if (!init && (0, _object.hasOwnProperty)(settings, i)) { - // Update settings - GridSettings.prototype[i] = settings[i]; - } - } - - // Load data or create data map - if (settings.data === void 0 && priv.settings.data === void 0) { - instance.loadData(null); // data source created just now - } else if (settings.data !== void 0) { - instance.loadData(settings.data); // data source given as option - } else if (settings.columns !== void 0) { - datamap.createMap(); - } - - clen = instance.countCols(); - - var columnSetting = settings.columns || GridSettings.prototype.columns; - - // Init columns constructors configuration - if (columnSetting && (0, _function.isFunction)(columnSetting)) { - clen = instance.countSourceCols(); - columnsAsFunc = true; - } - - // Clear cellSettings cache - if (settings.cell !== void 0 || settings.cells !== void 0 || settings.columns !== void 0) { - priv.cellSettings.length = 0; - } - - if (clen > 0) { - var proto = void 0; - var column = void 0; - - for (i = 0, j = 0; i < clen; i++) { - if (columnsAsFunc && !columnSetting(i)) { - /* eslint-disable no-continue */ - continue; - } - priv.columnSettings[j] = (0, _setting.columnFactory)(GridSettings, priv.columnsSettingConflicts); - - // shortcut for prototype - proto = priv.columnSettings[j].prototype; - - // Use settings provided by user - if (columnSetting) { - if (columnsAsFunc) { - column = columnSetting(i); - } else { - column = columnSetting[j]; - } - - if (column) { - (0, _object.extend)(proto, column); - (0, _object.extend)(proto, expandType(column)); - } - } - - j++; - } - } - - if ((0, _mixed.isDefined)(settings.cell)) { - for (var key in settings.cell) { - if ((0, _object.hasOwnProperty)(settings.cell, key)) { - var cell = settings.cell[key]; - - instance.setCellMetaObject(cell.row, cell.col, cell); - } - } - } - - instance.runHooks('afterCellMetaReset'); - - if ((0, _mixed.isDefined)(settings.className)) { - if (GridSettings.prototype.className) { - (0, _element.removeClass)(instance.rootElement, GridSettings.prototype.className); - } - if (settings.className) { - (0, _element.addClass)(instance.rootElement, settings.className); - } - } - - var currentHeight = instance.rootElement.style.height; - if (currentHeight !== '') { - currentHeight = parseInt(instance.rootElement.style.height, 10); - } - - var height = settings.height; - if ((0, _function.isFunction)(height)) { - height = height(); - } - - if (init) { - var initialStyle = instance.rootElement.getAttribute('style'); - - if (initialStyle) { - instance.rootElement.setAttribute('data-initialstyle', instance.rootElement.getAttribute('style')); - } - } - - if (height === null) { - var _initialStyle = instance.rootElement.getAttribute('data-initialstyle'); - - if (_initialStyle && (_initialStyle.indexOf('height') > -1 || _initialStyle.indexOf('overflow') > -1)) { - instance.rootElement.setAttribute('style', _initialStyle); - } else { - instance.rootElement.style.height = ''; - instance.rootElement.style.overflow = ''; - } - } else if (height !== void 0) { - instance.rootElement.style.height = height + 'px'; - instance.rootElement.style.overflow = 'hidden'; - } - - if (typeof settings.width !== 'undefined') { - var width = settings.width; - - if ((0, _function.isFunction)(width)) { - width = width(); - } - - instance.rootElement.style.width = width + 'px'; - } - - if (!init) { - datamap.clearLengthCache(); // force clear cache length on updateSettings() #3416 - - if (instance.view) { - instance.view.wt.wtViewport.resetHasOversizedColumnHeadersMarked(); - } - - instance.runHooks('afterUpdateSettings', settings); - } - - grid.adjustRowsAndCols(); - if (instance.view && !priv.firstRun) { - instance.forceFullRender = true; // used when data was changed - selection.refreshBorders(null, true); - } - - if (!init && instance.view && (currentHeight === '' || height === '' || height === void 0) && currentHeight !== height) { - instance.view.wt.wtOverlays.updateMainScrollableElements(); - } - }; - - /** - * Get value from the selected cell. - * - * @memberof Core# - * @function getValue - * @since 0.11 - * @returns {*} Value of selected cell. - */ - this.getValue = function () { - var sel = instance.getSelected(); - if (GridSettings.prototype.getValue) { - if ((0, _function.isFunction)(GridSettings.prototype.getValue)) { - return GridSettings.prototype.getValue.call(instance); - } else if (sel) { - return instance.getData()[sel[0]][GridSettings.prototype.getValue]; - } - } else if (sel) { - return instance.getDataAtCell(sel[0], sel[1]); - } - }; - - function expandType(obj) { - if (!(0, _object.hasOwnProperty)(obj, 'type')) { - // ignore obj.prototype.type - return; - } - - var type, - expandedType = {}; - - if (_typeof(obj.type) === 'object') { - type = obj.type; - } else if (typeof obj.type === 'string') { - type = (0, _cellTypes.getCellType)(obj.type); - } - - for (var i in type) { - if ((0, _object.hasOwnProperty)(type, i) && !(0, _object.hasOwnProperty)(obj, i)) { - expandedType[i] = type[i]; - } - } - - return expandedType; - } - - /** - * Returns the object settings. - * - * @memberof Core# - * @function getSettings - * @returns {Object} Object containing the current grid settings. - */ - this.getSettings = function () { - return priv.settings; - }; - - /** - * Clears the data from the grid. (The table settings remain intact.) - * - * @memberof Core# - * @function clear - * @since 0.11 - */ - this.clear = function () { - selection.selectAll(); - selection.empty(); - }; - - /** - * @memberof Core# - * @function alter - * @param {String} action See grid.alter for possible values: `"insert_row"`, `"insert_col"`, `"remove_row"`, `"remove_col"` - * @param {Number} index Visual index of the row/column before which the new row/column will be inserted/removed. - * @param {Number} [amount = 1] Amound of rows/columns to be inserted/removed. - * @param {String} [source] Source indicator. - * @param {Boolean} [keepEmptyRows] Flag for preventing deletion of empty rows. - * @description - * - * Allows altering the table structure by either inserting/removing rows or inserting/removing columns: - * - * Insert new row(s) above the row with a given `index`. If index is `null` or `undefined`, the new row will be - * added after the last row. - * ```js - * var hot = new Handsontable(document.getElementById('example')); - * hot.alter('insert_row', 10); - * ``` - * - * Insert new column(s) before the column with a given `index`. If index is `null` or `undefined`, the new column - * will be added after the last column. - * ```js - * var hot = new Handsontable(document.getElementById('example')); - * hot.alter('insert_col', 10); - * ``` - * - * Remove the row(s) at the given `index`. - * ```js - * var hot = new Handsontable(document.getElementById('example')); - * hot.alter('remove_row', 10); - * ``` - * - * Remove the column(s) at the given `index`. - * ```js - * var hot = new Handsontable(document.getElementById('example')); - * hot.alter('remove_col', 10); - * ``` - */ - this.alter = function (action, index, amount, source, keepEmptyRows) { - grid.alter(action, index, amount, source, keepEmptyRows); - }; - - /** - * Returns a TD element for the given `row` and `col` arguments, if it is rendered on screen. - * Returns `null` if the TD is not rendered on screen (probably because that part of the table is not visible). - * - * @memberof Core# - * @function getCell - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {Boolean} topmost If set to true, it returns the TD element from the topmost overlay. For example, - * if the wanted cell is in the range of fixed rows, it will return a TD element from the `top` overlay. - * @returns {Element} The cell's TD element. - */ - this.getCell = function (row, col, topmost) { - return instance.view.getCellAtCoords(new _src.CellCoords(row, col), topmost); - }; - - /** - * Returns the coordinates of the cell, provided as a HTML Element. - * - * @memberof Core# - * @function getCoords - * @param {Element} elem The HTML Element representing the cell. - * @returns {CellCoords} Visual coordinates object. - */ - this.getCoords = function (elem) { - return this.view.wt.wtTable.getCoords.call(this.view.wt.wtTable, elem); - }; - - /** - * Returns the property name that corresponds with the given column index. {@link DataMap#colToProp} - * If the data source is an array of arrays, it returns the columns index. - * - * @memberof Core# - * @function colToProp - * @param {Number} col Visual column index. - * @returns {String|Number} Column property or physical column index. - */ - this.colToProp = function (col) { - return datamap.colToProp(col); - }; - - /** - * Returns column index that corresponds with the given property. {@link DataMap#propToCol} - * - * @memberof Core# - * @function propToCol - * @param {String|Number} prop Property name or physical column index. - * @returns {Number} Visual column index. - */ - this.propToCol = function (prop) { - return datamap.propToCol(prop); - }; - - /** - * Translate physical row index into visual. - * - * @since 0.29.0 - * @memberof Core# - * @function toVisualRow - * @param {Number} row Physical row index. - * @returns {Number} Returns visual row index. - */ - this.toVisualRow = function (row) { - return recordTranslator.toVisualRow(row); - }; - - /** - * Translate physical column index into visual. - * - * @since 0.29.0 - * @memberof Core# - * @function toVisualColumn - * @param {Number} column Physical column index. - * @returns {Number} Returns visual column index. - */ - this.toVisualColumn = function (column) { - return recordTranslator.toVisualColumn(column); - }; - - /** - * Translate visual row index into physical. - * If displayed rows order is different than the order of rows stored in memory (i.e. sorting is applied) - * to retrieve valid physical row index you can use this method. - * - * @since 0.29.0 - * @memberof Core# - * @function toPhysicalRow - * @param {Number} row Visual row index. - * @returns {Number} Returns physical row index. - */ - this.toPhysicalRow = function (row) { - return recordTranslator.toPhysicalRow(row); - }; - - /** - * Translate visual column index into physical. - * If displayed columns order is different than the order of columns stored in memory (i.e. manual column move is applied) - * to retrieve valid physical column index you can use this method. - * - * @since 0.29.0 - * @memberof Core# - * @function toPhysicalColumn - * @param {Number} column Visual column index. - * @returns {Number} Returns physical column index. - */ - this.toPhysicalColumn = function (column) { - return recordTranslator.toPhysicalColumn(column); - }; - - /** - * @description - * Returns the cell value at `row`, `col`. `row` and `col` are the __visible__ indexes (note, that if columns were reordered or sorted, - * the currently visible order will be used). - * - * @memberof Core# - * @function getDataAtCell - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @returns {String|Boolean|null} Data at cell. - */ - this.getDataAtCell = function (row, col) { - return datamap.get(row, datamap.colToProp(col)); - }; - - /** - * Return value at `row`, `prop`. (Uses {@link DataMap#get}) - * - * @memberof Core# - * @function getDataAtRowProp - * @param {Number} row Visual row index. - * @param {String} prop Property name. - * @returns {*} Cell value. - */ - this.getDataAtRowProp = function (row, prop) { - return datamap.get(row, prop); - }; - - /** - * @description - * Returns array of column values from the data source. `col` is the __visible__ index of the column. - * Note, that if columns were reordered or sorted, the currently visible order will be used. - * - * @memberof Core# - * @function getDataAtCol - * @since 0.9-beta2 - * @param {Number} col Visual column index. - * @returns {Array} Array of cell values. - */ - this.getDataAtCol = function (col) { - var out = []; - return out.concat.apply(out, _toConsumableArray(datamap.getRange(new _src.CellCoords(0, col), new _src.CellCoords(priv.settings.data.length - 1, col), datamap.DESTINATION_RENDERER))); - }; - - /** - * Given the object property name (e.g. `'first.name'`), returns an array of column's values from the data source. - * You can also provide a column index as the first argument. - * - * @memberof Core# - * @function getDataAtProp - * @since 0.9-beta2 - * @param {String|Number} prop Property name / physical column index. - * @returns {Array} Array of cell values. - */ - // TODO: Getting data from `datamap` should work on visual indexes. - this.getDataAtProp = function (prop) { - var out = [], - range; - - range = datamap.getRange(new _src.CellCoords(0, datamap.propToCol(prop)), new _src.CellCoords(priv.settings.data.length - 1, datamap.propToCol(prop)), datamap.DESTINATION_RENDERER); - - return out.concat.apply(out, _toConsumableArray(range)); - }; - - /** - * Returns the source data object (the same that was passed by `data` configuration option or `loadData` method). - * Optionally you can provide a cell range by using the `row`, `col`, `row2`, `col2` arguments, to get only a fragment of grid data. - * - * @memberof Core# - * @function getSourceData - * @since 0.20.0 - * @param {Number} [r] From physical row index. - * @param {Number} [c] From physical column index (or visual index, if data type is an array of objects). - * @param {Number} [r2] To physical row index. - * @param {Number} [c2] To physical column index (or visual index, if data type is an array of objects). - * @returns {Array} Array of grid data. - */ - this.getSourceData = function (r, c, r2, c2) { - var data = void 0; - - if (r === void 0) { - data = dataSource.getData(); - } else { - data = dataSource.getByRange(new _src.CellCoords(r, c), new _src.CellCoords(r2, c2)); - } - - return data; - }; - - /** - * Returns the source data object as an arrays of arrays format even when source data was provided in another format. - * Optionally you can provide a cell range by using the `row`, `col`, `row2`, `col2` arguments, to get only a fragment of grid data. - * - * @memberof Core# - * @function getSourceDataArray - * @since 0.28.0 - * @param {Number} [r] From physical row index. - * @param {Number} [c] From physical column index (or visual index, if data type is an array of objects). - * @param {Number} [r2] To physical row index. - * @param {Number} [c2] To physical column index (or visual index, if data type is an array of objects). - * @returns {Array} An array of arrays. - */ - this.getSourceDataArray = function (r, c, r2, c2) { - var data = void 0; - - if (r === void 0) { - data = dataSource.getData(true); - } else { - data = dataSource.getByRange(new _src.CellCoords(r, c), new _src.CellCoords(r2, c2), true); - } - - return data; - }; - - /** - * Returns an array of column values from the data source. `col` is the index of the row in the data source. - * - * @memberof Core# - * @function getSourceDataAtCol - * @since 0.11.0-beta3 - * @param {Number} column Visual column index. - * @returns {Array} Array of the column's cell values. - */ - // TODO: Getting data from `sourceData` should work always on physical indexes. - this.getSourceDataAtCol = function (column) { - return dataSource.getAtColumn(column); - }; - - /** - * Returns a single row of the data (array or object, depending on what you have). `row` is the index of the row in the data source. - * - * @memberof Core# - * @function getSourceDataAtRow - * @since 0.11.0-beta3 - * @param {Number} row Physical row index. - * @returns {Array|Object} Single row of data. - */ - this.getSourceDataAtRow = function (row) { - return dataSource.getAtRow(row); - }; - - /** - * Returns a single value from the data source. - * - * @memberof Core# - * @function getSourceDataAtCell - * @param {Number} row Physical row index. - * @param {Number} column Visual column index. - * @returns {*} Cell data. - * @since 0.20.0 - */ - // TODO: Getting data from `sourceData` should work always on physical indexes. - this.getSourceDataAtCell = function (row, column) { - return dataSource.getAtCell(row, column); - }; - - /** - * @description - * Returns a single row of the data. The `row` argument is the __visible__ index of the row. - * - * @memberof Core# - * @function getDataAtRow - * @param {Number} row Visual row index. - * @returns {Array} Array of row's cell data. - * @since 0.9-beta2 - */ - this.getDataAtRow = function (row) { - var data = datamap.getRange(new _src.CellCoords(row, 0), new _src.CellCoords(row, this.countCols() - 1), datamap.DESTINATION_RENDERER); - - return data[0] || []; - }; - - /** - * @description - * Returns a data type defined in the Handsontable settings under the `type` key ([Options#type](http://docs.handsontable.com/Options.html#type)). - * If there are cells with different types in the selected range, it returns `'mixed'`. - * - * @since 0.18.1 - * @memberof Core# - * @function getDataType - * @param {Number} rowFrom From visual row index. - * @param {Number} columnFrom From visual column index. - * @param {Number} rowTo To visual row index. - * @param {Number} columnTo To visual column index. - * @returns {String} Cell type (e.q: `'mixed'`, `'text'`, `'numeric'`, `'autocomplete'`). - */ - this.getDataType = function (rowFrom, columnFrom, rowTo, columnTo) { - var _this = this; - - var previousType = null; - var currentType = null; - - if (rowFrom === void 0) { - rowFrom = 0; - rowTo = this.countRows(); - columnFrom = 0; - columnTo = this.countCols(); - } - if (rowTo === void 0) { - rowTo = rowFrom; - } - if (columnTo === void 0) { - columnTo = columnFrom; - } - var type = 'mixed'; - - (0, _number.rangeEach)(Math.min(rowFrom, rowTo), Math.max(rowFrom, rowTo), function (row) { - var isTypeEqual = true; - - (0, _number.rangeEach)(Math.min(columnFrom, columnTo), Math.max(columnFrom, columnTo), function (column) { - var cellType = _this.getCellMeta(row, column); - - currentType = cellType.type; - - if (previousType) { - isTypeEqual = previousType === currentType; - } else { - previousType = currentType; - } - - return isTypeEqual; - }); - type = isTypeEqual ? currentType : 'mixed'; - - return isTypeEqual; - }); - - return type; - }; - - /** - * Remove a property defined by the `key` argument from the cell meta object for the provided `row` and `col` coordinates. - * - * @memberof Core# - * @function removeCellMeta - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {String} key Property name. - * @fires Hooks#beforeRemoveCellMeta - * @fires Hooks#afterRemoveCellMeta - */ - this.removeCellMeta = function (row, col, key) { - var _recordTranslator$toP = recordTranslator.toPhysical(row, col), - _recordTranslator$toP2 = _slicedToArray(_recordTranslator$toP, 2), - physicalRow = _recordTranslator$toP2[0], - physicalColumn = _recordTranslator$toP2[1]; - - var cachedValue = priv.cellSettings[physicalRow][physicalColumn][key]; - - var hookResult = instance.runHooks('beforeRemoveCellMeta', row, col, key, cachedValue); - - if (hookResult !== false) { - delete priv.cellSettings[physicalRow][physicalColumn][key]; - - instance.runHooks('afterRemoveCellMeta', row, col, key, cachedValue); - } - - cachedValue = null; - }; - - /** - * Remove one or more rows from the cell meta object. - * - * @since 0.30.0 - * @param {Number} index An integer that specifies at what position to add/remove items, Use negative values to specify the position from the end of the array. - * @param {Number} deleteAmount The number of items to be removed. If set to 0, no items will be removed. - * @param {Array} items The new items to be added to the array. - */ - this.spliceCellsMeta = function (index, deleteAmount) { - var _priv$cellSettings; - - for (var _len2 = arguments.length, items = Array(_len2 > 2 ? _len2 - 2 : 0), _key = 2; _key < _len2; _key++) { - items[_key - 2] = arguments[_key]; - } - - (_priv$cellSettings = priv.cellSettings).splice.apply(_priv$cellSettings, [index, deleteAmount].concat(items)); - }; - - /** - * Set cell meta data object defined by `prop` to the corresponding params `row` and `col`. - * - * @memberof Core# - * @function setCellMetaObject - * @since 0.11 - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {Object} prop Meta object. - */ - this.setCellMetaObject = function (row, col, prop) { - if ((typeof prop === 'undefined' ? 'undefined' : _typeof(prop)) === 'object') { - for (var key in prop) { - if ((0, _object.hasOwnProperty)(prop, key)) { - var value = prop[key]; - this.setCellMeta(row, col, key, value); - } - } - } - }; - - /** - * Sets a property defined by the `key` object to the meta object of a cell corresponding to params `row` and `col`. - * - * @memberof Core# - * @function setCellMeta - * @since 0.11 - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {String} key Property name. - * @param {String} val Property value. - * @fires Hooks#afterSetCellMeta - */ - this.setCellMeta = function (row, col, key, val) { - var _recordTranslator$toP3 = recordTranslator.toPhysical(row, col), - _recordTranslator$toP4 = _slicedToArray(_recordTranslator$toP3, 2), - physicalRow = _recordTranslator$toP4[0], - physicalColumn = _recordTranslator$toP4[1]; - - if (!priv.columnSettings[physicalColumn]) { - priv.columnSettings[physicalColumn] = (0, _setting.columnFactory)(GridSettings, priv.columnsSettingConflicts); - } - - if (!priv.cellSettings[physicalRow]) { - priv.cellSettings[physicalRow] = []; - } - if (!priv.cellSettings[physicalRow][physicalColumn]) { - priv.cellSettings[physicalRow][physicalColumn] = new priv.columnSettings[physicalColumn](); - } - priv.cellSettings[physicalRow][physicalColumn][key] = val; - instance.runHooks('afterSetCellMeta', row, col, key, val); - }; - - /** - * Get all the cells meta settings at least once generated in the table (in order of cell initialization). - * - * @since 0.19.0 - * @returns {Array} Returns Array of ColumnSettings object. - */ - this.getCellsMeta = function () { - return (0, _array.arrayFlatten)(priv.cellSettings); - }; - - /** - * Returns the cell properties object for the given `row` and `col` coordinates. - * - * @memberof Core# - * @function getCellMeta - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @returns {Object} The cell properties object. - * @fires Hooks#beforeGetCellMeta - * @fires Hooks#afterGetCellMeta - */ - this.getCellMeta = function (row, col) { - var prop = datamap.colToProp(col); - var cellProperties = void 0; - - var _recordTranslator$toP5 = recordTranslator.toPhysical(row, col), - _recordTranslator$toP6 = _slicedToArray(_recordTranslator$toP5, 2), - physicalRow = _recordTranslator$toP6[0], - physicalColumn = _recordTranslator$toP6[1]; - - if (!priv.columnSettings[physicalColumn]) { - priv.columnSettings[physicalColumn] = (0, _setting.columnFactory)(GridSettings, priv.columnsSettingConflicts); - } - - if (!priv.cellSettings[physicalRow]) { - priv.cellSettings[physicalRow] = []; - } - if (!priv.cellSettings[physicalRow][physicalColumn]) { - priv.cellSettings[physicalRow][physicalColumn] = new priv.columnSettings[physicalColumn](); - } - - cellProperties = priv.cellSettings[physicalRow][physicalColumn]; // retrieve cellProperties from cache - - cellProperties.row = physicalRow; - cellProperties.col = physicalColumn; - cellProperties.visualRow = row; - cellProperties.visualCol = col; - cellProperties.prop = prop; - cellProperties.instance = instance; - - instance.runHooks('beforeGetCellMeta', row, col, cellProperties); - (0, _object.extend)(cellProperties, expandType(cellProperties)); // for `type` added in beforeGetCellMeta - - if (cellProperties.cells) { - var settings = cellProperties.cells.call(cellProperties, physicalRow, physicalColumn, prop); - - if (settings) { - (0, _object.extend)(cellProperties, settings); - (0, _object.extend)(cellProperties, expandType(settings)); // for `type` added in cells - } - } - - instance.runHooks('afterGetCellMeta', row, col, cellProperties); - - return cellProperties; - }; - - /** - * Returns a row off the cell meta array. - * - * @memberof Core# - * @function getCellMetaAtRow - * @since 0.30.0 - * @param {Number} row Physical index of the row to return cell meta for. - * @returns {Array} - */ - this.getCellMetaAtRow = function (row) { - return priv.cellSettings[row]; - }; - - /** - * Checks if the data format and config allows user to modify the column structure. - * @returns {boolean} - */ - this.isColumnModificationAllowed = function () { - return !(instance.dataType === 'object' || instance.getSettings().columns); - }; - - var rendererLookup = (0, _data.cellMethodLookupFactory)('renderer'); - - /** - * Returns the cell renderer function by given `row` and `col` arguments. - * - * @memberof Core# - * @function getCellRenderer - * @since 0.11 - * @param {Number|Object} row Visual row index or cell meta object. - * @param {Number} [col] Visual column index. - * @returns {Function} The renderer function. - */ - this.getCellRenderer = function (row, col) { - return (0, _renderers.getRenderer)(rendererLookup.call(this, row, col)); - }; - - /** - * Returns the cell editor by the provided `row` and `col` arguments. - * - * @memberof Core# - * @function getCellEditor - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @returns {Object} The Editor object. - */ - this.getCellEditor = (0, _data.cellMethodLookupFactory)('editor'); - - var validatorLookup = (0, _data.cellMethodLookupFactory)('validator'); - - /** - * Returns the cell validator by `row` and `col`, provided a validator is defined. If not - it doesn't return anything. - * - * @memberof Core# - * @function getCellValidator - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @returns {Function|RegExp|undefined} The validator function. - */ - this.getCellValidator = function (row, col) { - var validator = validatorLookup.call(this, row, col); - - if (typeof validator === 'string') { - validator = (0, _validators.getValidator)(validator); - } - - return validator; - }; - - /** - * Validates all cells using their validator functions and calls callback when finished. - * - * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it would equal `true`. - * - * @memberof Core# - * @function validateCells - * @param {Function} [callback] The callback function. - */ - this.validateCells = function (callback) { - var waitingForValidator = new ValidatorsQueue(); - - if (callback) { - waitingForValidator.onQueueEmpty = callback; - } - - var i = instance.countRows() - 1; - - while (i >= 0) { - var j = instance.countCols() - 1; - - while (j >= 0) { - waitingForValidator.addValidatorToQueue(); - - instance.validateCell(instance.getDataAtCell(i, j), instance.getCellMeta(i, j), function (result) { - if (typeof result !== 'boolean') { - throw new Error('Validation error: result is not boolean'); - } - if (result === false) { - waitingForValidator.valid = false; - } - waitingForValidator.removeValidatorFormQueue(); - }, 'validateCells'); - j--; - } - i--; - } - waitingForValidator.checkIfQueueIsEmpty(); - }; - - /** - * Returns an array of row headers' values (if they are enabled). If param `row` was given, it returns the header of the given row as a string. - * - * @memberof Core# - * @function getRowHeader - * @param {Number} [row] Visual row index. - * @fires Hooks#modifyRowHeader - * @returns {Array|String} Array of header values / single header value. - */ - this.getRowHeader = function (row) { - var rowHeader = priv.settings.rowHeaders; - - if (row !== void 0) { - row = instance.runHooks('modifyRowHeader', row); - } - if (row === void 0) { - rowHeader = []; - (0, _number.rangeEach)(instance.countRows() - 1, function (i) { - rowHeader.push(instance.getRowHeader(i)); - }); - } else if (Array.isArray(rowHeader) && rowHeader[row] !== void 0) { - rowHeader = rowHeader[row]; - } else if ((0, _function.isFunction)(rowHeader)) { - rowHeader = rowHeader(row); - } else if (rowHeader && typeof rowHeader !== 'string' && typeof rowHeader !== 'number') { - rowHeader = row + 1; - } - - return rowHeader; - }; - - /** - * Returns information about if this table is configured to display row headers. - * - * @memberof Core# - * @function hasRowHeaders - * @returns {Boolean} `true` if the instance has the row headers enabled, `false` otherwise. - * @since 0.11 - */ - this.hasRowHeaders = function () { - return !!priv.settings.rowHeaders; - }; - - /** - * Returns information about if this table is configured to display column headers. - * - * @memberof Core# - * @function hasColHeaders - * @since 0.11 - * @returns {Boolean} `True` if the instance has the column headers enabled, `false` otherwise. - */ - this.hasColHeaders = function () { - if (priv.settings.colHeaders !== void 0 && priv.settings.colHeaders !== null) { - // Polymer has empty value = null - return !!priv.settings.colHeaders; - } - for (var i = 0, ilen = instance.countCols(); i < ilen; i++) { - if (instance.getColHeader(i)) { - return true; - } - } - - return false; - }; - - /** - * Returns an array of column headers (in string format, if they are enabled). If param `col` is given, it returns the header at the given column as a string. - * - * @memberof Core# - * @function getColHeader - * @param {Number} [col] Visual column index. - * @fires Hooks#modifyColHeader - * @returns {Array|String} The column header(s). - */ - this.getColHeader = function (col) { - var columnsAsFunc = priv.settings.columns && (0, _function.isFunction)(priv.settings.columns); - var result = priv.settings.colHeaders; - - col = instance.runHooks('modifyColHeader', col); - - if (col === void 0) { - var out = []; - var ilen = columnsAsFunc ? instance.countSourceCols() : instance.countCols(); - - for (var i = 0; i < ilen; i++) { - out.push(instance.getColHeader(i)); - } - - result = out; - } else { - var translateVisualIndexToColumns = function translateVisualIndexToColumns(col) { - var arr = []; - var columnsLen = instance.countSourceCols(); - var index = 0; - - for (; index < columnsLen; index++) { - if ((0, _function.isFunction)(instance.getSettings().columns) && instance.getSettings().columns(index)) { - arr.push(index); - } - } - - return arr[col]; - }; - var baseCol = col; - col = instance.runHooks('modifyCol', col); - - var prop = translateVisualIndexToColumns(col); - - if (priv.settings.columns && (0, _function.isFunction)(priv.settings.columns) && priv.settings.columns(prop) && priv.settings.columns(prop).title) { - result = priv.settings.columns(prop).title; - } else if (priv.settings.columns && priv.settings.columns[col] && priv.settings.columns[col].title) { - result = priv.settings.columns[col].title; - } else if (Array.isArray(priv.settings.colHeaders) && priv.settings.colHeaders[col] !== void 0) { - result = priv.settings.colHeaders[col]; - } else if ((0, _function.isFunction)(priv.settings.colHeaders)) { - result = priv.settings.colHeaders(col); - } else if (priv.settings.colHeaders && typeof priv.settings.colHeaders !== 'string' && typeof priv.settings.colHeaders !== 'number') { - result = (0, _data.spreadsheetColumnLabel)(baseCol); // see #1458 - } - } - - return result; - }; - - /** - * Return column width from settings (no guessing). Private use intended. - * - * @private - * @memberof Core# - * @function _getColWidthFromSettings - * @param {Number} col Visual col index. - * @returns {Number} - */ - this._getColWidthFromSettings = function (col) { - var cellProperties = instance.getCellMeta(0, col); - var width = cellProperties.width; - - if (width === void 0 || width === priv.settings.width) { - width = cellProperties.colWidths; - } - if (width !== void 0 && width !== null) { - switch (typeof width === 'undefined' ? 'undefined' : _typeof(width)) { - case 'object': - // array - width = width[col]; - break; - - case 'function': - width = width(col); - break; - default: - break; - } - if (typeof width === 'string') { - width = parseInt(width, 10); - } - } - - return width; - }; - - /** - * Returns the width of the requested column. - * - * @memberof Core# - * @function getColWidth - * @since 0.11 - * @param {Number} col Visual column index. - * @returns {Number} Column width. - * @fires Hooks#modifyColWidth - */ - this.getColWidth = function (col) { - var width = instance._getColWidthFromSettings(col); - - width = instance.runHooks('modifyColWidth', width, col); - - if (width === void 0) { - width = _src.ViewportColumnsCalculator.DEFAULT_WIDTH; - } - - return width; - }; - - /** - * Return row height from settings (no guessing). Private use intended. - * - * @private - * @memberof Core# - * @function _getRowHeightFromSettings - * @param {Number} row Visual row index. - * @returns {Number} - */ - this._getRowHeightFromSettings = function (row) { - // let cellProperties = instance.getCellMeta(row, 0); - // let height = cellProperties.height; - // - // if (height === void 0 || height === priv.settings.height) { - // height = cellProperties.rowHeights; - // } - var height = priv.settings.rowHeights; - - if (height !== void 0 && height !== null) { - switch (typeof height === 'undefined' ? 'undefined' : _typeof(height)) { - case 'object': - // array - height = height[row]; - break; - - case 'function': - height = height(row); - break; - default: - break; - } - if (typeof height === 'string') { - height = parseInt(height, 10); - } - } - - return height; - }; - - /** - * Returns the row height. - * - * @memberof Core# - * @function getRowHeight - * @since 0.11 - * @param {Number} row Visual row index. - * @returns {Number} The given row's height. - * @fires Hooks#modifyRowHeight - */ - this.getRowHeight = function (row) { - var height = instance._getRowHeightFromSettings(row); - - height = instance.runHooks('modifyRowHeight', height, row); - - return height; - }; - - /** - * Returns the total number of rows in the data source. - * - * @memberof Core# - * @function countSourceRows - * @since 0.20.0 - * @returns {Number} Total number in rows in data source. - */ - this.countSourceRows = function () { - var sourceLength = instance.runHooks('modifySourceLength'); - return sourceLength || (instance.getSourceData() ? instance.getSourceData().length : 0); - }; - - /** - * Returns the total number of columns in the data source. - * - * @memberof Core# - * @function countSourceCols - * @since 0.26.1 - * @returns {Number} Total number in columns in data source. - */ - this.countSourceCols = function () { - var len = 0; - var obj = instance.getSourceData() && instance.getSourceData()[0] ? instance.getSourceData()[0] : []; - - if ((0, _object.isObject)(obj)) { - len = (0, _object.deepObjectSize)(obj); - } else { - len = obj.length || 0; - } - - return len; - }; - - /** - * Returns the total number of rows in the grid. - * - * @memberof Core# - * @function countRows - * @returns {Number} Total number in rows the grid. - */ - this.countRows = function () { - return datamap.getLength(); - }; - - /** - * Returns the total number of columns in the grid. - * - * @memberof Core# - * @function countCols - * @returns {Number} Total number of columns. - */ - this.countCols = function () { - var maxCols = this.getSettings().maxCols; - var dataHasLength = false; - var dataLen = 0; - - if (instance.dataType === 'array') { - dataHasLength = priv.settings.data && priv.settings.data[0] && priv.settings.data[0].length; - } - - if (dataHasLength) { - dataLen = priv.settings.data[0].length; - } - - if (priv.settings.columns) { - var columnsIsFunction = (0, _function.isFunction)(priv.settings.columns); - - if (columnsIsFunction) { - if (instance.dataType === 'array') { - var columnLen = 0; - - for (var i = 0; i < dataLen; i++) { - if (priv.settings.columns(i)) { - columnLen++; - } - } - - dataLen = columnLen; - } else if (instance.dataType === 'object' || instance.dataType === 'function') { - dataLen = datamap.colToPropCache.length; - } - } else { - dataLen = priv.settings.columns.length; - } - } else if (instance.dataType === 'object' || instance.dataType === 'function') { - dataLen = datamap.colToPropCache.length; - } - - return Math.min(maxCols, dataLen); - }; - - /** - * Returns an visual index of the first rendered row. - * - * @memberof Core# - * @function rowOffset - * @returns {Number} Visual index of first rendered row. - */ - this.rowOffset = function () { - return instance.view.wt.wtTable.getFirstRenderedRow(); - }; - - /** - * Returns the visual index of the first rendered column. - * - * @memberof Core# - * @function colOffset - * @returns {Number} Visual index of the first visible column. - */ - this.colOffset = function () { - return instance.view.wt.wtTable.getFirstRenderedColumn(); - }; - - /** - * Returns the number of rendered rows (including rows partially or fully rendered outside viewport). - * - * @memberof Core# - * @function countRenderedRows - * @returns {Number} Returns -1 if table is not visible. - */ - this.countRenderedRows = function () { - return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedRowsCount() : -1; - }; - - /** - * Returns the number of visible rows (rendered rows that fully fit inside viewport). - * - * @memberof Core# - * @function countVisibleRows - * @returns {Number} Number of visible rows or -1. - */ - this.countVisibleRows = function () { - return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleRowsCount() : -1; - }; - - /** - * Returns the number of rendered columns (including columns partially or fully rendered outside viewport). - * - * @memberof Core# - * @function countRenderedCols - * @returns {Number} Returns -1 if table is not visible. - */ - this.countRenderedCols = function () { - return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedColumnsCount() : -1; - }; - - /** - * Returns the number of visible columns. Returns -1 if table is not visible - * - * @memberof Core# - * @function countVisibleCols - * @return {Number} Number of visible columns or -1. - */ - this.countVisibleCols = function () { - return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleColumnsCount() : -1; - }; - - /** - * Returns the number of empty rows. If the optional ending parameter is `true`, returns the - * number of empty rows at the bottom of the table. - * - * @memberof Core# - * @function countEmptyRows - * @param {Boolean} [ending] If `true`, will only count empty rows at the end of the data source. - * @returns {Number} Count empty rows - * @fires Hooks#modifyRow - */ - this.countEmptyRows = function (ending) { - var i = instance.countRows() - 1, - empty = 0, - row; - - while (i >= 0) { - row = instance.runHooks('modifyRow', i); - - if (instance.isEmptyRow(row)) { - empty++; - } else if (ending) { - break; - } - i--; - } - - return empty; - }; - - /** - * Returns the number of empty columns. If the optional ending parameter is `true`, returns the number of empty - * columns at right hand edge of the table. - * - * @memberof Core# - * @function countEmptyCols - * @param {Boolean} [ending] If `true`, will only count empty columns at the end of the data source row. - * @returns {Number} Count empty cols - */ - this.countEmptyCols = function (ending) { - if (instance.countRows() < 1) { - return 0; - } - var i = instance.countCols() - 1, - empty = 0; - - while (i >= 0) { - if (instance.isEmptyCol(i)) { - empty++; - } else if (ending) { - break; - } - i--; - } - - return empty; - }; - - /** - * Check if all cells in the row declared by the `row` argument are empty. - * - * @memberof Core# - * @function isEmptyRow - * @param {Number} row Row index. - * @returns {Boolean} `true` if the row at the given `row` is empty, `false` otherwise. - */ - this.isEmptyRow = function (row) { - return priv.settings.isEmptyRow.call(instance, row); - }; - - /** - * Check if all cells in the the column declared by the `col` argument are empty. - * - * @memberof Core# - * @function isEmptyCol - * @param {Number} col Column index. - * @returns {Boolean} `true` if the column at the given `col` is empty, `false` otherwise. - */ - this.isEmptyCol = function (col) { - return priv.settings.isEmptyCol.call(instance, col); - }; - - /** - * Select cell specified by `row` and `col` values or a range of cells finishing at `endRow`, `endCol`. - * By default, viewport will be scrolled to selection. - * After the `selectCell` method had finished, the instance will be listening to keyboard input on the document. - * - * @memberof Core# - * @function selectCell - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {Number} [endRow] Visual end row index (if selecting a range). - * @param {Number} [endCol] Visual end column index (if selecting a range). - * @param {Boolean} [scrollToCell=true] If `true`, the viewport will be scrolled to the selection. - * @param {Boolean} [changeListener=true] If `false`, Handsontable will not change keyboard events listener to himself. - * @returns {Boolean} `true` if selection was successful, `false` otherwise. - */ - this.selectCell = function (row, col, endRow, endCol, scrollToCell, changeListener) { - var coords; - - changeListener = (0, _mixed.isUndefined)(changeListener) || changeListener === true; - - if (typeof row !== 'number' || row < 0 || row >= instance.countRows()) { - return false; - } - if (typeof col !== 'number' || col < 0 || col >= instance.countCols()) { - return false; - } - if ((0, _mixed.isDefined)(endRow)) { - if (typeof endRow !== 'number' || endRow < 0 || endRow >= instance.countRows()) { - return false; - } - if (typeof endCol !== 'number' || endCol < 0 || endCol >= instance.countCols()) { - return false; - } - } - coords = new _src.CellCoords(row, col); - priv.selRange = new _src.CellRange(coords, coords, coords); - - if (changeListener) { - instance.listen(); - } - - if ((0, _mixed.isUndefined)(endRow)) { - selection.setRangeEnd(priv.selRange.from, scrollToCell); - } else { - selection.setRangeEnd(new _src.CellCoords(endRow, endCol), scrollToCell); - } - instance.selection.finish(); - - return true; - }; - - /** - * Select the cell specified by the `row` and `prop` arguments, or a range finishing at `endRow`, `endProp`. - * By default, viewport will be scrolled to selection. - * - * @memberof Core# - * @function selectCellByProp - * @param {Number} row Visual row index. - * @param {String} prop Property name. - * @param {Number} [endRow] visual end row index (if selecting a range). - * @param {String} [endProp] End property name (if selecting a range). - * @param {Boolean} [scrollToCell=true] If `true`, viewport will be scrolled to the selection. - * @returns {Boolean} `true` if selection was successful, `false` otherwise. - */ - this.selectCellByProp = function (row, prop, endRow, endProp, scrollToCell) { - var _instance5; - - arguments[1] = datamap.propToCol(arguments[1]); - - if ((0, _mixed.isDefined)(arguments[3])) { - arguments[3] = datamap.propToCol(arguments[3]); - } - - return (_instance5 = instance).selectCell.apply(_instance5, arguments); - }; - - /** - * Deselects the current cell selection on grid. - * - * @memberof Core# - * @function deselectCell - */ - this.deselectCell = function () { - selection.deselect(); - }; - - /** - * Scroll viewport to coords specified by the `row` and `column` arguments. - * - * @since 0.24.3 - * @memberof Core# - * @function scrollViewportTo - * @param {Number} [row] Visual row index. - * @param {Number} [column] Visual column index. - * @param {Boolean} [snapToBottom = false] If `true`, viewport is scrolled to show the cell on the bottom of the table. - * @param {Boolean} [snapToRight = false] If `true`, viewport is scrolled to show the cell on the right side of the table. - * @returns {Boolean} `true` if scroll was successful, `false` otherwise. - */ - this.scrollViewportTo = function (row, column) { - var snapToBottom = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var snapToRight = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - if (row !== void 0 && (row < 0 || row >= instance.countRows())) { - return false; - } - if (column !== void 0 && (column < 0 || column >= instance.countCols())) { - return false; - } - - var result = false; - - if (row !== void 0 && column !== void 0) { - instance.view.wt.wtOverlays.topOverlay.scrollTo(row, snapToBottom); - instance.view.wt.wtOverlays.leftOverlay.scrollTo(column, snapToRight); - - result = true; - } - if (typeof row === 'number' && typeof column !== 'number') { - instance.view.wt.wtOverlays.topOverlay.scrollTo(row, snapToBottom); - - result = true; - } - if (typeof column === 'number' && typeof row !== 'number') { - instance.view.wt.wtOverlays.leftOverlay.scrollTo(column, snapToRight); - - result = true; - } - - return result; - }; - - /** - * Removes grid from the DOM. - * - * @memberof Core# - * @function destroy - * @fires Hooks#afterDestroy - */ - this.destroy = function () { - - instance._clearTimeouts(); - if (instance.view) { - // in case HT is destroyed before initialization has finished - instance.view.destroy(); - } - if (dataSource) { - dataSource.destroy(); - } - dataSource = null; - - (0, _element.empty)(instance.rootElement); - eventManager.destroy(); - - instance.runHooks('afterDestroy'); - _pluginHooks2.default.getSingleton().destroy(instance); - - for (var i in instance) { - if ((0, _object.hasOwnProperty)(instance, i)) { - // replace instance methods with post mortem - if ((0, _function.isFunction)(instance[i])) { - instance[i] = postMortem; - } else if (i !== 'guid') { - // replace instance properties with null (restores memory) - // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests - instance[i] = null; - } - } - } - - // replace private properties with null (restores memory) - // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests - if (datamap) { - datamap.destroy(); - } - datamap = null; - priv = null; - grid = null; - selection = null; - editorManager = null; - instance = null; - GridSettings = null; - }; - - /** - * Replacement for all methods after Handsotnable was destroyed. - * - * @private - */ - function postMortem() { - throw new Error('This method cannot be called because this Handsontable instance has been destroyed'); - } - - /** - * Returns the active editor object. - * - * @memberof Core# - * @function getActiveEditor - * @returns {Object} The active editor object. - */ - this.getActiveEditor = function () { - return editorManager.getActiveEditor(); - }; - - /** - * Returns plugin instance using the plugin name provided. - * - * @memberof Core# - * @function getPlugin - * @param {String} pluginName The plugin name. - * @returns {*} The plugin instance. - * @since 0.15.0 - */ - this.getPlugin = function (pluginName) { - return (0, _plugins.getPlugin)(this, pluginName); - }; - - /** - * Returns the Handsontable instance. - * - * @memberof Core# - * @function getInstance - * @returns {Handsontable} The Handsontable instance. - */ - this.getInstance = function () { - return instance; - }; - - /** - * Adds listener to the specified hook name (only for this Handsontable instance). - * - * @memberof Core# - * @function addHook - * @see Hooks#add - * @param {String} key Hook name. - * @param {Function|Array} callback Function or array of Functions. - * - * @example - * ```js - * hot.addHook('beforeInit', myCallback); - * ``` - */ - this.addHook = function (key, callback) { - _pluginHooks2.default.getSingleton().add(key, callback, instance); - }; - - /** - * Check if for a specified hook name there are added listeners (only for this Handsontable instance). - * - * @memberof Core# - * @function hasHook - * @see Hooks#has - * @param {String} key Hook name - * @return {Boolean} - * - * @example - * ```js - * var hasBeforeInitListeners = hot.hasHook('beforeInit'); - * ``` - */ - this.hasHook = function (key) { - return _pluginHooks2.default.getSingleton().has(key, instance); - }; - - /** - * Adds listener to specified hook name (only for this Handsontable instance). - * After the listener is triggered, it will be automatically removed. - * - * @memberof Core# - * @function addHookOnce - * @see Hooks#once - * @param {String} key Hook name. - * @param {Function|Array} callback Function or array of Functions. - * - * @example - * ```js - * hot.addHookOnce('beforeInit', myCallback); - * ``` - */ - this.addHookOnce = function (key, callback) { - _pluginHooks2.default.getSingleton().once(key, callback, instance); - }; - - /** - * Removes the hook listener previously registered with {@link Core#addHook}. - * - * @memberof Core# - * @function removeHook - * @see Hooks#remove - * @param {String} key Hook name. - * @param {Function} callback Function which have been registered via {@link Core#addHook}. - * - * @example - * ```js - * hot.removeHook('beforeInit', myCallback); - * ``` - */ - this.removeHook = function (key, callback) { - _pluginHooks2.default.getSingleton().remove(key, callback, instance); - }; - - /** - * Run the callbacks for the hook provided in the `key` argument using the parameters given in the other arguments. - * - * @memberof Core# - * @function runHooks - * @see Hooks#run - * @param {String} key Hook name. - * @param {*} [p1] Argument passed to the callback. - * @param {*} [p2] Argument passed to the callback. - * @param {*} [p3] Argument passed to the callback. - * @param {*} [p4] Argument passed to the callback. - * @param {*} [p5] Argument passed to the callback. - * @param {*} [p6] Argument passed to the callback. - * @returns {*} - * - * @example - * ```js - * hot.runHooks('beforeInit'); - * ``` - */ - this.runHooks = function (key, p1, p2, p3, p4, p5, p6) { - return _pluginHooks2.default.getSingleton().run(instance, key, p1, p2, p3, p4, p5, p6); - }; - - this.timeouts = []; - - /** - * Sets timeout. Purpose of this method is to clear all known timeouts when `destroy` method is called. - * - * @param {*} handle - * @private - */ - this._registerTimeout = function (handle) { - this.timeouts.push(handle); - }; - - /** - * Clears all known timeouts. - * - * @private - */ - this._clearTimeouts = function () { - for (var i = 0, ilen = this.timeouts.length; i < ilen; i++) { - clearTimeout(this.timeouts[i]); - } - }; - - /** - * Handsontable version - * - * @type {String} - */ - // this.version = Handsontable.version; - - _pluginHooks2.default.getSingleton().run(instance, 'construct'); -}; - -/***/ }), -/* 64 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.spreadsheetColumnLabel = spreadsheetColumnLabel; -exports.spreadsheetColumnIndex = spreadsheetColumnIndex; -exports.createSpreadsheetData = createSpreadsheetData; -exports.createSpreadsheetObjectData = createSpreadsheetObjectData; -exports.createEmptySpreadsheetData = createEmptySpreadsheetData; -exports.translateRowsToColumns = translateRowsToColumns; -exports.cellMethodLookupFactory = cellMethodLookupFactory; - -var _cellTypes = __webpack_require__(62); - -var _object = __webpack_require__(1); - -var COLUMN_LABEL_BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; -var COLUMN_LABEL_BASE_LENGTH = COLUMN_LABEL_BASE.length; - -/** - * Generates spreadsheet-like column names: A, B, C, ..., Z, AA, AB, etc. - * - * @param {Number} index Column index. - * @returns {String} - */ -function spreadsheetColumnLabel(index) { - var dividend = index + 1; - var columnLabel = ''; - var modulo = void 0; - - while (dividend > 0) { - modulo = (dividend - 1) % COLUMN_LABEL_BASE_LENGTH; - columnLabel = String.fromCharCode(65 + modulo) + columnLabel; - dividend = parseInt((dividend - modulo) / COLUMN_LABEL_BASE_LENGTH, 10); - } - - return columnLabel; -} - -/** - * Generates spreadsheet-like column index from theirs labels: A, B, C ...., Z, AA, AB, etc. - * - * @param {String} label Column label. - * @returns {Number} - */ -function spreadsheetColumnIndex(label) { - var result = 0; - - if (label) { - for (var i = 0, j = label.length - 1; i < label.length; i += 1, j -= 1) { - result += Math.pow(COLUMN_LABEL_BASE_LENGTH, j) * (COLUMN_LABEL_BASE.indexOf(label[i]) + 1); - } - } - --result; - - return result; -} - -/** - * Creates 2D array of Excel-like values "A1", "A2", ... - * - * @param {Number} rows Number of rows to generate. - * @param {Number} columns Number of columns to generate. - * @returns {Array} - */ -function createSpreadsheetData() { - var rows = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100; - var columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4; - - var _rows = [], - i, - j; - - for (i = 0; i < rows; i++) { - var row = []; - - for (j = 0; j < columns; j++) { - row.push(spreadsheetColumnLabel(j) + (i + 1)); - } - _rows.push(row); - } - - return _rows; -} - -/** - * Creates 2D array of Excel-like values "A1", "A2", as an array of objects. - * - * @param {Number} rows Number of rows to generate. - * @param {Number} colCount Number of columns to generate. - * @returns {Array} - */ -function createSpreadsheetObjectData() { - var rows = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100; - var colCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4; - - var _rows = [], - i, - j; - - for (i = 0; i < rows; i++) { - var row = {}; - - for (j = 0; j < colCount; j++) { - row['prop' + j] = spreadsheetColumnLabel(j) + (i + 1); - } - _rows.push(row); - } - - return _rows; -} - -/** - * Generates an empty data object. - * - * @param {Number} rows Number of rows to generate. - * @param {Number} columns Number of columns to generate - * @returns {Array} - */ -function createEmptySpreadsheetData(rows, columns) { - var data = []; - var row = void 0; - - for (var i = 0; i < rows; i++) { - row = []; - for (var j = 0; j < columns; j++) { - row.push(''); - } - data.push(row); - } - - return data; -} - -function translateRowsToColumns(input) { - var i, - ilen, - j, - jlen, - output = [], - olen = 0; - - for (i = 0, ilen = input.length; i < ilen; i++) { - for (j = 0, jlen = input[i].length; j < jlen; j++) { - if (j == olen) { - output.push([]); - olen++; - } - output[j].push(input[i][j]); - } - } - - return output; -} - -/** - * Factory that produces a function for searching methods (or any properties) which could be defined directly in - * table configuration or implicitly, within cell type definition. - * - * For example: renderer can be defined explicitly using "renderer" property in column configuration or it can be - * defined implicitly using "type" property. - * - * Methods/properties defined explicitly always takes precedence over those defined through "type". - * - * If the method/property is not found in an object, searching is continued recursively through prototype chain, until - * it reaches the Object.prototype. - * - * - * @param methodName {String} name of the method/property to search (i.e. 'renderer', 'validator', 'copyable') - * @param allowUndefined {Boolean} [optional] if false, the search is continued if methodName has not been found in cell "type" - * @returns {Function} - */ -function cellMethodLookupFactory(methodName, allowUndefined) { - - allowUndefined = typeof allowUndefined == 'undefined' ? true : allowUndefined; - - return function cellMethodLookup(row, col) { - return function getMethodFromProperties(properties) { - - if (!properties) { - return; // method not found - } else if ((0, _object.hasOwnProperty)(properties, methodName) && properties[methodName] !== void 0) { - // check if it is own and is not empty - return properties[methodName]; // method defined directly - } else if ((0, _object.hasOwnProperty)(properties, 'type') && properties.type) { - // check if it is own and is not empty - var type; - - if (typeof properties.type != 'string') { - throw new Error('Cell type must be a string '); - } - type = (0, _cellTypes.getCellType)(properties.type); - - if ((0, _object.hasOwnProperty)(type, methodName)) { - return type[methodName]; // method defined in type. - } else if (allowUndefined) { - return; // method does not defined in type (eg. validator), returns undefined - } - } - - return getMethodFromProperties(Object.getPrototypeOf(properties)); - }(typeof row == 'number' ? this.getCellMeta(row, col) : row); - }; -} - -/***/ }), -/* 65 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.columnFactory = columnFactory; - -var _object = __webpack_require__(1); - -/* eslint-disable import/prefer-default-export */ -/** - * Factory for columns constructors. - * - * @param {Object} GridSettings - * @param {Array} conflictList - * @return {Object} ColumnSettings - */ -function columnFactory(GridSettings, conflictList) { - function ColumnSettings() {}; - - (0, _object.inherit)(ColumnSettings, GridSettings); - - // Clear conflict settings - for (var i = 0, len = conflictList.length; i < len; i++) { - ColumnSettings.prototype[conflictList[i]] = void 0; - } - - return ColumnSettings; -} - -/***/ }), -/* 66 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _array = __webpack_require__(2); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class GhostTable - * @util - */ -var GhostTable = function () { - function GhostTable(hotInstance) { - _classCallCheck(this, GhostTable); - - /** - * Handsontable instance. - * - * @type {Core} - */ - this.hot = hotInstance; - /** - * Container element where every table will be injected. - * - * @type {HTMLElement|null} - */ - this.container = null; - /** - * Flag which determine is table was injected to DOM. - * - * @type {Boolean} - */ - this.injected = false; - /** - * Added rows collection. - * - * @type {Array} - */ - this.rows = []; - /** - * Added columns collection. - * - * @type {Array} - */ - this.columns = []; - /** - * Samples prepared for calculations. - * - * @type {Map} - * @default {null} - */ - this.samples = null; - /** - * Ghost table settings. - * - * @type {Object} - * @default {Object} - */ - this.settings = { - useHeaders: true - }; - } - - /** - * Add row. - * - * @param {Number} row Row index. - * @param {Map} samples Samples Map object. - */ - - - _createClass(GhostTable, [{ - key: 'addRow', - value: function addRow(row, samples) { - if (this.columns.length) { - throw new Error('Doesn\'t support multi-dimensional table'); - } - if (!this.rows.length) { - this.container = this.createContainer(this.hot.rootElement.className); - } - var rowObject = { row: row }; - this.rows.push(rowObject); - - this.samples = samples; - this.table = this.createTable(this.hot.table.className); - this.table.colGroup.appendChild(this.createColGroupsCol()); - this.table.tr.appendChild(this.createRow(row)); - this.container.container.appendChild(this.table.fragment); - - rowObject.table = this.table.table; - } - - /** - * Add a row consisting of the column headers. - */ - - }, { - key: 'addColumnHeadersRow', - value: function addColumnHeadersRow(samples) { - if (this.hot.getColHeader(0) != null) { - var rowObject = { row: -1 }; - this.rows.push(rowObject); - - this.container = this.createContainer(this.hot.rootElement.className); - - this.samples = samples; - this.table = this.createTable(this.hot.table.className); - this.table.colGroup.appendChild(this.createColGroupsCol()); - this.table.tHead.appendChild(this.createColumnHeadersRow()); - this.container.container.appendChild(this.table.fragment); - - rowObject.table = this.table.table; - } - } - - /** - * Add column. - * - * @param {Number} column Column index. - * @param {Map} samples Samples Map object. - */ - - }, { - key: 'addColumn', - value: function addColumn(column, samples) { - if (this.rows.length) { - throw new Error('Doesn\'t support multi-dimensional table'); - } - if (!this.columns.length) { - this.container = this.createContainer(this.hot.rootElement.className); - } - var columnObject = { col: column }; - this.columns.push(columnObject); - - this.samples = samples; - this.table = this.createTable(this.hot.table.className); - - if (this.getSetting('useHeaders') && this.hot.getColHeader(column) !== null) { - this.hot.view.appendColHeader(column, this.table.th); - } - this.table.tBody.appendChild(this.createCol(column)); - this.container.container.appendChild(this.table.fragment); - - columnObject.table = this.table.table; - } - - /** - * Get calculated heights. - * - * @param {Function} callback Callback which will be fired for each calculated row. - */ - - }, { - key: 'getHeights', - value: function getHeights(callback) { - if (!this.injected) { - this.injectTable(); - } - (0, _array.arrayEach)(this.rows, function (row) { - // -1 <- reduce border-top from table - callback(row.row, (0, _element.outerHeight)(row.table) - 1); - }); - } - - /** - * Get calculated widths. - * - * @param {Function} callback Callback which will be fired for each calculated column. - */ - - }, { - key: 'getWidths', - value: function getWidths(callback) { - if (!this.injected) { - this.injectTable(); - } - (0, _array.arrayEach)(this.columns, function (column) { - callback(column.col, (0, _element.outerWidth)(column.table)); - }); - } - - /** - * Set the Ghost Table settings to the provided object. - * - * @param {Object} settings New Ghost Table Settings - */ - - }, { - key: 'setSettings', - value: function setSettings(settings) { - this.settings = settings; - } - - /** - * Set a single setting of the Ghost Table. - * - * @param {String} name Setting name. - * @param {*} value Setting value. - */ - - }, { - key: 'setSetting', - value: function setSetting(name, value) { - if (!this.settings) { - this.settings = {}; - } - - this.settings[name] = value; - } - - /** - * Get the Ghost Table settings. - * - * @returns {Object|null} - */ - - }, { - key: 'getSettings', - value: function getSettings() { - return this.settings; - } - - /** - * Get a single Ghost Table setting. - * - * @param {String} name - * @returns {Boolean|null} - */ - - }, { - key: 'getSetting', - value: function getSetting(name) { - if (this.settings) { - return this.settings[name]; - } - return null; - } - - /** - * Create colgroup col elements. - * - * @returns {DocumentFragment} - */ - - }, { - key: 'createColGroupsCol', - value: function createColGroupsCol() { - var _this = this; - - var d = document; - var fragment = d.createDocumentFragment(); - - if (this.hot.hasRowHeaders()) { - fragment.appendChild(this.createColElement(-1)); - } - - this.samples.forEach(function (sample) { - (0, _array.arrayEach)(sample.strings, function (string) { - fragment.appendChild(_this.createColElement(string.col)); - }); - }); - - return fragment; - } - - /** - * Create table row element. - * - * @param {Number} row Row index. - * @returns {DocumentFragment} Returns created table row elements. - */ - - }, { - key: 'createRow', - value: function createRow(row) { - var _this2 = this; - - var d = document; - var fragment = d.createDocumentFragment(); - var th = d.createElement('th'); - - if (this.hot.hasRowHeaders()) { - this.hot.view.appendRowHeader(row, th); - - fragment.appendChild(th); - } - - this.samples.forEach(function (sample) { - (0, _array.arrayEach)(sample.strings, function (string) { - var column = string.col; - var cellProperties = _this2.hot.getCellMeta(row, column); - - cellProperties.col = column; - cellProperties.row = row; - - var renderer = _this2.hot.getCellRenderer(cellProperties); - var td = d.createElement('td'); - - renderer(_this2.hot, td, row, column, _this2.hot.colToProp(column), string.value, cellProperties); - fragment.appendChild(td); - }); - }); - - return fragment; - } - }, { - key: 'createColumnHeadersRow', - value: function createColumnHeadersRow() { - var _this3 = this; - - var d = document; - var fragment = d.createDocumentFragment(); - - if (this.hot.hasRowHeaders()) { - var th = d.createElement('th'); - this.hot.view.appendColHeader(-1, th); - fragment.appendChild(th); - } - - this.samples.forEach(function (sample) { - (0, _array.arrayEach)(sample.strings, function (string) { - var column = string.col; - - var th = d.createElement('th'); - - _this3.hot.view.appendColHeader(column, th); - fragment.appendChild(th); - }); - }); - - return fragment; - } - - /** - * Create table column elements. - * - * @param {Number} column Column index. - * @returns {DocumentFragment} Returns created column table column elements. - */ - - }, { - key: 'createCol', - value: function createCol(column) { - var _this4 = this; - - var d = document; - var fragment = d.createDocumentFragment(); - - this.samples.forEach(function (sample) { - (0, _array.arrayEach)(sample.strings, function (string) { - var row = string.row; - var cellProperties = _this4.hot.getCellMeta(row, column); - - cellProperties.col = column; - cellProperties.row = row; - - var renderer = _this4.hot.getCellRenderer(cellProperties); - var td = d.createElement('td'); - var tr = d.createElement('tr'); - - renderer(_this4.hot, td, row, column, _this4.hot.colToProp(column), string.value, cellProperties); - tr.appendChild(td); - fragment.appendChild(tr); - }); - }); - - return fragment; - } - - /** - * Remove table from document and reset internal state. - */ - - }, { - key: 'clean', - value: function clean() { - this.rows.length = 0; - this.rows[-1] = void 0; - this.columns.length = 0; - - if (this.samples) { - this.samples.clear(); - } - this.samples = null; - this.removeTable(); - } - - /** - * Inject generated table into document. - * - * @param {HTMLElement} [parent=null] - */ - - }, { - key: 'injectTable', - value: function injectTable() { - var parent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - if (!this.injected) { - (parent || this.hot.rootElement).appendChild(this.container.fragment); - this.injected = true; - } - } - - /** - * Remove table from document. - */ - - }, { - key: 'removeTable', - value: function removeTable() { - if (this.injected && this.container.container.parentNode) { - this.container.container.parentNode.removeChild(this.container.container); - this.container = null; - this.injected = false; - } - } - - /** - * Create col element. - * - * @param {Number} column Column index. - * @returns {HTMLElement} - */ - - }, { - key: 'createColElement', - value: function createColElement(column) { - var d = document; - var col = d.createElement('col'); - - col.style.width = this.hot.view.wt.wtTable.getStretchedColumnWidth(column) + 'px'; - - return col; - } - - /** - * Create table element. - * - * @param {String} className - * @returns {Object} - */ - - }, { - key: 'createTable', - value: function createTable() { - var className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - - var d = document; - var fragment = d.createDocumentFragment(); - var table = d.createElement('table'); - var tHead = d.createElement('thead'); - var tBody = d.createElement('tbody'); - var colGroup = d.createElement('colgroup'); - var tr = d.createElement('tr'); - var th = d.createElement('th'); - - if (this.isVertical()) { - table.appendChild(colGroup); - } - if (this.isHorizontal()) { - tr.appendChild(th); - tHead.appendChild(tr); - table.style.tableLayout = 'auto'; - table.style.width = 'auto'; - } - table.appendChild(tHead); - - if (this.isVertical()) { - tBody.appendChild(tr); - } - table.appendChild(tBody); - (0, _element.addClass)(table, className); - fragment.appendChild(table); - - return { fragment: fragment, table: table, tHead: tHead, tBody: tBody, colGroup: colGroup, tr: tr, th: th }; - } - - /** - * Create container for tables. - * - * @param {String} className - * @returns {Object} - */ - - }, { - key: 'createContainer', - value: function createContainer() { - var className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - - var d = document; - var fragment = d.createDocumentFragment(); - var container = d.createElement('div'); - - className = 'htGhostTable htAutoSize ' + className.trim(); - (0, _element.addClass)(container, className); - fragment.appendChild(container); - - return { fragment: fragment, container: container }; - } - - /** - * Checks if table is raised vertically (checking rows). - * - * @returns {Boolean} - */ - - }, { - key: 'isVertical', - value: function isVertical() { - return !!(this.rows.length && !this.columns.length); - } - - /** - * Checks if table is raised horizontally (checking columns). - * - * @returns {Boolean} - */ - - }, { - key: 'isHorizontal', - value: function isHorizontal() { - return !!(this.columns.length && !this.rows.length); - } - }]); - - return GhostTable; -}(); - -exports.default = GhostTable; - -/***/ }), -/* 67 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var addToUnscopables = __webpack_require__(37) - , step = __webpack_require__(167) - , Iterators = __webpack_require__(45) - , toIObject = __webpack_require__(23); - -// 22.1.3.4 Array.prototype.entries() -// 22.1.3.13 Array.prototype.keys() -// 22.1.3.29 Array.prototype.values() -// 22.1.3.30 Array.prototype[@@iterator]() -module.exports = __webpack_require__(166)(Array, 'Array', function(iterated, kind){ - this._t = toIObject(iterated); // target - this._i = 0; // next index - this._k = kind; // kind -// 22.1.5.2.1 %ArrayIteratorPrototype%.next() -}, function(){ - var O = this._t - , kind = this._k - , index = this._i++; - if(!O || index >= O.length){ - this._t = undefined; - return step(1); - } - if(kind == 'keys' )return step(0, index); - if(kind == 'values')return step(0, O[index]); - return step(0, [index, O[index]]); -}, 'values'); - -// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) -Iterators.Arguments = Iterators.Array; - -addToUnscopables('keys'); -addToUnscopables('values'); -addToUnscopables('entries'); - -/***/ }), -/* 68 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _coords = __webpack_require__(42); - -var _coords2 = _interopRequireDefault(_coords); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * A cell range is a set of exactly two CellCoords (that can be the same or different) - * - * @class CellRange - */ -var CellRange = function () { - /** - * @param {CellCoords} highlight Used to draw bold border around a cell where selection was - * started and to edit the cell when you press Enter - * @param {CellCoords} from Usually the same as highlight, but in Excel there is distinction - one can change - * highlight within a selection - * @param {CellCoords} to End selection - */ - function CellRange(highlight, from, to) { - _classCallCheck(this, CellRange); - - this.highlight = highlight; - this.from = from; - this.to = to; - } - - /** - * Checks if given coords are valid in context of a given Walkontable instance - * - * @param {Walkontable} wotInstance - * @returns {Boolean} - */ - - - _createClass(CellRange, [{ - key: 'isValid', - value: function isValid(wotInstance) { - return this.from.isValid(wotInstance) && this.to.isValid(wotInstance); - } - - /** - * Checks if this cell range is restricted to one cell - * - * @returns {Boolean} - */ - - }, { - key: 'isSingle', - value: function isSingle() { - return this.from.row === this.to.row && this.from.col === this.to.col; - } - - /** - * Returns selected range height (in number of rows) - * - * @returns {Number} - */ - - }, { - key: 'getHeight', - value: function getHeight() { - return Math.max(this.from.row, this.to.row) - Math.min(this.from.row, this.to.row) + 1; - } - - /** - * Returns selected range width (in number of columns) - * - * @returns {Number} - */ - - }, { - key: 'getWidth', - value: function getWidth() { - return Math.max(this.from.col, this.to.col) - Math.min(this.from.col, this.to.col) + 1; - } - - /** - * Checks if given cell coords is within `from` and `to` cell coords of this range - * - * @param {CellCoords} cellCoords - * @returns {Boolean} - */ - - }, { - key: 'includes', - value: function includes(cellCoords) { - var row = cellCoords.row, - col = cellCoords.col; - - var topLeft = this.getTopLeftCorner(); - var bottomRight = this.getBottomRightCorner(); - - return topLeft.row <= row && bottomRight.row >= row && topLeft.col <= col && bottomRight.col >= col; - } - - /** - * Checks if given range is within of this range - * - * @param {CellRange} testedRange - * @returns {Boolean} - */ - - }, { - key: 'includesRange', - value: function includesRange(testedRange) { - return this.includes(testedRange.getTopLeftCorner()) && this.includes(testedRange.getBottomRightCorner()); - } - - /** - * Checks if given range is equal to this range - * - * @param {CellRange} testedRange - * @returns {Boolean} - */ - - }, { - key: 'isEqual', - value: function isEqual(testedRange) { - return Math.min(this.from.row, this.to.row) == Math.min(testedRange.from.row, testedRange.to.row) && Math.max(this.from.row, this.to.row) == Math.max(testedRange.from.row, testedRange.to.row) && Math.min(this.from.col, this.to.col) == Math.min(testedRange.from.col, testedRange.to.col) && Math.max(this.from.col, this.to.col) == Math.max(testedRange.from.col, testedRange.to.col); - } - - /** - * Checks if tested range overlaps with the range. - * Range A is considered to to be overlapping with range B if intersection of A and B or B and A is not empty. - * - * @param {CellRange} testedRange - * @returns {Boolean} - */ - - }, { - key: 'overlaps', - value: function overlaps(testedRange) { - return testedRange.isSouthEastOf(this.getTopLeftCorner()) && testedRange.isNorthWestOf(this.getBottomRightCorner()); - } - - /** - * @param {CellRange} testedCoords - * @returns {Boolean} - */ - - }, { - key: 'isSouthEastOf', - value: function isSouthEastOf(testedCoords) { - return this.getTopLeftCorner().isSouthEastOf(testedCoords) || this.getBottomRightCorner().isSouthEastOf(testedCoords); - } - - /** - * @param {CellRange} testedCoords - * @returns {Boolean} - */ - - }, { - key: 'isNorthWestOf', - value: function isNorthWestOf(testedCoords) { - return this.getTopLeftCorner().isNorthWestOf(testedCoords) || this.getBottomRightCorner().isNorthWestOf(testedCoords); - } - - /** - * Adds a cell to a range (only if exceeds corners of the range). Returns information if range was expanded - * - * @param {CellCoords} cellCoords - * @returns {Boolean} - */ - - }, { - key: 'expand', - value: function expand(cellCoords) { - var topLeft = this.getTopLeftCorner(); - var bottomRight = this.getBottomRightCorner(); - - if (cellCoords.row < topLeft.row || cellCoords.col < topLeft.col || cellCoords.row > bottomRight.row || cellCoords.col > bottomRight.col) { - this.from = new _coords2.default(Math.min(topLeft.row, cellCoords.row), Math.min(topLeft.col, cellCoords.col)); - this.to = new _coords2.default(Math.max(bottomRight.row, cellCoords.row), Math.max(bottomRight.col, cellCoords.col)); - - return true; - } - - return false; - } - - /** - * @param {CellRange} expandingRange - * @returns {Boolean} - */ - - }, { - key: 'expandByRange', - value: function expandByRange(expandingRange) { - if (this.includesRange(expandingRange) || !this.overlaps(expandingRange)) { - return false; - } - - var topLeft = this.getTopLeftCorner(); - var bottomRight = this.getBottomRightCorner(); - var topRight = this.getTopRightCorner(); - var bottomLeft = this.getBottomLeftCorner(); - - var expandingTopLeft = expandingRange.getTopLeftCorner(); - var expandingBottomRight = expandingRange.getBottomRightCorner(); - - var resultTopRow = Math.min(topLeft.row, expandingTopLeft.row); - var resultTopCol = Math.min(topLeft.col, expandingTopLeft.col); - var resultBottomRow = Math.max(bottomRight.row, expandingBottomRight.row); - var resultBottomCol = Math.max(bottomRight.col, expandingBottomRight.col); - - var finalFrom = new _coords2.default(resultTopRow, resultTopCol), - finalTo = new _coords2.default(resultBottomRow, resultBottomCol); - var isCorner = new CellRange(finalFrom, finalFrom, finalTo).isCorner(this.from, expandingRange), - onlyMerge = expandingRange.isEqual(new CellRange(finalFrom, finalFrom, finalTo)); - - if (isCorner && !onlyMerge) { - if (this.from.col > finalFrom.col) { - finalFrom.col = resultBottomCol; - finalTo.col = resultTopCol; - } - if (this.from.row > finalFrom.row) { - finalFrom.row = resultBottomRow; - finalTo.row = resultTopRow; - } - } - this.from = finalFrom; - this.to = finalTo; - - return true; - } - - /** - * @returns {String} - */ - - }, { - key: 'getDirection', - value: function getDirection() { - if (this.from.isNorthWestOf(this.to)) { - // NorthWest - SouthEast - return 'NW-SE'; - } else if (this.from.isNorthEastOf(this.to)) { - // NorthEast - SouthWest - return 'NE-SW'; - } else if (this.from.isSouthEastOf(this.to)) { - // SouthEast - NorthWest - return 'SE-NW'; - } else if (this.from.isSouthWestOf(this.to)) { - // SouthWest - NorthEast - return 'SW-NE'; - } - } - - /** - * @param {String} direction - */ - - }, { - key: 'setDirection', - value: function setDirection(direction) { - switch (direction) { - case 'NW-SE': - var _ref = [this.getTopLeftCorner(), this.getBottomRightCorner()]; - this.from = _ref[0]; - this.to = _ref[1]; - - break; - case 'NE-SW': - var _ref2 = [this.getTopRightCorner(), this.getBottomLeftCorner()]; - this.from = _ref2[0]; - this.to = _ref2[1]; - - break; - case 'SE-NW': - var _ref3 = [this.getBottomRightCorner(), this.getTopLeftCorner()]; - this.from = _ref3[0]; - this.to = _ref3[1]; - - break; - case 'SW-NE': - var _ref4 = [this.getBottomLeftCorner(), this.getTopRightCorner()]; - this.from = _ref4[0]; - this.to = _ref4[1]; - - break; - default: - break; - } - } - - /** - * Get top left corner of this range - * - * @returns {CellCoords} - */ - - }, { - key: 'getTopLeftCorner', - value: function getTopLeftCorner() { - return new _coords2.default(Math.min(this.from.row, this.to.row), Math.min(this.from.col, this.to.col)); - } - - /** - * Get bottom right corner of this range - * - * @returns {CellCoords} - */ - - }, { - key: 'getBottomRightCorner', - value: function getBottomRightCorner() { - return new _coords2.default(Math.max(this.from.row, this.to.row), Math.max(this.from.col, this.to.col)); - } - - /** - * Get top right corner of this range - * - * @returns {CellCoords} - */ - - }, { - key: 'getTopRightCorner', - value: function getTopRightCorner() { - return new _coords2.default(Math.min(this.from.row, this.to.row), Math.max(this.from.col, this.to.col)); - } - - /** - * Get bottom left corner of this range - * - * @returns {CellCoords} - */ - - }, { - key: 'getBottomLeftCorner', - value: function getBottomLeftCorner() { - return new _coords2.default(Math.max(this.from.row, this.to.row), Math.min(this.from.col, this.to.col)); - } - - /** - * @param {CellCoords} coords - * @param {CellRange} expandedRange - * @returns {*} - */ - - }, { - key: 'isCorner', - value: function isCorner(coords, expandedRange) { - if (expandedRange) { - if (expandedRange.includes(coords)) { - if (this.getTopLeftCorner().isEqual(new _coords2.default(expandedRange.from.row, expandedRange.from.col)) || this.getTopRightCorner().isEqual(new _coords2.default(expandedRange.from.row, expandedRange.to.col)) || this.getBottomLeftCorner().isEqual(new _coords2.default(expandedRange.to.row, expandedRange.from.col)) || this.getBottomRightCorner().isEqual(new _coords2.default(expandedRange.to.row, expandedRange.to.col))) { - return true; - } - } - } - - return coords.isEqual(this.getTopLeftCorner()) || coords.isEqual(this.getTopRightCorner()) || coords.isEqual(this.getBottomLeftCorner()) || coords.isEqual(this.getBottomRightCorner()); - } - - /** - * @param {CellCoords} coords - * @param {CellRange} expandedRange - * @returns {CellCoords} - */ - - }, { - key: 'getOppositeCorner', - value: function getOppositeCorner(coords, expandedRange) { - if (!(coords instanceof _coords2.default)) { - return false; - } - - if (expandedRange) { - if (expandedRange.includes(coords)) { - if (this.getTopLeftCorner().isEqual(new _coords2.default(expandedRange.from.row, expandedRange.from.col))) { - return this.getBottomRightCorner(); - } - if (this.getTopRightCorner().isEqual(new _coords2.default(expandedRange.from.row, expandedRange.to.col))) { - return this.getBottomLeftCorner(); - } - if (this.getBottomLeftCorner().isEqual(new _coords2.default(expandedRange.to.row, expandedRange.from.col))) { - return this.getTopRightCorner(); - } - if (this.getBottomRightCorner().isEqual(new _coords2.default(expandedRange.to.row, expandedRange.to.col))) { - return this.getTopLeftCorner(); - } - } - } - - if (coords.isEqual(this.getBottomRightCorner())) { - return this.getTopLeftCorner(); - } else if (coords.isEqual(this.getTopLeftCorner())) { - return this.getBottomRightCorner(); - } else if (coords.isEqual(this.getTopRightCorner())) { - return this.getBottomLeftCorner(); - } else if (coords.isEqual(this.getBottomLeftCorner())) { - return this.getTopRightCorner(); - } - } - - /** - * @param {CellRange} range - * @returns {Array} - */ - - }, { - key: 'getBordersSharedWith', - value: function getBordersSharedWith(range) { - if (!this.includesRange(range)) { - return []; - } - - var thisBorders = { - top: Math.min(this.from.row, this.to.row), - bottom: Math.max(this.from.row, this.to.row), - left: Math.min(this.from.col, this.to.col), - right: Math.max(this.from.col, this.to.col) - }; - var rangeBorders = { - top: Math.min(range.from.row, range.to.row), - bottom: Math.max(range.from.row, range.to.row), - left: Math.min(range.from.col, range.to.col), - right: Math.max(range.from.col, range.to.col) - }; - var result = []; - - if (thisBorders.top == rangeBorders.top) { - result.push('top'); - } - if (thisBorders.right == rangeBorders.right) { - result.push('right'); - } - if (thisBorders.bottom == rangeBorders.bottom) { - result.push('bottom'); - } - if (thisBorders.left == rangeBorders.left) { - result.push('left'); - } - - return result; - } - - /** - * Get inner selected cell coords defined by this range - * - * @returns {Array} - */ - - }, { - key: 'getInner', - value: function getInner() { - var topLeft = this.getTopLeftCorner(); - var bottomRight = this.getBottomRightCorner(); - var out = []; - - for (var r = topLeft.row; r <= bottomRight.row; r++) { - for (var c = topLeft.col; c <= bottomRight.col; c++) { - if (!(this.from.row === r && this.from.col === c) && !(this.to.row === r && this.to.col === c)) { - out.push(new _coords2.default(r, c)); - } - } - } - return out; - } - - /** - * Get all selected cell coords defined by this range - * - * @returns {Array} - */ - - }, { - key: 'getAll', - value: function getAll() { - var topLeft = this.getTopLeftCorner(); - var bottomRight = this.getBottomRightCorner(); - var out = []; - - for (var r = topLeft.row; r <= bottomRight.row; r++) { - for (var c = topLeft.col; c <= bottomRight.col; c++) { - if (topLeft.row === r && topLeft.col === c) { - out.push(topLeft); - } else if (bottomRight.row === r && bottomRight.col === c) { - out.push(bottomRight); - } else { - out.push(new _coords2.default(r, c)); - } - } - } - - return out; - } - - /** - * Runs a callback function against all cells in the range. You can break the iteration by returning - * `false` in the callback function - * - * @param callback {Function} - */ - - }, { - key: 'forAll', - value: function forAll(callback) { - var topLeft = this.getTopLeftCorner(); - var bottomRight = this.getBottomRightCorner(); - - for (var r = topLeft.row; r <= bottomRight.row; r++) { - for (var c = topLeft.col; c <= bottomRight.col; c++) { - var breakIteration = callback(r, c); - - if (breakIteration === false) { - return; - } - } - } - } - }]); - - return CellRange; -}(); - -exports.default = CellRange; - -/***/ }), -/* 69 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _array = __webpack_require__(2); - -var _object = __webpack_require__(1); - -var MIXIN_NAME = 'localHooks'; - -/** - * Mixin object to extend objects functionality for local hooks. - * - * @type {Object} - */ -var localHooks = { - /** - * Internal hooks storage. - */ - _localHooks: Object.create(null), - - /** - * Add hook to the collection. - * - * @param {String} key Hook name. - * @param {Function} callback Hook callback - */ - addLocalHook: function addLocalHook(key, callback) { - if (!this._localHooks[key]) { - this._localHooks[key] = []; - } - this._localHooks[key].push(callback); - }, - - - /** - * Run hooks. - * - * @param {String} key Hook name. - * @param {*} params - */ - runLocalHooks: function runLocalHooks(key) { - var _this = this; - - for (var _len = arguments.length, params = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - params[_key - 1] = arguments[_key]; - } - - if (this._localHooks[key]) { - (0, _array.arrayEach)(this._localHooks[key], function (callback) { - return callback.apply(_this, params); - }); - } - }, - - - /** - * Clear all added hooks. - */ - clearLocalHooks: function clearLocalHooks() { - this._localHooks = {}; - } -}; - -(0, _object.defineGetter)(localHooks, 'MIXIN_NAME', MIXIN_NAME, { - writable: false, - enumerable: false -}); - -exports.default = localHooks; - -/***/ }), -/* 70 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.ITEMS = exports.UNDO = exports.SEPARATOR = exports.ROW_BELOW = exports.ROW_ABOVE = exports.REMOVE_ROW = exports.REMOVE_COLUMN = exports.REDO = exports.READ_ONLY = exports.COLUMN_RIGHT = exports.COLUMN_LEFT = exports.CLEAR_COLUMN = exports.ALIGNMENT = undefined; - -var _predefinedItems2; - -var _alignment = __webpack_require__(223); - -Object.defineProperty(exports, 'ALIGNMENT', { - enumerable: true, - get: function get() { - return _alignment.KEY; - } -}); - -var _clearColumn = __webpack_require__(224); - -Object.defineProperty(exports, 'CLEAR_COLUMN', { - enumerable: true, - get: function get() { - return _clearColumn.KEY; - } -}); - -var _columnLeft = __webpack_require__(225); - -Object.defineProperty(exports, 'COLUMN_LEFT', { - enumerable: true, - get: function get() { - return _columnLeft.KEY; - } -}); - -var _columnRight = __webpack_require__(226); - -Object.defineProperty(exports, 'COLUMN_RIGHT', { - enumerable: true, - get: function get() { - return _columnRight.KEY; - } -}); - -var _readOnly = __webpack_require__(227); - -Object.defineProperty(exports, 'READ_ONLY', { - enumerable: true, - get: function get() { - return _readOnly.KEY; - } -}); - -var _redo = __webpack_require__(228); - -Object.defineProperty(exports, 'REDO', { - enumerable: true, - get: function get() { - return _redo.KEY; - } -}); - -var _removeColumn = __webpack_require__(229); - -Object.defineProperty(exports, 'REMOVE_COLUMN', { - enumerable: true, - get: function get() { - return _removeColumn.KEY; - } -}); - -var _removeRow = __webpack_require__(230); - -Object.defineProperty(exports, 'REMOVE_ROW', { - enumerable: true, - get: function get() { - return _removeRow.KEY; - } -}); - -var _rowAbove = __webpack_require__(231); - -Object.defineProperty(exports, 'ROW_ABOVE', { - enumerable: true, - get: function get() { - return _rowAbove.KEY; - } -}); - -var _rowBelow = __webpack_require__(232); - -Object.defineProperty(exports, 'ROW_BELOW', { - enumerable: true, - get: function get() { - return _rowBelow.KEY; - } -}); - -var _separator = __webpack_require__(71); - -Object.defineProperty(exports, 'SEPARATOR', { - enumerable: true, - get: function get() { - return _separator.KEY; - } -}); - -var _undo = __webpack_require__(233); - -Object.defineProperty(exports, 'UNDO', { - enumerable: true, - get: function get() { - return _undo.KEY; - } -}); -exports.predefinedItems = predefinedItems; -exports.addItem = addItem; - -var _object = __webpack_require__(1); - -var _alignment2 = _interopRequireDefault(_alignment); - -var _clearColumn2 = _interopRequireDefault(_clearColumn); - -var _columnLeft2 = _interopRequireDefault(_columnLeft); - -var _columnRight2 = _interopRequireDefault(_columnRight); - -var _readOnly2 = _interopRequireDefault(_readOnly); - -var _redo2 = _interopRequireDefault(_redo); - -var _removeColumn2 = _interopRequireDefault(_removeColumn); - -var _removeRow2 = _interopRequireDefault(_removeRow); - -var _rowAbove2 = _interopRequireDefault(_rowAbove); - -var _rowBelow2 = _interopRequireDefault(_rowBelow); - -var _separator2 = _interopRequireDefault(_separator); - -var _undo2 = _interopRequireDefault(_undo); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var ITEMS = exports.ITEMS = [_rowAbove.KEY, _rowBelow.KEY, _columnLeft.KEY, _columnRight.KEY, _clearColumn.KEY, _removeRow.KEY, _removeColumn.KEY, _undo.KEY, _redo.KEY, _readOnly.KEY, _alignment.KEY, _separator.KEY]; - -var _predefinedItems = (_predefinedItems2 = {}, _defineProperty(_predefinedItems2, _separator.KEY, _separator2.default), _defineProperty(_predefinedItems2, _rowAbove.KEY, _rowAbove2.default), _defineProperty(_predefinedItems2, _rowBelow.KEY, _rowBelow2.default), _defineProperty(_predefinedItems2, _columnLeft.KEY, _columnLeft2.default), _defineProperty(_predefinedItems2, _columnRight.KEY, _columnRight2.default), _defineProperty(_predefinedItems2, _clearColumn.KEY, _clearColumn2.default), _defineProperty(_predefinedItems2, _removeRow.KEY, _removeRow2.default), _defineProperty(_predefinedItems2, _removeColumn.KEY, _removeColumn2.default), _defineProperty(_predefinedItems2, _undo.KEY, _undo2.default), _defineProperty(_predefinedItems2, _redo.KEY, _redo2.default), _defineProperty(_predefinedItems2, _readOnly.KEY, _readOnly2.default), _defineProperty(_predefinedItems2, _alignment.KEY, _alignment2.default), _predefinedItems2); - -/** - * Gets new object with all predefined menu items. - * - * @returns {Object} - */ -function predefinedItems() { - var items = {}; - - (0, _object.objectEach)(_predefinedItems, function (itemFactory, key) { - items[key] = itemFactory(); - }); - - return items; -} - -/** - * Add new predefined menu item to the collection. - * - * @param {String} key Menu command id. - * @param {Object} item Object command descriptor. - */ -function addItem(key, item) { - if (ITEMS.indexOf(key) === -1) { - _predefinedItems[key] = item; - } -} - -/***/ }), -/* 71 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = separatorItem; -var KEY = exports.KEY = '---------'; - -function separatorItem() { - return { - name: KEY - }; -} - -/***/ }), -/* 72 */ -/***/ (function(module, exports) { - -module.exports = function(it){ - if(typeof it != 'function')throw TypeError(it + ' is not a function!'); - return it; -}; - -/***/ }), -/* 73 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $defineProperty = __webpack_require__(19) - , createDesc = __webpack_require__(40); - -module.exports = function(object, index, value){ - if(index in object)$defineProperty.f(object, index, createDesc(0, value)); - else object[index] = value; -}; - -/***/ }), -/* 74 */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(15) - , document = __webpack_require__(13).document - // in old IE typeof document.createElement is 'object' - , is = isObject(document) && isObject(document.createElement); -module.exports = function(it){ - return is ? document.createElement(it) : {}; -}; - -/***/ }), -/* 75 */ -/***/ (function(module, exports) { - -// IE 8- don't enum bug keys -module.exports = ( - 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' -).split(','); - -/***/ }), -/* 76 */ -/***/ (function(module, exports, __webpack_require__) { - -var MATCH = __webpack_require__(10)('match'); -module.exports = function(KEY){ - var re = /./; - try { - '/./'[KEY](re); - } catch(e){ - try { - re[MATCH] = false; - return !'/./'[KEY](re); - } catch(f){ /* empty */ } - } return true; -}; - -/***/ }), -/* 77 */ -/***/ (function(module, exports, __webpack_require__) { - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -var cof = __webpack_require__(38); -module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ - return cof(it) == 'String' ? it.split('') : Object(it); -}; - -/***/ }), -/* 78 */ -/***/ (function(module, exports, __webpack_require__) { - -var ITERATOR = __webpack_require__(10)('iterator') - , SAFE_CLOSING = false; - -try { - var riter = [7][ITERATOR](); - riter['return'] = function(){ SAFE_CLOSING = true; }; - Array.from(riter, function(){ throw 2; }); -} catch(e){ /* empty */ } - -module.exports = function(exec, skipClosing){ - if(!skipClosing && !SAFE_CLOSING)return false; - var safe = false; - try { - var arr = [7] - , iter = arr[ITERATOR](); - iter.next = function(){ return {done: safe = true}; }; - arr[ITERATOR] = function(){ return iter; }; - exec(arr); - } catch(e){ /* empty */ } - return safe; -}; - -/***/ }), -/* 79 */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) -var anObject = __webpack_require__(18) - , dPs = __webpack_require__(288) - , enumBugKeys = __webpack_require__(75) - , IE_PROTO = __webpack_require__(82)('IE_PROTO') - , Empty = function(){ /* empty */ } - , PROTOTYPE = 'prototype'; - -// Create object with fake `null` prototype: use iframe Object with cleared prototype -var createDict = function(){ - // Thrash, waste and sodomy: IE GC bug - var iframe = __webpack_require__(74)('iframe') - , i = enumBugKeys.length - , lt = '<' - , gt = '>' - , iframeDocument; - iframe.style.display = 'none'; - __webpack_require__(159).appendChild(iframe); - iframe.src = 'javascript:'; // eslint-disable-line no-script-url - // createDict = iframe.contentWindow.Object; - // html.removeChild(iframe); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); - iframeDocument.close(); - createDict = iframeDocument.F; - while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]]; - return createDict(); -}; - -module.exports = Object.create || function create(O, Properties){ - var result; - if(O !== null){ - Empty[PROTOTYPE] = anObject(O); - result = new Empty; - Empty[PROTOTYPE] = null; - // add "__proto__" for Object.getPrototypeOf polyfill - result[IE_PROTO] = O; - } else result = createDict(); - return Properties === undefined ? result : dPs(result, Properties); -}; - - -/***/ }), -/* 80 */ -/***/ (function(module, exports, __webpack_require__) { - -var pIE = __webpack_require__(47) - , createDesc = __webpack_require__(40) - , toIObject = __webpack_require__(23) - , toPrimitive = __webpack_require__(86) - , has = __webpack_require__(22) - , IE8_DOM_DEFINE = __webpack_require__(160) - , gOPD = Object.getOwnPropertyDescriptor; - -exports.f = __webpack_require__(21) ? gOPD : function getOwnPropertyDescriptor(O, P){ - O = toIObject(O); - P = toPrimitive(P, true); - if(IE8_DOM_DEFINE)try { - return gOPD(O, P); - } catch(e){ /* empty */ } - if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]); -}; - -/***/ }), -/* 81 */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) -var $keys = __webpack_require__(169) - , hiddenKeys = __webpack_require__(75).concat('length', 'prototype'); - -exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){ - return $keys(O, hiddenKeys); -}; - -/***/ }), -/* 82 */ -/***/ (function(module, exports, __webpack_require__) { - -var shared = __webpack_require__(83)('keys') - , uid = __webpack_require__(49); -module.exports = function(key){ - return shared[key] || (shared[key] = uid(key)); -}; - -/***/ }), -/* 83 */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(13) - , SHARED = '__core-js_shared__' - , store = global[SHARED] || (global[SHARED] = {}); -module.exports = function(key){ - return store[key] || (store[key] = {}); -}; - -/***/ }), -/* 84 */ -/***/ (function(module, exports, __webpack_require__) { - -// helper for String#{startsWith, endsWith, includes} -var isRegExp = __webpack_require__(164) - , defined = __webpack_require__(30); - -module.exports = function(that, searchString, NAME){ - if(isRegExp(searchString))throw TypeError('String#' + NAME + " doesn't accept regex!"); - return String(defined(that)); -}; - -/***/ }), -/* 85 */ -/***/ (function(module, exports, __webpack_require__) { - -var ctx = __webpack_require__(29) - , invoke = __webpack_require__(284) - , html = __webpack_require__(159) - , cel = __webpack_require__(74) - , global = __webpack_require__(13) - , process = global.process - , setTask = global.setImmediate - , clearTask = global.clearImmediate - , MessageChannel = global.MessageChannel - , counter = 0 - , queue = {} - , ONREADYSTATECHANGE = 'onreadystatechange' - , defer, channel, port; -var run = function(){ - var id = +this; - if(queue.hasOwnProperty(id)){ - var fn = queue[id]; - delete queue[id]; - fn(); - } -}; -var listener = function(event){ - run.call(event.data); -}; -// Node.js 0.9+ & IE10+ has setImmediate, otherwise: -if(!setTask || !clearTask){ - setTask = function setImmediate(fn){ - var args = [], i = 1; - while(arguments.length > i)args.push(arguments[i++]); - queue[++counter] = function(){ - invoke(typeof fn == 'function' ? fn : Function(fn), args); - }; - defer(counter); - return counter; - }; - clearTask = function clearImmediate(id){ - delete queue[id]; - }; - // Node.js 0.8- - if(__webpack_require__(38)(process) == 'process'){ - defer = function(id){ - process.nextTick(ctx(run, id, 1)); - }; - // Browsers with MessageChannel, includes WebWorkers - } else if(MessageChannel){ - channel = new MessageChannel; - port = channel.port2; - channel.port1.onmessage = listener; - defer = ctx(port.postMessage, port, 1); - // Browsers with postMessage, skip WebWorkers - // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' - } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){ - defer = function(id){ - global.postMessage(id + '', '*'); - }; - global.addEventListener('message', listener, false); - // IE8- - } else if(ONREADYSTATECHANGE in cel('script')){ - defer = function(id){ - html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){ - html.removeChild(this); - run.call(id); - }; - }; - // Rest old browsers - } else { - defer = function(id){ - setTimeout(ctx(run, id, 1), 0); - }; - } -} -module.exports = { - set: setTask, - clear: clearTask -}; - -/***/ }), -/* 86 */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.1 ToPrimitive(input [, PreferredType]) -var isObject = __webpack_require__(15); -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function(it, S){ - if(!isObject(it))return it; - var fn, val; - if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; - if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; - if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; - throw TypeError("Can't convert object to primitive value"); -}; - -/***/ }), -/* 87 */ -/***/ (function(module, exports) { - -module.exports = __WEBPACK_EXTERNAL_MODULE_87__; - -/***/ }), -/* 88 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _mixed = __webpack_require__(20); - -var _object = __webpack_require__(1); - -/** - * @alias Options - * @constructor - * @description - - * ## Constructor options - * - * Constructor options are applied using an object literal passed as a second argument to the Handsontable constructor. - * - * ```js - * var hot = new Handsontable(document.getElementById('example1'), { - * data: myArray, - * width: 400, - * height: 300 - * }); - * ``` - * - * --- - * ## Cascading configuration - * - * Handsontable 0.9 and newer is using *Cascading Configuration*, which is a fast way to provide configuration options - * for the entire table, including its columns and particular cells. - * - * Consider the following example: - * ```js - * var hot = new Handsontable(document.getElementById('example'), { - * readOnly: true, - * columns: [ - * {readOnly: false}, - * {}, - * {} - * ], - * cells: function (row, col, prop) { - * var cellProperties = {}; - * - * if (row === 0 && col === 0) { - * cellProperties.readOnly = true; - * } - * - * return cellProperties; - * } - * }); - * ``` - * - * The above notation will result in all TDs being *read only*, except for first column TDs which will be *editable*, except for the TD in top left corner which will still be *read only*. - * - * ### The Cascading Configuration model - * - * ##### 1. Constructor - * - * Configuration options that are provided using first-level `handsontable(container, {option: "value"})` and `updateSettings` method. - * - * ##### 2. Columns - * - * Configuration options that are provided using second-level object `handsontable(container, {columns: {option: "value"}]})` - * - * ##### 3. Cells - * - * Configuration options that are provided using second-level function `handsontable(container, {cells: function: (row, col, prop){ }})` - * - * --- - * ## Architecture performance - * - * The Cascading Configuration model is based on prototypical inheritance. It is much faster and memory efficient compared - * to the previous model that used jQuery extend. See: [http://jsperf.com/extending-settings](http://jsperf.com/extending-settings). - * - * --- - * __Important notice:__ In order for the data separation to work properly, make sure that each instance of Handsontable has a unique `id`. - */ -function DefaultSettings() {}; - -DefaultSettings.prototype = { - /** - * @description - * Initial data source that will be bound to the data grid __by reference__ (editing data grid alters the data source). - * Can be declared as an Array of Arrays, Array of Objects or a Function. - * - * See [Understanding binding as reference](http://docs.handsontable.com/tutorial-data-binding.html#page-reference). - * - * @type {Array|Function} - * @default undefined - */ - data: void 0, - - /** - * @description - * Defines the structure of a new row when data source is an array of objects. - * - * See [data-schema](http://docs.handsontable.com/tutorial-data-sources.html#page-data-schema) for examples. - * - * @type {Object} - * @default undefined - */ - dataSchema: void 0, - - /** - * Width of the grid. Can be a value or a function that returns a value. - * - * @type {Number|Function} - * @default undefined - */ - width: void 0, - - /** - * Height of the grid. Can be a number or a function that returns a number. - * - * @type {Number|Function} - * @default undefined - */ - height: void 0, - - /** - * @description - * Initial number of rows. - * - * __Notice:__ This option only has effect in Handsontable constructor and only if `data` option is not provided - * - * @type {Number} - * @default 5 - */ - startRows: 5, - - /** - * @description - * Initial number of columns. - * - * __Notice:__ This option only has effect in Handsontable constructor and only if `data` option is not provided - * - * @type {Number} - * @default 5 - */ - startCols: 5, - - /** - * Setting `true` or `false` will enable or disable the default row headers (1, 2, 3). - * You can also define an array `['One', 'Two', 'Three', ...]` or a function to define the headers. - * If a function is set the index of the row is passed as a parameter. - * - * @type {Boolean|Array|Function} - * @default null - * @example - * ```js - * ... - * // as boolean - * rowHeaders: true, - * ... - * - * ... - * // as array - * rowHeaders: [1, 2, 3], - * ... - * - * ... - * // as function - * rowHeaders: function(index) { - * return index + ': AB'; - * }, - * ... - * ``` - */ - rowHeaders: void 0, - - /** - * Setting `true` or `false` will enable or disable the default column headers (A, B, C). - * You can also define an array `['One', 'Two', 'Three', ...]` or a function to define the headers. - * If a function is set, then the index of the column is passed as a parameter. - * - * @type {Boolean|Array|Function} - * @default null - * @example - * ```js - * ... - * // as boolean - * colHeaders: true, - * ... - * - * ... - * // as array - * colHeaders: ['A', 'B', 'C'], - * ... - * - * ... - * // as function - * colHeaders: function(index) { - * return index + ': AB'; - * }, - * ... - * ``` - */ - colHeaders: null, - - /** - * Defines column widths in pixels. Accepts number, string (that will be converted to a number), - * array of numbers (if you want to define column width separately for each column) or a - * function (if you want to set column width dynamically on each render). - * - * @type {Array|Function|Number|String} - * @default undefined - * @example - * ```js - * ... - * // as numeric, for each column. - * colWidths: 100, - * ... - * - * * ... - * // as string, for each column. - * colWidths: '100px', - * ... - * - * ... - * // as array, based on visual indexes. The rest of the columns have a default width. - * colWidths: [100, 120, 90], - * ... - * - * ... - * // as function, based on visual indexes. - * colWidths: function(index) { - * return index * 10; - * }, - * ... - * ``` - */ - colWidths: void 0, - - /** - * Defines row heights in pixels. Accepts numbers, strings (that will be converted into a number), - * array of numbers (if you want to define row height separately for each row) or a - * function (if you want to set row height dynamically on each render). - * If the ManualRowResize or AutoRowSize plugins are enabled, this is also the minimum height that can be set - * via either of those two plugins. - * Height should be equal or greater than 23px. Table is rendered incorrectly if height is less than 23px. - * - * @type {Array|Function|Number|String} - * @default undefined - * @example - * ```js - * ... - * // as numeric, for each row. - * rowHeights: 100, - * ... - * - * * ... - * // as string, for each row. - * rowHeights: '100px', - * ... - * - * ... - * // as array, based on visual indexes. The rest of the rows have a default height. - * rowHeights: [100, 120, 90], - * ... - * - * ... - * // as function, based on visual indexes. - * rowHeights: function(index) { - * return index * 10; - * }, - * ... - * ``` - */ - rowHeights: void 0, - - /** - * @description - * Defines the cell properties and data binding for certain columns. - * - * __Notice:__ Using this option sets a fixed number of columns (options `startCols`, `minCols`, `maxCols` will be ignored). - * - * See [documentation -> datasources.html](http://docs.handsontable.com/tutorial-data-sources.html#page-nested) for examples. - * - * @type {Array|Function} - * @default undefined - * @example - * ```js - * ... - * // as an array of objects. Order of the objects in array is representation of physical indexes. - * columns: [ - * { - * // column options for the first column - * type: 'numeric', - * format: '0,0.00 $' - * }, - * { - * // column options for the second column - * type: 'text', - * readOnly: true - * } - * ], - * ... - * - * // or as function, based on physical indexes - * ... - * columns: function(index) { - * return { - * type: index > 0 ? 'numeric' : 'text', - * readOnly: index < 1 - * } - * } - * ... - * ``` - */ - columns: void 0, - - /** - * @description - * Defines the cell properties for given `row`, `col`, `prop` coordinates. - * Any constructor or column option may be overwritten for a particular cell (row/column combination) - * using the `cells` property in the Handsontable constructor. - * - * __Note:__ Parameters `row` and `col` always represent __physical indexes__. Example below show how to execute - * operations based on the __visual__ representation of Handsontable. - * - * Possible values of `prop`: - * - property name for column's data source object, when dataset is an [array of objects](/tutorial-data-sources.html#page-object) - * - the same number as `col`, when dataset is an [array of arrays](/tutorial-data-sources.html#page-array) - * - * @type {Function} - * @default undefined - * @example - * ```js - * ... - * cells: function (row, col, prop) { - * var cellProperties = {}; - * var visualRowIndex = this.instance.toVisualRow(row); - * var visualColIndex = this.instance.toVisualColumn(col); - * - * if (visualRowIndex === 0 && visualColIndex === 0) { - * cellProperties.readOnly = true; - * } - * - * return cellProperties; - * }, - * ... - * ``` - */ - cells: void 0, - - /** - * Any constructor or column option may be overwritten for a particular cell (row/column combination), using `cell` - * array passed to the Handsontable constructor. - * - * @type {Array} - * @default [] - * @example - * ```js - * ... - * cell: [ - * {row: 0, col: 0, readOnly: true} - * ], - * ... - * ``` - */ - cell: [], - - /** - * @description - * If `true`, enables the {@link Comments} plugin, which enables an option to apply cell comments through the context menu - * (configurable with context menu keys `commentsAddEdit`, `commentsRemove`). - * - * To initialize Handsontable with predefined comments, provide cell coordinates and comment text values in a form of an array. - * - * See [Comments](http://docs.handsontable.com/demo-comments_.html) demo for examples. - * - * @since 0.11.0 - * @type {Boolean|Array} - * @default false - * @example - * ```js - * ... - * comments: [{row: 1, col: 1, comment: {value: "Test comment"}}], - * ... - * ``` - */ - comments: false, - - /** - * @description - * If `true`, enables the Custom Borders plugin, which enables an option to apply custom borders through the context menu (configurable with context menu key `borders`). - * - * To initialize Handsontable with predefined custom borders, provide cell coordinates and border styles in a form of an array. - * - * See [Custom Borders](http://docs.handsontable.com/demo-custom-borders.html) demo for examples. - * - * @since 0.11.0 - * @type {Boolean|Array} - * @default false - * @example - * ```js - * ... - * customBorders: [ - * {range: { - * from: {row: 1, col: 1}, - * to: {row: 3, col: 4}}, - * left: {}, - * right: {}, - * top: {}, - * bottom: {} - * } - * ], - * ... - * - * // or - * ... - * customBorders: [ - * {row: 2, col: 2, left: {width: 2, color: 'red'}, - * right: {width: 1, color: 'green'}, top: '', bottom: ''} - * ], - * ... - * ``` - */ - customBorders: false, - - /** - * Minimum number of rows. At least that number of rows will be created during initialization. - * - * @type {Number} - * @default 0 - */ - minRows: 0, - - /** - * Minimum number of columns. At least that number of columns will be created during initialization. - * - * @type {Number} - * @default 0 - */ - minCols: 0, - - /** - * Maximum number of rows. If set to a value lower than the initial row count, the data will be trimmed to the provided value as the number of rows. - * - * @type {Number} - * @default Infinity - */ - maxRows: Infinity, - - /** - * Maximum number of cols. If set to a value lower than the initial col count, the data will be trimmed to the provided value as the number of cols. - * - * @type {Number} - * @default Infinity - */ - maxCols: Infinity, - - /** - * When set to 1 (or more), Handsontable will add a new row at the end of grid if there are no more empty rows. - * (unless the number of rows exceeds the one set in the `maxRows` property) - * - * @type {Number} - * @default 0 - */ - minSpareRows: 0, - - /** - * When set to 1 (or more), Handsontable will add a new column at the end of grid if there are no more empty columns. - * (unless the number of rows exceeds the one set in the `maxCols` property) - * - * @type {Number} - * @default 0 - */ - minSpareCols: 0, - - /** - * If set to `false`, there won't be an option to insert new rows in the Context Menu. - * - * @type {Boolean} - * @default true - */ - allowInsertRow: true, - - /** - * If set to `false`, there won't be an option to insert new columns in the Context Menu. - * - * @type {Boolean} - * @default true - */ - allowInsertColumn: true, - - /** - * If set to `false`, there won't be an option to remove rows in the Context Menu. - * - * @type {Boolean} - * @default true - */ - allowRemoveRow: true, - - /** - * If set to `false`, there won't be an option to remove columns in the Context Menu. - * - * @type {Boolean} - * @default true - */ - allowRemoveColumn: true, - - /** - * If true, selection of multiple cells using keyboard or mouse is allowed. - * - * @type {Boolean} - * @default true - */ - multiSelect: true, - - /** - * Enables the fill handle (drag-down and copy-down) functionality, which shows a small rectangle in bottom - * right corner of the selected area, that let's you expand values to the adjacent cells. - * - * Possible values: `true` (to enable in all directions), `'vertical'` or `'horizontal'` (to enable in one direction), - * `false` (to disable completely). Setting to `true` enables the fillHandle plugin. - * - * Since 0.23.0 you can pass object to plugin which allows you to add more options for this functionality. If `autoInsertRow` - * option is `true`, fill-handler will create new rows till it reaches the last row. It is enabled by default. - * - * @example - * ```js - * ... - * fillHandle: true // enable plugin in all directions and with autoInsertRow as true - * ... - * // or - * ... - * fillHandle: 'vertical' // enable plugin in vertical direction and with autoInsertRow as true - * ... - * // or - * ... - * fillHandle: { // enable plugin in both directions and with autoInsertRow as false - * autoInsertRow: false, - * } - * // or - * ... - * fillHandle: { // enable plugin in vertical direction and with autoInsertRow as false - * autoInsertRow: false, - * direction: 'vertical' // 'vertical' or 'horizontal' - * } - * ``` - * - * @type {Boolean|String|Object} - * @default true - */ - fillHandle: true, - - /** - * Allows to specify the number of fixed (or *frozen*) rows at the top of the table. - * - * @type {Number} - * @default 0 - * @example - * ```js - * fixedRowsTop: 3 // This would freeze the top 3 rows of the table. - * ``` - */ - fixedRowsTop: 0, - - /** - * Allows to specify the number of fixed (or *frozen*) rows at the bottom of the table. - * - * @pro - * @type {Number} - * @default 0 - * @example - * ```js - * fixedRowsBottom: 3 // This would freeze the top 3 rows of the table. - * ``` - */ - fixedRowsBottom: 0, - - /** - * Allows to specify the number of fixed (or *frozen*) columns on the left of the table. - * - * @type {Number} - * @default 0 - * @example - * ```js - * fixedColumnsLeft: 3 // This would freeze the top 3 rows of the table. - * ``` - */ - fixedColumnsLeft: 0, - - /** - * If `true`, mouse click outside the grid will deselect the current selection. - * Can be a function that takes the click event target and returns a boolean. - * - * @type {Boolean|Function} - * @default true - */ - outsideClickDeselects: true, - - /** - * If `true`, ENTER begins editing mode (like in Google Docs). If `false`, ENTER moves to next - * row (like Excel) and adds a new row if necessary. TAB adds new column if necessary. - * - * @type {Boolean} - * @default true - */ - enterBeginsEditing: true, - - /** - * Defines the cursor movement after ENTER was pressed (SHIFT + ENTER uses a negative vector). - * Can be an object or a function that returns an object. The event argument passed to the function - * is a DOM Event object received after the ENTER key has been pressed. This event object can be used to check - * whether user pressed ENTER or SHIFT + ENTER. - * - * @type {Object|Function} - * @default {row: 1, col: 0} - */ - enterMoves: { row: 1, col: 0 }, - - /** - * Defines the cursor movement after TAB is pressed (SHIFT + TAB uses a negative vector). - * Can be an object or a function that returns an object. The event argument passed to the function - * is a DOM Event object received after the TAB key has been pressed. This event object can be used to check - * whether user pressed TAB or SHIFT + TAB. - * - * @type {Object} - * @default {row: 0, col: 1} - */ - tabMoves: { row: 0, col: 1 }, - - /** - * If `true`, pressing TAB or right arrow in the last column will move to first column in next row. - * - * @type {Boolean} - * @default false - */ - autoWrapRow: false, - - /** - * If `true`, pressing ENTER or down arrow in the last row will move to the first row in the next column. - * - * @type {Boolean} - * @default false - */ - autoWrapCol: false, - - /** - * @description - * Turns on saving the state of column sorting, column positions and column sizes in local storage. - * - * You can save any sort of data in local storage to preserve table state between page reloads. - * In order to enable data storage mechanism, `persistentState` option must be set to `true` (you can set it - * either during Handsontable initialization or using the `updateSettings` method). When `persistentState` is enabled it exposes 3 hooks: - * - * __persistentStateSave__ (key: String, value: Mixed) - * - * * Saves value under given key in browser local storage. - * - * __persistentStateLoad__ (key: String, valuePlaceholder: Object) - * - * * Loads `value`, saved under given key, form browser local storage. The loaded `value` will be saved in `valuePlaceholder.value` - * (this is due to specific behaviour of `Hooks.run()` method). If no value have been saved under key `valuePlaceholder.value` - * will be `undefined`. - * - * __persistentStateReset__ (key: String) - * - * * Clears the value saved under `key`. If no `key` is given, all values associated with table will be cleared. - * - * __Note:__ The main reason behind using `persistentState` hooks rather than regular LocalStorage API is that it - * ensures separation of data stored by multiple Handsontable instances. In other words, if you have two (or more) - * instances of Handsontable on one page, data saved by one instance won't be accessible by the second instance. - * Those two instances can store data under the same key and no data would be overwritten. - * - * __Important:__ In order for the data separation to work properly, make sure that each instance of Handsontable has a unique `id`. - * - * @type {Boolean} - * @default false - */ - persistentState: void 0, - - /** - * Class name for all visible rows in the current selection. - * - * @type {String} - * @default undefined - * @example - * ```js - * currentRowClassName: 'currentRow' // This will add a 'currentRow' class name to appropriate table cells. - * ``` - */ - currentRowClassName: void 0, - - /** - * Class name for all visible columns in the current selection. - * - * @type {String} - * @default undefined - * @example - * ```js - * currentColClassName: 'currentColumn' // This will add a 'currentColumn' class name to appropriate table cells. - * ``` - */ - currentColClassName: void 0, - - /** - * Class name for all visible headers in current selection. - * - * @type {String} - * @since 0.27.0 - * @default 'ht__highlight' - * @example - * ```js - * currentHeaderClassName: 'ht__highlight' // This will add a 'ht__highlight' class name to appropriate table headers. - * ``` - */ - currentHeaderClassName: 'ht__highlight', - /** - * Class name for the Handsontable container element. - * - * @type {String|Array} - * @default undefined - */ - className: void 0, - - /** - * Class name for all tables inside container element. - * - * @since 0.17.0 - * @type {String|Array} - * @default undefined - */ - tableClassName: void 0, - - /** - * @description - * Defines how the columns react, when the declared table width is different than the calculated sum of all column widths. - * [See more](http://docs.handsontable.com/demo-stretching.html) mode. Possible values: - * * `'none'` Disable stretching - * * `'last'` Stretch only the last column - * * `'all'` Stretch all the columns evenly - * - * @type {String} - * @default 'none' - */ - stretchH: 'none', - - /** - * Lets you overwrite the default `isEmptyRow` method, which checks if row at the provided index is empty. - * - * @type {Function} - * @param {Number} row Visual row index. - * @returns {Boolean} - */ - isEmptyRow: function isEmptyRow(row) { - var col, colLen, value, meta; - - for (col = 0, colLen = this.countCols(); col < colLen; col++) { - value = this.getDataAtCell(row, col); - - if (value !== '' && value !== null && (0, _mixed.isDefined)(value)) { - if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { - meta = this.getCellMeta(row, col); - - return (0, _object.isObjectEquals)(this.getSchema()[meta.prop], value); - } - return false; - } - } - - return true; - }, - - - /** - * Lets you overwrite the default `isEmptyCol` method, which checks if column at the provided index is empty. - * - * @type {Function} - * @param {Number} col Visual column index - * @returns {Boolean} - */ - isEmptyCol: function isEmptyCol(col) { - var row, rowLen, value; - - for (row = 0, rowLen = this.countRows(); row < rowLen; row++) { - value = this.getDataAtCell(row, col); - - if (value !== '' && value !== null && (0, _mixed.isDefined)(value)) { - return false; - } - } - - return true; - }, - - - /** - * When set to `true`, the table is re-rendered when it is detected that it was made visible in DOM. - * - * @type {Boolean} - * @default true - */ - observeDOMVisibility: true, - - /** - * If set to `true`, Handsontable will accept values that were marked as invalid by the cell `validator`. - * It will result with *invalid* cells being treated as *valid* (will save the *invalid* value into the Handsontable data source). - * If set to `false`, Handsontable will *not* accept the invalid values and won't allow the user to close the editor. - * This option will be particularly useful when used with the Autocomplete's `strict` mode. - * - * @type {Boolean} - * @default true - * @since 0.9.5 - */ - allowInvalid: true, - - /** - * If set to `true`, Handsontable will accept values that are empty (`null`, `undefined` or `''`). - * If set to `false`, Handsontable will *not* accept the empty values and mark cell as invalid. - * - * @example - * ```js - * ... - * allowEmpty: true // allow empty values for all cells (whole table) - * ... - * // or - * ... - * columns: [ - * // allow empty values only for 'date' column - * {data: 'date', dateFormat: 'DD/MM/YYYY', allowEmpty: true} - * ] - * ... - * ``` - * - * @type {Boolean} - * @default true - * @since 0.23.0 - */ - allowEmpty: true, - - /** - * CSS class name for cells that did not pass validation. - * - * @type {String} - * @default 'htInvalid' - */ - invalidCellClassName: 'htInvalid', - - /** - * When set to an non-empty string, displayed as the cell content for empty cells. If a value of a different type is provided, - * it will be stringified and applied as a string. - * - * @type {Mixed} - * @default false - */ - placeholder: false, - - /** - * CSS class name for cells that have a placeholder in use. - * - * @type {String} - * @default 'htPlaceholder' - */ - placeholderCellClassName: 'htPlaceholder', - - /** - * CSS class name for read-only cells. - * - * @type {String} - * @default 'htDimmed' - */ - readOnlyCellClassName: 'htDimmed', - - /** - * @description - * If a string is provided, it may be one of the following predefined values: - * * `autocomplete`, - * * `checkbox`, - * * `html`, - * * `numeric`, - * * `password`. - * * `text`. - * - * Or you can [register](http://docs.handsontable.com/demo-custom-renderers.html) the custom renderer under specified name and use - * its name as an alias in your configuration. - * - * If a function is provided, it will receive the following arguments: - * ```js - * function(instance, TD, row, col, prop, value, cellProperties) {} - * ``` - * - * You can read more about custom renderes [in the documentation](http://docs.handsontable.com/demo-custom-renderers.html). - * - * @example - * ```js - * ... - * Handsontable.renderers.registerRenderer('my.renderer', function(instance, TD, row, col, prop, value, cellProperties) { - * TD.innerHTML = value; - * }); - * ... - * columns: [ - * { - * editor: 'select', - * renderer: 'autocomplete' // as string - * }, - * { - * renderer: 'my.renderer' // custom renderer as an alias - * }, - * { - * // renderer as custom function - * renderer: function(hotInstance, TD, row, col, prop, value, cellProperties) { - * TD.style.color = 'blue'; - * TD.innerHTML = value; - * } - * } - * ] - * ... - * ``` - * - * @type {String|Function} - * @default undefined - */ - renderer: void 0, - - /** - * CSS class name added to the commented cells. - * - * @type {String} - * @default 'htCommentCell' - */ - commentedCellClassName: 'htCommentCell', - - /** - * If set to `true`, it enables the browser's native selection of a fragment of the text within a single cell, between adjacent cells or in a whole table. - * If set to `'cell'`, it enables the possibility of selecting a fragment of the text within a single cell's body. - * - * @type {Boolean|String} - * @default false - */ - fragmentSelection: false, - - /** - * @description - * Make cell [read only](http://docs.handsontable.com/demo-read-only.html). - * - * @type {Boolean} - * @default false - */ - readOnly: false, - - /** - * @description - * When added to a `column` property, it skips the column on paste and pastes the data on the next column to the right. - * - * @type {Boolean} - * @default false - */ - skipColumnOnPaste: false, - - /** - * @description - * Setting to true enables the search plugin (see [demo](http://docs.handsontable.com/demo-search-for-values.html)). - * - * @type {Boolean} - * @default false - */ - search: false, - - /** - * @description - * Shortcut to define the combination of the cell renderer, editor and validator for the column, cell or whole table. - * - * Possible values: - * * [autocomplete](http://docs.handsontable.com/demo-autocomplete.html) - * * [checkbox](http://docs.handsontable.com/demo-checkbox.html) - * * [date](http://docs.handsontable.com/demo-date.html) - * * [dropdown](http://docs.handsontable.com/demo-dropdown.html) - * * [handsontable](http://docs.handsontable.com/demo-handsontable.html) - * * [numeric](http://docs.handsontable.com/demo-numeric.html) - * * [password](http://docs.handsontable.com/demo-password.html) - * * text - * * [time](http://docs.handsontable.com/demo-time.html) - * - * Or you can register the custom cell type under specified name and use - * its name as an alias in your configuration. - * - * @example - * ```js - * ... - * Handsontable.cellTypes.registerCellType('my.type', { - * editor: MyEditorClass, - * renderer: function(hot, td, row, col, prop, value, cellProperties) { - * td.innerHTML = value; - * }, - * validator: function(value, callback) { - * callback(value === 'foo' ? true : false); - * } - * }); - * ... - * columns: [ - * { - * type: 'text' - * }, - * { - * type: 'my.type' // an alias to custom type - * }, - * { - * type: 'checkbox' - * } - * ] - * ... - * ``` - * - * @type {String} - * @default 'text' - */ - type: 'text', - - /** - * @description - * Make cell copyable (pressing CTRL + C on your keyboard moves its value to system clipboard). - * - * __Note:__ this setting is `false` by default for cells with type `password`. - * - * @type {Boolean} - * @default true - * @since 0.10.2 - */ - copyable: true, - - /** - * Defines the editor for the table/column/cell. - * - * If a string is provided, it may be one of the following predefined values: - * * [autocomplete](http://docs.handsontable.com/demo-autocomplete.html) - * * [checkbox](http://docs.handsontable.com/demo-checkbox.html) - * * [date](http://docs.handsontable.com/demo-date.html) - * * [dropdown](http://docs.handsontable.com/demo-dropdown.html) - * * [handsontable](http://docs.handsontable.com/demo-handsontable.html) - * * [mobile](http://docs.handsontable.com/demo-mobiles-and-tablets.html) - * * [password](http://docs.handsontable.com/demo-password.html) - * * [select](http://docs.handsontable.com/demo-select.html) - * * text - * - * Or you can [register](http://docs.handsontable.com/tutorial-cell-editor.html#registering-an-editor) the custom editor under specified name and use - * its name as an alias in your configuration. - * - * To disable cell editing completely set `editor` property to `false`. - * - * @example - * ```js - * ... - * columns: [ - * { - * editor: 'select' - * }, - * { - * editor: false - * } - * ] - * ... - * ``` - * - * @type {String|Function|Boolean} - * @default 'text' - */ - editor: void 0, - - /** - * @description - * Autocomplete definitions. See [autocomplete demo](http://docs.handsontable.com/demo-autocomplete.html) for examples and definitions. - * - * @type {Array} - * @default undefined - */ - autoComplete: void 0, - - /** - * Control number of choices for the autocomplete (or dropdown) typed cells. After exceeding it, a scrollbar for the dropdown list of choices will appear. - * - * @since 0.18.0 - * @type {Number} - * @default 10 - */ - visibleRows: 10, - - /** - * Makes autocomplete or dropdown width the same as the edited cell width. If `false` then editor will be scaled - * according to its content. - * - * @since 0.17.0 - * @type {Boolean} - * @default true - */ - trimDropdown: true, - - /** - * Setting to true enables the debug mode, currently used to test the correctness of the row and column - * header fixed positioning on a layer above the master table. - * - * @type {Boolean} - * @default false - */ - debug: false, - - /** - * When set to `true`, the text of the cell content is wrapped if it does not fit in the fixed column width. - * - * @type {Boolean} - * @default true - * @since 0.11.0 - */ - wordWrap: true, - - /** - * CSS class name added to cells with cell meta `wordWrap: false`. - * - * @type {String} - * @default 'htNoWrap' - * @since 0.11.0 - */ - noWordWrapClassName: 'htNoWrap', - - /** - * @description - * Defines if the right-click context menu should be enabled. Context menu allows to create new row or - * column at any place in the grid among [other features](http://docs.handsontable.com/demo-context-menu.html). - * Possible values: - * * `true` (to enable default options), - * * `false` (to disable completely) - * * an array of [predefined options](https://docs.handsontable.com/demo-context-menu.html#page-specific), - * * an object [with defined structure](http://docs.handsontable.com/demo-context-menu.html#page-custom) - * - * See [the context menu demo](http://docs.handsontable.com/demo-context-menu.html) for examples. - * - * @example - * ```js - * ... - * // as a boolean - * contextMenu: true - * ... - * // as an array - * contextMenu: ['row_above', 'row_below', '--------', 'undo', 'redo'] - * ... - * ``` - * ... - * // as an object (`name` attribute is required in the custom keys) - * contextMenu: { - * items: { - * "option1": { - * name: "option1" - * }, - * "option2": { - * name: "option2", - * submenu: { - * items: [ - * { - * key: "option2:suboption1", - * name: "option2:suboption1", - * callback: function(key, options) { - * ... - * } - * }, - * ... - * ] - * } - * } - * } - * } - * ... - * ``` - * @type {Boolean|Array|Object} - * @default undefined - */ - contextMenu: void 0, - - /** - * @description - * Disable or enable the copy/paste functionality. - * - * @example - * ```js - * ... - * copyPaste: false, - * ... - * ``` - * - * @type {Boolean} - * @default true - */ - copyPaste: true, - - /** - * If `true`, undo/redo functionality is enabled. - * - * @type {Boolean} - * @default undefined - */ - undo: void 0, - - /** - * @description - * Turns on [Column sorting](http://docs.handsontable.com/demo-sorting-data.html). - * Can be either a boolean (true/false) or an object with a declared sorting options. See the below example: - * - * @example - * ```js - * ... - * // as boolean - * columnSorting: true - * ... - * // as a object with initial order (sort ascending column at index 2) - * columnSorting: { - * column: 2, - * sortOrder: true, // true = ascending, false = descending, undefined = original order - * sortEmptyCells: true // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table - * } - * ... - * ``` - * - * @type {Boolean|Object} - * @default undefined - */ - columnSorting: void 0, - - /** - * @description - * Turns on [Manual column move](http://docs.handsontable.com/demo-moving-rows-and-columns.html), if set to a boolean or define initial - * column order, if set to an array of column indexes. - * - * @example - * ```js - * ... - * // as boolean - * manualColumnMove: true - * ... - * // as a array with initial order (move column index at 0 to 1 and move column index at 1 to 4) - * manualColumnMove: [1, 4] - * ... - * ``` - * - * @type {Boolean|Array} - * @default undefined - */ - manualColumnMove: void 0, - - /** - * @description - * Turns on [Manual column resize](http://docs.handsontable.com/demo-resizing.html), if set to a boolean or define initial - * column resized widths, if set to an array of numbers. - * - * @example - * ```js - * ... - * // as boolean - * manualColumnResize: true - * ... - * // as a array with initial widths (column at 0 index has 40px and column at 1 index has 50px) - * manualColumnResize: [40, 50] - * ... - * ``` - * - * @type {Boolean|Array} - * @default undefined - */ - manualColumnResize: void 0, - - /** - * @description - * Turns on [Manual row move](http://docs.handsontable.com/demo-moving-rows-and-columns.html), if set to a boolean or define initial - * row order, if set to an array of row indexes. - * - * @example - * ```js - * ... - * // as boolean - * manualRowMove: true - * ... - * // as a array with initial order (move row index at 0 to 1 and move row index at 1 to 4) - * manualRowMove: [1, 4] - * ... - * ``` - * - * @type {Boolean|Array} - * @default undefined - * @since 0.11.0 - */ - manualRowMove: void 0, - - /** - * @description - * Turns on [Manual row resize](http://docs.handsontable.com/demo-resizing.html), if set to a boolean or define initial - * row resized heights, if set to an array of numbers. - * - * @example - * ```js - * ... - * // as boolean - * manualRowResize: true - * ... - * // as a array with initial heights (row at 0 index has 40px and row at 1 index has 50px) - * manualRowResize: [40, 50] - * ... - * ``` - * - * @type {Boolean|Array} - * @default undefined - * @since 0.11.0 - */ - manualRowResize: void 0, - - /** - * @description - * If set to `true`, it enables a possibility to merge cells. If set to an array of objects, it merges the cells provided in the objects (see the example below). - * [More information on the demo page.](http://docs.handsontable.com/demo-merge-cells.html) - * - * @example - * ```js - * // enables the mergeCells plugin: - * margeCells: true - * ... - * // declares a list of merged sections: - * mergeCells: [ - * {row: 1, col: 1, rowspan: 3, colspan: 3}, // rowspan and colspan properties declare the width and height of a merged section in cells - * {row: 3, col: 4, rowspan: 2, colspan: 2}, - * {row: 5, col: 6, rowspan: 3, colspan: 3} - * ] - * ``` - * @type {Boolean|Array} - * @default false - */ - mergeCells: false, - - /** - * Number of rows to be rendered outside of the visible part of the table. - * By default, it's set to `'auto'`, which makes Handsontable to attempt to calculate the best offset performance-wise. - * - * You may test out different values to find the best one that works for your specific implementation. - * - * @type {Number|String} - * @default 'auto' - */ - viewportRowRenderingOffset: 'auto', - - /** - * Number of columns to be rendered outside of the visible part of the table. - * By default, it's set to `'auto'`, which makes Handsontable try calculating the best offset performance-wise. - * - * You may experiment with the value to find the one that works best for your specific implementation. - * - * @type {Number|String} - * @default 'auto' - */ - viewportColumnRenderingOffset: 'auto', - - /** - * A function, regular expression or a string, which will be used in the process of cell validation. - * If a function is used, be sure to execute the callback argument with either `true` (`callback(true)`) if the validation passed - * or with `false` (`callback(false)`), if the validation failed. - * Note, that `this` in the function points to the `cellProperties` object. - * - * If a string is provided, it may be one of the following predefined values: - * * `autocomplete`, - * * `date`, - * * `numeric`, - * * `time`. - * - * Or you can [register](http://docs.handsontable.com/demo-data-validation.html) the validator function under specified name and use - * its name as an alias in your configuration. - * - * See more [in the demo](http://docs.handsontable.com/demo-data-validation.html). - * - * @example - * ```js - * // as a function - * columns: [ - * { - * validator: function(value, callback) { // validation rules } - * } - * ] - * ... - * // as a regexp - * columns: [ - * { - * validator: /^[0-9]$/ // regular expression - * } - * ] - * // as a string - * columns: [ - * { - * validator: 'numeric' - * } - * ] - * ``` - * @type {Function|RegExp|String} - * @default undefined - * @since 0.9.5 - */ - validator: void 0, - - /** - * @description - * Disable visual cells selection. - * - * Possible values: - * * `true` - Disables any type of visual selection (current and area selection), - * * `false` - Enables any type of visual selection. This is default value. - * * `current` - Disables the selection of a currently selected cell, the area selection is still present. - * * `area` - Disables the area selection, the currently selected cell selection is still present. - * - * @type {Boolean|String|Array} - * @default false - * @since 0.13.2 - * @example - * ```js - * ... - * // as boolean - * disableVisualSelection: true, - * ... - * - * ... - * // as string ('current' or 'area') - * disableVisualSelection: 'current', - * ... - * - * ... - * // as array - * disableVisualSelection: ['current', 'area'], - * ... - * ``` - */ - disableVisualSelection: false, - - /** - * @description - * Set whether to display the current sorting order indicator (a triangle icon in the column header, specifying the sorting order). - * - * @type {Boolean} - * @default false - * @since 0.15.0-beta3 - */ - sortIndicator: void 0, - - /** - * Disable or enable ManualColumnFreeze plugin. - * - * @type {Boolean} - * @default false - */ - manualColumnFreeze: void 0, - - /** - * @description - * Defines whether Handsontable should trim the whitespace at the beginning and the end of the cell contents. - * - * @type {Boolean} - * @default true - */ - trimWhitespace: true, - - settings: void 0, - - /** - * @description - * Defines data source for Autocomplete or Dropdown cell types. - * - * @example - * ```js - * ... - * // source as a array - * columns: [{ - * type: 'autocomplete', - * source: ['A', 'B', 'C', 'D'] - * }] - * ... - * // source as a function - * columns: [{ - * type: 'autocomplete', - * source: function(query, callback) { - * fetch('http://example.com/query?q=' + query, function(response) { - * callback(response.items); - * }) - * } - * }] - * ... - * ``` - * - * @type {Array|Function} - * @default undefined - */ - source: void 0, - - /** - * @description - * Defines the column header name. - * - * @example - * ```js - * ... - * columns: [{ - * title: 'First name', - * type: 'text', - * }, - * { - * title: 'Last name', - * type: 'text', - * }] - * ... - * ``` - * - * @type {String} - * @default undefined - */ - title: void 0, - - /** - * Data template for `'checkbox'` type when checkbox is checked. - * - * @example - * ```js - * checkedTemplate: 'good' - * - * // if a checkbox-typed cell is checked, then getDataAtCell(x,y), where x and y are the coordinates of the cell - * // will return 'good'. - * ``` - * @type {Boolean|String} - * @default true - */ - checkedTemplate: void 0, - - /** - * Data template for `'checkbox'` type when checkbox is unchecked. - * - * @example - * ```js - * uncheckedTemplate: 'bad' - * - * // if a checkbox-typed cell is not checked, then getDataAtCell(x,y), where x and y are the coordinates of the cell - * // will return 'bad'. - * ``` - * @type {Boolean|String} - * @default false - */ - uncheckedTemplate: void 0, - - /** - * @description - * Object which describes if renderer should create checkbox element with label element as a parent. Option desired for - * [checkbox](http://docs.handsontable.com/demo-checkbox.html)-typed cells. - * - * By default the [checkbox](http://docs.handsontable.com/demo-checkbox.html) renderer renders the checkbox without a label. - * - * Possible object properties: - * * `property` - Defines the property name of the data object, which will to be used as a label. - * (eg. `label: {property: 'name.last'}`). This option works only if data was passed as an array of objects. - * * `position` - String which describes where to place the label text (before or after checkbox element). - * Valid values are `'before'` and '`after`' (defaults to `'after'`). - * * `value` - String or a Function which will be used as label text. - * - * @example - * ```js - * ... - * columns: [{ - * type: 'checkbox', - * label: {position: 'after', value: 'My label: '} - * }] - * ... - * ``` - * - * @since 0.19.0 - * @type {Object} - * @default undefined - */ - label: void 0, - - /** - * Display format. See [numbrojs](http://numbrojs.com). This option is desired for - * [numeric](http://docs.handsontable.com/demo-numeric.html)-typed cells. - * - * Since 0.26.0 Handsontable uses [numbro](http://numbrojs.com/) as a main library for numbers formatting. - * - * @example - * ```js - * ... - * columns: [{ - * type: 'numeric', - * format: '0,00' - * }] - * ... - * ``` - * - * @type {String} - * @default '0' - */ - format: void 0, - - /** - * Language display format. See [numbrojs](http://numbrojs.com/languages.html#supported-languages). This option is desired for - * [numeric](http://docs.handsontable.com/demo-numeric.html)-typed cells. - * - * Since 0.26.0 Handsontable uses [numbro](http://numbrojs.com/) as a main library for numbers formatting. - * - * @example - * ```js - * ... - * columns: [{ - * type: 'numeric', - * language: 'en-US' - * }] - * ... - * ``` - * - * @type {String} - * @default 'en-US' - */ - language: void 0, - - /** - * @description - * Data source for [select](http://docs.handsontable.com/demo-select.html)-typed cells. - * - * @example - * ```js - * ... - * columns: [{ - * editor: 'select', - * selectOptions: ['A', 'B', 'C'], - * }] - * ... - * ``` - * - * @type {Array} - */ - selectOptions: void 0, - - /** - * Enables or disables the autoColumnSize plugin. Default value is `undefined`, which has the same effect as `true`. - * Disabling this plugin can increase performance, as no size-related calculations would be done. - * - * Column width calculations are divided into sync and async part. Each of this parts has their own advantages and - * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous operations don't - * block the browser UI. - * - * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value. - * `syncLimit` option is available since 0.16.0. - * - * You can also use the `useHeaders` option to take the column headers with into calculation. - * - * @example - * ```js - * ... - * // as a number (300 columns in sync, rest async) - * autoColumnSize: {syncLimit: 300}, - * ... - * - * ... - * // as a string (percent) - * autoColumnSize: {syncLimit: '40%'}, - * ... - * - * ... - * // use headers width while calculation the column width - * autoColumnSize: {useHeaders: true}, - * ... - * - * ``` - * - * @type {Object|Boolean} - * @default {syncLimit: 50} - */ - autoColumnSize: void 0, - - /** - * Enables or disables autoRowSize plugin. Default value is `undefined`, which has the same effect as `false` (disabled). - * Enabling this plugin can decrease performance, as size-related calculations would be performed. - * - * Row height calculations are divided into sync and async stages. Each of these stages has their own advantages and - * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous operations don't - * block the browser UI. - * - * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value. - * `syncLimit` options is available since 0.16.0. - * - * @example - * ```js - * ... - * // as number (300 columns in sync, rest async) - * autoRowSize: {syncLimit: 300}, - * ... - * - * ... - * // as string (percent) - * autoRowSize: {syncLimit: '40%'}, - * ... - * ``` - * @type {Object|Boolean} - * @default {syncLimit: 1000} - */ - autoRowSize: void 0, - - /** - * Date validation format. - * - * Option desired for `'date'` - typed cells. - * - * @example - * ```js - * ... - * columns: [{ - * type: 'date', - * dateFormat: 'MM/DD/YYYY' - * }] - * ... - * ``` - * - * @type {String} - * @default 'DD/MM/YYYY' - */ - dateFormat: void 0, - - /** - * If `true` then dates will be automatically formatted to match the desired format. - * - * Option desired for `'date'`-typed typed cells. - * - * @example - * ```js - * ... - * columns: [{ - * type: 'date', - * dateFormat: 'YYYY-MM-DD', - * correctFormat: true - * }] - * ... - * ``` - * - * @type {Boolean} - * @default false - */ - correctFormat: false, - - /** - * Definition of default value which will fill the empty cells. - * - * Option desired for `'date'`-typed cells. - * - * @example - * ```js - * ... - * columns: [{ - * type: 'date', - * defaultData: '2015-02-02' - * }] - * ... - * ``` - * - * @type {String} - */ - defaultDate: void 0, - - /** - * If set to `true`, the value entered into the cell must match (case-sensitive) the autocomplete source. Otherwise, cell won't pass the validation. - * When filtering the autocomplete source list, the editor will be working in case-insensitive mode. - * - * Option desired for `autocomplete`-typed cells. - * - * @example - * ```js - * ... - * columns: [{ - * type: 'autocomplete', - * source: ['A', 'B', 'C'], - * strict: true - * }] - * ... - * ``` - * - * @type {Boolean} - */ - strict: void 0, - - /** - * @description - * If typed `true`, data defined in `source` of the autocomplete or dropdown cell will be treated as HTML. - * - * __Warning:__ Enabling this option can cause serious XSS vulnerabilities. - * - * Option desired for `'autocomplete'`-typed cells. - * @example - * ```js - * ... - * columns: [{ - * type: 'autocomplete', - * allowHtml: true, - * source: ['foo', 'bar'] - * }] - * ... - * ``` - * @type {Boolean} - * @default false - */ - allowHtml: false, - - /** - * If typed `true` then virtual rendering mechanism for handsontable will be disabled. - * - * @type {Boolean} - */ - renderAllRows: void 0, - - /** - * Prevents table to overlap outside the parent element. If `'horizontal'` option is chosen then table will appear horizontal - * scrollbar in case where parent's width is narrower then table's width. - * - * Possible values: - * * `false` - Disables functionality (Default option). - * * `horizontal` - Prevents horizontal overflow table. - * * `vertical` - Prevents vertical overflow table (Not implemented yet). - * - * @since 0.20.3 - * @example - * ```js - * ... - * preventOverflow: 'horizontal' - * ... - * ``` - * - * @type {String|Boolean} - */ - preventOverflow: false, - - /** - * @description - * Plugin allowing binding the table rows with their headers. - * If the plugin is enabled, the table row headers will "stick" to the rows, when they are hidden/moved. Basically, if at the initialization - * row 0 has a header titled "A", it will have it no matter what you do with the table. - * - * @pro - * @since 1.0.0-beta1 - * @type {Boolean|String} - * @example - * - * ```js - * ... - * var hot = new Handsontable(document.getElementById('example'), { - * date: getData(), - * bindRowsWithHeaders: true - * }); - * ... - * ``` - * - */ - bindRowsWithHeaders: void 0, - - /** - * @description - * The CollapsibleColumns plugin allows collapsing of columns, covered by a header with the `colspan` property defined. - * - * Clicking the "collapse/expand" button collapses (or expands) all "child" headers except the first one. - * - * Setting the `collapsibleColumns` property to `true` will display a "collapse/expand" button in every header with a defined - * `colspan` property. - * - * To limit this functionality to a smaller group of headers, define the `collapsibleColumns` property as an array of objects, as in - * the example below. - * - * @pro - * @since 1.0.0-beta1 - * @type {Boolean|Array} - * @example - * ```js - * ... - * collapsibleColumns: [ - * {row: -4, col: 1, collapsible: true}, - * {row: -3, col: 5, collapsible: true} - * ] - * ... - * // or - * ... - * collapsibleColumns: true - * ... - * ``` - */ - collapsibleColumns: void 0, - - /** - * @description - * Allows making pre-defined calculations on the cell values and display the results within Handsontable. - * See the demo for more information. - * - * @pro - * @since 1.0.0-beta1 - * @type {Object} - */ - columnSummary: void 0, - - /** - * This plugin allows adding a configurable dropdown menu to the table's column headers. - * The dropdown menu acts like the Context Menu, but is triggered by clicking the button in the header. - * - * @pro - * @since 1.0.0-beta1 - * @type {Boolean|Object|Array} - */ - dropdownMenu: void 0, - - /** - * The filters plugin. - * It allows filtering the table data either by the built-in component or with the API. - * - * @pro - * @since 1.0.0-beta1 - * @type {Boolean} - */ - filters: void 0, - - /** - * It allows Handsontable to process formula expressions defined in the provided data. - * - * @pro - * @since 1.7.0 - * @type {Boolean} - */ - formulas: void 0, - - /** - * @description - * GanttChart plugin enables a possibility to create a Gantt chart using a Handsontable instance. - * In this case, the whole table becomes read-only. - * - * @pro - * @since 1.0.0-beta1 - * @type {Object} - */ - ganttChart: void 0, - - /** - * @description - * Allows adding a tooltip to the table headers. - * - * Available options: - * * the `rows` property defines if tooltips should be added to row headers, - * * the `columns` property defines if tooltips should be added to column headers, - * * the `onlyTrimmed` property defines if tooltips should be added only to headers, which content is trimmed by the header itself (the content being wider then the header). - * - * @pro - * @since 1.0.0-beta1 - * @type {Boolean|Object} - */ - headerTooltips: void 0, - - /** - * Plugin allowing hiding of certain columns. - * - * @pro - * @since 1.0.0-beta1 - * @type {Boolean|Object} - */ - hiddenColumns: void 0, - - /** - * @description - * Plugin allowing hiding of certain rows. - * - * @pro - * @since 1.0.0-beta1 - * @type {Boolean|Object} - */ - hiddenRows: void 0, - - /** - * @description - * Allows creating a nested header structure, using the HTML's colspan attribute. - * - * @pro - * @since 1.0.0-beta1 - * @type {Array} - */ - nestedHeaders: void 0, - - /** - * @description - * Plugin allowing hiding of certain rows. - * - * @pro - * @since 1.0.0-beta1 - * @type {Boolean|Array} - */ - trimRows: void 0, - - /** - * @description - * Allows setting a custom width of the row headers. You can provide a number or an array of widths, if many row header levels are defined. - * - * @since 0.22.0 - * @type {Number|Array} - */ - rowHeaderWidth: void 0, - - /** - * @description - * Allows setting a custom height of the column headers. You can provide a number or an array of heights, if many column header levels are defined. - * - * @since 0.22.0 - * @type {Number|Array} - */ - columnHeaderHeight: void 0, - - /** - * @description - * Enabling this plugin switches table into one-way data binding where changes are applied into data source (from outside table) - * will be automatically reflected in the table. - * - * For every data change [afterChangesObserved](Hooks.html#event:afterChangesObserved) hook will be fired. - * - * @type {Boolean} - * @default false - */ - observeChanges: void 0, - - /** - * @description - * When passed to the `column` property, allows specifying a custom sorting function for the desired column. - * - * @since 0.24.0 - * @type {Function} - * @example - * ```js - * columns: [ - * { - * sortFunction: function(sortOrder) { - * return function(a, b) { - * // sorting function body. - * // - * // Function parameters: - * // sortOrder: If true, the order is ascending, if false - descending. undefined = original order - * // a, b: Two compared elements. These are 2-element arrays, with the first element being the row index, the second - cell value. - * } - * } - * } - * ] - * ``` - */ - sortFunction: void 0, - - /** - * If defined as 'true', the Autocomplete's suggestion list would be sorted by relevance (the closer to the left the match is, the higher the suggestion). - * - * Option desired for cells of the `'autocomplete'` type. - * - * @type {Boolean} - * @default true - */ - sortByRelevance: true, - - /** - * If defined as 'true', when the user types into the input area the Autocomplete's suggestion list is updated to only - * include those choices starting with what has been typed; if defined as 'false' all suggestions remain shown, with - * those matching what has been typed marked in bold. - * - * @type {Boolean} - * @default true - */ - filter: true, - - /** - * If defined as 'true', filtering in the Autocomplete Editor will be case-sensitive. - * - * @type {Boolean} - * @default: false - */ - filteringCaseSensitive: false -}; - -exports.default = DefaultSettings; - -/***/ }), -/* 89 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.getNormalizedDate = getNormalizedDate; -/* eslint-disable import/prefer-default-export */ - -/** - * Get normalized Date object for the ISO formatted date strings. - * Natively, the date object parsed from a ISO 8601 string will be offsetted by the timezone difference, which may result in returning a wrong date. - * See: Github issue #3338. - * - * @param {String} dateString String representing the date. - * @returns {Date} The proper Date object. - */ -function getNormalizedDate(dateString) { - var nativeDate = new Date(dateString); - - // NaN if dateString is not in ISO format - if (!isNaN(new Date(dateString + "T00:00").getDate())) { - - // Compensate timezone offset - return new Date(nativeDate.getTime() + nativeDate.getTimezoneOffset() * 60000); - } - - return nativeDate; -} - -/***/ }), -/* 90 */ -/***/ (function(module, exports, __webpack_require__) { - -// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) -var $export = __webpack_require__(3); - -$export($export.P, 'Array', {copyWithin: __webpack_require__(277)}); - -__webpack_require__(37)('copyWithin'); - -/***/ }), -/* 91 */ -/***/ (function(module, exports, __webpack_require__) { - -// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) -var $export = __webpack_require__(3); - -$export($export.P, 'Array', {fill: __webpack_require__(278)}); - -__webpack_require__(37)('fill'); - -/***/ }), -/* 92 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined) -var $export = __webpack_require__(3) - , $find = __webpack_require__(52)(6) - , KEY = 'findIndex' - , forced = true; -// Shouldn't skip holes -if(KEY in [])Array(1)[KEY](function(){ forced = false; }); -$export($export.P + $export.F * forced, 'Array', { - findIndex: function findIndex(callbackfn/*, that = undefined */){ - return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); - } -}); -__webpack_require__(37)(KEY); - -/***/ }), -/* 93 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) -var $export = __webpack_require__(3) - , $find = __webpack_require__(52)(5) - , KEY = 'find' - , forced = true; -// Shouldn't skip holes -if(KEY in [])Array(1)[KEY](function(){ forced = false; }); -$export($export.P + $export.F * forced, 'Array', { - find: function find(callbackfn/*, that = undefined */){ - return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); - } -}); -__webpack_require__(37)(KEY); - -/***/ }), -/* 94 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var ctx = __webpack_require__(29) - , $export = __webpack_require__(3) - , toObject = __webpack_require__(41) - , call = __webpack_require__(165) - , isArrayIter = __webpack_require__(161) - , toLength = __webpack_require__(24) - , createProperty = __webpack_require__(73) - , getIterFn = __webpack_require__(176); - -$export($export.S + $export.F * !__webpack_require__(78)(function(iter){ Array.from(iter); }), 'Array', { - // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) - from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){ - var O = toObject(arrayLike) - , C = typeof this == 'function' ? this : Array - , aLen = arguments.length - , mapfn = aLen > 1 ? arguments[1] : undefined - , mapping = mapfn !== undefined - , index = 0 - , iterFn = getIterFn(O) - , length, result, step, iterator; - if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); - // if object isn't iterable or it's array with default iterator - use simple case - if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){ - for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){ - createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); - } - } else { - length = toLength(O.length); - for(result = new C(length); length > index; index++){ - createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); - } - } - result.length = index; - return result; - } -}); - - -/***/ }), -/* 95 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $export = __webpack_require__(3) - , createProperty = __webpack_require__(73); - -// WebKit Array.of isn't generic -$export($export.S + $export.F * __webpack_require__(31)(function(){ - function F(){} - return !(Array.of.call(F) instanceof F); -}), 'Array', { - // 22.1.2.3 Array.of( ...items) - of: function of(/* ...args */){ - var index = 0 - , aLen = arguments.length - , result = new (typeof this == 'function' ? this : Array)(aLen); - while(aLen > index)createProperty(result, index, arguments[index++]); - result.length = aLen; - return result; - } -}); - -/***/ }), -/* 96 */ -/***/ (function(module, exports, __webpack_require__) { - -var dP = __webpack_require__(19).f - , createDesc = __webpack_require__(40) - , has = __webpack_require__(22) - , FProto = Function.prototype - , nameRE = /^\s*function ([^ (]*)/ - , NAME = 'name'; - -var isExtensible = Object.isExtensible || function(){ - return true; -}; - -// 19.2.4.2 name -NAME in FProto || __webpack_require__(21) && dP(FProto, NAME, { - configurable: true, - get: function(){ - try { - var that = this - , name = ('' + that).match(nameRE)[1]; - has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name)); - return name; - } catch(e){ - return ''; - } - } -}); - -/***/ }), -/* 97 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var strong = __webpack_require__(157); - -// 23.1 Map Objects -module.exports = __webpack_require__(53)('Map', function(get){ - return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; -}, { - // 23.1.3.6 Map.prototype.get(key) - get: function get(key){ - var entry = strong.getEntry(this, key); - return entry && entry.v; - }, - // 23.1.3.9 Map.prototype.set(key, value) - set: function set(key, value){ - return strong.def(this, key === 0 ? 0 : key, value); - } -}, strong, true); - -/***/ }), -/* 98 */ -/***/ (function(module, exports, __webpack_require__) { - -// 20.1.2.1 Number.EPSILON -var $export = __webpack_require__(3); - -$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)}); - -/***/ }), -/* 99 */ -/***/ (function(module, exports, __webpack_require__) { - -// 20.1.2.2 Number.isFinite(number) -var $export = __webpack_require__(3) - , _isFinite = __webpack_require__(13).isFinite; - -$export($export.S, 'Number', { - isFinite: function isFinite(it){ - return typeof it == 'number' && _isFinite(it); - } -}); - -/***/ }), -/* 100 */ -/***/ (function(module, exports, __webpack_require__) { - -// 20.1.2.3 Number.isInteger(number) -var $export = __webpack_require__(3); - -$export($export.S, 'Number', {isInteger: __webpack_require__(163)}); - -/***/ }), -/* 101 */ -/***/ (function(module, exports, __webpack_require__) { - -// 20.1.2.4 Number.isNaN(number) -var $export = __webpack_require__(3); - -$export($export.S, 'Number', { - isNaN: function isNaN(number){ - return number != number; - } -}); - -/***/ }), -/* 102 */ -/***/ (function(module, exports, __webpack_require__) { - -// 20.1.2.5 Number.isSafeInteger(number) -var $export = __webpack_require__(3) - , isInteger = __webpack_require__(163) - , abs = Math.abs; - -$export($export.S, 'Number', { - isSafeInteger: function isSafeInteger(number){ - return isInteger(number) && abs(number) <= 0x1fffffffffffff; - } -}); - -/***/ }), -/* 103 */ -/***/ (function(module, exports, __webpack_require__) { - -// 20.1.2.6 Number.MAX_SAFE_INTEGER -var $export = __webpack_require__(3); - -$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff}); - -/***/ }), -/* 104 */ -/***/ (function(module, exports, __webpack_require__) { - -// 20.1.2.10 Number.MIN_SAFE_INTEGER -var $export = __webpack_require__(3); - -$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff}); - -/***/ }), -/* 105 */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.3.1 Object.assign(target, source) -var $export = __webpack_require__(3); - -$export($export.S + $export.F, 'Object', {assign: __webpack_require__(168)}); - -/***/ }), -/* 106 */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.3.10 Object.is(value1, value2) -var $export = __webpack_require__(3); -$export($export.S, 'Object', {is: __webpack_require__(292)}); - -/***/ }), -/* 107 */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.3.19 Object.setPrototypeOf(O, proto) -var $export = __webpack_require__(3); -$export($export.S, 'Object', {setPrototypeOf: __webpack_require__(171).set}); - -/***/ }), -/* 108 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var LIBRARY = __webpack_require__(56) - , global = __webpack_require__(13) - , ctx = __webpack_require__(29) - , classof = __webpack_require__(156) - , $export = __webpack_require__(3) - , isObject = __webpack_require__(15) - , aFunction = __webpack_require__(72) - , anInstance = __webpack_require__(51) - , forOf = __webpack_require__(55) - , speciesConstructor = __webpack_require__(293) - , task = __webpack_require__(85).set - , microtask = __webpack_require__(287)() - , PROMISE = 'Promise' - , TypeError = global.TypeError - , process = global.process - , $Promise = global[PROMISE] - , process = global.process - , isNode = classof(process) == 'process' - , empty = function(){ /* empty */ } - , Internal, GenericPromiseCapability, Wrapper; - -var USE_NATIVE = !!function(){ - try { - // correct subclassing with @@species support - var promise = $Promise.resolve(1) - , FakePromise = (promise.constructor = {})[__webpack_require__(10)('species')] = function(exec){ exec(empty, empty); }; - // unhandled rejections tracking support, NodeJS Promise without it fails @@species test - return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise; - } catch(e){ /* empty */ } -}(); - -// helpers -var sameConstructor = function(a, b){ - // with library wrapper special case - return a === b || a === $Promise && b === Wrapper; -}; -var isThenable = function(it){ - var then; - return isObject(it) && typeof (then = it.then) == 'function' ? then : false; -}; -var newPromiseCapability = function(C){ - return sameConstructor($Promise, C) - ? new PromiseCapability(C) - : new GenericPromiseCapability(C); -}; -var PromiseCapability = GenericPromiseCapability = function(C){ - var resolve, reject; - this.promise = new C(function($$resolve, $$reject){ - if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor'); - resolve = $$resolve; - reject = $$reject; - }); - this.resolve = aFunction(resolve); - this.reject = aFunction(reject); -}; -var perform = function(exec){ - try { - exec(); - } catch(e){ - return {error: e}; - } -}; -var notify = function(promise, isReject){ - if(promise._n)return; - promise._n = true; - var chain = promise._c; - microtask(function(){ - var value = promise._v - , ok = promise._s == 1 - , i = 0; - var run = function(reaction){ - var handler = ok ? reaction.ok : reaction.fail - , resolve = reaction.resolve - , reject = reaction.reject - , domain = reaction.domain - , result, then; - try { - if(handler){ - if(!ok){ - if(promise._h == 2)onHandleUnhandled(promise); - promise._h = 1; - } - if(handler === true)result = value; - else { - if(domain)domain.enter(); - result = handler(value); - if(domain)domain.exit(); - } - if(result === reaction.promise){ - reject(TypeError('Promise-chain cycle')); - } else if(then = isThenable(result)){ - then.call(result, resolve, reject); - } else resolve(result); - } else reject(value); - } catch(e){ - reject(e); - } - }; - while(chain.length > i)run(chain[i++]); // variable length - can't use forEach - promise._c = []; - promise._n = false; - if(isReject && !promise._h)onUnhandled(promise); - }); -}; -var onUnhandled = function(promise){ - task.call(global, function(){ - var value = promise._v - , abrupt, handler, console; - if(isUnhandled(promise)){ - abrupt = perform(function(){ - if(isNode){ - process.emit('unhandledRejection', value, promise); - } else if(handler = global.onunhandledrejection){ - handler({promise: promise, reason: value}); - } else if((console = global.console) && console.error){ - console.error('Unhandled promise rejection', value); - } - }); - // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should - promise._h = isNode || isUnhandled(promise) ? 2 : 1; - } promise._a = undefined; - if(abrupt)throw abrupt.error; - }); -}; -var isUnhandled = function(promise){ - if(promise._h == 1)return false; - var chain = promise._a || promise._c - , i = 0 - , reaction; - while(chain.length > i){ - reaction = chain[i++]; - if(reaction.fail || !isUnhandled(reaction.promise))return false; - } return true; -}; -var onHandleUnhandled = function(promise){ - task.call(global, function(){ - var handler; - if(isNode){ - process.emit('rejectionHandled', promise); - } else if(handler = global.onrejectionhandled){ - handler({promise: promise, reason: promise._v}); - } - }); -}; -var $reject = function(value){ - var promise = this; - if(promise._d)return; - promise._d = true; - promise = promise._w || promise; // unwrap - promise._v = value; - promise._s = 2; - if(!promise._a)promise._a = promise._c.slice(); - notify(promise, true); -}; -var $resolve = function(value){ - var promise = this - , then; - if(promise._d)return; - promise._d = true; - promise = promise._w || promise; // unwrap - try { - if(promise === value)throw TypeError("Promise can't be resolved itself"); - if(then = isThenable(value)){ - microtask(function(){ - var wrapper = {_w: promise, _d: false}; // wrap - try { - then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); - } catch(e){ - $reject.call(wrapper, e); - } - }); - } else { - promise._v = value; - promise._s = 1; - notify(promise, false); - } - } catch(e){ - $reject.call({_w: promise, _d: false}, e); // wrap - } -}; - -// constructor polyfill -if(!USE_NATIVE){ - // 25.4.3.1 Promise(executor) - $Promise = function Promise(executor){ - anInstance(this, $Promise, PROMISE, '_h'); - aFunction(executor); - Internal.call(this); - try { - executor(ctx($resolve, this, 1), ctx($reject, this, 1)); - } catch(err){ - $reject.call(this, err); - } - }; - Internal = function Promise(executor){ - this._c = []; // <- awaiting reactions - this._a = undefined; // <- checked in isUnhandled reactions - this._s = 0; // <- state - this._d = false; // <- done - this._v = undefined; // <- value - this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled - this._n = false; // <- notify - }; - Internal.prototype = __webpack_require__(58)($Promise.prototype, { - // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected) - then: function then(onFulfilled, onRejected){ - var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); - reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; - reaction.fail = typeof onRejected == 'function' && onRejected; - reaction.domain = isNode ? process.domain : undefined; - this._c.push(reaction); - if(this._a)this._a.push(reaction); - if(this._s)notify(this, false); - return reaction.promise; - }, - // 25.4.5.1 Promise.prototype.catch(onRejected) - 'catch': function(onRejected){ - return this.then(undefined, onRejected); - } - }); - PromiseCapability = function(){ - var promise = new Internal; - this.promise = promise; - this.resolve = ctx($resolve, promise, 1); - this.reject = ctx($reject, promise, 1); - }; -} - -$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise}); -__webpack_require__(48)($Promise, PROMISE); -__webpack_require__(172)(PROMISE); -Wrapper = __webpack_require__(44)[PROMISE]; - -// statics -$export($export.S + $export.F * !USE_NATIVE, PROMISE, { - // 25.4.4.5 Promise.reject(r) - reject: function reject(r){ - var capability = newPromiseCapability(this) - , $$reject = capability.reject; - $$reject(r); - return capability.promise; - } -}); -$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { - // 25.4.4.6 Promise.resolve(x) - resolve: function resolve(x){ - // instanceof instead of internal slot check because we should fix it without replacement native Promise core - if(x instanceof $Promise && sameConstructor(x.constructor, this))return x; - var capability = newPromiseCapability(this) - , $$resolve = capability.resolve; - $$resolve(x); - return capability.promise; - } -}); -$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(78)(function(iter){ - $Promise.all(iter)['catch'](empty); -})), PROMISE, { - // 25.4.4.1 Promise.all(iterable) - all: function all(iterable){ - var C = this - , capability = newPromiseCapability(C) - , resolve = capability.resolve - , reject = capability.reject; - var abrupt = perform(function(){ - var values = [] - , index = 0 - , remaining = 1; - forOf(iterable, false, function(promise){ - var $index = index++ - , alreadyCalled = false; - values.push(undefined); - remaining++; - C.resolve(promise).then(function(value){ - if(alreadyCalled)return; - alreadyCalled = true; - values[$index] = value; - --remaining || resolve(values); - }, reject); - }); - --remaining || resolve(values); - }); - if(abrupt)reject(abrupt.error); - return capability.promise; - }, - // 25.4.4.4 Promise.race(iterable) - race: function race(iterable){ - var C = this - , capability = newPromiseCapability(C) - , reject = capability.reject; - var abrupt = perform(function(){ - forOf(iterable, false, function(promise){ - C.resolve(promise).then(capability.resolve, reject); - }); - }); - if(abrupt)reject(abrupt.error); - return capability.promise; - } -}); - -/***/ }), -/* 109 */ -/***/ (function(module, exports, __webpack_require__) { - -// 21.2.5.3 get RegExp.prototype.flags() -if(__webpack_require__(21) && /./g.flags != 'g')__webpack_require__(19).f(RegExp.prototype, 'flags', { - configurable: true, - get: __webpack_require__(282) -}); - -/***/ }), -/* 110 */ -/***/ (function(module, exports, __webpack_require__) { - -// @@match logic -__webpack_require__(54)('match', 1, function(defined, MATCH, $match){ - // 21.1.3.11 String.prototype.match(regexp) - return [function match(regexp){ - 'use strict'; - var O = defined(this) - , fn = regexp == undefined ? undefined : regexp[MATCH]; - return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O)); - }, $match]; -}); - -/***/ }), -/* 111 */ -/***/ (function(module, exports, __webpack_require__) { - -// @@replace logic -__webpack_require__(54)('replace', 2, function(defined, REPLACE, $replace){ - // 21.1.3.14 String.prototype.replace(searchValue, replaceValue) - return [function replace(searchValue, replaceValue){ - 'use strict'; - var O = defined(this) - , fn = searchValue == undefined ? undefined : searchValue[REPLACE]; - return fn !== undefined - ? fn.call(searchValue, O, replaceValue) - : $replace.call(String(O), searchValue, replaceValue); - }, $replace]; -}); - -/***/ }), -/* 112 */ -/***/ (function(module, exports, __webpack_require__) { - -// @@search logic -__webpack_require__(54)('search', 1, function(defined, SEARCH, $search){ - // 21.1.3.15 String.prototype.search(regexp) - return [function search(regexp){ - 'use strict'; - var O = defined(this) - , fn = regexp == undefined ? undefined : regexp[SEARCH]; - return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O)); - }, $search]; -}); - -/***/ }), -/* 113 */ -/***/ (function(module, exports, __webpack_require__) { - -// @@split logic -__webpack_require__(54)('split', 2, function(defined, SPLIT, $split){ - 'use strict'; - var isRegExp = __webpack_require__(164) - , _split = $split - , $push = [].push - , $SPLIT = 'split' - , LENGTH = 'length' - , LAST_INDEX = 'lastIndex'; - if( - 'abbc'[$SPLIT](/(b)*/)[1] == 'c' || - 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 || - 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 || - '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 || - '.'[$SPLIT](/()()/)[LENGTH] > 1 || - ''[$SPLIT](/.?/)[LENGTH] - ){ - var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group - // based on es5-shim implementation, need to rework it - $split = function(separator, limit){ - var string = String(this); - if(separator === undefined && limit === 0)return []; - // If `separator` is not a regex, use native split - if(!isRegExp(separator))return _split.call(string, separator, limit); - var output = []; - var flags = (separator.ignoreCase ? 'i' : '') + - (separator.multiline ? 'm' : '') + - (separator.unicode ? 'u' : '') + - (separator.sticky ? 'y' : ''); - var lastLastIndex = 0; - var splitLimit = limit === undefined ? 4294967295 : limit >>> 0; - // Make `global` and avoid `lastIndex` issues by working with a copy - var separatorCopy = new RegExp(separator.source, flags + 'g'); - var separator2, match, lastIndex, lastLength, i; - // Doesn't need flags gy, but they don't hurt - if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags); - while(match = separatorCopy.exec(string)){ - // `separatorCopy.lastIndex` is not reliable cross-browser - lastIndex = match.index + match[0][LENGTH]; - if(lastIndex > lastLastIndex){ - output.push(string.slice(lastLastIndex, match.index)); - // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG - if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){ - for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined; - }); - if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1)); - lastLength = match[0][LENGTH]; - lastLastIndex = lastIndex; - if(output[LENGTH] >= splitLimit)break; - } - if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop - } - if(lastLastIndex === string[LENGTH]){ - if(lastLength || !separatorCopy.test(''))output.push(''); - } else output.push(string.slice(lastLastIndex)); - return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output; - }; - // Chakra, V8 - } else if('0'[$SPLIT](undefined, 0)[LENGTH]){ - $split = function(separator, limit){ - return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit); - }; - } - // 21.1.3.17 String.prototype.split(separator, limit) - return [function split(separator, limit){ - var O = defined(this) - , fn = separator == undefined ? undefined : separator[SPLIT]; - return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit); - }, $split]; -}); - -/***/ }), -/* 114 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var strong = __webpack_require__(157); - -// 23.2 Set Objects -module.exports = __webpack_require__(53)('Set', function(get){ - return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; -}, { - // 23.2.3.1 Set.prototype.add(value) - add: function add(value){ - return strong.def(this, value = value === 0 ? 0 : value, value); - } -}, strong); - -/***/ }), -/* 115 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $export = __webpack_require__(3) - , $at = __webpack_require__(294)(false); -$export($export.P, 'String', { - // 21.1.3.3 String.prototype.codePointAt(pos) - codePointAt: function codePointAt(pos){ - return $at(this, pos); - } -}); - -/***/ }), -/* 116 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition]) - -var $export = __webpack_require__(3) - , toLength = __webpack_require__(24) - , context = __webpack_require__(84) - , ENDS_WITH = 'endsWith' - , $endsWith = ''[ENDS_WITH]; - -$export($export.P + $export.F * __webpack_require__(76)(ENDS_WITH), 'String', { - endsWith: function endsWith(searchString /*, endPosition = @length */){ - var that = context(this, searchString, ENDS_WITH) - , endPosition = arguments.length > 1 ? arguments[1] : undefined - , len = toLength(that.length) - , end = endPosition === undefined ? len : Math.min(toLength(endPosition), len) - , search = String(searchString); - return $endsWith - ? $endsWith.call(that, search, end) - : that.slice(end - search.length, end) === search; - } -}); - -/***/ }), -/* 117 */ -/***/ (function(module, exports, __webpack_require__) { - -var $export = __webpack_require__(3) - , toIndex = __webpack_require__(59) - , fromCharCode = String.fromCharCode - , $fromCodePoint = String.fromCodePoint; - -// length should be 1, old FF problem -$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { - // 21.1.2.2 String.fromCodePoint(...codePoints) - fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars - var res = [] - , aLen = arguments.length - , i = 0 - , code; - while(aLen > i){ - code = +arguments[i++]; - if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point'); - res.push(code < 0x10000 - ? fromCharCode(code) - : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00) - ); - } return res.join(''); - } -}); - -/***/ }), -/* 118 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -// 21.1.3.7 String.prototype.includes(searchString, position = 0) - -var $export = __webpack_require__(3) - , context = __webpack_require__(84) - , INCLUDES = 'includes'; - -$export($export.P + $export.F * __webpack_require__(76)(INCLUDES), 'String', { - includes: function includes(searchString /*, position = 0 */){ - return !!~context(this, searchString, INCLUDES) - .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined); - } -}); - -/***/ }), -/* 119 */ -/***/ (function(module, exports, __webpack_require__) { - -var $export = __webpack_require__(3) - , toIObject = __webpack_require__(23) - , toLength = __webpack_require__(24); - -$export($export.S, 'String', { - // 21.1.2.4 String.raw(callSite, ...substitutions) - raw: function raw(callSite){ - var tpl = toIObject(callSite.raw) - , len = toLength(tpl.length) - , aLen = arguments.length - , res = [] - , i = 0; - while(len > i){ - res.push(String(tpl[i++])); - if(i < aLen)res.push(String(arguments[i])); - } return res.join(''); - } -}); - -/***/ }), -/* 120 */ -/***/ (function(module, exports, __webpack_require__) { - -var $export = __webpack_require__(3); - -$export($export.P, 'String', { - // 21.1.3.13 String.prototype.repeat(count) - repeat: __webpack_require__(174) -}); - -/***/ }), -/* 121 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -// 21.1.3.18 String.prototype.startsWith(searchString [, position ]) - -var $export = __webpack_require__(3) - , toLength = __webpack_require__(24) - , context = __webpack_require__(84) - , STARTS_WITH = 'startsWith' - , $startsWith = ''[STARTS_WITH]; - -$export($export.P + $export.F * __webpack_require__(76)(STARTS_WITH), 'String', { - startsWith: function startsWith(searchString /*, position = 0 */){ - var that = context(this, searchString, STARTS_WITH) - , index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length)) - , search = String(searchString); - return $startsWith - ? $startsWith.call(that, search, index) - : that.slice(index, index + search.length) === search; - } -}); - -/***/ }), -/* 122 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// ECMAScript 6 symbols shim -var global = __webpack_require__(13) - , has = __webpack_require__(22) - , DESCRIPTORS = __webpack_require__(21) - , $export = __webpack_require__(3) - , redefine = __webpack_require__(33) - , META = __webpack_require__(46).KEY - , $fails = __webpack_require__(31) - , shared = __webpack_require__(83) - , setToStringTag = __webpack_require__(48) - , uid = __webpack_require__(49) - , wks = __webpack_require__(10) - , wksExt = __webpack_require__(175) - , wksDefine = __webpack_require__(295) - , keyOf = __webpack_require__(286) - , enumKeys = __webpack_require__(281) - , isArray = __webpack_require__(162) - , anObject = __webpack_require__(18) - , toIObject = __webpack_require__(23) - , toPrimitive = __webpack_require__(86) - , createDesc = __webpack_require__(40) - , _create = __webpack_require__(79) - , gOPNExt = __webpack_require__(289) - , $GOPD = __webpack_require__(80) - , $DP = __webpack_require__(19) - , $keys = __webpack_require__(39) - , gOPD = $GOPD.f - , dP = $DP.f - , gOPN = gOPNExt.f - , $Symbol = global.Symbol - , $JSON = global.JSON - , _stringify = $JSON && $JSON.stringify - , PROTOTYPE = 'prototype' - , HIDDEN = wks('_hidden') - , TO_PRIMITIVE = wks('toPrimitive') - , isEnum = {}.propertyIsEnumerable - , SymbolRegistry = shared('symbol-registry') - , AllSymbols = shared('symbols') - , OPSymbols = shared('op-symbols') - , ObjectProto = Object[PROTOTYPE] - , USE_NATIVE = typeof $Symbol == 'function' - , QObject = global.QObject; -// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 -var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; - -// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 -var setSymbolDesc = DESCRIPTORS && $fails(function(){ - return _create(dP({}, 'a', { - get: function(){ return dP(this, 'a', {value: 7}).a; } - })).a != 7; -}) ? function(it, key, D){ - var protoDesc = gOPD(ObjectProto, key); - if(protoDesc)delete ObjectProto[key]; - dP(it, key, D); - if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc); -} : dP; - -var wrap = function(tag){ - var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); - sym._k = tag; - return sym; -}; - -var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){ - return typeof it == 'symbol'; -} : function(it){ - return it instanceof $Symbol; -}; - -var $defineProperty = function defineProperty(it, key, D){ - if(it === ObjectProto)$defineProperty(OPSymbols, key, D); - anObject(it); - key = toPrimitive(key, true); - anObject(D); - if(has(AllSymbols, key)){ - if(!D.enumerable){ - if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {})); - it[HIDDEN][key] = true; - } else { - if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false; - D = _create(D, {enumerable: createDesc(0, false)}); - } return setSymbolDesc(it, key, D); - } return dP(it, key, D); -}; -var $defineProperties = function defineProperties(it, P){ - anObject(it); - var keys = enumKeys(P = toIObject(P)) - , i = 0 - , l = keys.length - , key; - while(l > i)$defineProperty(it, key = keys[i++], P[key]); - return it; -}; -var $create = function create(it, P){ - return P === undefined ? _create(it) : $defineProperties(_create(it), P); -}; -var $propertyIsEnumerable = function propertyIsEnumerable(key){ - var E = isEnum.call(this, key = toPrimitive(key, true)); - if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false; - return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; -}; -var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){ - it = toIObject(it); - key = toPrimitive(key, true); - if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return; - var D = gOPD(it, key); - if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true; - return D; -}; -var $getOwnPropertyNames = function getOwnPropertyNames(it){ - var names = gOPN(toIObject(it)) - , result = [] - , i = 0 - , key; - while(names.length > i){ - if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key); - } return result; -}; -var $getOwnPropertySymbols = function getOwnPropertySymbols(it){ - var IS_OP = it === ObjectProto - , names = gOPN(IS_OP ? OPSymbols : toIObject(it)) - , result = [] - , i = 0 - , key; - while(names.length > i){ - if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]); - } return result; -}; - -// 19.4.1.1 Symbol([description]) -if(!USE_NATIVE){ - $Symbol = function Symbol(){ - if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!'); - var tag = uid(arguments.length > 0 ? arguments[0] : undefined); - var $set = function(value){ - if(this === ObjectProto)$set.call(OPSymbols, value); - if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false; - setSymbolDesc(this, tag, createDesc(1, value)); - }; - if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set}); - return wrap(tag); - }; - redefine($Symbol[PROTOTYPE], 'toString', function toString(){ - return this._k; - }); - - $GOPD.f = $getOwnPropertyDescriptor; - $DP.f = $defineProperty; - __webpack_require__(81).f = gOPNExt.f = $getOwnPropertyNames; - __webpack_require__(47).f = $propertyIsEnumerable; - __webpack_require__(57).f = $getOwnPropertySymbols; - - if(DESCRIPTORS && !__webpack_require__(56)){ - redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); - } - - wksExt.f = function(name){ - return wrap(wks(name)); - } -} - -$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol}); - -for(var symbols = ( - // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14 - 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables' -).split(','), i = 0; symbols.length > i; )wks(symbols[i++]); - -for(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]); - -$export($export.S + $export.F * !USE_NATIVE, 'Symbol', { - // 19.4.2.1 Symbol.for(key) - 'for': function(key){ - return has(SymbolRegistry, key += '') - ? SymbolRegistry[key] - : SymbolRegistry[key] = $Symbol(key); - }, - // 19.4.2.5 Symbol.keyFor(sym) - keyFor: function keyFor(key){ - if(isSymbol(key))return keyOf(SymbolRegistry, key); - throw TypeError(key + ' is not a symbol!'); - }, - useSetter: function(){ setter = true; }, - useSimple: function(){ setter = false; } -}); - -$export($export.S + $export.F * !USE_NATIVE, 'Object', { - // 19.1.2.2 Object.create(O [, Properties]) - create: $create, - // 19.1.2.4 Object.defineProperty(O, P, Attributes) - defineProperty: $defineProperty, - // 19.1.2.3 Object.defineProperties(O, Properties) - defineProperties: $defineProperties, - // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) - getOwnPropertyDescriptor: $getOwnPropertyDescriptor, - // 19.1.2.7 Object.getOwnPropertyNames(O) - getOwnPropertyNames: $getOwnPropertyNames, - // 19.1.2.8 Object.getOwnPropertySymbols(O) - getOwnPropertySymbols: $getOwnPropertySymbols -}); - -// 24.3.2 JSON.stringify(value [, replacer [, space]]) -$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){ - var S = $Symbol(); - // MS Edge converts symbol values to JSON as {} - // WebKit converts symbol values to JSON as null - // V8 throws on boxed symbols - return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}'; -})), 'JSON', { - stringify: function stringify(it){ - if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined - var args = [it] - , i = 1 - , replacer, $replacer; - while(arguments.length > i)args.push(arguments[i++]); - replacer = args[1]; - if(typeof replacer == 'function')$replacer = replacer; - if($replacer || !isArray(replacer))replacer = function(key, value){ - if($replacer)value = $replacer.call(this, key, value); - if(!isSymbol(value))return value; - }; - args[1] = replacer; - return _stringify.apply($JSON, args); - } -}); - -// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint) -$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(32)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); -// 19.4.3.5 Symbol.prototype[@@toStringTag] -setToStringTag($Symbol, 'Symbol'); -// 20.2.1.9 Math[@@toStringTag] -setToStringTag(Math, 'Math', true); -// 24.3.3 JSON[@@toStringTag] -setToStringTag(global.JSON, 'JSON', true); - -/***/ }), -/* 123 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var each = __webpack_require__(52)(0) - , redefine = __webpack_require__(33) - , meta = __webpack_require__(46) - , assign = __webpack_require__(168) - , weak = __webpack_require__(158) - , isObject = __webpack_require__(15) - , getWeak = meta.getWeak - , isExtensible = Object.isExtensible - , uncaughtFrozenStore = weak.ufstore - , tmp = {} - , InternalMap; - -var wrapper = function(get){ - return function WeakMap(){ - return get(this, arguments.length > 0 ? arguments[0] : undefined); - }; -}; - -var methods = { - // 23.3.3.3 WeakMap.prototype.get(key) - get: function get(key){ - if(isObject(key)){ - var data = getWeak(key); - if(data === true)return uncaughtFrozenStore(this).get(key); - return data ? data[this._i] : undefined; - } - }, - // 23.3.3.5 WeakMap.prototype.set(key, value) - set: function set(key, value){ - return weak.def(this, key, value); - } -}; - -// 23.3 WeakMap Objects -var $WeakMap = module.exports = __webpack_require__(53)('WeakMap', wrapper, methods, weak, true, true); - -// IE11 WeakMap frozen keys fix -if(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){ - InternalMap = weak.getConstructor(wrapper); - assign(InternalMap.prototype, methods); - meta.NEED = true; - each(['delete', 'has', 'get', 'set'], function(key){ - var proto = $WeakMap.prototype - , method = proto[key]; - redefine(proto, key, function(a, b){ - // store frozen objects on internal weakmap shim - if(isObject(a) && !isExtensible(a)){ - if(!this._f)this._f = new InternalMap; - var result = this._f[key](a, b); - return key == 'set' ? this : result; - // store all the rest on native weakmap - } return method.call(this, a, b); - }); - }); -} - -/***/ }), -/* 124 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var weak = __webpack_require__(158); - -// 23.4 WeakSet Objects -__webpack_require__(53)('WeakSet', function(get){ - return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; -}, { - // 23.4.3.1 WeakSet.prototype.add(value) - add: function add(value){ - return weak.def(this, value, true); - } -}, weak, false, true); - -/***/ }), -/* 125 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// https://github.com/tc39/Array.prototype.includes -var $export = __webpack_require__(3) - , $includes = __webpack_require__(155)(true); - -$export($export.P, 'Array', { - includes: function includes(el /*, fromIndex = 0 */){ - return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); - } -}); - -__webpack_require__(37)('includes'); - -/***/ }), -/* 126 */ -/***/ (function(module, exports, __webpack_require__) { - -// https://github.com/tc39/proposal-object-values-entries -var $export = __webpack_require__(3) - , $entries = __webpack_require__(170)(true); - -$export($export.S, 'Object', { - entries: function entries(it){ - return $entries(it); - } -}); - -/***/ }), -/* 127 */ -/***/ (function(module, exports, __webpack_require__) { - -// https://github.com/tc39/proposal-object-getownpropertydescriptors -var $export = __webpack_require__(3) - , ownKeys = __webpack_require__(291) - , toIObject = __webpack_require__(23) - , gOPD = __webpack_require__(80) - , createProperty = __webpack_require__(73); - -$export($export.S, 'Object', { - getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){ - var O = toIObject(object) - , getDesc = gOPD.f - , keys = ownKeys(O) - , result = {} - , i = 0 - , key; - while(keys.length > i)createProperty(result, key = keys[i++], getDesc(O, key)); - return result; - } -}); - -/***/ }), -/* 128 */ -/***/ (function(module, exports, __webpack_require__) { - -// https://github.com/tc39/proposal-object-values-entries -var $export = __webpack_require__(3) - , $values = __webpack_require__(170)(false); - -$export($export.S, 'Object', { - values: function values(it){ - return $values(it); - } -}); - -/***/ }), -/* 129 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// https://github.com/tc39/proposal-string-pad-start-end -var $export = __webpack_require__(3) - , $pad = __webpack_require__(173); - -$export($export.P, 'String', { - padEnd: function padEnd(maxLength /*, fillString = ' ' */){ - return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false); - } -}); - -/***/ }), -/* 130 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// https://github.com/tc39/proposal-string-pad-start-end -var $export = __webpack_require__(3) - , $pad = __webpack_require__(173); - -$export($export.P, 'String', { - padStart: function padStart(maxLength /*, fillString = ' ' */){ - return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true); - } -}); - -/***/ }), -/* 131 */ -/***/ (function(module, exports, __webpack_require__) { - -var $iterators = __webpack_require__(67) - , redefine = __webpack_require__(33) - , global = __webpack_require__(13) - , hide = __webpack_require__(32) - , Iterators = __webpack_require__(45) - , wks = __webpack_require__(10) - , ITERATOR = wks('iterator') - , TO_STRING_TAG = wks('toStringTag') - , ArrayValues = Iterators.Array; - -for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){ - var NAME = collections[i] - , Collection = global[NAME] - , proto = Collection && Collection.prototype - , key; - if(proto){ - if(!proto[ITERATOR])hide(proto, ITERATOR, ArrayValues); - if(!proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME); - Iterators[NAME] = ArrayValues; - for(key in $iterators)if(!proto[key])redefine(proto, key, $iterators[key], true); - } -} - -/***/ }), -/* 132 */ -/***/ (function(module, exports, __webpack_require__) { - -var $export = __webpack_require__(3) - , $task = __webpack_require__(85); -$export($export.G + $export.B, { - setImmediate: $task.set, - clearImmediate: $task.clear -}); - -/***/ }), -/* 133 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * SheetClip - Spreadsheet Clipboard Parser - * version 0.2 - * - * This tiny library transforms JavaScript arrays to strings that are pasteable by LibreOffice, OpenOffice, - * Google Docs and Microsoft Excel. - * - * Copyright 2012, Marcin Warpechowski - * Licensed under the MIT license. - * http://github.com/warpech/sheetclip/ - */ -/*jslint white: true*/ -(function (global) { - "use strict"; - - function countQuotes(str) { - return str.split('"').length - 1; - } - - var SheetClip = { - /** - * Decode spreadsheet string into array - * - * @param {String} str - * @returns {Array} - */ - parse: function parse(str) { - var r, - rLen, - rows, - arr = [], - a = 0, - c, - cLen, - multiline, - last; - - rows = str.split('\n'); - - if (rows.length > 1 && rows[rows.length - 1] === '') { - rows.pop(); - } - for (r = 0, rLen = rows.length; r < rLen; r += 1) { - rows[r] = rows[r].split('\t'); - - for (c = 0, cLen = rows[r].length; c < cLen; c += 1) { - if (!arr[a]) { - arr[a] = []; - } - if (multiline && c === 0) { - last = arr[a].length - 1; - arr[a][last] = arr[a][last] + '\n' + rows[r][0]; - - if (multiline && countQuotes(rows[r][0]) & 1) { - //& 1 is a bitwise way of performing mod 2 - multiline = false; - arr[a][last] = arr[a][last].substring(0, arr[a][last].length - 1).replace(/""/g, '"'); - } - } else { - if (c === cLen - 1 && rows[r][c].indexOf('"') === 0 && countQuotes(rows[r][c]) & 1) { - arr[a].push(rows[r][c].substring(1).replace(/""/g, '"')); - multiline = true; - } else { - arr[a].push(rows[r][c].replace(/""/g, '"')); - multiline = false; - } - } - } - if (!multiline) { - a += 1; - } - } - - return arr; - }, - - /** - * Encode array into valid spreadsheet string - * - * @param arr - * @returns {String} - */ - stringify: function stringify(arr) { - var r, - rLen, - c, - cLen, - str = '', - val; - - for (r = 0, rLen = arr.length; r < rLen; r += 1) { - cLen = arr[r].length; - - for (c = 0; c < cLen; c += 1) { - if (c > 0) { - str += '\t'; - } - val = arr[r][c]; - - if (typeof val === 'string') { - if (val.indexOf('\n') > -1) { - str += '"' + val.replace(/"/g, '""') + '"'; - } else { - str += val; - } - } else if (val === null || val === void 0) { - // void 0 resolves to undefined - str += ''; - } else { - str += val; - } - } - - if (r !== rLen - 1) { - str += '\n'; - } - } - - return str; - } - }; - - if (true) { - exports.parse = SheetClip.parse; - exports.stringify = SheetClip.stringify; - } else { - global.SheetClip = SheetClip; - } -})(window); - -/***/ }), -/* 134 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/*! - * https://github.com/Starcounter-Jack/JSON-Patch - * json-patch-duplex.js version: 0.5.7 - * (c) 2013 Joachim Wester - * MIT license - */ -var __extends = undefined && undefined.__extends || function (d, b) { - for (var p in b) { - if (b.hasOwnProperty(p)) d[p] = b[p]; - }function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -}; -var OriginalError = Error; -var jsonpatch; -(function (jsonpatch) { - var _objectKeys = function _objectKeys(obj) { - if (_isArray(obj)) { - var keys = new Array(obj.length); - for (var k = 0; k < keys.length; k++) { - keys[k] = "" + k; - } - return keys; - } - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var i in obj) { - if (obj.hasOwnProperty(i)) { - keys.push(i); - } - } - return keys; - }; - function _equals(a, b) { - switch (typeof a === 'undefined' ? 'undefined' : _typeof(a)) { - case 'undefined': //backward compatibility, but really I think we should return false - case 'boolean': - case 'string': - case 'number': - return a === b; - case 'object': - if (a === null) return b === null; - if (_isArray(a)) { - if (!_isArray(b) || a.length !== b.length) return false; - for (var i = 0, l = a.length; i < l; i++) { - if (!_equals(a[i], b[i])) return false; - }return true; - } - var bKeys = _objectKeys(b); - var bLength = bKeys.length; - if (_objectKeys(a).length !== bLength) return false; - for (var i = 0; i < bLength; i++) { - if (!_equals(a[i], b[i])) return false; - }return true; - default: - return false; - } - } - /* We use a Javascript hash to store each - function. Each hash entry (property) uses - the operation identifiers specified in rfc6902. - In this way, we can map each patch operation - to its dedicated function in efficient way. - */ - /* The operations applicable to an object */ - var objOps = { - add: function add(obj, key) { - obj[key] = this.value; - return true; - }, - remove: function remove(obj, key) { - delete obj[key]; - return true; - }, - replace: function replace(obj, key) { - obj[key] = this.value; - return true; - }, - move: function move(obj, key, tree) { - var temp = { op: "_get", path: this.from }; - apply(tree, [temp]); - apply(tree, [{ op: "remove", path: this.from }]); - apply(tree, [{ op: "add", path: this.path, value: temp.value }]); - return true; - }, - copy: function copy(obj, key, tree) { - var temp = { op: "_get", path: this.from }; - apply(tree, [temp]); - apply(tree, [{ op: "add", path: this.path, value: temp.value }]); - return true; - }, - test: function test(obj, key) { - return _equals(obj[key], this.value); - }, - _get: function _get(obj, key) { - this.value = obj[key]; - } - }; - /* The operations applicable to an array. Many are the same as for the object */ - var arrOps = { - add: function add(arr, i) { - arr.splice(i, 0, this.value); - return true; - }, - remove: function remove(arr, i) { - arr.splice(i, 1); - return true; - }, - replace: function replace(arr, i) { - arr[i] = this.value; - return true; - }, - move: objOps.move, - copy: objOps.copy, - test: objOps.test, - _get: objOps._get - }; - /* The operations applicable to object root. Many are the same as for the object */ - var rootOps = { - add: function add(obj) { - rootOps.remove.call(this, obj); - for (var key in this.value) { - if (this.value.hasOwnProperty(key)) { - obj[key] = this.value[key]; - } - } - return true; - }, - remove: function remove(obj) { - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - objOps.remove.call(this, obj, key); - } - } - return true; - }, - replace: function replace(obj) { - apply(obj, [{ op: "remove", path: this.path }]); - apply(obj, [{ op: "add", path: this.path, value: this.value }]); - return true; - }, - move: objOps.move, - copy: objOps.copy, - test: function test(obj) { - return JSON.stringify(obj) === JSON.stringify(this.value); - }, - _get: function _get(obj) { - this.value = obj; - } - }; - var observeOps = { - add: function add(patches, path) { - var patch = { - op: "add", - path: path + escapePathComponent(this.name), - value: this.object[this.name] }; - patches.push(patch); - }, - 'delete': function _delete(patches, path) { - var patch = { - op: "remove", - path: path + escapePathComponent(this.name) - }; - patches.push(patch); - }, - update: function update(patches, path) { - var patch = { - op: "replace", - path: path + escapePathComponent(this.name), - value: this.object[this.name] - }; - patches.push(patch); - } - }; - function escapePathComponent(str) { - if (str.indexOf('/') === -1 && str.indexOf('~') === -1) return str; - return str.replace(/~/g, '~0').replace(/\//g, '~1'); - } - function _getPathRecursive(root, obj) { - var found; - for (var key in root) { - if (root.hasOwnProperty(key)) { - if (root[key] === obj) { - return escapePathComponent(key) + '/'; - } else if (_typeof(root[key]) === 'object') { - found = _getPathRecursive(root[key], obj); - if (found != '') { - return escapePathComponent(key) + '/' + found; - } - } - } - } - return ''; - } - function getPath(root, obj) { - if (root === obj) { - return '/'; - } - var path = _getPathRecursive(root, obj); - if (path === '') { - throw new OriginalError("Object not found in root"); - } - return '/' + path; - } - var beforeDict = []; - var Mirror = function () { - function Mirror(obj) { - this.observers = []; - this.obj = obj; - } - return Mirror; - }(); - var ObserverInfo = function () { - function ObserverInfo(callback, observer) { - this.callback = callback; - this.observer = observer; - } - return ObserverInfo; - }(); - function getMirror(obj) { - for (var i = 0, ilen = beforeDict.length; i < ilen; i++) { - if (beforeDict[i].obj === obj) { - return beforeDict[i]; - } - } - } - function getObserverFromMirror(mirror, callback) { - for (var j = 0, jlen = mirror.observers.length; j < jlen; j++) { - if (mirror.observers[j].callback === callback) { - return mirror.observers[j].observer; - } - } - } - function removeObserverFromMirror(mirror, observer) { - for (var j = 0, jlen = mirror.observers.length; j < jlen; j++) { - if (mirror.observers[j].observer === observer) { - mirror.observers.splice(j, 1); - return; - } - } - } - function unobserve(root, observer) { - observer.unobserve(); - } - jsonpatch.unobserve = unobserve; - function deepClone(obj) { - if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === "object") { - return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5 - } else { - return obj; //no need to clone primitives - } - } - function observe(obj, callback) { - var patches = []; - var root = obj; - var observer; - var mirror = getMirror(obj); - if (!mirror) { - mirror = new Mirror(obj); - beforeDict.push(mirror); - } else { - observer = getObserverFromMirror(mirror, callback); - } - if (observer) { - return observer; - } - observer = {}; - mirror.value = deepClone(obj); - if (callback) { - observer.callback = callback; - observer.next = null; - var intervals = this.intervals || [100, 1000, 10000, 60000]; - if (intervals.push === void 0) { - throw new OriginalError("jsonpatch.intervals must be an array"); - } - var currentInterval = 0; - var dirtyCheck = function dirtyCheck() { - generate(observer); - }; - var fastCheck = function fastCheck() { - clearTimeout(observer.next); - observer.next = setTimeout(function () { - dirtyCheck(); - currentInterval = 0; - observer.next = setTimeout(slowCheck, intervals[currentInterval++]); - }, 0); - }; - var slowCheck = function slowCheck() { - dirtyCheck(); - if (currentInterval == intervals.length) currentInterval = intervals.length - 1; - observer.next = setTimeout(slowCheck, intervals[currentInterval++]); - }; - if (typeof window !== 'undefined') { - if (window.addEventListener) { - window.addEventListener('mousedown', fastCheck); - window.addEventListener('mouseup', fastCheck); - window.addEventListener('keydown', fastCheck); - } else { - document.documentElement.attachEvent('onmousedown', fastCheck); - document.documentElement.attachEvent('onmouseup', fastCheck); - document.documentElement.attachEvent('onkeydown', fastCheck); - } - } - observer.next = setTimeout(slowCheck, intervals[currentInterval++]); - } - observer.patches = patches; - observer.object = obj; - observer.unobserve = function () { - generate(observer); - clearTimeout(observer.next); - removeObserverFromMirror(mirror, observer); - if (typeof window !== 'undefined') { - if (window.removeEventListener) { - window.removeEventListener('mousedown', fastCheck); - window.removeEventListener('mouseup', fastCheck); - window.removeEventListener('keydown', fastCheck); - } else { - document.documentElement.detachEvent('onmousedown', fastCheck); - document.documentElement.detachEvent('onmouseup', fastCheck); - document.documentElement.detachEvent('onkeydown', fastCheck); - } - } - }; - mirror.observers.push(new ObserverInfo(callback, observer)); - return observer; - } - jsonpatch.observe = observe; - function generate(observer) { - var mirror; - for (var i = 0, ilen = beforeDict.length; i < ilen; i++) { - if (beforeDict[i].obj === observer.object) { - mirror = beforeDict[i]; - break; - } - } - _generate(mirror.value, observer.object, observer.patches, ""); - if (observer.patches.length) { - apply(mirror.value, observer.patches); - } - var temp = observer.patches; - if (temp.length > 0) { - observer.patches = []; - if (observer.callback) { - observer.callback(temp); - } - } - return temp; - } - jsonpatch.generate = generate; - // Dirty check if obj is different from mirror, generate patches and update mirror - function _generate(mirror, obj, patches, path) { - var newKeys = _objectKeys(obj); - var oldKeys = _objectKeys(mirror); - var changed = false; - var deleted = false; - //if ever "move" operation is implemented here, make sure this test runs OK: "should not generate the same patch twice (move)" - for (var t = oldKeys.length - 1; t >= 0; t--) { - var key = oldKeys[t]; - var oldVal = mirror[key]; - if (obj.hasOwnProperty(key)) { - var newVal = obj[key]; - if ((typeof oldVal === 'undefined' ? 'undefined' : _typeof(oldVal)) == "object" && oldVal != null && (typeof newVal === 'undefined' ? 'undefined' : _typeof(newVal)) == "object" && newVal != null) { - _generate(oldVal, newVal, patches, path + "/" + escapePathComponent(key)); - } else { - if (oldVal != newVal) { - changed = true; - patches.push({ op: "replace", path: path + "/" + escapePathComponent(key), value: deepClone(newVal) }); - } - } - } else { - patches.push({ op: "remove", path: path + "/" + escapePathComponent(key) }); - deleted = true; // property has been deleted - } - } - if (!deleted && newKeys.length == oldKeys.length) { - return; - } - for (var t = 0; t < newKeys.length; t++) { - var key = newKeys[t]; - if (!mirror.hasOwnProperty(key)) { - patches.push({ op: "add", path: path + "/" + escapePathComponent(key), value: deepClone(obj[key]) }); - } - } - } - var _isArray; - if (Array.isArray) { - _isArray = Array.isArray; - } else { - _isArray = function _isArray(obj) { - return obj.push && typeof obj.length === 'number'; - }; - } - //3x faster than cached /^\d+$/.test(str) - function isInteger(str) { - var i = 0; - var len = str.length; - var charCode; - while (i < len) { - charCode = str.charCodeAt(i); - if (charCode >= 48 && charCode <= 57) { - i++; - continue; - } - return false; - } - return true; - } - /// Apply a json-patch operation on an object tree - function apply(tree, patches, validate) { - var result = false, - p = 0, - plen = patches.length, - patch, - key; - while (p < plen) { - patch = patches[p]; - p++; - // Find the object - var path = patch.path || ""; - var keys = path.split('/'); - var obj = tree; - var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift - var len = keys.length; - var existingPathFragment = undefined; - while (true) { - key = keys[t]; - if (validate) { - if (existingPathFragment === undefined) { - if (obj[key] === undefined) { - existingPathFragment = keys.slice(0, t).join('/'); - } else if (t == len - 1) { - existingPathFragment = patch.path; - } - if (existingPathFragment !== undefined) { - this.validator(patch, p - 1, tree, existingPathFragment); - } - } - } - t++; - if (key === undefined) { - if (t >= len) { - result = rootOps[patch.op].call(patch, obj, key, tree); // Apply patch - break; - } - } - if (_isArray(obj)) { - if (key === '-') { - key = obj.length; - } else { - if (validate && !isInteger(key)) { - throw new JsonPatchError("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index", "OPERATION_PATH_ILLEGAL_ARRAY_INDEX", p - 1, patch.path, patch); - } - key = parseInt(key, 10); - } - if (t >= len) { - if (validate && patch.op === "add" && key > obj.length) { - throw new JsonPatchError("The specified index MUST NOT be greater than the number of elements in the array", "OPERATION_VALUE_OUT_OF_BOUNDS", p - 1, patch.path, patch); - } - result = arrOps[patch.op].call(patch, obj, key, tree); // Apply patch - break; - } - } else { - if (key && key.indexOf('~') != -1) key = key.replace(/~1/g, '/').replace(/~0/g, '~'); // escape chars - if (t >= len) { - result = objOps[patch.op].call(patch, obj, key, tree); // Apply patch - break; - } - } - obj = obj[key]; - } - } - return result; - } - jsonpatch.apply = apply; - function compare(tree1, tree2) { - var patches = []; - _generate(tree1, tree2, patches, ''); - return patches; - } - jsonpatch.compare = compare; - var JsonPatchError = function (_super) { - __extends(JsonPatchError, _super); - function JsonPatchError(message, name, index, operation, tree) { - _super.call(this, message); - this.message = message; - this.name = name; - this.index = index; - this.operation = operation; - this.tree = tree; - } - return JsonPatchError; - }(OriginalError); - jsonpatch.JsonPatchError = JsonPatchError; - jsonpatch.Error = JsonPatchError; - /** - * Recursively checks whether an object has any undefined values inside. - */ - function hasUndefined(obj) { - if (obj === undefined) { - return true; - } - if (typeof obj == "array" || (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) == "object") { - for (var i in obj) { - if (hasUndefined(obj[i])) { - return true; - } - } - } - return false; - } - /** - * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error. - * @param {object} operation - operation object (patch) - * @param {number} index - index of operation in the sequence - * @param {object} [tree] - object where the operation is supposed to be applied - * @param {string} [existingPathFragment] - comes along with `tree` - */ - function validator(operation, index, tree, existingPathFragment) { - if ((typeof operation === 'undefined' ? 'undefined' : _typeof(operation)) !== 'object' || operation === null || _isArray(operation)) { - throw new JsonPatchError('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, tree); - } else if (!objOps[operation.op]) { - throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, tree); - } else if (typeof operation.path !== 'string') { - throw new JsonPatchError('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, tree); - } else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') { - throw new JsonPatchError('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, tree); - } else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) { - throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, tree); - } else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined(operation.value)) { - throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, tree); - } else if (tree) { - if (operation.op == "add") { - var pathLen = operation.path.split("/").length; - var existingPathLen = existingPathFragment.split("/").length; - if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) { - throw new JsonPatchError('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, tree); - } - } else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') { - if (operation.path !== existingPathFragment) { - throw new JsonPatchError('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, tree); - } - } else if (operation.op === 'move' || operation.op === 'copy') { - var existingValue = { op: "_get", path: operation.from, value: undefined }; - var error = jsonpatch.validate([existingValue], tree); - if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') { - throw new JsonPatchError('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, tree); - } - } - } - } - jsonpatch.validator = validator; - /** - * Validates a sequence of operations. If `tree` parameter is provided, the sequence is additionally validated against the object tree. - * If error is encountered, returns a JsonPatchError object - * @param sequence - * @param tree - * @returns {JsonPatchError|undefined} - */ - function validate(sequence, tree) { - try { - if (!_isArray(sequence)) { - throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY'); - } - if (tree) { - tree = JSON.parse(JSON.stringify(tree)); //clone tree so that we can safely try applying operations - apply.call(this, tree, sequence, true); - } else { - for (var i = 0; i < sequence.length; i++) { - this.validator(sequence[i], i); - } - } - } catch (e) { - if (e instanceof JsonPatchError) { - return e; - } else { - throw e; - } - } - } - jsonpatch.validate = validate; -})(jsonpatch || (jsonpatch = {})); -if (true) { - exports.apply = jsonpatch.apply; - exports.observe = jsonpatch.observe; - exports.unobserve = jsonpatch.unobserve; - exports.generate = jsonpatch.generate; - exports.compare = jsonpatch.compare; - exports.validate = jsonpatch.validate; - exports.validator = jsonpatch.validator; - exports.JsonPatchError = jsonpatch.JsonPatchError; - exports.Error = jsonpatch.Error; -} - -/***/ }), -/* 135 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _event = __webpack_require__(7); - -var _object = __webpack_require__(1); - -var _browser = __webpack_require__(25); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _coords = __webpack_require__(42); - -var _coords2 = _interopRequireDefault(_coords); - -var _base = __webpack_require__(28); - -var _base2 = _interopRequireDefault(_base); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * - */ -var Border = function () { - /** - * @param {Walkontable} wotInstance - * @param {Object} settings - */ - function Border(wotInstance, settings) { - _classCallCheck(this, Border); - - if (!settings) { - return; - } - this.eventManager = new _eventManager2.default(wotInstance); - this.instance = wotInstance; - this.wot = wotInstance; - this.settings = settings; - this.mouseDown = false; - this.main = null; - - this.top = null; - this.left = null; - this.bottom = null; - this.right = null; - - this.topStyle = null; - this.leftStyle = null; - this.bottomStyle = null; - this.rightStyle = null; - - this.cornerDefaultStyle = { - width: '5px', - height: '5px', - borderWidth: '2px', - borderStyle: 'solid', - borderColor: '#FFF' - }; - this.corner = null; - this.cornerStyle = null; - - this.createBorders(settings); - this.registerListeners(); - } - - /** - * Register all necessary events - */ - - - _createClass(Border, [{ - key: 'registerListeners', - value: function registerListeners() { - var _this2 = this; - - this.eventManager.addEventListener(document.body, 'mousedown', function () { - return _this2.onMouseDown(); - }); - this.eventManager.addEventListener(document.body, 'mouseup', function () { - return _this2.onMouseUp(); - }); - - var _loop = function _loop(c, len) { - _this2.eventManager.addEventListener(_this2.main.childNodes[c], 'mouseenter', function (event) { - return _this2.onMouseEnter(event, _this2.main.childNodes[c]); - }); - }; - - for (var c = 0, len = this.main.childNodes.length; c < len; c++) { - _loop(c, len); - } - } - - /** - * Mouse down listener - * - * @private - */ - - }, { - key: 'onMouseDown', - value: function onMouseDown() { - this.mouseDown = true; - } - - /** - * Mouse up listener - * - * @private - */ - - }, { - key: 'onMouseUp', - value: function onMouseUp() { - this.mouseDown = false; - } - - /** - * Mouse enter listener for fragment selection functionality. - * - * @private - * @param {Event} event Dom event - * @param {HTMLElement} parentElement Part of border element. - */ - - }, { - key: 'onMouseEnter', - value: function onMouseEnter(event, parentElement) { - if (!this.mouseDown || !this.wot.getSetting('hideBorderOnMouseDownOver')) { - return; - } - event.preventDefault(); - (0, _event.stopImmediatePropagation)(event); - - var _this = this; - var bounds = parentElement.getBoundingClientRect(); - // Hide border to prevents selection jumping when fragmentSelection is enabled. - parentElement.style.display = 'none'; - - function isOutside(event) { - if (event.clientY < Math.floor(bounds.top)) { - return true; - } - if (event.clientY > Math.ceil(bounds.top + bounds.height)) { - return true; - } - if (event.clientX < Math.floor(bounds.left)) { - return true; - } - if (event.clientX > Math.ceil(bounds.left + bounds.width)) { - return true; - } - } - - function handler(event) { - if (isOutside(event)) { - _this.eventManager.removeEventListener(document.body, 'mousemove', handler); - parentElement.style.display = 'block'; - } - } - - this.eventManager.addEventListener(document.body, 'mousemove', handler); - } - - /** - * Create border elements - * - * @param {Object} settings - */ - - }, { - key: 'createBorders', - value: function createBorders(settings) { - this.main = document.createElement('div'); - - var borderDivs = ['top', 'left', 'bottom', 'right', 'corner']; - var style = this.main.style; - style.position = 'absolute'; - style.top = 0; - style.left = 0; - - for (var i = 0; i < 5; i++) { - var position = borderDivs[i]; - var div = document.createElement('div'); - div.className = 'wtBorder ' + (this.settings.className || ''); // + borderDivs[i]; - - if (this.settings[position] && this.settings[position].hide) { - div.className += ' hidden'; - } - style = div.style; - style.backgroundColor = this.settings[position] && this.settings[position].color ? this.settings[position].color : settings.border.color; - style.height = this.settings[position] && this.settings[position].width ? this.settings[position].width + 'px' : settings.border.width + 'px'; - style.width = this.settings[position] && this.settings[position].width ? this.settings[position].width + 'px' : settings.border.width + 'px'; - - this.main.appendChild(div); - } - this.top = this.main.childNodes[0]; - this.left = this.main.childNodes[1]; - this.bottom = this.main.childNodes[2]; - this.right = this.main.childNodes[3]; - - this.topStyle = this.top.style; - this.leftStyle = this.left.style; - this.bottomStyle = this.bottom.style; - this.rightStyle = this.right.style; - - this.corner = this.main.childNodes[4]; - this.corner.className += ' corner'; - this.cornerStyle = this.corner.style; - this.cornerStyle.width = this.cornerDefaultStyle.width; - this.cornerStyle.height = this.cornerDefaultStyle.height; - this.cornerStyle.border = [this.cornerDefaultStyle.borderWidth, this.cornerDefaultStyle.borderStyle, this.cornerDefaultStyle.borderColor].join(' '); - - if ((0, _browser.isMobileBrowser)()) { - this.createMultipleSelectorHandles(); - } - this.disappear(); - - if (!this.wot.wtTable.bordersHolder) { - this.wot.wtTable.bordersHolder = document.createElement('div'); - this.wot.wtTable.bordersHolder.className = 'htBorders'; - this.wot.wtTable.spreader.appendChild(this.wot.wtTable.bordersHolder); - } - this.wot.wtTable.bordersHolder.insertBefore(this.main, this.wot.wtTable.bordersHolder.firstChild); - } - - /** - * Create multiple selector handler for mobile devices - */ - - }, { - key: 'createMultipleSelectorHandles', - value: function createMultipleSelectorHandles() { - this.selectionHandles = { - topLeft: document.createElement('DIV'), - topLeftHitArea: document.createElement('DIV'), - bottomRight: document.createElement('DIV'), - bottomRightHitArea: document.createElement('DIV') - }; - var width = 10; - var hitAreaWidth = 40; - - this.selectionHandles.topLeft.className = 'topLeftSelectionHandle'; - this.selectionHandles.topLeftHitArea.className = 'topLeftSelectionHandle-HitArea'; - this.selectionHandles.bottomRight.className = 'bottomRightSelectionHandle'; - this.selectionHandles.bottomRightHitArea.className = 'bottomRightSelectionHandle-HitArea'; - - this.selectionHandles.styles = { - topLeft: this.selectionHandles.topLeft.style, - topLeftHitArea: this.selectionHandles.topLeftHitArea.style, - bottomRight: this.selectionHandles.bottomRight.style, - bottomRightHitArea: this.selectionHandles.bottomRightHitArea.style - }; - - var hitAreaStyle = { - position: 'absolute', - height: hitAreaWidth + 'px', - width: hitAreaWidth + 'px', - 'border-radius': parseInt(hitAreaWidth / 1.5, 10) + 'px' - }; - - for (var prop in hitAreaStyle) { - if ((0, _object.hasOwnProperty)(hitAreaStyle, prop)) { - this.selectionHandles.styles.bottomRightHitArea[prop] = hitAreaStyle[prop]; - this.selectionHandles.styles.topLeftHitArea[prop] = hitAreaStyle[prop]; - } - } - - var handleStyle = { - position: 'absolute', - height: width + 'px', - width: width + 'px', - 'border-radius': parseInt(width / 1.5, 10) + 'px', - background: '#F5F5FF', - border: '1px solid #4285c8' - }; - - for (var _prop in handleStyle) { - if ((0, _object.hasOwnProperty)(handleStyle, _prop)) { - this.selectionHandles.styles.bottomRight[_prop] = handleStyle[_prop]; - this.selectionHandles.styles.topLeft[_prop] = handleStyle[_prop]; - } - } - this.main.appendChild(this.selectionHandles.topLeft); - this.main.appendChild(this.selectionHandles.bottomRight); - this.main.appendChild(this.selectionHandles.topLeftHitArea); - this.main.appendChild(this.selectionHandles.bottomRightHitArea); - } - }, { - key: 'isPartRange', - value: function isPartRange(row, col) { - if (this.wot.selections.area.cellRange) { - if (row != this.wot.selections.area.cellRange.to.row || col != this.wot.selections.area.cellRange.to.col) { - return true; - } - } - - return false; - } - }, { - key: 'updateMultipleSelectionHandlesPosition', - value: function updateMultipleSelectionHandlesPosition(row, col, top, left, width, height) { - var handleWidth = parseInt(this.selectionHandles.styles.topLeft.width, 10); - var hitAreaWidth = parseInt(this.selectionHandles.styles.topLeftHitArea.width, 10); - - this.selectionHandles.styles.topLeft.top = parseInt(top - handleWidth, 10) + 'px'; - this.selectionHandles.styles.topLeft.left = parseInt(left - handleWidth, 10) + 'px'; - - this.selectionHandles.styles.topLeftHitArea.top = parseInt(top - hitAreaWidth / 4 * 3, 10) + 'px'; - this.selectionHandles.styles.topLeftHitArea.left = parseInt(left - hitAreaWidth / 4 * 3, 10) + 'px'; - - this.selectionHandles.styles.bottomRight.top = parseInt(top + height, 10) + 'px'; - this.selectionHandles.styles.bottomRight.left = parseInt(left + width, 10) + 'px'; - - this.selectionHandles.styles.bottomRightHitArea.top = parseInt(top + height - hitAreaWidth / 4, 10) + 'px'; - this.selectionHandles.styles.bottomRightHitArea.left = parseInt(left + width - hitAreaWidth / 4, 10) + 'px'; - - if (this.settings.border.multipleSelectionHandlesVisible && this.settings.border.multipleSelectionHandlesVisible()) { - this.selectionHandles.styles.topLeft.display = 'block'; - this.selectionHandles.styles.topLeftHitArea.display = 'block'; - - if (this.isPartRange(row, col)) { - this.selectionHandles.styles.bottomRight.display = 'none'; - this.selectionHandles.styles.bottomRightHitArea.display = 'none'; - } else { - this.selectionHandles.styles.bottomRight.display = 'block'; - this.selectionHandles.styles.bottomRightHitArea.display = 'block'; - } - } else { - this.selectionHandles.styles.topLeft.display = 'none'; - this.selectionHandles.styles.bottomRight.display = 'none'; - this.selectionHandles.styles.topLeftHitArea.display = 'none'; - this.selectionHandles.styles.bottomRightHitArea.display = 'none'; - } - - if (row == this.wot.wtSettings.getSetting('fixedRowsTop') || col == this.wot.wtSettings.getSetting('fixedColumnsLeft')) { - this.selectionHandles.styles.topLeft.zIndex = '9999'; - this.selectionHandles.styles.topLeftHitArea.zIndex = '9999'; - } else { - this.selectionHandles.styles.topLeft.zIndex = ''; - this.selectionHandles.styles.topLeftHitArea.zIndex = ''; - } - } - - /** - * Show border around one or many cells - * - * @param {Array} corners - */ - - }, { - key: 'appear', - value: function appear(corners) { - if (this.disabled) { - return; - } - var isMultiple, fromTD, toTD, fromOffset, toOffset, containerOffset, top, minTop, left, minLeft, height, width, fromRow, fromColumn, toRow, toColumn, trimmingContainer, cornerOverlappingContainer, ilen; - - ilen = this.wot.wtTable.getRenderedRowsCount(); - - for (var i = 0; i < ilen; i++) { - var s = this.wot.wtTable.rowFilter.renderedToSource(i); - - if (s >= corners[0] && s <= corners[2]) { - fromRow = s; - break; - } - } - - for (var _i = ilen - 1; _i >= 0; _i--) { - var _s = this.wot.wtTable.rowFilter.renderedToSource(_i); - - if (_s >= corners[0] && _s <= corners[2]) { - toRow = _s; - break; - } - } - - ilen = this.wot.wtTable.getRenderedColumnsCount(); - - for (var _i2 = 0; _i2 < ilen; _i2++) { - var _s2 = this.wot.wtTable.columnFilter.renderedToSource(_i2); - - if (_s2 >= corners[1] && _s2 <= corners[3]) { - fromColumn = _s2; - break; - } - } - - for (var _i3 = ilen - 1; _i3 >= 0; _i3--) { - var _s3 = this.wot.wtTable.columnFilter.renderedToSource(_i3); - - if (_s3 >= corners[1] && _s3 <= corners[3]) { - toColumn = _s3; - break; - } - } - if (fromRow === void 0 || fromColumn === void 0) { - this.disappear(); - - return; - } - isMultiple = fromRow !== toRow || fromColumn !== toColumn; - fromTD = this.wot.wtTable.getCell(new _coords2.default(fromRow, fromColumn)); - toTD = isMultiple ? this.wot.wtTable.getCell(new _coords2.default(toRow, toColumn)) : fromTD; - fromOffset = (0, _element.offset)(fromTD); - toOffset = isMultiple ? (0, _element.offset)(toTD) : fromOffset; - containerOffset = (0, _element.offset)(this.wot.wtTable.TABLE); - - minTop = fromOffset.top; - height = toOffset.top + (0, _element.outerHeight)(toTD) - minTop; - minLeft = fromOffset.left; - width = toOffset.left + (0, _element.outerWidth)(toTD) - minLeft; - - top = minTop - containerOffset.top - 1; - left = minLeft - containerOffset.left - 1; - var style = (0, _element.getComputedStyle)(fromTD); - - if (parseInt(style.borderTopWidth, 10) > 0) { - top += 1; - height = height > 0 ? height - 1 : 0; - } - if (parseInt(style.borderLeftWidth, 10) > 0) { - left += 1; - width = width > 0 ? width - 1 : 0; - } - - this.topStyle.top = top + 'px'; - this.topStyle.left = left + 'px'; - this.topStyle.width = width + 'px'; - this.topStyle.display = 'block'; - - this.leftStyle.top = top + 'px'; - this.leftStyle.left = left + 'px'; - this.leftStyle.height = height + 'px'; - this.leftStyle.display = 'block'; - - var delta = Math.floor(this.settings.border.width / 2); - - this.bottomStyle.top = top + height - delta + 'px'; - this.bottomStyle.left = left + 'px'; - this.bottomStyle.width = width + 'px'; - this.bottomStyle.display = 'block'; - - this.rightStyle.top = top + 'px'; - this.rightStyle.left = left + width - delta + 'px'; - this.rightStyle.height = height + 1 + 'px'; - this.rightStyle.display = 'block'; - - if ((0, _browser.isMobileBrowser)() || !this.hasSetting(this.settings.border.cornerVisible) || this.isPartRange(toRow, toColumn)) { - this.cornerStyle.display = 'none'; - } else { - this.cornerStyle.top = top + height - 4 + 'px'; - this.cornerStyle.left = left + width - 4 + 'px'; - this.cornerStyle.borderRightWidth = this.cornerDefaultStyle.borderWidth; - this.cornerStyle.width = this.cornerDefaultStyle.width; - - // Hide the fill handle, so the possible further adjustments won't force unneeded scrollbars. - this.cornerStyle.display = 'none'; - - trimmingContainer = (0, _element.getTrimmingContainer)(this.wot.wtTable.TABLE); - - if (toColumn === this.wot.getSetting('totalColumns') - 1) { - cornerOverlappingContainer = toTD.offsetLeft + (0, _element.outerWidth)(toTD) + parseInt(this.cornerDefaultStyle.width, 10) / 2 >= (0, _element.innerWidth)(trimmingContainer); - - if (cornerOverlappingContainer) { - this.cornerStyle.left = Math.floor(left + width - 3 - parseInt(this.cornerDefaultStyle.width, 10) / 2) + 'px'; - this.cornerStyle.borderRightWidth = 0; - } - } - - if (toRow === this.wot.getSetting('totalRows') - 1) { - cornerOverlappingContainer = toTD.offsetTop + (0, _element.outerHeight)(toTD) + parseInt(this.cornerDefaultStyle.height, 10) / 2 >= (0, _element.innerHeight)(trimmingContainer); - - if (cornerOverlappingContainer) { - this.cornerStyle.top = Math.floor(top + height - 3 - parseInt(this.cornerDefaultStyle.height, 10) / 2) + 'px'; - this.cornerStyle.borderBottomWidth = 0; - } - } - - this.cornerStyle.display = 'block'; - } - - if ((0, _browser.isMobileBrowser)()) { - this.updateMultipleSelectionHandlesPosition(fromRow, fromColumn, top, left, width, height); - } - } - - /** - * Hide border - */ - - }, { - key: 'disappear', - value: function disappear() { - this.topStyle.display = 'none'; - this.leftStyle.display = 'none'; - this.bottomStyle.display = 'none'; - this.rightStyle.display = 'none'; - this.cornerStyle.display = 'none'; - - if ((0, _browser.isMobileBrowser)()) { - this.selectionHandles.styles.topLeft.display = 'none'; - this.selectionHandles.styles.bottomRight.display = 'none'; - } - } - - /** - * @param {Function} setting - * @returns {*} - */ - - }, { - key: 'hasSetting', - value: function hasSetting(setting) { - if (typeof setting === 'function') { - return setting(); - } - - return !!setting; - } - }]); - - return Border; -}(); - -exports.default = Border; - -/***/ }), -/* 136 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var privatePool = new WeakMap(); - -/** - * Calculates indexes of columns to render OR columns that are visible. - * To redo the calculation, you need to create a new calculator. - * - * @class ViewportColumnsCalculator - */ - -var ViewportColumnsCalculator = function () { - _createClass(ViewportColumnsCalculator, null, [{ - key: 'DEFAULT_WIDTH', - - /** - * Default column width - * - * @type {Number} - */ - get: function get() { - return 50; - } - - /** - * @param {Number} viewportWidth Width of the viewport - * @param {Number} scrollOffset Current horizontal scroll position of the viewport - * @param {Number} totalColumns Total number of rows - * @param {Function} columnWidthFn Function that returns the width of the column at a given index (in px) - * @param {Function} overrideFn Function that changes calculated this.startRow, this.endRow (used by MergeCells plugin) - * @param {Boolean} onlyFullyVisible if `true`, only startRow and endRow will be indexes of rows that are fully in viewport - * @param {Boolean} stretchH - * @param {Function} [stretchingColumnWidthFn] Function that returns the new width of the stretched column. - */ - - }]); - - function ViewportColumnsCalculator(viewportWidth, scrollOffset, totalColumns, columnWidthFn, overrideFn, onlyFullyVisible, stretchH) { - var stretchingColumnWidthFn = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : function (width) { - return width; - }; - - _classCallCheck(this, ViewportColumnsCalculator); - - privatePool.set(this, { - viewportWidth: viewportWidth, - scrollOffset: scrollOffset, - totalColumns: totalColumns, - columnWidthFn: columnWidthFn, - overrideFn: overrideFn, - onlyFullyVisible: onlyFullyVisible, - stretchingColumnWidthFn: stretchingColumnWidthFn - }); - - /** - * Number of rendered/visible columns - * - * @type {Number} - */ - this.count = 0; - - /** - * Index of the first rendered/visible column (can be overwritten using overrideFn) - * - * @type {Number|null} - */ - this.startColumn = null; - - /** - * Index of the last rendered/visible column (can be overwritten using overrideFn) - * - * @type {null} - */ - this.endColumn = null; - - /** - * Position of the first rendered/visible column (in px) - * - * @type {Number|null} - */ - this.startPosition = null; - - this.stretchAllRatio = 0; - this.stretchLastWidth = 0; - this.stretch = stretchH; - this.totalTargetWidth = 0; - this.needVerifyLastColumnWidth = true; - this.stretchAllColumnsWidth = []; - - this.calculate(); - } - - /** - * Calculates viewport - */ - - - _createClass(ViewportColumnsCalculator, [{ - key: 'calculate', - value: function calculate() { - var sum = 0; - var needReverse = true; - var startPositions = []; - var columnWidth = void 0; - - var priv = privatePool.get(this); - var onlyFullyVisible = priv.onlyFullyVisible; - var overrideFn = priv.overrideFn; - var scrollOffset = priv.scrollOffset; - var totalColumns = priv.totalColumns; - var viewportWidth = priv.viewportWidth; - - for (var i = 0; i < totalColumns; i++) { - columnWidth = this._getColumnWidth(i); - - if (sum <= scrollOffset && !onlyFullyVisible) { - this.startColumn = i; - } - - // +1 pixel for row header width compensation for horizontal scroll > 0 - var compensatedViewportWidth = scrollOffset > 0 ? viewportWidth + 1 : viewportWidth; - - if (sum >= scrollOffset && sum + columnWidth <= scrollOffset + compensatedViewportWidth) { - if (this.startColumn == null) { - this.startColumn = i; - } - this.endColumn = i; - } - startPositions.push(sum); - sum += columnWidth; - - if (!onlyFullyVisible) { - this.endColumn = i; - } - if (sum >= scrollOffset + viewportWidth) { - needReverse = false; - break; - } - } - - if (this.endColumn === totalColumns - 1 && needReverse) { - this.startColumn = this.endColumn; - - while (this.startColumn > 0) { - var viewportSum = startPositions[this.endColumn] + columnWidth - startPositions[this.startColumn - 1]; - - if (viewportSum <= viewportWidth || !onlyFullyVisible) { - this.startColumn--; - } - if (viewportSum > viewportWidth) { - break; - } - } - } - - if (this.startColumn !== null && overrideFn) { - overrideFn(this); - } - this.startPosition = startPositions[this.startColumn]; - - if (this.startPosition == void 0) { - this.startPosition = null; - } - if (this.startColumn !== null) { - this.count = this.endColumn - this.startColumn + 1; - } - } - - /** - * Recalculate columns stretching. - * - * @param {Number} totalWidth - */ - - }, { - key: 'refreshStretching', - value: function refreshStretching(totalWidth) { - if (this.stretch === 'none') { - return; - } - this.totalTargetWidth = totalWidth; - - var priv = privatePool.get(this); - var totalColumns = priv.totalColumns; - var sumAll = 0; - - for (var i = 0; i < totalColumns; i++) { - var columnWidth = this._getColumnWidth(i); - var permanentColumnWidth = priv.stretchingColumnWidthFn(void 0, i); - - if (typeof permanentColumnWidth === 'number') { - totalWidth -= permanentColumnWidth; - } else { - sumAll += columnWidth; - } - } - var remainingSize = totalWidth - sumAll; - - if (this.stretch === 'all' && remainingSize > 0) { - this.stretchAllRatio = totalWidth / sumAll; - this.stretchAllColumnsWidth = []; - this.needVerifyLastColumnWidth = true; - } else if (this.stretch === 'last' && totalWidth !== Infinity) { - var _columnWidth = this._getColumnWidth(totalColumns - 1); - var lastColumnWidth = remainingSize + _columnWidth; - - this.stretchLastWidth = lastColumnWidth >= 0 ? lastColumnWidth : _columnWidth; - } - } - - /** - * Get stretched column width based on stretchH (all or last) setting passed in handsontable instance. - * - * @param {Number} column - * @param {Number} baseWidth - * @returns {Number|null} - */ - - }, { - key: 'getStretchedColumnWidth', - value: function getStretchedColumnWidth(column, baseWidth) { - var result = null; - - if (this.stretch === 'all' && this.stretchAllRatio !== 0) { - result = this._getStretchedAllColumnWidth(column, baseWidth); - } else if (this.stretch === 'last' && this.stretchLastWidth !== 0) { - result = this._getStretchedLastColumnWidth(column); - } - - return result; - } - - /** - * @param {Number} column - * @param {Number} baseWidth - * @returns {Number} - * @private - */ - - }, { - key: '_getStretchedAllColumnWidth', - value: function _getStretchedAllColumnWidth(column, baseWidth) { - var sumRatioWidth = 0; - var priv = privatePool.get(this); - var totalColumns = priv.totalColumns; - - if (!this.stretchAllColumnsWidth[column]) { - var stretchedWidth = Math.round(baseWidth * this.stretchAllRatio); - var newStretchedWidth = priv.stretchingColumnWidthFn(stretchedWidth, column); - - if (newStretchedWidth === void 0) { - this.stretchAllColumnsWidth[column] = stretchedWidth; - } else { - this.stretchAllColumnsWidth[column] = isNaN(newStretchedWidth) ? this._getColumnWidth(column) : newStretchedWidth; - } - } - - if (this.stretchAllColumnsWidth.length === totalColumns && this.needVerifyLastColumnWidth) { - this.needVerifyLastColumnWidth = false; - - for (var i = 0; i < this.stretchAllColumnsWidth.length; i++) { - sumRatioWidth += this.stretchAllColumnsWidth[i]; - } - if (sumRatioWidth !== this.totalTargetWidth) { - this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length - 1] += this.totalTargetWidth - sumRatioWidth; - } - } - - return this.stretchAllColumnsWidth[column]; - } - - /** - * @param {Number} column - * @returns {Number|null} - * @private - */ - - }, { - key: '_getStretchedLastColumnWidth', - value: function _getStretchedLastColumnWidth(column) { - var priv = privatePool.get(this); - var totalColumns = priv.totalColumns; - - if (column === totalColumns - 1) { - return this.stretchLastWidth; - } - - return null; - } - - /** - * @param {Number} column Column index. - * @returns {Number} - * @private - */ - - }, { - key: '_getColumnWidth', - value: function _getColumnWidth(column) { - var width = privatePool.get(this).columnWidthFn(column); - - if (width === void 0) { - width = ViewportColumnsCalculator.DEFAULT_WIDTH; - } - - return width; - } - }]); - - return ViewportColumnsCalculator; -}(); - -exports.default = ViewportColumnsCalculator; - -/***/ }), -/* 137 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var privatePool = new WeakMap(); - -/** - * Calculates indexes of rows to render OR rows that are visible. - * To redo the calculation, you need to create a new calculator. - * - * @class ViewportRowsCalculator - */ - -var ViewportRowsCalculator = function () { - _createClass(ViewportRowsCalculator, null, [{ - key: "DEFAULT_HEIGHT", - - /** - * Default row height - * - * @type {Number} - */ - get: function get() { - return 23; - } - - /** - * @param {Number} viewportHeight Height of the viewport - * @param {Number} scrollOffset Current vertical scroll position of the viewport - * @param {Number} totalRows Total number of rows - * @param {Function} rowHeightFn Function that returns the height of the row at a given index (in px) - * @param {Function} overrideFn Function that changes calculated this.startRow, this.endRow (used by MergeCells plugin) - * @param {Boolean} onlyFullyVisible if `true`, only startRow and endRow will be indexes of rows that are fully in viewport - * @param {Number} horizontalScrollbarHeight - */ - - }]); - - function ViewportRowsCalculator(viewportHeight, scrollOffset, totalRows, rowHeightFn, overrideFn, onlyFullyVisible, horizontalScrollbarHeight) { - _classCallCheck(this, ViewportRowsCalculator); - - privatePool.set(this, { - viewportHeight: viewportHeight, - scrollOffset: scrollOffset, - totalRows: totalRows, - rowHeightFn: rowHeightFn, - overrideFn: overrideFn, - onlyFullyVisible: onlyFullyVisible, - horizontalScrollbarHeight: horizontalScrollbarHeight - }); - - /** - * Number of rendered/visible rows - * - * @type {Number} - */ - this.count = 0; - - /** - * Index of the first rendered/visible row (can be overwritten using overrideFn) - * - * @type {Number|null} - */ - this.startRow = null; - - /** - * Index of the last rendered/visible row (can be overwritten using overrideFn) - * - * @type {null} - */ - this.endRow = null; - - /** - * Position of the first rendered/visible row (in px) - * - * @type {Number|null} - */ - this.startPosition = null; - - this.calculate(); - } - - /** - * Calculates viewport - */ - - - _createClass(ViewportRowsCalculator, [{ - key: "calculate", - value: function calculate() { - var sum = 0; - var needReverse = true; - var startPositions = []; - - var priv = privatePool.get(this); - var onlyFullyVisible = priv.onlyFullyVisible; - var overrideFn = priv.overrideFn; - var rowHeightFn = priv.rowHeightFn; - var scrollOffset = priv.scrollOffset; - var totalRows = priv.totalRows; - var viewportHeight = priv.viewportHeight; - var horizontalScrollbarHeight = priv.horizontalScrollbarHeight || 0; - var rowHeight = void 0; - - // Calculate the number (start and end index) of rows needed - for (var i = 0; i < totalRows; i++) { - rowHeight = rowHeightFn(i); - - if (rowHeight === undefined) { - rowHeight = ViewportRowsCalculator.DEFAULT_HEIGHT; - } - if (sum <= scrollOffset && !onlyFullyVisible) { - this.startRow = i; - } - - // the row is within the "visible range" - if (sum >= scrollOffset && sum + rowHeight <= scrollOffset + viewportHeight - horizontalScrollbarHeight) { - if (this.startRow === null) { - this.startRow = i; - } - this.endRow = i; - } - startPositions.push(sum); - sum += rowHeight; - - if (!onlyFullyVisible) { - this.endRow = i; - } - if (sum >= scrollOffset + viewportHeight - horizontalScrollbarHeight) { - needReverse = false; - break; - } - } - - // If the estimation has reached the last row and there is still some space available in the viewport, - // we need to render in reverse in order to fill the whole viewport with rows - if (this.endRow === totalRows - 1 && needReverse) { - this.startRow = this.endRow; - - while (this.startRow > 0) { - // rowHeight is the height of the last row - var viewportSum = startPositions[this.endRow] + rowHeight - startPositions[this.startRow - 1]; - - if (viewportSum <= viewportHeight - horizontalScrollbarHeight || !onlyFullyVisible) { - this.startRow--; - } - if (viewportSum >= viewportHeight - horizontalScrollbarHeight) { - break; - } - } - } - - if (this.startRow !== null && overrideFn) { - overrideFn(this); - } - this.startPosition = startPositions[this.startRow]; - - if (this.startPosition == void 0) { - this.startPosition = null; - } - if (this.startRow !== null) { - this.count = this.endRow - this.startRow + 1; - } - } - }]); - - return ViewportRowsCalculator; -}(); - -exports.default = ViewportRowsCalculator; - -/***/ }), -/* 138 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _object = __webpack_require__(1); - -var _string = __webpack_require__(27); - -var _event = __webpack_require__(139); - -var _event2 = _interopRequireDefault(_event); - -var _overlays = __webpack_require__(142); - -var _overlays2 = _interopRequireDefault(_overlays); - -var _scroll = __webpack_require__(143); - -var _scroll2 = _interopRequireDefault(_scroll); - -var _settings = __webpack_require__(144); - -var _settings2 = _interopRequireDefault(_settings); - -var _table = __webpack_require__(145); - -var _table2 = _interopRequireDefault(_table); - -var _viewport = __webpack_require__(147); - -var _viewport2 = _interopRequireDefault(_viewport); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class Walkontable - */ -var Walkontable = function () { - /** - * @param {Object} settings - */ - function Walkontable(settings) { - _classCallCheck(this, Walkontable); - - var originalHeaders = []; - - // this is the namespace for global events - this.guid = 'wt_' + (0, _string.randomString)(); - - // bootstrap from settings - if (settings.cloneSource) { - this.cloneSource = settings.cloneSource; - this.cloneOverlay = settings.cloneOverlay; - this.wtSettings = settings.cloneSource.wtSettings; - this.wtTable = new _table2.default(this, settings.table, settings.wtRootElement); - this.wtScroll = new _scroll2.default(this); - this.wtViewport = settings.cloneSource.wtViewport; - this.wtEvent = new _event2.default(this); - this.selections = this.cloneSource.selections; - } else { - this.wtSettings = new _settings2.default(this, settings); - this.wtTable = new _table2.default(this, settings.table); - this.wtScroll = new _scroll2.default(this); - this.wtViewport = new _viewport2.default(this); - this.wtEvent = new _event2.default(this); - this.selections = this.getSetting('selections'); - this.wtOverlays = new _overlays2.default(this); - this.exportSettingsAsClassNames(); - } - - // find original headers - if (this.wtTable.THEAD.childNodes.length && this.wtTable.THEAD.childNodes[0].childNodes.length) { - for (var c = 0, clen = this.wtTable.THEAD.childNodes[0].childNodes.length; c < clen; c++) { - originalHeaders.push(this.wtTable.THEAD.childNodes[0].childNodes[c].innerHTML); - } - if (!this.getSetting('columnHeaders').length) { - this.update('columnHeaders', [function (column, TH) { - (0, _element.fastInnerText)(TH, originalHeaders[column]); - }]); - } - } - this.drawn = false; - this.drawInterrupted = false; - } - - /** - * Force rerender of Walkontable - * - * @param {Boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering - * the data. It will only work if Table.draw() does not force - * rendering anyway - * @returns {Walkontable} - */ - - - _createClass(Walkontable, [{ - key: 'draw', - value: function draw() { - var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - this.drawInterrupted = false; - - if (!fastDraw && !(0, _element.isVisible)(this.wtTable.TABLE)) { - // draw interrupted because TABLE is not visible - this.drawInterrupted = true; - } else { - this.wtTable.draw(fastDraw); - } - - return this; - } - - /** - * Returns the TD at coords. If topmost is set to true, returns TD from the topmost overlay layer, - * if not set or set to false, returns TD from the master table. - * - * @param {CellCoords} coords - * @param {Boolean} [topmost=false] - * @returns {Object} - */ - - }, { - key: 'getCell', - value: function getCell(coords) { - var topmost = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - if (!topmost) { - return this.wtTable.getCell(coords); - } - - var totalRows = this.wtSettings.getSetting('totalRows'); - var fixedRowsTop = this.wtSettings.getSetting('fixedRowsTop'); - var fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom'); - var fixedColumns = this.wtSettings.getSetting('fixedColumnsLeft'); - - if (coords.row < fixedRowsTop && coords.col < fixedColumns) { - return this.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell(coords); - } else if (coords.row < fixedRowsTop) { - return this.wtOverlays.topOverlay.clone.wtTable.getCell(coords); - } else if (coords.col < fixedColumns && coords.row >= totalRows - fixedRowsBottom) { - if (this.wtOverlays.bottomLeftCornerOverlay && this.wtOverlays.bottomLeftCornerOverlay.clone) { - return this.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell(coords); - } - } else if (coords.col < fixedColumns) { - return this.wtOverlays.leftOverlay.clone.wtTable.getCell(coords); - } else if (coords.row < totalRows && coords.row > totalRows - fixedRowsBottom) { - if (this.wtOverlays.bottomOverlay && this.wtOverlays.bottomOverlay.clone) { - return this.wtOverlays.bottomOverlay.clone.wtTable.getCell(coords); - } - } - - return this.wtTable.getCell(coords); - } - - /** - * @param {Object} settings - * @param {*} value - * @returns {Walkontable} - */ - - }, { - key: 'update', - value: function update(settings, value) { - return this.wtSettings.update(settings, value); - } - - /** - * Scroll the viewport to a row at the given index in the data source - * - * @param {Number} row - * @returns {Walkontable} - */ - - }, { - key: 'scrollVertical', - value: function scrollVertical(row) { - this.wtOverlays.topOverlay.scrollTo(row); - this.getSetting('onScrollVertically'); - - return this; - } - - /** - * Scroll the viewport to a column at the given index in the data source - * - * @param {Number} column - * @returns {Walkontable} - */ - - }, { - key: 'scrollHorizontal', - value: function scrollHorizontal(column) { - this.wtOverlays.leftOverlay.scrollTo(column); - this.getSetting('onScrollHorizontally'); - - return this; - } - - /** - * Scrolls the viewport to a cell (rerenders if needed) - * - * @param {CellCoords} coords - * @returns {Walkontable} - */ - - }, { - key: 'scrollViewport', - value: function scrollViewport(coords) { - this.wtScroll.scrollViewport(coords); - - return this; - } - - /** - * @returns {Array} - */ - - }, { - key: 'getViewport', - value: function getViewport() { - return [this.wtTable.getFirstVisibleRow(), this.wtTable.getFirstVisibleColumn(), this.wtTable.getLastVisibleRow(), this.wtTable.getLastVisibleColumn()]; - } - - /** - * Get overlay name - * - * @returns {String} - */ - - }, { - key: 'getOverlayName', - value: function getOverlayName() { - return this.cloneOverlay ? this.cloneOverlay.type : 'master'; - } - - /** - * Check overlay type of this Walkontable instance. - * - * @param {String} name Clone type @see {Overlay.CLONE_TYPES}. - * @returns {Boolean} - */ - - }, { - key: 'isOverlayName', - value: function isOverlayName(name) { - if (this.cloneOverlay) { - return this.cloneOverlay.type === name; - } - - return false; - } - - /** - * Export settings as class names added to the parent element of the table. - */ - - }, { - key: 'exportSettingsAsClassNames', - value: function exportSettingsAsClassNames() { - var _this = this; - - var toExport = { - rowHeaders: ['array'], - columnHeaders: ['array'] - }; - var allClassNames = []; - var newClassNames = []; - - (0, _object.objectEach)(toExport, function (optionType, key) { - if (optionType.indexOf('array') > -1 && _this.getSetting(key).length) { - newClassNames.push('ht' + (0, _string.toUpperCaseFirst)(key)); - } - allClassNames.push('ht' + (0, _string.toUpperCaseFirst)(key)); - }); - (0, _element.removeClass)(this.wtTable.wtRootElement.parentNode, allClassNames); - (0, _element.addClass)(this.wtTable.wtRootElement.parentNode, newClassNames); - } - - /** - * Get/Set Walkontable instance setting - * - * @param {String} key - * @param {*} [param1] - * @param {*} [param2] - * @param {*} [param3] - * @param {*} [param4] - * @returns {*} - */ - - }, { - key: 'getSetting', - value: function getSetting(key, param1, param2, param3, param4) { - // this is faster than .apply - https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips - return this.wtSettings.getSetting(key, param1, param2, param3, param4); - } - - /** - * Checks if setting exists - * - * @param {String} key - * @returns {Boolean} - */ - - }, { - key: 'hasSetting', - value: function hasSetting(key) { - return this.wtSettings.has(key); - } - - /** - * Destroy instance - */ - - }, { - key: 'destroy', - value: function destroy() { - this.wtOverlays.destroy(); - this.wtEvent.destroy(); - } - }]); - - return Walkontable; -}(); - -exports.default = Walkontable; - -/***/ }), -/* 139 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _element = __webpack_require__(0); - -var _function = __webpack_require__(35); - -var _browser = __webpack_require__(25); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * - */ -function Event(instance) { - var that = this; - var eventManager = new _eventManager2.default(instance); - - this.instance = instance; - - var dblClickOrigin = [null, null]; - this.dblClickTimeout = [null, null]; - - var onMouseDown = function onMouseDown(event) { - var activeElement = document.activeElement; - var getParentNode = (0, _function.partial)(_element.getParent, event.realTarget); - var realTarget = event.realTarget; - - // ignore focusable element from mouse down processing (https://github.com/handsontable/handsontable/issues/3555) - if (realTarget === activeElement || getParentNode(0) === activeElement || getParentNode(1) === activeElement) { - return; - } - - var cell = that.parentCell(realTarget); - - if ((0, _element.hasClass)(realTarget, 'corner')) { - that.instance.getSetting('onCellCornerMouseDown', event, realTarget); - } else if (cell.TD) { - if (that.instance.hasSetting('onCellMouseDown')) { - that.instance.getSetting('onCellMouseDown', event, cell.coords, cell.TD, that.instance); - } - } - - if (event.button !== 2) { - // if not right mouse button - if (cell.TD) { - dblClickOrigin[0] = cell.TD; - clearTimeout(that.dblClickTimeout[0]); - that.dblClickTimeout[0] = setTimeout(function () { - dblClickOrigin[0] = null; - }, 1000); - } - } - }; - - var onTouchMove = function onTouchMove(event) { - that.instance.touchMoving = true; - }; - - var longTouchTimeout; - - var onTouchStart = function onTouchStart(event) { - var container = this; - - eventManager.addEventListener(this, 'touchmove', onTouchMove); - - // Prevent cell selection when scrolling with touch event - not the best solution performance-wise - that.checkIfTouchMove = setTimeout(function () { - if (that.instance.touchMoving === true) { - that.instance.touchMoving = void 0; - - eventManager.removeEventListener('touchmove', onTouchMove, false); - } - - onMouseDown(event); - }, 30); - }; - - var onMouseOver = function onMouseOver(event) { - var table, td, mainWOT; - - if (that.instance.hasSetting('onCellMouseOver')) { - table = that.instance.wtTable.TABLE; - td = (0, _element.closestDown)(event.realTarget, ['TD', 'TH'], table); - mainWOT = that.instance.cloneSource || that.instance; - - if (td && td !== mainWOT.lastMouseOver && (0, _element.isChildOf)(td, table)) { - mainWOT.lastMouseOver = td; - - that.instance.getSetting('onCellMouseOver', event, that.instance.wtTable.getCoords(td), td, that.instance); - } - } - }; - - var onMouseOut = function onMouseOut(event) { - var table = void 0; - var lastTD = void 0; - var nextTD = void 0; - - if (that.instance.hasSetting('onCellMouseOut')) { - table = that.instance.wtTable.TABLE; - lastTD = (0, _element.closestDown)(event.realTarget, ['TD', 'TH'], table); - nextTD = (0, _element.closestDown)(event.relatedTarget, ['TD', 'TH'], table); - - if (lastTD && lastTD !== nextTD && (0, _element.isChildOf)(lastTD, table)) { - that.instance.getSetting('onCellMouseOut', event, that.instance.wtTable.getCoords(lastTD), lastTD, that.instance); - } - } - }; - - var onMouseUp = function onMouseUp(event) { - if (event.button !== 2) { - // if not right mouse button - var cell = that.parentCell(event.realTarget); - - if (cell.TD === dblClickOrigin[0] && cell.TD === dblClickOrigin[1]) { - if ((0, _element.hasClass)(event.realTarget, 'corner')) { - that.instance.getSetting('onCellCornerDblClick', event, cell.coords, cell.TD, that.instance); - } else { - that.instance.getSetting('onCellDblClick', event, cell.coords, cell.TD, that.instance); - } - - dblClickOrigin[0] = null; - dblClickOrigin[1] = null; - } else if (cell.TD === dblClickOrigin[0]) { - that.instance.getSetting('onCellMouseUp', event, cell.coords, cell.TD, that.instance); - - dblClickOrigin[1] = cell.TD; - clearTimeout(that.dblClickTimeout[1]); - that.dblClickTimeout[1] = setTimeout(function () { - dblClickOrigin[1] = null; - }, 500); - } else if (cell.TD && that.instance.hasSetting('onCellMouseUp')) { - that.instance.getSetting('onCellMouseUp', event, cell.coords, cell.TD, that.instance); - } - } - }; - - var onTouchEnd = function onTouchEnd(event) { - clearTimeout(longTouchTimeout); - // that.instance.longTouch == void 0; - - event.preventDefault(); - onMouseUp(event); - - // eventManager.removeEventListener(that.instance.wtTable.holder, "mouseup", onMouseUp); - }; - - eventManager.addEventListener(this.instance.wtTable.holder, 'mousedown', onMouseDown); - eventManager.addEventListener(this.instance.wtTable.TABLE, 'mouseover', onMouseOver); - eventManager.addEventListener(this.instance.wtTable.TABLE, 'mouseout', onMouseOut); - eventManager.addEventListener(this.instance.wtTable.holder, 'mouseup', onMouseUp); - - // check if full HOT instance, or detached WOT AND run on mobile device - if (this.instance.wtTable.holder.parentNode.parentNode && (0, _browser.isMobileBrowser)() && !that.instance.wtTable.isWorkingOnClone()) { - var classSelector = '.' + this.instance.wtTable.holder.parentNode.className.split(' ').join('.'); - - eventManager.addEventListener(this.instance.wtTable.holder, 'touchstart', function (event) { - that.instance.touchApplied = true; - if ((0, _element.isChildOf)(event.target, classSelector)) { - onTouchStart.call(event.target, event); - } - }); - eventManager.addEventListener(this.instance.wtTable.holder, 'touchend', function (event) { - that.instance.touchApplied = false; - if ((0, _element.isChildOf)(event.target, classSelector)) { - onTouchEnd.call(event.target, event); - } - }); - - if (!that.instance.momentumScrolling) { - that.instance.momentumScrolling = {}; - } - eventManager.addEventListener(this.instance.wtTable.holder, 'scroll', function (event) { - clearTimeout(that.instance.momentumScrolling._timeout); - - if (!that.instance.momentumScrolling.ongoing) { - that.instance.getSetting('onBeforeTouchScroll'); - } - that.instance.momentumScrolling.ongoing = true; - - that.instance.momentumScrolling._timeout = setTimeout(function () { - if (!that.instance.touchApplied) { - that.instance.momentumScrolling.ongoing = false; - - that.instance.getSetting('onAfterMomentumScroll'); - } - }, 200); - }); - } - - eventManager.addEventListener(window, 'resize', function () { - if (that.instance.getSetting('stretchH') !== 'none') { - that.instance.draw(); - } - }); - - this.destroy = function () { - clearTimeout(this.dblClickTimeout[0]); - clearTimeout(this.dblClickTimeout[1]); - - eventManager.destroy(); - }; -} - -Event.prototype.parentCell = function (elem) { - var cell = {}; - var TABLE = this.instance.wtTable.TABLE; - var TD = (0, _element.closestDown)(elem, ['TD', 'TH'], TABLE); - - if (TD) { - cell.coords = this.instance.wtTable.getCoords(TD); - cell.TD = TD; - } else if ((0, _element.hasClass)(elem, 'wtBorder') && (0, _element.hasClass)(elem, 'current')) { - cell.coords = this.instance.selections.current.cellRange.highlight; // selections.current is current selected cell - cell.TD = this.instance.wtTable.getCell(cell.coords); - } else if ((0, _element.hasClass)(elem, 'wtBorder') && (0, _element.hasClass)(elem, 'area')) { - if (this.instance.selections.area.cellRange) { - cell.coords = this.instance.selections.area.cellRange.to; // selections.area is area selected cells - cell.TD = this.instance.wtTable.getCell(cell.coords); - } - } - - return cell; -}; - -exports.default = Event; - -/***/ }), -/* 140 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class ColumnFilter - */ -var ColumnFilter = function () { - /** - * @param {Number} offset - * @param {Number} total - * @param {Number} countTH - */ - function ColumnFilter(offset, total, countTH) { - _classCallCheck(this, ColumnFilter); - - this.offset = offset; - this.total = total; - this.countTH = countTH; - } - - /** - * @param index - * @returns {Number} - */ - - - _createClass(ColumnFilter, [{ - key: "offsetted", - value: function offsetted(index) { - return index + this.offset; - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "unOffsetted", - value: function unOffsetted(index) { - return index - this.offset; - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "renderedToSource", - value: function renderedToSource(index) { - return this.offsetted(index); - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "sourceToRendered", - value: function sourceToRendered(index) { - return this.unOffsetted(index); - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "offsettedTH", - value: function offsettedTH(index) { - return index - this.countTH; - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "unOffsettedTH", - value: function unOffsettedTH(index) { - return index + this.countTH; - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "visibleRowHeadedColumnToSourceColumn", - value: function visibleRowHeadedColumnToSourceColumn(index) { - return this.renderedToSource(this.offsettedTH(index)); - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "sourceColumnToVisibleRowHeadedColumn", - value: function sourceColumnToVisibleRowHeadedColumn(index) { - return this.unOffsettedTH(this.sourceToRendered(index)); - } - }]); - - return ColumnFilter; -}(); - -exports.default = ColumnFilter; - -/***/ }), -/* 141 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class RowFilter - */ -var RowFilter = function () { - /** - * @param {Number} offset - * @param {Number} total - * @param {Number} countTH - */ - function RowFilter(offset, total, countTH) { - _classCallCheck(this, RowFilter); - - this.offset = offset; - this.total = total; - this.countTH = countTH; - } - - /** - * @param index - * @returns {Number} - */ - - - _createClass(RowFilter, [{ - key: "offsetted", - value: function offsetted(index) { - return index + this.offset; - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "unOffsetted", - value: function unOffsetted(index) { - return index - this.offset; - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "renderedToSource", - value: function renderedToSource(index) { - return this.offsetted(index); - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "sourceToRendered", - value: function sourceToRendered(index) { - return this.unOffsetted(index); - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "offsettedTH", - value: function offsettedTH(index) { - return index - this.countTH; - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "unOffsettedTH", - value: function unOffsettedTH(index) { - return index + this.countTH; - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "visibleColHeadedRowToSourceRow", - value: function visibleColHeadedRowToSourceRow(index) { - return this.renderedToSource(this.offsettedTH(index)); - } - - /** - * @param index - * @returns {Number} - */ - - }, { - key: "sourceRowToVisibleColHeadedRow", - value: function sourceRowToVisibleColHeadedRow(index) { - return this.unOffsettedTH(this.sourceToRendered(index)); - } - }]); - - return RowFilter; -}(); - -exports.default = RowFilter; - -/***/ }), -/* 142 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _array = __webpack_require__(2); - -var _unicode = __webpack_require__(16); - -var _browser = __webpack_require__(25); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _base = __webpack_require__(28); - -var _base2 = _interopRequireDefault(_base); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class Overlays - */ -var Overlays = function () { - /** - * @param {Walkontable} wotInstance - */ - function Overlays(wotInstance) { - _classCallCheck(this, Overlays); - - this.wot = wotInstance; - - // legacy support - this.instance = this.wot; - this.eventManager = new _eventManager2.default(this.wot); - - this.wot.update('scrollbarWidth', (0, _element.getScrollbarWidth)()); - this.wot.update('scrollbarHeight', (0, _element.getScrollbarWidth)()); - - this.scrollableElement = (0, _element.getScrollableElement)(this.wot.wtTable.TABLE); - - this.prepareOverlays(); - - this.destroyed = false; - this.keyPressed = false; - this.spreaderLastSize = { - width: null, - height: null - }; - this.overlayScrollPositions = { - master: { - top: 0, - left: 0 - }, - top: { - top: null, - left: 0 - }, - bottom: { - top: null, - left: 0 - }, - left: { - top: 0, - left: null - } - }; - - this.pendingScrollCallbacks = { - master: { - top: 0, - left: 0 - }, - top: { - left: 0 - }, - bottom: { - left: 0 - }, - left: { - top: 0 - } - }; - - this.verticalScrolling = false; - this.horizontalScrolling = false; - this.delegatedScrollCallback = false; - - this.registeredListeners = []; - - this.registerListeners(); - } - - /** - * Prepare overlays based on user settings. - * - * @returns {Boolean} Returns `true` if changes applied to overlay needs scroll synchronization. - */ - - - _createClass(Overlays, [{ - key: 'prepareOverlays', - value: function prepareOverlays() { - var syncScroll = false; - - if (this.topOverlay) { - syncScroll = this.topOverlay.updateStateOfRendering() || syncScroll; - } else { - this.topOverlay = _base2.default.createOverlay(_base2.default.CLONE_TOP, this.wot); - } - - if (!_base2.default.hasOverlay(_base2.default.CLONE_BOTTOM)) { - this.bottomOverlay = { - needFullRender: false, - updateStateOfRendering: function updateStateOfRendering() { - return false; - } - }; - } - if (!_base2.default.hasOverlay(_base2.default.CLONE_BOTTOM_LEFT_CORNER)) { - this.bottomLeftCornerOverlay = { - needFullRender: false, - updateStateOfRendering: function updateStateOfRendering() { - return false; - } - }; - } - - if (this.bottomOverlay) { - syncScroll = this.bottomOverlay.updateStateOfRendering() || syncScroll; - } else { - this.bottomOverlay = _base2.default.createOverlay(_base2.default.CLONE_BOTTOM, this.wot); - } - - if (this.leftOverlay) { - syncScroll = this.leftOverlay.updateStateOfRendering() || syncScroll; - } else { - this.leftOverlay = _base2.default.createOverlay(_base2.default.CLONE_LEFT, this.wot); - } - - if (this.topOverlay.needFullRender && this.leftOverlay.needFullRender) { - if (this.topLeftCornerOverlay) { - syncScroll = this.topLeftCornerOverlay.updateStateOfRendering() || syncScroll; - } else { - this.topLeftCornerOverlay = _base2.default.createOverlay(_base2.default.CLONE_TOP_LEFT_CORNER, this.wot); - } - } - - if (this.bottomOverlay.needFullRender && this.leftOverlay.needFullRender) { - if (this.bottomLeftCornerOverlay) { - syncScroll = this.bottomLeftCornerOverlay.updateStateOfRendering() || syncScroll; - } else { - this.bottomLeftCornerOverlay = _base2.default.createOverlay(_base2.default.CLONE_BOTTOM_LEFT_CORNER, this.wot); - } - } - - if (this.wot.getSetting('debug') && !this.debug) { - this.debug = _base2.default.createOverlay(_base2.default.CLONE_DEBUG, this.wot); - } - - return syncScroll; - } - - /** - * Refresh and redraw table - */ - - }, { - key: 'refreshAll', - value: function refreshAll() { - if (!this.wot.drawn) { - return; - } - if (!this.wot.wtTable.holder.parentNode) { - // Walkontable was detached from DOM, but this handler was not removed - this.destroy(); - - return; - } - this.wot.draw(true); - - if (this.verticalScrolling) { - this.leftOverlay.onScroll(); - } - - if (this.horizontalScrolling) { - this.topOverlay.onScroll(); - } - - this.verticalScrolling = false; - this.horizontalScrolling = false; - } - - /** - * Register all necessary event listeners. - */ - - }, { - key: 'registerListeners', - value: function registerListeners() { - var _this = this; - - var topOverlayScrollable = this.topOverlay.mainTableScrollableElement; - var leftOverlayScrollable = this.leftOverlay.mainTableScrollableElement; - - var listenersToRegister = []; - listenersToRegister.push([document.documentElement, 'keydown', function (event) { - return _this.onKeyDown(event); - }]); - listenersToRegister.push([document.documentElement, 'keyup', function () { - return _this.onKeyUp(); - }]); - listenersToRegister.push([document, 'visibilitychange', function () { - return _this.onKeyUp(); - }]); - listenersToRegister.push([topOverlayScrollable, 'scroll', function (event) { - return _this.onTableScroll(event); - }]); - - if (topOverlayScrollable !== leftOverlayScrollable) { - listenersToRegister.push([leftOverlayScrollable, 'scroll', function (event) { - return _this.onTableScroll(event); - }]); - } - - if (this.topOverlay.needFullRender) { - listenersToRegister.push([this.topOverlay.clone.wtTable.holder, 'scroll', function (event) { - return _this.onTableScroll(event); - }]); - listenersToRegister.push([this.topOverlay.clone.wtTable.holder, 'wheel', function (event) { - return _this.onTableScroll(event); - }]); - } - - if (this.bottomOverlay.needFullRender) { - listenersToRegister.push([this.bottomOverlay.clone.wtTable.holder, 'scroll', function (event) { - return _this.onTableScroll(event); - }]); - listenersToRegister.push([this.bottomOverlay.clone.wtTable.holder, 'wheel', function (event) { - return _this.onTableScroll(event); - }]); - } - - if (this.leftOverlay.needFullRender) { - listenersToRegister.push([this.leftOverlay.clone.wtTable.holder, 'scroll', function (event) { - return _this.onTableScroll(event); - }]); - listenersToRegister.push([this.leftOverlay.clone.wtTable.holder, 'wheel', function (event) { - return _this.onTableScroll(event); - }]); - } - - if (this.topLeftCornerOverlay && this.topLeftCornerOverlay.needFullRender) { - listenersToRegister.push([this.topLeftCornerOverlay.clone.wtTable.holder, 'wheel', function (event) { - return _this.onTableScroll(event); - }]); - } - - if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.needFullRender) { - listenersToRegister.push([this.bottomLeftCornerOverlay.clone.wtTable.holder, 'wheel', function (event) { - return _this.onTableScroll(event); - }]); - } - - if (this.topOverlay.trimmingContainer !== window && this.leftOverlay.trimmingContainer !== window) { - // This is necessary? - // eventManager.addEventListener(window, 'scroll', (event) => this.refreshAll(event)); - listenersToRegister.push([window, 'wheel', function (event) { - var overlay = void 0; - var deltaY = event.wheelDeltaY || event.deltaY; - var deltaX = event.wheelDeltaX || event.deltaX; - - if (_this.topOverlay.clone.wtTable.holder.contains(event.realTarget)) { - overlay = 'top'; - } else if (_this.bottomOverlay.clone && _this.bottomOverlay.clone.wtTable.holder.contains(event.realTarget)) { - overlay = 'bottom'; - } else if (_this.leftOverlay.clone.wtTable.holder.contains(event.realTarget)) { - overlay = 'left'; - } else if (_this.topLeftCornerOverlay && _this.topLeftCornerOverlay.clone && _this.topLeftCornerOverlay.clone.wtTable.holder.contains(event.realTarget)) { - overlay = 'topLeft'; - } else if (_this.bottomLeftCornerOverlay && _this.bottomLeftCornerOverlay.clone && _this.bottomLeftCornerOverlay.clone.wtTable.holder.contains(event.realTarget)) { - overlay = 'bottomLeft'; - } - - if (overlay == 'top' && deltaY !== 0 || overlay == 'left' && deltaX !== 0 || overlay == 'bottom' && deltaY !== 0 || (overlay === 'topLeft' || overlay === 'bottomLeft') && (deltaY !== 0 || deltaX !== 0)) { - - event.preventDefault(); - } - }]); - } - - while (listenersToRegister.length) { - var listener = listenersToRegister.pop(); - this.eventManager.addEventListener(listener[0], listener[1], listener[2]); - - this.registeredListeners.push(listener); - } - } - - /** - * Deregister all previously registered listeners. - */ - - }, { - key: 'deregisterListeners', - value: function deregisterListeners() { - while (this.registeredListeners.length) { - var listener = this.registeredListeners.pop(); - this.eventManager.removeEventListener(listener[0], listener[1], listener[2]); - } - } - - /** - * Scroll listener - * - * @param {Event} event - */ - - }, { - key: 'onTableScroll', - value: function onTableScroll(event) { - // if mobile browser, do not update scroll positions, as the overlays are hidden during the scroll - if ((0, _browser.isMobileBrowser)()) { - return; - } - var masterHorizontal = this.leftOverlay.mainTableScrollableElement; - var masterVertical = this.topOverlay.mainTableScrollableElement; - var target = event.target; - - // For key press, sync only master -> overlay position because while pressing Walkontable.render is triggered - // by hot.refreshBorder - if (this.keyPressed) { - if (masterVertical !== window && target !== window && !event.target.contains(masterVertical) || masterHorizontal !== window && target !== window && !event.target.contains(masterHorizontal)) { - return; - } - } - - if (event.type === 'scroll') { - this.syncScrollPositions(event); - } else { - this.translateMouseWheelToScroll(event); - } - } - - /** - * Key down listener - */ - - }, { - key: 'onKeyDown', - value: function onKeyDown(event) { - this.keyPressed = (0, _unicode.isKey)(event.keyCode, 'ARROW_UP|ARROW_RIGHT|ARROW_DOWN|ARROW_LEFT'); - } - - /** - * Key up listener - */ - - }, { - key: 'onKeyUp', - value: function onKeyUp() { - this.keyPressed = false; - } - - /** - * Translate wheel event into scroll event and sync scroll overlays position - * - * @private - * @param {Event} event - * @returns {Boolean} - */ - - }, { - key: 'translateMouseWheelToScroll', - value: function translateMouseWheelToScroll(event) { - var topOverlay = this.topOverlay.clone.wtTable.holder; - var bottomOverlay = this.bottomOverlay.clone ? this.bottomOverlay.clone.wtTable.holder : null; - var leftOverlay = this.leftOverlay.clone.wtTable.holder; - var topLeftCornerOverlay = this.topLeftCornerOverlay && this.topLeftCornerOverlay.clone ? this.topLeftCornerOverlay.clone.wtTable.holder : null; - var bottomLeftCornerOverlay = this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone ? this.bottomLeftCornerOverlay.clone.wtTable.holder : null; - var mouseWheelSpeedRatio = -0.2; - var deltaY = event.wheelDeltaY || -1 * event.deltaY; - var deltaX = event.wheelDeltaX || -1 * event.deltaX; - var parentHolder = null; - var eventMockup = { type: 'wheel' }; - var tempElem = event.target; - var delta = null; - - // Fix for extremely slow header scrolling with a mousewheel on Firefox - if (event.deltaMode === 1) { - deltaY *= 120; - deltaX *= 120; - } - - while (tempElem != document && tempElem != null) { - if (tempElem.className.indexOf('wtHolder') > -1) { - parentHolder = tempElem; - break; - } - tempElem = tempElem.parentNode; - } - eventMockup.target = parentHolder; - - if (parentHolder === topLeftCornerOverlay || parentHolder === bottomLeftCornerOverlay) { - this.syncScrollPositions(eventMockup, mouseWheelSpeedRatio * deltaX, 'x'); - this.syncScrollPositions(eventMockup, mouseWheelSpeedRatio * deltaY, 'y'); - } else { - if (parentHolder === topOverlay || parentHolder === bottomOverlay) { - delta = deltaY; - } else if (parentHolder === leftOverlay) { - delta = deltaX; - } - - this.syncScrollPositions(eventMockup, mouseWheelSpeedRatio * delta); - } - - return false; - } - - /** - * Synchronize scroll position between master table and overlay table. - * - * @private - * @param {Event|Object} event - * @param {Number} [fakeScrollValue=null] - * @param {String} [fakeScrollDirection=null] `x` or `y`. - */ - - }, { - key: 'syncScrollPositions', - value: function syncScrollPositions(event) { - var fakeScrollValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var fakeScrollDirection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - - if (this.destroyed) { - return; - } - if (arguments.length === 0) { - this.syncScrollWithMaster(); - - return; - } - var masterHorizontal = this.leftOverlay.mainTableScrollableElement; - var masterVertical = this.topOverlay.mainTableScrollableElement; - var target = event.target; - var tempScrollValue = 0; - var scrollValueChanged = false; - var topOverlay = void 0; - var leftOverlay = void 0; - var topLeftCornerOverlay = void 0; - var bottomLeftCornerOverlay = void 0; - var bottomOverlay = void 0; - var delegatedScroll = false; - var preventOverflow = this.wot.getSetting('preventOverflow'); - - if (this.topOverlay.needFullRender) { - topOverlay = this.topOverlay.clone.wtTable.holder; - } - - if (this.bottomOverlay.needFullRender) { - bottomOverlay = this.bottomOverlay.clone.wtTable.holder; - } - - if (this.leftOverlay.needFullRender) { - leftOverlay = this.leftOverlay.clone.wtTable.holder; - } - - if (this.leftOverlay.needFullRender && this.topOverlay.needFullRender) { - topLeftCornerOverlay = this.topLeftCornerOverlay.clone.wtTable.holder; - } - - if (this.leftOverlay.needFullRender && this.bottomOverlay.needFullRender) { - bottomLeftCornerOverlay = this.bottomLeftCornerOverlay.clone.wtTable.holder; - } - - if (target === document) { - target = window; - } - - if (target === masterHorizontal || target === masterVertical) { - if (preventOverflow) { - tempScrollValue = (0, _element.getScrollLeft)(this.scrollableElement); - } else { - tempScrollValue = (0, _element.getScrollLeft)(target); - } - - // if scrolling the master table - populate the scroll values to both top and left overlays - this.horizontalScrolling = true; - this.overlayScrollPositions.master.left = tempScrollValue; - scrollValueChanged = true; - - if (this.pendingScrollCallbacks.master.left > 0) { - this.pendingScrollCallbacks.master.left--; - } else { - if (topOverlay && topOverlay.scrollLeft !== tempScrollValue) { - - if (fakeScrollValue == null) { - this.pendingScrollCallbacks.top.left++; - } - - topOverlay.scrollLeft = tempScrollValue; - delegatedScroll = masterHorizontal !== window; - } - - if (bottomOverlay && bottomOverlay.scrollLeft !== tempScrollValue) { - - if (fakeScrollValue == null) { - this.pendingScrollCallbacks.bottom.left++; - } - - bottomOverlay.scrollLeft = tempScrollValue; - delegatedScroll = masterHorizontal !== window; - } - } - - tempScrollValue = (0, _element.getScrollTop)(target); - - this.verticalScrolling = true; - this.overlayScrollPositions.master.top = tempScrollValue; - scrollValueChanged = true; - - if (this.pendingScrollCallbacks.master.top > 0) { - this.pendingScrollCallbacks.master.top--; - } else if (leftOverlay && leftOverlay.scrollTop !== tempScrollValue) { - if (fakeScrollValue == null) { - this.pendingScrollCallbacks.left.top++; - } - - leftOverlay.scrollTop = tempScrollValue; - delegatedScroll = masterVertical !== window; - } - } else if (target === bottomOverlay) { - tempScrollValue = (0, _element.getScrollLeft)(target); - - // if scrolling the bottom overlay - populate the horizontal scroll to the master table - this.horizontalScrolling = true; - this.overlayScrollPositions.bottom.left = tempScrollValue; - scrollValueChanged = true; - - if (this.pendingScrollCallbacks.bottom.left > 0) { - this.pendingScrollCallbacks.bottom.left--; - } else { - if (fakeScrollValue == null) { - this.pendingScrollCallbacks.master.left++; - } - - masterHorizontal.scrollLeft = tempScrollValue; - - if (topOverlay && topOverlay.scrollLeft !== tempScrollValue) { - if (fakeScrollValue == null) { - this.pendingScrollCallbacks.top.left++; - } - - topOverlay.scrollLeft = tempScrollValue; - delegatedScroll = masterVertical !== window; - } - } - - // "fake" scroll value calculated from the mousewheel event - if (fakeScrollValue !== null) { - scrollValueChanged = true; - masterVertical.scrollTop += fakeScrollValue; - } - } else if (target === topOverlay) { - tempScrollValue = (0, _element.getScrollLeft)(target); - - // if scrolling the top overlay - populate the horizontal scroll to the master table - this.horizontalScrolling = true; - this.overlayScrollPositions.top.left = tempScrollValue; - scrollValueChanged = true; - - if (this.pendingScrollCallbacks.top.left > 0) { - this.pendingScrollCallbacks.top.left--; - } else { - - if (fakeScrollValue == null) { - this.pendingScrollCallbacks.master.left++; - } - - masterHorizontal.scrollLeft = tempScrollValue; - } - - // "fake" scroll value calculated from the mousewheel event - if (fakeScrollValue !== null) { - scrollValueChanged = true; - masterVertical.scrollTop += fakeScrollValue; - } - - if (bottomOverlay && bottomOverlay.scrollLeft !== tempScrollValue) { - if (fakeScrollValue == null) { - this.pendingScrollCallbacks.bottom.left++; - } - - bottomOverlay.scrollLeft = tempScrollValue; - delegatedScroll = masterVertical !== window; - } - } else if (target === leftOverlay) { - tempScrollValue = (0, _element.getScrollTop)(target); - - // if scrolling the left overlay - populate the vertical scroll to the master table - if (this.overlayScrollPositions.left.top !== tempScrollValue) { - this.verticalScrolling = true; - this.overlayScrollPositions.left.top = tempScrollValue; - scrollValueChanged = true; - - if (this.pendingScrollCallbacks.left.top > 0) { - this.pendingScrollCallbacks.left.top--; - } else { - if (fakeScrollValue == null) { - this.pendingScrollCallbacks.master.top++; - } - - masterVertical.scrollTop = tempScrollValue; - } - } - - // "fake" scroll value calculated from the mousewheel event - if (fakeScrollValue !== null) { - scrollValueChanged = true; - masterVertical.scrollLeft += fakeScrollValue; - } - } else if (target === topLeftCornerOverlay || target === bottomLeftCornerOverlay) { - if (fakeScrollValue !== null) { - scrollValueChanged = true; - - if (fakeScrollDirection === 'x') { - masterVertical.scrollLeft += fakeScrollValue; - } else if (fakeScrollDirection === 'y') { - masterVertical.scrollTop += fakeScrollValue; - } - } - } - - if (!this.keyPressed && scrollValueChanged && event.type === 'scroll') { - if (this.delegatedScrollCallback) { - this.delegatedScrollCallback = false; - } else { - this.refreshAll(); - } - - if (delegatedScroll) { - this.delegatedScrollCallback = true; - } - } - } - - /** - * Synchronize overlay scrollbars with the master scrollbar - */ - - }, { - key: 'syncScrollWithMaster', - value: function syncScrollWithMaster() { - var master = this.topOverlay.mainTableScrollableElement; - var scrollLeft = master.scrollLeft, - scrollTop = master.scrollTop; - - - if (this.topOverlay.needFullRender) { - this.topOverlay.clone.wtTable.holder.scrollLeft = scrollLeft; - } - if (this.bottomOverlay.needFullRender) { - this.bottomOverlay.clone.wtTable.holder.scrollLeft = scrollLeft; - } - if (this.leftOverlay.needFullRender) { - this.leftOverlay.clone.wtTable.holder.scrollTop = scrollTop; - } - } - - /** - * Update the main scrollable elements for all the overlays. - */ - - }, { - key: 'updateMainScrollableElements', - value: function updateMainScrollableElements() { - this.deregisterListeners(); - - this.leftOverlay.updateMainScrollableElement(); - this.topOverlay.updateMainScrollableElement(); - - if (this.bottomOverlay.needFullRender) { - this.bottomOverlay.updateMainScrollableElement(); - } - - this.scrollableElement = (0, _element.getScrollableElement)(this.wot.wtTable.TABLE); - - this.registerListeners(); - } - - /** - * - */ - - }, { - key: 'destroy', - value: function destroy() { - this.eventManager.destroy(); - this.topOverlay.destroy(); - - if (this.bottomOverlay.clone) { - this.bottomOverlay.destroy(); - } - this.leftOverlay.destroy(); - - if (this.topLeftCornerOverlay) { - this.topLeftCornerOverlay.destroy(); - } - - if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone) { - this.bottomLeftCornerOverlay.destroy(); - } - - if (this.debug) { - this.debug.destroy(); - } - this.destroyed = true; - } - - /** - * @param {Boolean} [fastDraw=false] - */ - - }, { - key: 'refresh', - value: function refresh() { - var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (this.topOverlay.areElementSizesAdjusted && this.leftOverlay.areElementSizesAdjusted) { - var container = this.wot.wtTable.wtRootElement.parentNode || this.wot.wtTable.wtRootElement; - var width = container.clientWidth; - var height = container.clientHeight; - - if (width !== this.spreaderLastSize.width || height !== this.spreaderLastSize.height) { - this.spreaderLastSize.width = width; - this.spreaderLastSize.height = height; - this.adjustElementsSize(); - } - } - - if (this.bottomOverlay.clone) { - this.bottomOverlay.refresh(fastDraw); - } - - this.leftOverlay.refresh(fastDraw); - this.topOverlay.refresh(fastDraw); - - if (this.topLeftCornerOverlay) { - this.topLeftCornerOverlay.refresh(fastDraw); - } - - if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone) { - this.bottomLeftCornerOverlay.refresh(fastDraw); - } - - if (this.debug) { - this.debug.refresh(fastDraw); - } - } - - /** - * Adjust overlays elements size and master table size - * - * @param {Boolean} [force=false] - */ - - }, { - key: 'adjustElementsSize', - value: function adjustElementsSize() { - var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - var totalColumns = this.wot.getSetting('totalColumns'); - var totalRows = this.wot.getSetting('totalRows'); - var headerRowSize = this.wot.wtViewport.getRowHeaderWidth(); - var headerColumnSize = this.wot.wtViewport.getColumnHeaderHeight(); - var hiderStyle = this.wot.wtTable.hider.style; - - hiderStyle.width = headerRowSize + this.leftOverlay.sumCellSizes(0, totalColumns) + 'px'; - hiderStyle.height = headerColumnSize + this.topOverlay.sumCellSizes(0, totalRows) + 1 + 'px'; - - this.topOverlay.adjustElementsSize(force); - this.leftOverlay.adjustElementsSize(force); - - if (this.bottomOverlay.clone) { - this.bottomOverlay.adjustElementsSize(force); - } - } - - /** - * - */ - - }, { - key: 'applyToDOM', - value: function applyToDOM() { - if (!this.topOverlay.areElementSizesAdjusted || !this.leftOverlay.areElementSizesAdjusted) { - this.adjustElementsSize(); - } - this.topOverlay.applyToDOM(); - - if (this.bottomOverlay.clone) { - this.bottomOverlay.applyToDOM(); - } - - this.leftOverlay.applyToDOM(); - } - - /** - * Get the parent overlay of the provided element. - * - * @param {HTMLElement} element - * @returns {Object|null} - */ - - }, { - key: 'getParentOverlay', - value: function getParentOverlay(element) { - if (!element) { - return null; - } - - var overlays = [this.topOverlay, this.leftOverlay, this.bottomOverlay, this.topLeftCornerOverlay, this.bottomLeftCornerOverlay]; - var result = null; - - (0, _array.arrayEach)(overlays, function (elem, i) { - if (!elem) { - return; - } - - if (elem.clone && elem.clone.wtTable.TABLE.contains(element)) { - result = elem.clone; - } - }); - - return result; - } - }]); - - return Overlays; -}(); - -exports.default = Overlays; - -/***/ }), -/* 143 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _number = __webpack_require__(6); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class Scroll - */ -var Scroll = function () { - /** - * @param {Walkontable} wotInstance - */ - function Scroll(wotInstance) { - _classCallCheck(this, Scroll); - - this.wot = wotInstance; - - // legacy support - this.instance = wotInstance; - } - - /** - * Scrolls viewport to a cell by minimum number of cells - * - * @param {CellCoords} coords - */ - - - _createClass(Scroll, [{ - key: 'scrollViewport', - value: function scrollViewport(coords) { - if (!this.wot.drawn) { - return; - } - - var _getVariables2 = this._getVariables(), - topOverlay = _getVariables2.topOverlay, - leftOverlay = _getVariables2.leftOverlay, - totalRows = _getVariables2.totalRows, - totalColumns = _getVariables2.totalColumns, - fixedRowsTop = _getVariables2.fixedRowsTop, - fixedRowsBottom = _getVariables2.fixedRowsBottom, - fixedColumnsLeft = _getVariables2.fixedColumnsLeft; - - if (coords.row < 0 || coords.row > Math.max(totalRows - 1, 0)) { - throw new Error('row ' + coords.row + ' does not exist'); - } - - if (coords.col < 0 || coords.col > Math.max(totalColumns - 1, 0)) { - throw new Error('column ' + coords.col + ' does not exist'); - } - - if (coords.row >= fixedRowsTop && coords.row < this.getFirstVisibleRow()) { - topOverlay.scrollTo(coords.row); - } else if (coords.row > this.getLastVisibleRow() && coords.row < totalRows - fixedRowsBottom) { - topOverlay.scrollTo(coords.row, true); - } - - if (coords.col >= fixedColumnsLeft && coords.col < this.getFirstVisibleColumn()) { - leftOverlay.scrollTo(coords.col); - } else if (coords.col > this.getLastVisibleColumn()) { - leftOverlay.scrollTo(coords.col, true); - } - } - - /** - * Get first visible row based on virtual dom and how table is visible in browser window viewport. - * - * @returns {Number} - */ - - }, { - key: 'getFirstVisibleRow', - value: function getFirstVisibleRow() { - var _getVariables3 = this._getVariables(), - topOverlay = _getVariables3.topOverlay, - wtTable = _getVariables3.wtTable, - wtViewport = _getVariables3.wtViewport, - totalRows = _getVariables3.totalRows, - fixedRowsTop = _getVariables3.fixedRowsTop; - - var firstVisibleRow = wtTable.getFirstVisibleRow(); - - if (topOverlay.mainTableScrollableElement === window) { - var rootElementOffset = (0, _element.offset)(wtTable.wtRootElement); - var totalTableHeight = (0, _element.innerHeight)(wtTable.hider); - var windowHeight = (0, _element.innerHeight)(window); - var windowScrollTop = (0, _element.getScrollTop)(window); - - // Only calculate firstVisibleRow when table didn't filled (from up) whole viewport space - if (rootElementOffset.top + totalTableHeight - windowHeight <= windowScrollTop) { - var rowsHeight = wtViewport.getColumnHeaderHeight(); - - rowsHeight += topOverlay.sumCellSizes(0, fixedRowsTop); - - (0, _number.rangeEachReverse)(totalRows, 1, function (row) { - rowsHeight += topOverlay.sumCellSizes(row - 1, row); - - if (rootElementOffset.top + totalTableHeight - rowsHeight <= windowScrollTop) { - // Return physical row + 1 - firstVisibleRow = row; - - return false; - } - }); - } - } - - return firstVisibleRow; - } - - /** - * Get last visible row based on virtual dom and how table is visible in browser window viewport. - * - * @returns {Number} - */ - - }, { - key: 'getLastVisibleRow', - value: function getLastVisibleRow() { - var _getVariables4 = this._getVariables(), - topOverlay = _getVariables4.topOverlay, - wtTable = _getVariables4.wtTable, - wtViewport = _getVariables4.wtViewport, - totalRows = _getVariables4.totalRows; - - var lastVisibleRow = wtTable.getLastVisibleRow(); - - if (topOverlay.mainTableScrollableElement === window) { - var rootElementOffset = (0, _element.offset)(wtTable.wtRootElement); - var windowHeight = (0, _element.innerHeight)(window); - var windowScrollTop = (0, _element.getScrollTop)(window); - - // Only calculate lastVisibleRow when table didn't filled (from bottom) whole viewport space - if (rootElementOffset.top > windowScrollTop) { - var rowsHeight = wtViewport.getColumnHeaderHeight(); - - (0, _number.rangeEach)(1, totalRows, function (row) { - rowsHeight += topOverlay.sumCellSizes(row - 1, row); - - if (rootElementOffset.top + rowsHeight - windowScrollTop >= windowHeight) { - // Return physical row - 1 (-2 because rangeEach gives row index + 1 - sumCellSizes requirements) - lastVisibleRow = row - 2; - - return false; - } - }); - } - } - - return lastVisibleRow; - } - - /** - * Get first visible column based on virtual dom and how table is visible in browser window viewport. - * - * @returns {Number} - */ - - }, { - key: 'getFirstVisibleColumn', - value: function getFirstVisibleColumn() { - var _getVariables5 = this._getVariables(), - leftOverlay = _getVariables5.leftOverlay, - wtTable = _getVariables5.wtTable, - wtViewport = _getVariables5.wtViewport, - totalColumns = _getVariables5.totalColumns, - fixedColumnsLeft = _getVariables5.fixedColumnsLeft; - - var firstVisibleColumn = wtTable.getFirstVisibleColumn(); - - if (leftOverlay.mainTableScrollableElement === window) { - var rootElementOffset = (0, _element.offset)(wtTable.wtRootElement); - var totalTableWidth = (0, _element.innerWidth)(wtTable.hider); - var windowWidth = (0, _element.innerWidth)(window); - var windowScrollLeft = (0, _element.getScrollLeft)(window); - - // Only calculate firstVisibleColumn when table didn't filled (from left) whole viewport space - if (rootElementOffset.left + totalTableWidth - windowWidth <= windowScrollLeft) { - var columnsWidth = wtViewport.getRowHeaderWidth(); - - (0, _number.rangeEachReverse)(totalColumns, 1, function (column) { - columnsWidth += leftOverlay.sumCellSizes(column - 1, column); - - if (rootElementOffset.left + totalTableWidth - columnsWidth <= windowScrollLeft) { - // Return physical column + 1 - firstVisibleColumn = column; - - return false; - } - }); - } - } - - return firstVisibleColumn; - } - - /** - * Get last visible column based on virtual dom and how table is visible in browser window viewport. - * - * @returns {Number} - */ - - }, { - key: 'getLastVisibleColumn', - value: function getLastVisibleColumn() { - var _getVariables6 = this._getVariables(), - leftOverlay = _getVariables6.leftOverlay, - wtTable = _getVariables6.wtTable, - wtViewport = _getVariables6.wtViewport, - totalColumns = _getVariables6.totalColumns; - - var lastVisibleColumn = wtTable.getLastVisibleColumn(); - - if (leftOverlay.mainTableScrollableElement === window) { - var rootElementOffset = (0, _element.offset)(wtTable.wtRootElement); - var windowWidth = (0, _element.innerWidth)(window); - var windowScrollLeft = (0, _element.getScrollLeft)(window); - - // Only calculate lastVisibleColumn when table didn't filled (from right) whole viewport space - if (rootElementOffset.left > windowScrollLeft) { - var columnsWidth = wtViewport.getRowHeaderWidth(); - - (0, _number.rangeEach)(1, totalColumns, function (column) { - columnsWidth += leftOverlay.sumCellSizes(column - 1, column); - - if (rootElementOffset.left + columnsWidth - windowScrollLeft >= windowWidth) { - // Return physical column - 1 (-2 because rangeEach gives column index + 1 - sumCellSizes requirements) - lastVisibleColumn = column - 2; - - return false; - } - }); - } - } - - return lastVisibleColumn; - } - - /** - * Returns collection of variables used to rows and columns visibility calculations. - * - * @returns {Object} - * @private - */ - - }, { - key: '_getVariables', - value: function _getVariables() { - var wot = this.wot; - var topOverlay = wot.wtOverlays.topOverlay; - var leftOverlay = wot.wtOverlays.leftOverlay; - var wtTable = wot.wtTable; - var wtViewport = wot.wtViewport; - var totalRows = wot.getSetting('totalRows'); - var totalColumns = wot.getSetting('totalColumns'); - var fixedRowsTop = wot.getSetting('fixedRowsTop'); - var fixedRowsBottom = wot.getSetting('fixedRowsBottom'); - var fixedColumnsLeft = wot.getSetting('fixedColumnsLeft'); - - return { - topOverlay: topOverlay, - leftOverlay: leftOverlay, - wtTable: wtTable, - wtViewport: wtViewport, - totalRows: totalRows, - totalColumns: totalColumns, - fixedRowsTop: fixedRowsTop, - fixedRowsBottom: fixedRowsBottom, - fixedColumnsLeft: fixedColumnsLeft - }; - } - }]); - - return Scroll; -}(); - -exports.default = Scroll; - -/***/ }), -/* 144 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _object = __webpack_require__(1); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class Settings - */ -var Settings = function () { - /** - * @param {Walkontable} wotInstance - * @param {Object} settings - */ - function Settings(wotInstance, settings) { - var _this = this; - - _classCallCheck(this, Settings); - - this.wot = wotInstance; - - // legacy support - this.instance = wotInstance; - - // default settings. void 0 means it is required, null means it can be empty - this.defaults = { - table: void 0, - debug: false, // shows WalkontableDebugOverlay - - // presentation mode - externalRowCalculator: false, - stretchH: 'none', // values: all, last, none - currentRowClassName: null, - currentColumnClassName: null, - preventOverflow: function preventOverflow() { - return false; - }, - - - // data source - data: void 0, - freezeOverlays: false, - fixedColumnsLeft: 0, - fixedRowsTop: 0, - fixedRowsBottom: 0, - minSpareRows: 0, - - // this must be array of functions: [function (row, TH) {}] - rowHeaders: function rowHeaders() { - return []; - }, - - - // this must be array of functions: [function (column, TH) {}] - columnHeaders: function columnHeaders() { - return []; - }, - - totalRows: void 0, - totalColumns: void 0, - cellRenderer: function cellRenderer(row, column, TD) { - var cellData = _this.getSetting('data', row, column); - - (0, _element.fastInnerText)(TD, cellData === void 0 || cellData === null ? '' : cellData); - }, - - // columnWidth: 50, - columnWidth: function columnWidth(col) { - // return undefined means use default size for the rendered cell content - }, - rowHeight: function rowHeight(row) { - // return undefined means use default size for the rendered cell content - }, - - defaultRowHeight: 23, - defaultColumnWidth: 50, - selections: null, - hideBorderOnMouseDownOver: false, - viewportRowCalculatorOverride: null, - viewportColumnCalculatorOverride: null, - - // callbacks - onCellMouseDown: null, - onCellMouseOver: null, - onCellMouseOut: null, - onCellMouseUp: null, - - // onCellMouseOut: null, - onCellDblClick: null, - onCellCornerMouseDown: null, - onCellCornerDblClick: null, - beforeDraw: null, - onDraw: null, - onBeforeDrawBorders: null, - onScrollVertically: null, - onScrollHorizontally: null, - onBeforeTouchScroll: null, - onAfterMomentumScroll: null, - onBeforeStretchingColumnWidth: function onBeforeStretchingColumnWidth(width) { - return width; - }, - onModifyRowHeaderWidth: null, - - // constants - scrollbarWidth: 10, - scrollbarHeight: 10, - - renderAllRows: false, - groups: false, - rowHeaderWidth: null, - columnHeaderHeight: null, - headerClassName: null - }; - - // reference to settings - this.settings = {}; - - for (var i in this.defaults) { - if ((0, _object.hasOwnProperty)(this.defaults, i)) { - if (settings[i] !== void 0) { - this.settings[i] = settings[i]; - } else if (this.defaults[i] === void 0) { - throw new Error('A required setting "' + i + '" was not provided'); - } else { - this.settings[i] = this.defaults[i]; - } - } - } - } - - /** - * Update settings - * - * @param {Object} settings - * @param {*} value - * @returns {Walkontable} - */ - - - _createClass(Settings, [{ - key: 'update', - value: function update(settings, value) { - if (value === void 0) { - // settings is object - for (var i in settings) { - if ((0, _object.hasOwnProperty)(settings, i)) { - this.settings[i] = settings[i]; - } - } - } else { - // if value is defined then settings is the key - this.settings[settings] = value; - } - return this.wot; - } - - /** - * Get setting by name - * - * @param {String} key - * @param {*} param1 - * @param {*} param2 - * @param {*} param3 - * @param {*} param4 - * @returns {*} - */ - - }, { - key: 'getSetting', - value: function getSetting(key, param1, param2, param3, param4) { - if (typeof this.settings[key] === 'function') { - // this is faster than .apply - https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips - return this.settings[key](param1, param2, param3, param4); - } else if (param1 !== void 0 && Array.isArray(this.settings[key])) { - // perhaps this can be removed, it is only used in tests - return this.settings[key][param1]; - } - - return this.settings[key]; - } - - /** - * Checks if setting exists - * - * @param {Boolean} key - * @returns {Boolean} - */ - - }, { - key: 'has', - value: function has(key) { - return !!this.settings[key]; - } - }]); - - return Settings; -}(); - -exports.default = Settings; - -/***/ }), -/* 145 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _function = __webpack_require__(35); - -var _coords = __webpack_require__(42); - -var _coords2 = _interopRequireDefault(_coords); - -var _range = __webpack_require__(68); - -var _range2 = _interopRequireDefault(_range); - -var _column = __webpack_require__(140); - -var _column2 = _interopRequireDefault(_column); - -var _row = __webpack_require__(141); - -var _row2 = _interopRequireDefault(_row); - -var _tableRenderer = __webpack_require__(146); - -var _tableRenderer2 = _interopRequireDefault(_tableRenderer); - -var _base = __webpack_require__(28); - -var _base2 = _interopRequireDefault(_base); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * - */ -var Table = function () { - /** - * @param {Walkontable} wotInstance - * @param {HTMLTableElement} table - */ - function Table(wotInstance, table) { - var _this = this; - - _classCallCheck(this, Table); - - this.wot = wotInstance; - - // legacy support - this.instance = this.wot; - this.TABLE = table; - this.TBODY = null; - this.THEAD = null; - this.COLGROUP = null; - this.tableOffset = 0; - this.holderOffset = 0; - - (0, _element.removeTextNodes)(this.TABLE); - - this.spreader = this.createSpreader(this.TABLE); - this.hider = this.createHider(this.spreader); - this.holder = this.createHolder(this.hider); - - this.wtRootElement = this.holder.parentNode; - this.alignOverlaysWithTrimmingContainer(); - this.fixTableDomTree(); - - this.colgroupChildrenLength = this.COLGROUP.childNodes.length; - this.theadChildrenLength = this.THEAD.firstChild ? this.THEAD.firstChild.childNodes.length : 0; - this.tbodyChildrenLength = this.TBODY.childNodes.length; - - this.rowFilter = null; - this.columnFilter = null; - this.correctHeaderWidth = false; - - var origRowHeaderWidth = this.wot.wtSettings.settings.rowHeaderWidth; - - // Fix for jumping row headers (https://github.com/handsontable/handsontable/issues/3850) - this.wot.wtSettings.settings.rowHeaderWidth = function () { - return _this._modifyRowHeaderWidth(origRowHeaderWidth); - }; - } - - /** - * - */ - - - _createClass(Table, [{ - key: 'fixTableDomTree', - value: function fixTableDomTree() { - this.TBODY = this.TABLE.querySelector('tbody'); - - if (!this.TBODY) { - this.TBODY = document.createElement('tbody'); - this.TABLE.appendChild(this.TBODY); - } - this.THEAD = this.TABLE.querySelector('thead'); - - if (!this.THEAD) { - this.THEAD = document.createElement('thead'); - this.TABLE.insertBefore(this.THEAD, this.TBODY); - } - this.COLGROUP = this.TABLE.querySelector('colgroup'); - - if (!this.COLGROUP) { - this.COLGROUP = document.createElement('colgroup'); - this.TABLE.insertBefore(this.COLGROUP, this.THEAD); - } - - if (this.wot.getSetting('columnHeaders').length && !this.THEAD.childNodes.length) { - this.THEAD.appendChild(document.createElement('TR')); - } - } - - /** - * @param table - * @returns {HTMLElement} - */ - - }, { - key: 'createSpreader', - value: function createSpreader(table) { - var parent = table.parentNode; - var spreader = void 0; - - if (!parent || parent.nodeType !== 1 || !(0, _element.hasClass)(parent, 'wtHolder')) { - spreader = document.createElement('div'); - spreader.className = 'wtSpreader'; - - if (parent) { - // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it - parent.insertBefore(spreader, table); - } - spreader.appendChild(table); - } - spreader.style.position = 'relative'; - - return spreader; - } - - /** - * @param spreader - * @returns {HTMLElement} - */ - - }, { - key: 'createHider', - value: function createHider(spreader) { - var parent = spreader.parentNode; - var hider = void 0; - - if (!parent || parent.nodeType !== 1 || !(0, _element.hasClass)(parent, 'wtHolder')) { - hider = document.createElement('div'); - hider.className = 'wtHider'; - - if (parent) { - // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it - parent.insertBefore(hider, spreader); - } - hider.appendChild(spreader); - } - - return hider; - } - - /** - * - * @param hider - * @returns {HTMLElement} - */ - - }, { - key: 'createHolder', - value: function createHolder(hider) { - var parent = hider.parentNode; - var holder = void 0; - - if (!parent || parent.nodeType !== 1 || !(0, _element.hasClass)(parent, 'wtHolder')) { - holder = document.createElement('div'); - holder.style.position = 'relative'; - holder.className = 'wtHolder'; - - if (parent) { - // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it - parent.insertBefore(holder, hider); - } - if (!this.isWorkingOnClone()) { - holder.parentNode.className += 'ht_master handsontable'; - } - holder.appendChild(hider); - } - - return holder; - } - }, { - key: 'alignOverlaysWithTrimmingContainer', - value: function alignOverlaysWithTrimmingContainer() { - var trimmingElement = (0, _element.getTrimmingContainer)(this.wtRootElement); - - if (!this.isWorkingOnClone()) { - this.holder.parentNode.style.position = 'relative'; - - if (trimmingElement === window) { - var preventOverflow = this.wot.getSetting('preventOverflow'); - - if (!preventOverflow) { - this.holder.style.overflow = 'visible'; - this.wtRootElement.style.overflow = 'visible'; - } - } else { - this.holder.style.width = (0, _element.getStyle)(trimmingElement, 'width'); - this.holder.style.height = (0, _element.getStyle)(trimmingElement, 'height'); - this.holder.style.overflow = ''; - } - } - } - }, { - key: 'isWorkingOnClone', - value: function isWorkingOnClone() { - return !!this.wot.cloneSource; - } - - /** - * Redraws the table - * - * @param {Boolean} fastDraw If TRUE, will try to avoid full redraw and only update the border positions. If FALSE or UNDEFINED, will perform a full redraw - * @returns {Table} - */ - - }, { - key: 'draw', - value: function draw(fastDraw) { - var _wot = this.wot, - wtOverlays = _wot.wtOverlays, - wtViewport = _wot.wtViewport; - - var totalRows = this.instance.getSetting('totalRows'); - var rowHeaders = this.wot.getSetting('rowHeaders').length; - var columnHeaders = this.wot.getSetting('columnHeaders').length; - var syncScroll = false; - - if (!this.isWorkingOnClone()) { - this.holderOffset = (0, _element.offset)(this.holder); - fastDraw = wtViewport.createRenderCalculators(fastDraw); - - if (rowHeaders && !this.wot.getSetting('fixedColumnsLeft')) { - var leftScrollPos = wtOverlays.leftOverlay.getScrollPosition(); - var previousState = this.correctHeaderWidth; - - this.correctHeaderWidth = leftScrollPos > 0; - - if (previousState !== this.correctHeaderWidth) { - fastDraw = false; - } - } - } - - if (!this.isWorkingOnClone()) { - syncScroll = wtOverlays.prepareOverlays(); - } - - if (fastDraw) { - if (!this.isWorkingOnClone()) { - // in case we only scrolled without redraw, update visible rows information in oldRowsCalculator - wtViewport.createVisibleCalculators(); - } - if (wtOverlays) { - wtOverlays.refresh(true); - } - } else { - if (this.isWorkingOnClone()) { - this.tableOffset = this.wot.cloneSource.wtTable.tableOffset; - } else { - this.tableOffset = (0, _element.offset)(this.TABLE); - } - var startRow = void 0; - - if (_base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_DEBUG) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_TOP) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_TOP_LEFT_CORNER)) { - startRow = 0; - } else if (_base2.default.isOverlayTypeOf(this.instance.cloneOverlay, _base2.default.CLONE_BOTTOM) || _base2.default.isOverlayTypeOf(this.instance.cloneOverlay, _base2.default.CLONE_BOTTOM_LEFT_CORNER)) { - startRow = Math.max(totalRows - this.wot.getSetting('fixedRowsBottom'), 0); - } else { - startRow = wtViewport.rowsRenderCalculator.startRow; - } - var startColumn = void 0; - - if (_base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_DEBUG) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_LEFT) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_TOP_LEFT_CORNER) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_BOTTOM_LEFT_CORNER)) { - startColumn = 0; - } else { - startColumn = wtViewport.columnsRenderCalculator.startColumn; - } - this.rowFilter = new _row2.default(startRow, totalRows, columnHeaders); - this.columnFilter = new _column2.default(startColumn, this.wot.getSetting('totalColumns'), rowHeaders); - - this.alignOverlaysWithTrimmingContainer(); - this._doDraw(); // creates calculator after draw - } - this.refreshSelections(fastDraw); - - if (!this.isWorkingOnClone()) { - wtOverlays.topOverlay.resetFixedPosition(); - - if (wtOverlays.bottomOverlay.clone) { - wtOverlays.bottomOverlay.resetFixedPosition(); - } - - wtOverlays.leftOverlay.resetFixedPosition(); - - if (wtOverlays.topLeftCornerOverlay) { - wtOverlays.topLeftCornerOverlay.resetFixedPosition(); - } - - if (wtOverlays.bottomLeftCornerOverlay && wtOverlays.bottomLeftCornerOverlay.clone) { - wtOverlays.bottomLeftCornerOverlay.resetFixedPosition(); - } - } - if (syncScroll) { - wtOverlays.syncScrollWithMaster(); - } - this.wot.drawn = true; - - return this; - } - }, { - key: '_doDraw', - value: function _doDraw() { - var wtRenderer = new _tableRenderer2.default(this); - - wtRenderer.render(); - } - }, { - key: 'removeClassFromCells', - value: function removeClassFromCells(className) { - var nodes = this.TABLE.querySelectorAll('.' + className); - - for (var i = 0, len = nodes.length; i < len; i++) { - (0, _element.removeClass)(nodes[i], className); - } - } - }, { - key: 'refreshSelections', - value: function refreshSelections(fastDraw) { - if (!this.wot.selections) { - return; - } - var len = this.wot.selections.length; - - if (fastDraw) { - for (var i = 0; i < len; i++) { - // there was no rerender, so we need to remove classNames by ourselves - if (this.wot.selections[i].settings.className) { - this.removeClassFromCells(this.wot.selections[i].settings.className); - } - if (this.wot.selections[i].settings.highlightHeaderClassName) { - this.removeClassFromCells(this.wot.selections[i].settings.highlightHeaderClassName); - } - if (this.wot.selections[i].settings.highlightRowClassName) { - this.removeClassFromCells(this.wot.selections[i].settings.highlightRowClassName); - } - if (this.wot.selections[i].settings.highlightColumnClassName) { - this.removeClassFromCells(this.wot.selections[i].settings.highlightColumnClassName); - } - } - } - for (var _i = 0; _i < len; _i++) { - this.wot.selections[_i].draw(this.wot, fastDraw); - } - } - - /** - * Get cell element at coords. - * - * @param {CellCoords} coords - * @returns {HTMLElement|Number} HTMLElement on success or Number one of the exit codes on error: - * -1 row before viewport - * -2 row after viewport - */ - - }, { - key: 'getCell', - value: function getCell(coords) { - if (this.isRowBeforeRenderedRows(coords.row)) { - // row before rendered rows - return -1; - } else if (this.isRowAfterRenderedRows(coords.row)) { - // row after rendered rows - return -2; - } - - var TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(coords.row)]; - - if (TR) { - return TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(coords.col)]; - } - } - - /** - * getColumnHeader - * - * @param {Number} col Column index - * @param {Number} [level=0] Header level (0 = most distant to the table) - * @returns {Object} HTMLElement on success or undefined on error - */ - - }, { - key: 'getColumnHeader', - value: function getColumnHeader(col) { - var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - var TR = this.THEAD.childNodes[level]; - - if (TR) { - return TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(col)]; - } - } - - /** - * getRowHeader - * - * @param {Number} row Row index - * @returns {HTMLElement} HTMLElement on success or Number one of the exit codes on error: `null table doesn't have row headers` - */ - - }, { - key: 'getRowHeader', - value: function getRowHeader(row) { - if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) { - return null; - } - var TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)]; - - if (TR) { - return TR.childNodes[0]; - } - } - - /** - * Returns cell coords object for a given TD (or a child element of a TD element). - * - * @param {HTMLTableCellElement} TD A cell DOM element (or a child of one). - * @returns {CellCoords|null} The coordinates of the provided TD element (or the closest TD element) or null, if the provided element is not applicable. - */ - - }, { - key: 'getCoords', - value: function getCoords(TD) { - if (TD.nodeName !== 'TD' && TD.nodeName !== 'TH') { - TD = (0, _element.closest)(TD, ['TD', 'TH']); - } - - if (TD === null) { - return null; - } - - var TR = TD.parentNode; - var CONTAINER = TR.parentNode; - var row = (0, _element.index)(TR); - var col = TD.cellIndex; - - if ((0, _element.overlayContainsElement)(_base2.default.CLONE_TOP_LEFT_CORNER, TD) || (0, _element.overlayContainsElement)(_base2.default.CLONE_TOP, TD)) { - if (CONTAINER.nodeName === 'THEAD') { - row -= CONTAINER.childNodes.length; - } - } else if (CONTAINER === this.THEAD) { - row = this.rowFilter.visibleColHeadedRowToSourceRow(row); - } else { - row = this.rowFilter.renderedToSource(row); - } - - if ((0, _element.overlayContainsElement)(_base2.default.CLONE_TOP_LEFT_CORNER, TD) || (0, _element.overlayContainsElement)(_base2.default.CLONE_LEFT, TD)) { - col = this.columnFilter.offsettedTH(col); - } else { - col = this.columnFilter.visibleRowHeadedColumnToSourceColumn(col); - } - - return new _coords2.default(row, col); - } - }, { - key: 'getTrForRow', - value: function getTrForRow(row) { - return this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)]; - } - }, { - key: 'getFirstRenderedRow', - value: function getFirstRenderedRow() { - return this.wot.wtViewport.rowsRenderCalculator.startRow; - } - }, { - key: 'getFirstVisibleRow', - value: function getFirstVisibleRow() { - return this.wot.wtViewport.rowsVisibleCalculator.startRow; - } - }, { - key: 'getFirstRenderedColumn', - value: function getFirstRenderedColumn() { - return this.wot.wtViewport.columnsRenderCalculator.startColumn; - } - - /** - * @returns {Number} Returns -1 if no row is visible - */ - - }, { - key: 'getFirstVisibleColumn', - value: function getFirstVisibleColumn() { - return this.wot.wtViewport.columnsVisibleCalculator.startColumn; - } - - /** - * @returns {Number} Returns -1 if no row is visible - */ - - }, { - key: 'getLastRenderedRow', - value: function getLastRenderedRow() { - return this.wot.wtViewport.rowsRenderCalculator.endRow; - } - }, { - key: 'getLastVisibleRow', - value: function getLastVisibleRow() { - return this.wot.wtViewport.rowsVisibleCalculator.endRow; - } - }, { - key: 'getLastRenderedColumn', - value: function getLastRenderedColumn() { - return this.wot.wtViewport.columnsRenderCalculator.endColumn; - } - - /** - * @returns {Number} Returns -1 if no column is visible - */ - - }, { - key: 'getLastVisibleColumn', - value: function getLastVisibleColumn() { - return this.wot.wtViewport.columnsVisibleCalculator.endColumn; - } - }, { - key: 'isRowBeforeRenderedRows', - value: function isRowBeforeRenderedRows(row) { - return this.rowFilter && this.rowFilter.sourceToRendered(row) < 0 && row >= 0; - } - }, { - key: 'isRowAfterViewport', - value: function isRowAfterViewport(row) { - return this.rowFilter && this.rowFilter.sourceToRendered(row) > this.getLastVisibleRow(); - } - }, { - key: 'isRowAfterRenderedRows', - value: function isRowAfterRenderedRows(row) { - return this.rowFilter && this.rowFilter.sourceToRendered(row) > this.getLastRenderedRow(); - } - }, { - key: 'isColumnBeforeViewport', - value: function isColumnBeforeViewport(column) { - return this.columnFilter && this.columnFilter.sourceToRendered(column) < 0 && column >= 0; - } - }, { - key: 'isColumnAfterViewport', - value: function isColumnAfterViewport(column) { - return this.columnFilter && this.columnFilter.sourceToRendered(column) > this.getLastVisibleColumn(); - } - }, { - key: 'isLastRowFullyVisible', - value: function isLastRowFullyVisible() { - return this.getLastVisibleRow() === this.getLastRenderedRow(); - } - }, { - key: 'isLastColumnFullyVisible', - value: function isLastColumnFullyVisible() { - return this.getLastVisibleColumn() === this.getLastRenderedColumn(); - } - }, { - key: 'getRenderedColumnsCount', - value: function getRenderedColumnsCount() { - var columnsCount = this.wot.wtViewport.columnsRenderCalculator.count; - var totalColumns = this.wot.getSetting('totalColumns'); - - if (this.wot.isOverlayName(_base2.default.CLONE_DEBUG)) { - columnsCount = totalColumns; - } else if (this.wot.isOverlayName(_base2.default.CLONE_LEFT) || this.wot.isOverlayName(_base2.default.CLONE_TOP_LEFT_CORNER) || this.wot.isOverlayName(_base2.default.CLONE_BOTTOM_LEFT_CORNER)) { - return Math.min(this.wot.getSetting('fixedColumnsLeft'), totalColumns); - } - - return columnsCount; - } - }, { - key: 'getRenderedRowsCount', - value: function getRenderedRowsCount() { - var rowsCount = this.wot.wtViewport.rowsRenderCalculator.count; - var totalRows = this.wot.getSetting('totalRows'); - - if (this.wot.isOverlayName(_base2.default.CLONE_DEBUG)) { - rowsCount = totalRows; - } else if (this.wot.isOverlayName(_base2.default.CLONE_TOP) || this.wot.isOverlayName(_base2.default.CLONE_TOP_LEFT_CORNER)) { - rowsCount = Math.min(this.wot.getSetting('fixedRowsTop'), totalRows); - } else if (this.wot.isOverlayName(_base2.default.CLONE_BOTTOM) || this.wot.isOverlayName(_base2.default.CLONE_BOTTOM_LEFT_CORNER)) { - rowsCount = Math.min(this.wot.getSetting('fixedRowsBottom'), totalRows); - } - - return rowsCount; - } - }, { - key: 'getVisibleRowsCount', - value: function getVisibleRowsCount() { - return this.wot.wtViewport.rowsVisibleCalculator.count; - } - }, { - key: 'allRowsInViewport', - value: function allRowsInViewport() { - return this.wot.getSetting('totalRows') == this.getVisibleRowsCount(); - } - - /** - * Checks if any of the row's cells content exceeds its initial height, and if so, returns the oversized height - * - * @param {Number} sourceRow - * @returns {Number} - */ - - }, { - key: 'getRowHeight', - value: function getRowHeight(sourceRow) { - var height = this.wot.wtSettings.settings.rowHeight(sourceRow); - var oversizedHeight = this.wot.wtViewport.oversizedRows[sourceRow]; - - if (oversizedHeight !== void 0) { - height = height === void 0 ? oversizedHeight : Math.max(height, oversizedHeight); - } - - return height; - } - }, { - key: 'getColumnHeaderHeight', - value: function getColumnHeaderHeight(level) { - var height = this.wot.wtSettings.settings.defaultRowHeight; - var oversizedHeight = this.wot.wtViewport.oversizedColumnHeaders[level]; - - if (oversizedHeight !== void 0) { - height = height ? Math.max(height, oversizedHeight) : oversizedHeight; - } - - return height; - } - }, { - key: 'getVisibleColumnsCount', - value: function getVisibleColumnsCount() { - return this.wot.wtViewport.columnsVisibleCalculator.count; - } - }, { - key: 'allColumnsInViewport', - value: function allColumnsInViewport() { - return this.wot.getSetting('totalColumns') == this.getVisibleColumnsCount(); - } - }, { - key: 'getColumnWidth', - value: function getColumnWidth(sourceColumn) { - var width = this.wot.wtSettings.settings.columnWidth; - - if (typeof width === 'function') { - width = width(sourceColumn); - } else if ((typeof width === 'undefined' ? 'undefined' : _typeof(width)) === 'object') { - width = width[sourceColumn]; - } - - return width || this.wot.wtSettings.settings.defaultColumnWidth; - } - }, { - key: 'getStretchedColumnWidth', - value: function getStretchedColumnWidth(sourceColumn) { - var columnWidth = this.getColumnWidth(sourceColumn); - var width = columnWidth == null ? this.instance.wtSettings.settings.defaultColumnWidth : columnWidth; - var calculator = this.wot.wtViewport.columnsRenderCalculator; - - if (calculator) { - var stretchedWidth = calculator.getStretchedColumnWidth(sourceColumn, width); - - if (stretchedWidth) { - width = stretchedWidth; - } - } - - return width; - } - - /** - * Modify row header widths provided by user in class contructor. - * - * @private - */ - - }, { - key: '_modifyRowHeaderWidth', - value: function _modifyRowHeaderWidth(rowHeaderWidthFactory) { - var widths = (0, _function.isFunction)(rowHeaderWidthFactory) ? rowHeaderWidthFactory() : null; - - if (Array.isArray(widths)) { - widths = [].concat(_toConsumableArray(widths)); - widths[widths.length - 1] = this._correctRowHeaderWidth(widths[widths.length - 1]); - } else { - widths = this._correctRowHeaderWidth(widths); - } - - return widths; - } - - /** - * Correct row header width if necessary. - * - * @private - */ - - }, { - key: '_correctRowHeaderWidth', - value: function _correctRowHeaderWidth(width) { - if (typeof width !== 'number') { - width = this.wot.getSetting('defaultColumnWidth'); - } - if (this.correctHeaderWidth) { - width++; - } - - return width; - } - }]); - - return Table; -}(); - -exports.default = Table; - -/***/ }), -/* 146 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _base = __webpack_require__(28); - -var _base2 = _interopRequireDefault(_base); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var performanceWarningAppeared = false; - -/** - * @class TableRenderer - */ - -var TableRenderer = function () { - /** - * @param {WalkontableTable} wtTable - */ - function TableRenderer(wtTable) { - _classCallCheck(this, TableRenderer); - - this.wtTable = wtTable; - this.wot = wtTable.instance; - - // legacy support - this.instance = wtTable.instance; - - this.rowFilter = wtTable.rowFilter; - this.columnFilter = wtTable.columnFilter; - - this.TABLE = wtTable.TABLE; - this.THEAD = wtTable.THEAD; - this.TBODY = wtTable.TBODY; - this.COLGROUP = wtTable.COLGROUP; - - this.rowHeaders = []; - this.rowHeaderCount = 0; - this.columnHeaders = []; - this.columnHeaderCount = 0; - this.fixedRowsTop = 0; - this.fixedRowsBottom = 0; - } - - /** - * - */ - - - _createClass(TableRenderer, [{ - key: 'render', - value: function render() { - if (!this.wtTable.isWorkingOnClone()) { - var skipRender = {}; - this.wot.getSetting('beforeDraw', true, skipRender); - - if (skipRender.skipRender === true) { - return; - } - } - - this.rowHeaders = this.wot.getSetting('rowHeaders'); - this.rowHeaderCount = this.rowHeaders.length; - this.fixedRowsTop = this.wot.getSetting('fixedRowsTop'); - this.fixedRowsBottom = this.wot.getSetting('fixedRowsBottom'); - this.columnHeaders = this.wot.getSetting('columnHeaders'); - this.columnHeaderCount = this.columnHeaders.length; - - var columnsToRender = this.wtTable.getRenderedColumnsCount(); - var rowsToRender = this.wtTable.getRenderedRowsCount(); - var totalColumns = this.wot.getSetting('totalColumns'); - var totalRows = this.wot.getSetting('totalRows'); - var workspaceWidth = void 0; - var adjusted = false; - - if (_base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_BOTTOM) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_BOTTOM_LEFT_CORNER)) { - - // do NOT render headers on the bottom or bottom-left corner overlay - this.columnHeaders = []; - this.columnHeaderCount = 0; - } - - if (totalColumns >= 0) { - // prepare COL and TH elements for rendering - this.adjustAvailableNodes(); - adjusted = true; - - // adjust column widths according to user widths settings - this.renderColumnHeaders(); - - // Render table rows - this.renderRows(totalRows, rowsToRender, columnsToRender); - - if (!this.wtTable.isWorkingOnClone()) { - workspaceWidth = this.wot.wtViewport.getWorkspaceWidth(); - this.wot.wtViewport.containerWidth = null; - } - - this.adjustColumnWidths(columnsToRender); - this.markOversizedColumnHeaders(); - this.adjustColumnHeaderHeights(); - } - - if (!adjusted) { - this.adjustAvailableNodes(); - } - this.removeRedundantRows(rowsToRender); - - if (!this.wtTable.isWorkingOnClone() || this.wot.isOverlayName(_base2.default.CLONE_BOTTOM)) { - this.markOversizedRows(); - } - if (!this.wtTable.isWorkingOnClone()) { - this.wot.wtViewport.createVisibleCalculators(); - this.wot.wtOverlays.refresh(false); - - this.wot.wtOverlays.applyToDOM(); - - var hiderWidth = (0, _element.outerWidth)(this.wtTable.hider); - var tableWidth = (0, _element.outerWidth)(this.wtTable.TABLE); - - if (hiderWidth !== 0 && tableWidth !== hiderWidth) { - // Recalculate the column widths, if width changes made in the overlays removed the scrollbar, thus changing the viewport width. - this.adjustColumnWidths(columnsToRender); - } - - if (workspaceWidth !== this.wot.wtViewport.getWorkspaceWidth()) { - // workspace width changed though to shown/hidden vertical scrollbar. Let's reapply stretching - this.wot.wtViewport.containerWidth = null; - - var firstRendered = this.wtTable.getFirstRenderedColumn(); - var lastRendered = this.wtTable.getLastRenderedColumn(); - var defaultColumnWidth = this.wot.getSetting('defaultColumnWidth'); - var rowHeaderWidthSetting = this.wot.getSetting('rowHeaderWidth'); - - rowHeaderWidthSetting = this.instance.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting); - - if (rowHeaderWidthSetting != null) { - for (var i = 0; i < this.rowHeaderCount; i++) { - var width = Array.isArray(rowHeaderWidthSetting) ? rowHeaderWidthSetting[i] : rowHeaderWidthSetting; - - width = width == null ? defaultColumnWidth : width; - - this.COLGROUP.childNodes[i].style.width = width + 'px'; - } - } - - for (var _i = firstRendered; _i < lastRendered; _i++) { - var _width = this.wtTable.getStretchedColumnWidth(_i); - var renderedIndex = this.columnFilter.sourceToRendered(_i); - - this.COLGROUP.childNodes[renderedIndex + this.rowHeaderCount].style.width = _width + 'px'; - } - } - - this.wot.getSetting('onDraw', true); - } else if (this.wot.isOverlayName(_base2.default.CLONE_BOTTOM)) { - this.wot.cloneSource.wtOverlays.adjustElementsSize(); - } - } - - /** - * @param {Number} renderedRowsCount - */ - - }, { - key: 'removeRedundantRows', - value: function removeRedundantRows(renderedRowsCount) { - while (this.wtTable.tbodyChildrenLength > renderedRowsCount) { - this.TBODY.removeChild(this.TBODY.lastChild); - this.wtTable.tbodyChildrenLength--; - } - } - - /** - * @param {Number} totalRows - * @param {Number} rowsToRender - * @param {Number} columnsToRender - */ - - }, { - key: 'renderRows', - value: function renderRows(totalRows, rowsToRender, columnsToRender) { - var lastTD = void 0, - TR = void 0; - var visibleRowIndex = 0; - var sourceRowIndex = this.rowFilter.renderedToSource(visibleRowIndex); - var isWorkingOnClone = this.wtTable.isWorkingOnClone(); - - while (sourceRowIndex < totalRows && sourceRowIndex >= 0) { - if (!performanceWarningAppeared && visibleRowIndex > 1000) { - performanceWarningAppeared = true; - console.warn('Performance tip: Handsontable rendered more than 1000 visible rows. Consider limiting the number ' + 'of rendered rows by specifying the table height and/or turning off the "renderAllRows" option.'); - } - if (rowsToRender !== void 0 && visibleRowIndex === rowsToRender) { - // We have as much rows as needed for this clone - break; - } - TR = this.getOrCreateTrForRow(visibleRowIndex, TR); - - // Render row headers - this.renderRowHeaders(sourceRowIndex, TR); - // Add and/or remove TDs to TR to match the desired number - this.adjustColumns(TR, columnsToRender + this.rowHeaderCount); - - lastTD = this.renderCells(sourceRowIndex, TR, columnsToRender); - - if (!isWorkingOnClone || - // Necessary to refresh oversized row heights after editing cell in overlays - this.wot.isOverlayName(_base2.default.CLONE_BOTTOM)) { - // Reset the oversized row cache for this row - this.resetOversizedRow(sourceRowIndex); - } - - if (TR.firstChild) { - // if I have 2 fixed columns with one-line content and the 3rd column has a multiline content, this is - // the way to make sure that the overlay will has same row height - var height = this.wot.wtTable.getRowHeight(sourceRowIndex); - - if (height) { - // Decrease height. 1 pixel will be "replaced" by 1px border top - height--; - TR.firstChild.style.height = height + 'px'; - } else { - TR.firstChild.style.height = ''; - } - } - visibleRowIndex++; - sourceRowIndex = this.rowFilter.renderedToSource(visibleRowIndex); - } - } - - /** - * Reset the oversized row cache for the provided index - * - * @param {Number} sourceRow Row index - */ - - }, { - key: 'resetOversizedRow', - value: function resetOversizedRow(sourceRow) { - if (this.wot.getSetting('externalRowCalculator')) { - return; - } - if (this.wot.wtViewport.oversizedRows && this.wot.wtViewport.oversizedRows[sourceRow]) { - this.wot.wtViewport.oversizedRows[sourceRow] = void 0; - } - } - - /** - * Check if any of the rendered rows is higher than expected, and if so, cache them - */ - - }, { - key: 'markOversizedRows', - value: function markOversizedRows() { - if (this.wot.getSetting('externalRowCalculator')) { - return; - } - var rowCount = this.instance.wtTable.TBODY.childNodes.length; - var expectedTableHeight = rowCount * this.instance.wtSettings.settings.defaultRowHeight; - var actualTableHeight = (0, _element.innerHeight)(this.instance.wtTable.TBODY) - 1; - var previousRowHeight = void 0; - var rowInnerHeight = void 0; - var sourceRowIndex = void 0; - var currentTr = void 0; - var rowHeader = void 0; - var totalRows = this.instance.getSetting('totalRows'); - - if (expectedTableHeight === actualTableHeight && !this.instance.getSetting('fixedRowsBottom')) { - // If the actual table height equals rowCount * default single row height, no row is oversized -> no need to iterate over them - return; - } - - while (rowCount) { - rowCount--; - sourceRowIndex = this.instance.wtTable.rowFilter.renderedToSource(rowCount); - previousRowHeight = this.instance.wtTable.getRowHeight(sourceRowIndex); - currentTr = this.instance.wtTable.getTrForRow(sourceRowIndex); - rowHeader = currentTr.querySelector('th'); - - if (rowHeader) { - rowInnerHeight = (0, _element.innerHeight)(rowHeader); - } else { - rowInnerHeight = (0, _element.innerHeight)(currentTr) - 1; - } - - if (!previousRowHeight && this.instance.wtSettings.settings.defaultRowHeight < rowInnerHeight || previousRowHeight < rowInnerHeight) { - this.instance.wtViewport.oversizedRows[sourceRowIndex] = ++rowInnerHeight; - } - } - } - - /** - * Check if any of the rendered columns is higher than expected, and if so, cache them. - */ - - }, { - key: 'markOversizedColumnHeaders', - value: function markOversizedColumnHeaders() { - var overlayName = this.wot.getOverlayName(); - - if (!this.columnHeaderCount || this.wot.wtViewport.hasOversizedColumnHeadersMarked[overlayName] || this.wtTable.isWorkingOnClone()) { - return; - } - var columnCount = this.wtTable.getRenderedColumnsCount(); - - for (var i = 0; i < this.columnHeaderCount; i++) { - for (var renderedColumnIndex = -1 * this.rowHeaderCount; renderedColumnIndex < columnCount; renderedColumnIndex++) { - this.markIfOversizedColumnHeader(renderedColumnIndex); - } - } - this.wot.wtViewport.hasOversizedColumnHeadersMarked[overlayName] = true; - } - - /** - * - */ - - }, { - key: 'adjustColumnHeaderHeights', - value: function adjustColumnHeaderHeights() { - var columnHeaders = this.wot.getSetting('columnHeaders'); - var children = this.wot.wtTable.THEAD.childNodes; - var oversizedColumnHeaders = this.wot.wtViewport.oversizedColumnHeaders; - - for (var i = 0, len = columnHeaders.length; i < len; i++) { - if (oversizedColumnHeaders[i]) { - if (!children[i] || children[i].childNodes.length === 0) { - return; - } - children[i].childNodes[0].style.height = oversizedColumnHeaders[i] + 'px'; - } - } - } - - /** - * Check if column header for the specified column is higher than expected, and if so, cache it - * - * @param {Number} col Index of column - */ - - }, { - key: 'markIfOversizedColumnHeader', - value: function markIfOversizedColumnHeader(col) { - var sourceColIndex = this.wot.wtTable.columnFilter.renderedToSource(col); - var level = this.columnHeaderCount; - var defaultRowHeight = this.wot.wtSettings.settings.defaultRowHeight; - var previousColHeaderHeight = void 0; - var currentHeader = void 0; - var currentHeaderHeight = void 0; - var columnHeaderHeightSetting = this.wot.getSetting('columnHeaderHeight') || []; - - while (level) { - level--; - - previousColHeaderHeight = this.wot.wtTable.getColumnHeaderHeight(level); - currentHeader = this.wot.wtTable.getColumnHeader(sourceColIndex, level); - - if (!currentHeader) { - /* eslint-disable no-continue */ - continue; - } - currentHeaderHeight = (0, _element.innerHeight)(currentHeader); - - if (!previousColHeaderHeight && defaultRowHeight < currentHeaderHeight || previousColHeaderHeight < currentHeaderHeight) { - this.wot.wtViewport.oversizedColumnHeaders[level] = currentHeaderHeight; - } - - if (Array.isArray(columnHeaderHeightSetting)) { - if (columnHeaderHeightSetting[level] != null) { - this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting[level]; - } - } else if (!isNaN(columnHeaderHeightSetting)) { - this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting; - } - - if (this.wot.wtViewport.oversizedColumnHeaders[level] < (columnHeaderHeightSetting[level] || columnHeaderHeightSetting)) { - this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting[level] || columnHeaderHeightSetting; - } - } - } - - /** - * @param {Number} sourceRowIndex - * @param {HTMLTableRowElement} TR - * @param {Number} columnsToRender - * @returns {HTMLTableCellElement} - */ - - }, { - key: 'renderCells', - value: function renderCells(sourceRowIndex, TR, columnsToRender) { - var TD = void 0; - var sourceColIndex = void 0; - - for (var visibleColIndex = 0; visibleColIndex < columnsToRender; visibleColIndex++) { - sourceColIndex = this.columnFilter.renderedToSource(visibleColIndex); - - if (visibleColIndex === 0) { - TD = TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(sourceColIndex)]; - } else { - TD = TD.nextSibling; // http://jsperf.com/nextsibling-vs-indexed-childnodes - } - // If the number of headers has been reduced, we need to replace excess TH with TD - if (TD.nodeName == 'TH') { - TD = replaceThWithTd(TD, TR); - } - if (!(0, _element.hasClass)(TD, 'hide')) { - TD.className = ''; - } - TD.removeAttribute('style'); - this.wot.wtSettings.settings.cellRenderer(sourceRowIndex, sourceColIndex, TD); - } - - return TD; - } - - /** - * @param {Number} columnsToRender Number of columns to render. - */ - - }, { - key: 'adjustColumnWidths', - value: function adjustColumnWidths(columnsToRender) { - var scrollbarCompensation = 0; - var sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot; - var mainHolder = sourceInstance.wtTable.holder; - var defaultColumnWidth = this.wot.getSetting('defaultColumnWidth'); - var rowHeaderWidthSetting = this.wot.getSetting('rowHeaderWidth'); - - if (mainHolder.offsetHeight < mainHolder.scrollHeight) { - scrollbarCompensation = (0, _element.getScrollbarWidth)(); - } - this.wot.wtViewport.columnsRenderCalculator.refreshStretching(this.wot.wtViewport.getViewportWidth() - scrollbarCompensation); - - rowHeaderWidthSetting = this.instance.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting); - - if (rowHeaderWidthSetting != null) { - for (var i = 0; i < this.rowHeaderCount; i++) { - var width = Array.isArray(rowHeaderWidthSetting) ? rowHeaderWidthSetting[i] : rowHeaderWidthSetting; - - width = width == null ? defaultColumnWidth : width; - - this.COLGROUP.childNodes[i].style.width = width + 'px'; - } - } - - for (var renderedColIndex = 0; renderedColIndex < columnsToRender; renderedColIndex++) { - var _width2 = this.wtTable.getStretchedColumnWidth(this.columnFilter.renderedToSource(renderedColIndex)); - - this.COLGROUP.childNodes[renderedColIndex + this.rowHeaderCount].style.width = _width2 + 'px'; - } - } - - /** - * @param {HTMLTableCellElement} TR - */ - - }, { - key: 'appendToTbody', - value: function appendToTbody(TR) { - this.TBODY.appendChild(TR); - this.wtTable.tbodyChildrenLength++; - } - - /** - * @param {Number} rowIndex - * @param {HTMLTableRowElement} currentTr - * @returns {HTMLTableCellElement} - */ - - }, { - key: 'getOrCreateTrForRow', - value: function getOrCreateTrForRow(rowIndex, currentTr) { - var TR = void 0; - - if (rowIndex >= this.wtTable.tbodyChildrenLength) { - TR = this.createRow(); - this.appendToTbody(TR); - } else if (rowIndex === 0) { - TR = this.TBODY.firstChild; - } else { - // http://jsperf.com/nextsibling-vs-indexed-childnodes - TR = currentTr.nextSibling; - } - if (TR.className) { - TR.removeAttribute('class'); - } - - return TR; - } - - /** - * @returns {HTMLTableCellElement} - */ - - }, { - key: 'createRow', - value: function createRow() { - var TR = document.createElement('TR'); - - for (var visibleColIndex = 0; visibleColIndex < this.rowHeaderCount; visibleColIndex++) { - TR.appendChild(document.createElement('TH')); - } - - return TR; - } - - /** - * @param {Number} row - * @param {Number} col - * @param {HTMLTableCellElement} TH - */ - - }, { - key: 'renderRowHeader', - value: function renderRowHeader(row, col, TH) { - TH.className = ''; - TH.removeAttribute('style'); - this.rowHeaders[col](row, TH, col); - } - - /** - * @param {Number} row - * @param {HTMLTableCellElement} TR - */ - - }, { - key: 'renderRowHeaders', - value: function renderRowHeaders(row, TR) { - for (var TH = TR.firstChild, visibleColIndex = 0; visibleColIndex < this.rowHeaderCount; visibleColIndex++) { - // If the number of row headers increased we need to create TH or replace an existing TD node with TH - if (!TH) { - TH = document.createElement('TH'); - TR.appendChild(TH); - } else if (TH.nodeName == 'TD') { - TH = replaceTdWithTh(TH, TR); - } - this.renderRowHeader(row, visibleColIndex, TH); - // http://jsperf.com/nextsibling-vs-indexed-childnodes - TH = TH.nextSibling; - } - } - - /** - * Adjust the number of COL and TH elements to match the number of columns and headers that need to be rendered - */ - - }, { - key: 'adjustAvailableNodes', - value: function adjustAvailableNodes() { - this.adjustColGroups(); - this.adjustThead(); - } - - /** - * Renders the column headers - */ - - }, { - key: 'renderColumnHeaders', - value: function renderColumnHeaders() { - if (!this.columnHeaderCount) { - return; - } - var columnCount = this.wtTable.getRenderedColumnsCount(); - - for (var i = 0; i < this.columnHeaderCount; i++) { - var TR = this.getTrForColumnHeaders(i); - - for (var renderedColumnIndex = -1 * this.rowHeaderCount; renderedColumnIndex < columnCount; renderedColumnIndex++) { - var sourceCol = this.columnFilter.renderedToSource(renderedColumnIndex); - - this.renderColumnHeader(i, sourceCol, TR.childNodes[renderedColumnIndex + this.rowHeaderCount]); - } - } - } - - /** - * Adjusts the number of COL elements to match the number of columns that need to be rendered - */ - - }, { - key: 'adjustColGroups', - value: function adjustColGroups() { - var columnCount = this.wtTable.getRenderedColumnsCount(); - - while (this.wtTable.colgroupChildrenLength < columnCount + this.rowHeaderCount) { - this.COLGROUP.appendChild(document.createElement('COL')); - this.wtTable.colgroupChildrenLength++; - } - while (this.wtTable.colgroupChildrenLength > columnCount + this.rowHeaderCount) { - this.COLGROUP.removeChild(this.COLGROUP.lastChild); - this.wtTable.colgroupChildrenLength--; - } - if (this.rowHeaderCount) { - (0, _element.addClass)(this.COLGROUP.childNodes[0], 'rowHeader'); - } - } - - /** - * Adjusts the number of TH elements in THEAD to match the number of headers and columns that need to be rendered - */ - - }, { - key: 'adjustThead', - value: function adjustThead() { - var columnCount = this.wtTable.getRenderedColumnsCount(); - var TR = this.THEAD.firstChild; - - if (this.columnHeaders.length) { - for (var i = 0, len = this.columnHeaders.length; i < len; i++) { - TR = this.THEAD.childNodes[i]; - - if (!TR) { - TR = document.createElement('TR'); - this.THEAD.appendChild(TR); - } - this.theadChildrenLength = TR.childNodes.length; - - while (this.theadChildrenLength < columnCount + this.rowHeaderCount) { - TR.appendChild(document.createElement('TH')); - this.theadChildrenLength++; - } - while (this.theadChildrenLength > columnCount + this.rowHeaderCount) { - TR.removeChild(TR.lastChild); - this.theadChildrenLength--; - } - } - var theadChildrenLength = this.THEAD.childNodes.length; - - if (theadChildrenLength > this.columnHeaders.length) { - for (var _i2 = this.columnHeaders.length; _i2 < theadChildrenLength; _i2++) { - this.THEAD.removeChild(this.THEAD.lastChild); - } - } - } else if (TR) { - (0, _element.empty)(TR); - } - } - - /** - * @param {Number} index - * @returns {HTMLTableCellElement} - */ - - }, { - key: 'getTrForColumnHeaders', - value: function getTrForColumnHeaders(index) { - return this.THEAD.childNodes[index]; - } - - /** - * @param {Number} row - * @param {Number} col - * @param {HTMLTableCellElement} TH - * @returns {*} - */ - - }, { - key: 'renderColumnHeader', - value: function renderColumnHeader(row, col, TH) { - TH.className = ''; - TH.removeAttribute('style'); - - return this.columnHeaders[row](col, TH, row); - } - - /** - * Add and/or remove the TDs to match the desired number - * - * @param {HTMLTableCellElement} TR Table row in question - * @param {Number} desiredCount The desired number of TDs in the TR - */ - - }, { - key: 'adjustColumns', - value: function adjustColumns(TR, desiredCount) { - var count = TR.childNodes.length; - - while (count < desiredCount) { - var TD = document.createElement('TD'); - - TR.appendChild(TD); - count++; - } - while (count > desiredCount) { - TR.removeChild(TR.lastChild); - count--; - } - } - - /** - * @param {Number} columnsToRender - */ - - }, { - key: 'removeRedundantColumns', - value: function removeRedundantColumns(columnsToRender) { - while (this.wtTable.tbodyChildrenLength > columnsToRender) { - this.TBODY.removeChild(this.TBODY.lastChild); - this.wtTable.tbodyChildrenLength--; - } - } - }]); - - return TableRenderer; -}(); - -function replaceTdWithTh(TD, TR) { - var TH = document.createElement('TH'); - - TR.insertBefore(TH, TD); - TR.removeChild(TD); - - return TH; -} - -function replaceThWithTd(TH, TR) { - var TD = document.createElement('TD'); - - TR.insertBefore(TD, TH); - TR.removeChild(TH); - - return TD; -} - -exports.default = TableRenderer; - -/***/ }), -/* 147 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _object = __webpack_require__(1); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _viewportColumns = __webpack_require__(136); - -var _viewportColumns2 = _interopRequireDefault(_viewportColumns); - -var _viewportRows = __webpack_require__(137); - -var _viewportRows2 = _interopRequireDefault(_viewportRows); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class Viewport - */ -var Viewport = function () { - /** - * @param wotInstance - */ - function Viewport(wotInstance) { - var _this = this; - - _classCallCheck(this, Viewport); - - this.wot = wotInstance; - // legacy support - this.instance = this.wot; - - this.oversizedRows = []; - this.oversizedColumnHeaders = []; - this.hasOversizedColumnHeadersMarked = {}; - this.clientHeight = 0; - this.containerWidth = NaN; - this.rowHeaderWidth = NaN; - this.rowsVisibleCalculator = null; - this.columnsVisibleCalculator = null; - - this.eventManager = new _eventManager2.default(this.wot); - this.eventManager.addEventListener(window, 'resize', function () { - _this.clientHeight = _this.getWorkspaceHeight(); - }); - } - - /** - * @returns {number} - */ - - - _createClass(Viewport, [{ - key: 'getWorkspaceHeight', - value: function getWorkspaceHeight() { - var trimmingContainer = this.instance.wtOverlays.topOverlay.trimmingContainer; - var elemHeight = void 0; - var height = 0; - - if (trimmingContainer === window) { - height = document.documentElement.clientHeight; - } else { - elemHeight = (0, _element.outerHeight)(trimmingContainer); - // returns height without DIV scrollbar - height = elemHeight > 0 && trimmingContainer.clientHeight > 0 ? trimmingContainer.clientHeight : Infinity; - } - - return height; - } - }, { - key: 'getWorkspaceWidth', - value: function getWorkspaceWidth() { - var width = void 0; - var totalColumns = this.wot.getSetting('totalColumns'); - var trimmingContainer = this.instance.wtOverlays.leftOverlay.trimmingContainer; - var overflow = void 0; - var stretchSetting = this.wot.getSetting('stretchH'); - var docOffsetWidth = document.documentElement.offsetWidth; - var preventOverflow = this.wot.getSetting('preventOverflow'); - - if (preventOverflow) { - return (0, _element.outerWidth)(this.instance.wtTable.wtRootElement); - } - - if (this.wot.getSetting('freezeOverlays')) { - width = Math.min(docOffsetWidth - this.getWorkspaceOffset().left, docOffsetWidth); - } else { - width = Math.min(this.getContainerFillWidth(), docOffsetWidth - this.getWorkspaceOffset().left, docOffsetWidth); - } - - if (trimmingContainer === window && totalColumns > 0 && this.sumColumnWidths(0, totalColumns - 1) > width) { - // in case sum of column widths is higher than available stylesheet width, let's assume using the whole window - // otherwise continue below, which will allow stretching - // this is used in `scroll_window.html` - // TODO test me - return document.documentElement.clientWidth; - } - - if (trimmingContainer !== window) { - overflow = (0, _element.getStyle)(this.instance.wtOverlays.leftOverlay.trimmingContainer, 'overflow'); - - if (overflow == 'scroll' || overflow == 'hidden' || overflow == 'auto') { - // this is used in `scroll.html` - // TODO test me - return Math.max(width, trimmingContainer.clientWidth); - } - } - - if (stretchSetting === 'none' || !stretchSetting) { - // if no stretching is used, return the maximum used workspace width - return Math.max(width, (0, _element.outerWidth)(this.instance.wtTable.TABLE)); - } - - // if stretching is used, return the actual container width, so the columns can fit inside it - return width; - } - - /** - * Checks if viewport has vertical scroll - * - * @returns {Boolean} - */ - - }, { - key: 'hasVerticalScroll', - value: function hasVerticalScroll() { - return this.getWorkspaceActualHeight() > this.getWorkspaceHeight(); - } - - /** - * Checks if viewport has horizontal scroll - * - * @returns {Boolean} - */ - - }, { - key: 'hasHorizontalScroll', - value: function hasHorizontalScroll() { - return this.getWorkspaceActualWidth() > this.getWorkspaceWidth(); - } - - /** - * @param from - * @param length - * @returns {Number} - */ - - }, { - key: 'sumColumnWidths', - value: function sumColumnWidths(from, length) { - var sum = 0; - - while (from < length) { - sum += this.wot.wtTable.getColumnWidth(from); - from++; - } - - return sum; - } - - /** - * @returns {Number} - */ - - }, { - key: 'getContainerFillWidth', - value: function getContainerFillWidth() { - if (this.containerWidth) { - return this.containerWidth; - } - var mainContainer = this.instance.wtTable.holder; - var fillWidth = void 0; - var dummyElement = void 0; - - dummyElement = document.createElement('div'); - dummyElement.style.width = '100%'; - dummyElement.style.height = '1px'; - mainContainer.appendChild(dummyElement); - fillWidth = dummyElement.offsetWidth; - - this.containerWidth = fillWidth; - mainContainer.removeChild(dummyElement); - - return fillWidth; - } - - /** - * @returns {Number} - */ - - }, { - key: 'getWorkspaceOffset', - value: function getWorkspaceOffset() { - return (0, _element.offset)(this.wot.wtTable.TABLE); - } - - /** - * @returns {Number} - */ - - }, { - key: 'getWorkspaceActualHeight', - value: function getWorkspaceActualHeight() { - return (0, _element.outerHeight)(this.wot.wtTable.TABLE); - } - - /** - * @returns {Number} - */ - - }, { - key: 'getWorkspaceActualWidth', - value: function getWorkspaceActualWidth() { - return (0, _element.outerWidth)(this.wot.wtTable.TABLE) || (0, _element.outerWidth)(this.wot.wtTable.TBODY) || (0, _element.outerWidth)(this.wot.wtTable.THEAD); // IE8 reports 0 as offsetWidth; - } - - /** - * @returns {Number} - */ - - }, { - key: 'getColumnHeaderHeight', - value: function getColumnHeaderHeight() { - if (isNaN(this.columnHeaderHeight)) { - this.columnHeaderHeight = (0, _element.outerHeight)(this.wot.wtTable.THEAD); - } - - return this.columnHeaderHeight; - } - - /** - * @returns {Number} - */ - - }, { - key: 'getViewportHeight', - value: function getViewportHeight() { - var containerHeight = this.getWorkspaceHeight(); - var columnHeaderHeight = void 0; - - if (containerHeight === Infinity) { - return containerHeight; - } - columnHeaderHeight = this.getColumnHeaderHeight(); - - if (columnHeaderHeight > 0) { - containerHeight -= columnHeaderHeight; - } - - return containerHeight; - } - - /** - * @returns {Number} - */ - - }, { - key: 'getRowHeaderWidth', - value: function getRowHeaderWidth() { - var rowHeadersHeightSetting = this.instance.getSetting('rowHeaderWidth'); - var rowHeaders = this.instance.getSetting('rowHeaders'); - - if (rowHeadersHeightSetting) { - this.rowHeaderWidth = 0; - - for (var i = 0, len = rowHeaders.length; i < len; i++) { - this.rowHeaderWidth += rowHeadersHeightSetting[i] || rowHeadersHeightSetting; - } - } - - if (this.wot.cloneSource) { - return this.wot.cloneSource.wtViewport.getRowHeaderWidth(); - } - - if (isNaN(this.rowHeaderWidth)) { - - if (rowHeaders.length) { - var TH = this.instance.wtTable.TABLE.querySelector('TH'); - this.rowHeaderWidth = 0; - - for (var _i = 0, _len = rowHeaders.length; _i < _len; _i++) { - if (TH) { - this.rowHeaderWidth += (0, _element.outerWidth)(TH); - TH = TH.nextSibling; - } else { - // yes this is a cheat but it worked like that before, just taking assumption from CSS instead of measuring. - // TODO: proper fix - this.rowHeaderWidth += 50; - } - } - } else { - this.rowHeaderWidth = 0; - } - } - - this.rowHeaderWidth = this.instance.getSetting('onModifyRowHeaderWidth', this.rowHeaderWidth) || this.rowHeaderWidth; - - return this.rowHeaderWidth; - } - - /** - * @returns {Number} - */ - - }, { - key: 'getViewportWidth', - value: function getViewportWidth() { - var containerWidth = this.getWorkspaceWidth(); - var rowHeaderWidth = void 0; - - if (containerWidth === Infinity) { - return containerWidth; - } - rowHeaderWidth = this.getRowHeaderWidth(); - - if (rowHeaderWidth > 0) { - return containerWidth - rowHeaderWidth; - } - - return containerWidth; - } - - /** - * Creates: - * - rowsRenderCalculator (before draw, to qualify rows for rendering) - * - rowsVisibleCalculator (after draw, to measure which rows are actually visible) - * - * @returns {ViewportRowsCalculator} - */ - - }, { - key: 'createRowsCalculator', - value: function createRowsCalculator() { - var _this2 = this; - - var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - var height = void 0; - var pos = void 0; - var fixedRowsTop = void 0; - var scrollbarHeight = void 0; - var fixedRowsBottom = void 0; - var fixedRowsHeight = void 0; - var totalRows = void 0; - - this.rowHeaderWidth = NaN; - - if (this.wot.wtSettings.settings.renderAllRows) { - height = Infinity; - } else { - height = this.getViewportHeight(); - } - pos = this.wot.wtOverlays.topOverlay.getScrollPosition() - this.wot.wtOverlays.topOverlay.getTableParentOffset(); - - if (pos < 0) { - pos = 0; - } - fixedRowsTop = this.wot.getSetting('fixedRowsTop'); - fixedRowsBottom = this.wot.getSetting('fixedRowsBottom'); - totalRows = this.wot.getSetting('totalRows'); - - if (fixedRowsTop) { - fixedRowsHeight = this.wot.wtOverlays.topOverlay.sumCellSizes(0, fixedRowsTop); - pos += fixedRowsHeight; - height -= fixedRowsHeight; - } - - if (fixedRowsBottom && this.wot.wtOverlays.bottomOverlay.clone) { - fixedRowsHeight = this.wot.wtOverlays.bottomOverlay.sumCellSizes(totalRows - fixedRowsBottom, totalRows); - - height -= fixedRowsHeight; - } - - if (this.wot.wtTable.holder.clientHeight === this.wot.wtTable.holder.offsetHeight) { - scrollbarHeight = 0; - } else { - scrollbarHeight = (0, _element.getScrollbarWidth)(); - } - - return new _viewportRows2.default(height, pos, this.wot.getSetting('totalRows'), function (sourceRow) { - return _this2.wot.wtTable.getRowHeight(sourceRow); - }, visible ? null : this.wot.wtSettings.settings.viewportRowCalculatorOverride, visible, scrollbarHeight); - } - - /** - * Creates: - * - columnsRenderCalculator (before draw, to qualify columns for rendering) - * - columnsVisibleCalculator (after draw, to measure which columns are actually visible) - * - * @returns {ViewportRowsCalculator} - */ - - }, { - key: 'createColumnsCalculator', - value: function createColumnsCalculator() { - var _this3 = this; - - var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - var width = this.getViewportWidth(); - var pos = void 0; - var fixedColumnsLeft = void 0; - - this.columnHeaderHeight = NaN; - - pos = this.wot.wtOverlays.leftOverlay.getScrollPosition() - this.wot.wtOverlays.leftOverlay.getTableParentOffset(); - - if (pos < 0) { - pos = 0; - } - fixedColumnsLeft = this.wot.getSetting('fixedColumnsLeft'); - - if (fixedColumnsLeft) { - var fixedColumnsWidth = this.wot.wtOverlays.leftOverlay.sumCellSizes(0, fixedColumnsLeft); - pos += fixedColumnsWidth; - width -= fixedColumnsWidth; - } - if (this.wot.wtTable.holder.clientWidth !== this.wot.wtTable.holder.offsetWidth) { - width -= (0, _element.getScrollbarWidth)(); - } - - return new _viewportColumns2.default(width, pos, this.wot.getSetting('totalColumns'), function (sourceCol) { - return _this3.wot.wtTable.getColumnWidth(sourceCol); - }, visible ? null : this.wot.wtSettings.settings.viewportColumnCalculatorOverride, visible, this.wot.getSetting('stretchH'), function (stretchedWidth, column) { - return _this3.wot.getSetting('onBeforeStretchingColumnWidth', stretchedWidth, column); - }); - } - - /** - * Creates rowsRenderCalculator and columnsRenderCalculator (before draw, to determine what rows and - * cols should be rendered) - * - * @param fastDraw {Boolean} If `true`, will try to avoid full redraw and only update the border positions. - * If `false` or `undefined`, will perform a full redraw - * @returns fastDraw {Boolean} The fastDraw value, possibly modified - */ - - }, { - key: 'createRenderCalculators', - value: function createRenderCalculators() { - var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (fastDraw) { - var proposedRowsVisibleCalculator = this.createRowsCalculator(true); - var proposedColumnsVisibleCalculator = this.createColumnsCalculator(true); - - if (!(this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) && this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator))) { - fastDraw = false; - } - } - - if (!fastDraw) { - this.rowsRenderCalculator = this.createRowsCalculator(); - this.columnsRenderCalculator = this.createColumnsCalculator(); - } - // delete temporarily to make sure that renderers always use rowsRenderCalculator, not rowsVisibleCalculator - this.rowsVisibleCalculator = null; - this.columnsVisibleCalculator = null; - - return fastDraw; - } - - /** - * Creates rowsVisibleCalculator and columnsVisibleCalculator (after draw, to determine what are - * the actually visible rows and columns) - */ - - }, { - key: 'createVisibleCalculators', - value: function createVisibleCalculators() { - this.rowsVisibleCalculator = this.createRowsCalculator(true); - this.columnsVisibleCalculator = this.createColumnsCalculator(true); - } - - /** - * Returns information whether proposedRowsVisibleCalculator viewport - * is contained inside rows rendered in previous draw (cached in rowsRenderCalculator) - * - * @param {Object} proposedRowsVisibleCalculator - * @returns {Boolean} Returns `true` if all proposed visible rows are already rendered (meaning: redraw is not needed). - * Returns `false` if at least one proposed visible row is not already rendered (meaning: redraw is needed) - */ - - }, { - key: 'areAllProposedVisibleRowsAlreadyRendered', - value: function areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) { - if (this.rowsVisibleCalculator) { - if (proposedRowsVisibleCalculator.startRow < this.rowsRenderCalculator.startRow || proposedRowsVisibleCalculator.startRow === this.rowsRenderCalculator.startRow && proposedRowsVisibleCalculator.startRow > 0) { - return false; - } else if (proposedRowsVisibleCalculator.endRow > this.rowsRenderCalculator.endRow || proposedRowsVisibleCalculator.endRow === this.rowsRenderCalculator.endRow && proposedRowsVisibleCalculator.endRow < this.wot.getSetting('totalRows') - 1) { - return false; - } - return true; - } - - return false; - } - - /** - * Returns information whether proposedColumnsVisibleCalculator viewport - * is contained inside column rendered in previous draw (cached in columnsRenderCalculator) - * - * @param {Object} proposedColumnsVisibleCalculator - * @returns {Boolean} Returns `true` if all proposed visible columns are already rendered (meaning: redraw is not needed). - * Returns `false` if at least one proposed visible column is not already rendered (meaning: redraw is needed) - */ - - }, { - key: 'areAllProposedVisibleColumnsAlreadyRendered', - value: function areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator) { - if (this.columnsVisibleCalculator) { - if (proposedColumnsVisibleCalculator.startColumn < this.columnsRenderCalculator.startColumn || proposedColumnsVisibleCalculator.startColumn === this.columnsRenderCalculator.startColumn && proposedColumnsVisibleCalculator.startColumn > 0) { - return false; - } else if (proposedColumnsVisibleCalculator.endColumn > this.columnsRenderCalculator.endColumn || proposedColumnsVisibleCalculator.endColumn === this.columnsRenderCalculator.endColumn && proposedColumnsVisibleCalculator.endColumn < this.wot.getSetting('totalColumns') - 1) { - return false; - } - return true; - } - - return false; - } - - /** - * Resets values in keys of the hasOversizedColumnHeadersMarked object after updateSettings. - */ - - }, { - key: 'resetHasOversizedColumnHeadersMarked', - value: function resetHasOversizedColumnHeadersMarked() { - (0, _object.objectEach)(this.hasOversizedColumnHeadersMarked, function (value, key, object) { - object[key] = void 0; - }); - } - }]); - - return Viewport; -}(); - -exports.default = Viewport; - -/***/ }), -/* 148 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _unicode = __webpack_require__(16); - -var _mixed = __webpack_require__(20); - -var _string = __webpack_require__(27); - -var _array = __webpack_require__(2); - -var _element = __webpack_require__(0); - -var _handsontableEditor = __webpack_require__(149); - -var _handsontableEditor2 = _interopRequireDefault(_handsontableEditor); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var AutocompleteEditor = _handsontableEditor2.default.prototype.extend(); - -/** - * @private - * @editor AutocompleteEditor - * @class AutocompleteEditor - * @dependencies HandsontableEditor - */ -AutocompleteEditor.prototype.init = function () { - _handsontableEditor2.default.prototype.init.apply(this, arguments); - this.query = null; - this.strippedChoices = []; - this.rawChoices = []; -}; - -AutocompleteEditor.prototype.getValue = function () { - var _this2 = this; - - var selectedValue = this.rawChoices.find(function (value) { - var strippedValue = _this2.stripValueIfNeeded(value); - - return strippedValue === _this2.TEXTAREA.value; - }); - - if ((0, _mixed.isDefined)(selectedValue)) { - return selectedValue; - } - - return this.TEXTAREA.value; -}; - -AutocompleteEditor.prototype.createElements = function () { - _handsontableEditor2.default.prototype.createElements.apply(this, arguments); - - (0, _element.addClass)(this.htContainer, 'autocompleteEditor'); - (0, _element.addClass)(this.htContainer, window.navigator.platform.indexOf('Mac') === -1 ? '' : 'htMacScroll'); -}; - -var skipOne = false; -function onBeforeKeyDown(event) { - skipOne = false; - var editor = this.getActiveEditor(); - - if ((0, _unicode.isPrintableChar)(event.keyCode) || event.keyCode === _unicode.KEY_CODES.BACKSPACE || event.keyCode === _unicode.KEY_CODES.DELETE || event.keyCode === _unicode.KEY_CODES.INSERT) { - var timeOffset = 0; - - // on ctl+c / cmd+c don't update suggestion list - if (event.keyCode === _unicode.KEY_CODES.C && (event.ctrlKey || event.metaKey)) { - return; - } - if (!editor.isOpened()) { - timeOffset += 10; - } - - if (editor.htEditor) { - editor.instance._registerTimeout(setTimeout(function () { - editor.queryChoices(editor.TEXTAREA.value); - skipOne = true; - }, timeOffset)); - } - } -} - -AutocompleteEditor.prototype.prepare = function () { - this.instance.addHook('beforeKeyDown', onBeforeKeyDown); - _handsontableEditor2.default.prototype.prepare.apply(this, arguments); -}; - -AutocompleteEditor.prototype.open = function () { - // Ugly fix for handsontable which grab window object for autocomplete scroll listener instead table element. - this.TEXTAREA_PARENT.style.overflow = 'auto'; - _handsontableEditor2.default.prototype.open.apply(this, arguments); - this.TEXTAREA_PARENT.style.overflow = ''; - - var choicesListHot = this.htEditor.getInstance(); - var _this = this; - var trimDropdown = this.cellProperties.trimDropdown === void 0 ? true : this.cellProperties.trimDropdown; - - this.TEXTAREA.style.visibility = 'visible'; - this.focus(); - - choicesListHot.updateSettings({ - colWidths: trimDropdown ? [(0, _element.outerWidth)(this.TEXTAREA) - 2] : void 0, - width: trimDropdown ? (0, _element.outerWidth)(this.TEXTAREA) + (0, _element.getScrollbarWidth)() + 2 : void 0, - afterRenderer: function afterRenderer(TD, row, col, prop, value, cellProperties) { - var _this$cellProperties = _this.cellProperties, - filteringCaseSensitive = _this$cellProperties.filteringCaseSensitive, - allowHtml = _this$cellProperties.allowHtml; - - var indexOfMatch = void 0; - var match = void 0; - - value = (0, _mixed.stringify)(value); - - if (value && !allowHtml) { - indexOfMatch = filteringCaseSensitive === true ? value.indexOf(this.query) : value.toLowerCase().indexOf(_this.query.toLowerCase()); - - if (indexOfMatch !== -1) { - match = value.substr(indexOfMatch, _this.query.length); - value = value.replace(match, '' + match + ''); - } - } - TD.innerHTML = value; - }, - - autoColumnSize: true, - modifyColWidth: function modifyColWidth(width, col) { - // workaround for text overlapping the dropdown, not really accurate - var autoWidths = this.getPlugin('autoColumnSize').widths; - - if (autoWidths[col]) { - width = autoWidths[col]; - } - - return trimDropdown ? width : width + 15; - } - }); - - // Add additional space for autocomplete holder - this.htEditor.view.wt.wtTable.holder.parentNode.style['padding-right'] = (0, _element.getScrollbarWidth)() + 2 + 'px'; - - if (skipOne) { - skipOne = false; - } - - _this.instance._registerTimeout(setTimeout(function () { - _this.queryChoices(_this.TEXTAREA.value); - }, 0)); -}; - -AutocompleteEditor.prototype.close = function () { - _handsontableEditor2.default.prototype.close.apply(this, arguments); -}; -AutocompleteEditor.prototype.queryChoices = function (query) { - var _this3 = this; - - this.query = query; - var source = this.cellProperties.source; - - if (typeof source == 'function') { - source.call(this.cellProperties, query, function (choices) { - _this3.rawChoices = choices; - _this3.updateChoicesList(_this3.stripValuesIfNeeded(choices)); - }); - } else if (Array.isArray(source)) { - this.rawChoices = source; - this.updateChoicesList(this.stripValuesIfNeeded(source)); - } else { - this.updateChoicesList([]); - } -}; - -AutocompleteEditor.prototype.updateChoicesList = function (choices) { - var pos = (0, _element.getCaretPosition)(this.TEXTAREA); - var endPos = (0, _element.getSelectionEndPosition)(this.TEXTAREA); - var sortByRelevanceSetting = this.cellProperties.sortByRelevance; - var filterSetting = this.cellProperties.filter; - var orderByRelevance = null; - var highlightIndex = null; - - if (sortByRelevanceSetting) { - orderByRelevance = AutocompleteEditor.sortByRelevance(this.stripValueIfNeeded(this.getValue()), choices, this.cellProperties.filteringCaseSensitive); - } - var orderByRelevanceLength = Array.isArray(orderByRelevance) ? orderByRelevance.length : 0; - - if (filterSetting === false) { - if (orderByRelevanceLength) { - highlightIndex = orderByRelevance[0]; - } - } else { - var sorted = []; - - for (var i = 0, choicesCount = choices.length; i < choicesCount; i++) { - if (sortByRelevanceSetting && orderByRelevanceLength <= i) { - break; - } - if (orderByRelevanceLength) { - sorted.push(choices[orderByRelevance[i]]); - } else { - sorted.push(choices[i]); - } - } - - highlightIndex = 0; - choices = sorted; - } - - this.strippedChoices = choices; - this.htEditor.loadData((0, _array.pivot)([choices])); - - this.updateDropdownHeight(); - - this.flipDropdownIfNeeded(); - - if (this.cellProperties.strict === true) { - this.highlightBestMatchingChoice(highlightIndex); - } - - this.instance.listen(); - this.TEXTAREA.focus(); - (0, _element.setCaretPosition)(this.TEXTAREA, pos, pos === endPos ? void 0 : endPos); -}; - -AutocompleteEditor.prototype.flipDropdownIfNeeded = function () { - var textareaOffset = (0, _element.offset)(this.TEXTAREA); - var textareaHeight = (0, _element.outerHeight)(this.TEXTAREA); - var dropdownHeight = this.getDropdownHeight(); - var trimmingContainer = (0, _element.getTrimmingContainer)(this.instance.view.wt.wtTable.TABLE); - var trimmingContainerScrollTop = trimmingContainer.scrollTop; - var headersHeight = (0, _element.outerHeight)(this.instance.view.wt.wtTable.THEAD); - var containerOffset = { - row: 0, - col: 0 - }; - - if (trimmingContainer !== window) { - containerOffset = (0, _element.offset)(trimmingContainer); - } - - var spaceAbove = textareaOffset.top - containerOffset.top - headersHeight + trimmingContainerScrollTop; - var spaceBelow = trimmingContainer.scrollHeight - spaceAbove - headersHeight - textareaHeight; - var flipNeeded = dropdownHeight > spaceBelow && spaceAbove > spaceBelow; - - if (flipNeeded) { - this.flipDropdown(dropdownHeight); - } else { - this.unflipDropdown(); - } - - this.limitDropdownIfNeeded(flipNeeded ? spaceAbove : spaceBelow, dropdownHeight); - - return flipNeeded; -}; - -AutocompleteEditor.prototype.limitDropdownIfNeeded = function (spaceAvailable, dropdownHeight) { - if (dropdownHeight > spaceAvailable) { - var tempHeight = 0; - var i = 0; - var lastRowHeight = 0; - var height = null; - - do { - lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view.wt.wtSettings.settings.defaultRowHeight; - tempHeight += lastRowHeight; - i++; - } while (tempHeight < spaceAvailable); - - height = tempHeight - lastRowHeight; - - if (this.htEditor.flipped) { - this.htEditor.rootElement.style.top = parseInt(this.htEditor.rootElement.style.top, 10) + dropdownHeight - height + 'px'; - } - - this.setDropdownHeight(tempHeight - lastRowHeight); - } -}; - -AutocompleteEditor.prototype.flipDropdown = function (dropdownHeight) { - var dropdownStyle = this.htEditor.rootElement.style; - - dropdownStyle.position = 'absolute'; - dropdownStyle.top = -dropdownHeight + 'px'; - - this.htEditor.flipped = true; -}; - -AutocompleteEditor.prototype.unflipDropdown = function () { - var dropdownStyle = this.htEditor.rootElement.style; - - if (dropdownStyle.position === 'absolute') { - dropdownStyle.position = ''; - dropdownStyle.top = ''; - } - - this.htEditor.flipped = void 0; -}; - -AutocompleteEditor.prototype.updateDropdownHeight = function () { - var currentDropdownWidth = this.htEditor.getColWidth(0) + (0, _element.getScrollbarWidth)() + 2; - var trimDropdown = this.cellProperties.trimDropdown; - - this.htEditor.updateSettings({ - height: this.getDropdownHeight(), - width: trimDropdown ? void 0 : currentDropdownWidth - }); - - this.htEditor.view.wt.wtTable.alignOverlaysWithTrimmingContainer(); -}; - -AutocompleteEditor.prototype.setDropdownHeight = function (height) { - this.htEditor.updateSettings({ - height: height - }); -}; - -AutocompleteEditor.prototype.finishEditing = function (restoreOriginalValue) { - if (!restoreOriginalValue) { - this.instance.removeHook('beforeKeyDown', onBeforeKeyDown); - } - _handsontableEditor2.default.prototype.finishEditing.apply(this, arguments); -}; - -AutocompleteEditor.prototype.highlightBestMatchingChoice = function (index) { - if (typeof index === 'number') { - this.htEditor.selectCell(index, 0); - } else { - this.htEditor.deselectCell(); - } -}; - -/** - * Filters and sorts by relevance - * @param value - * @param choices - * @param caseSensitive - * @returns {Array} array of indexes in original choices array - */ -AutocompleteEditor.sortByRelevance = function (value, choices, caseSensitive) { - var choicesRelevance = []; - var currentItem = void 0; - var valueLength = value.length; - var valueIndex = void 0; - var charsLeft = void 0; - var result = []; - var i = void 0; - var choicesCount = choices.length; - - if (valueLength === 0) { - for (i = 0; i < choicesCount; i++) { - result.push(i); - } - return result; - } - - for (i = 0; i < choicesCount; i++) { - currentItem = (0, _string.stripTags)((0, _mixed.stringify)(choices[i])); - - if (caseSensitive) { - valueIndex = currentItem.indexOf(value); - } else { - valueIndex = currentItem.toLowerCase().indexOf(value.toLowerCase()); - } - - if (valueIndex !== -1) { - charsLeft = currentItem.length - valueIndex - valueLength; - - choicesRelevance.push({ - baseIndex: i, - index: valueIndex, - charsLeft: charsLeft, - value: currentItem - }); - } - } - - choicesRelevance.sort(function (a, b) { - - if (b.index === -1) { - return -1; - } - if (a.index === -1) { - return 1; - } - - if (a.index < b.index) { - return -1; - } else if (b.index < a.index) { - return 1; - } else if (a.index === b.index) { - if (a.charsLeft < b.charsLeft) { - return -1; - } else if (a.charsLeft > b.charsLeft) { - return 1; - } - } - - return 0; - }); - - for (i = 0, choicesCount = choicesRelevance.length; i < choicesCount; i++) { - result.push(choicesRelevance[i].baseIndex); - } - - return result; -}; - -AutocompleteEditor.prototype.getDropdownHeight = function () { - var firstRowHeight = this.htEditor.getInstance().getRowHeight(0) || 23; - var visibleRows = this.cellProperties.visibleRows; - - return this.strippedChoices.length >= visibleRows ? visibleRows * firstRowHeight : this.strippedChoices.length * firstRowHeight + 8; -}; - -AutocompleteEditor.prototype.stripValueIfNeeded = function (value) { - return this.stripValuesIfNeeded([value])[0]; -}; - -AutocompleteEditor.prototype.stripValuesIfNeeded = function (values) { - var allowHtml = this.cellProperties.allowHtml; - - - var stringifiedValues = (0, _array.arrayMap)(values, function (value) { - return (0, _mixed.stringify)(value); - }); - var strippedValues = (0, _array.arrayMap)(stringifiedValues, function (value) { - return allowHtml ? value : (0, _string.stripTags)(value); - }); - - return strippedValues; -}; - -AutocompleteEditor.prototype.allowKeyEventPropagation = function (keyCode) { - var selected = { row: this.htEditor.getSelectedRange() ? this.htEditor.getSelectedRange().from.row : -1 }; - var allowed = false; - - if (keyCode === _unicode.KEY_CODES.ARROW_DOWN && selected.row > 0 && selected.row < this.htEditor.countRows() - 1) { - allowed = true; - } - if (keyCode === _unicode.KEY_CODES.ARROW_UP && selected.row > -1) { - allowed = true; - } - - return allowed; -}; - -AutocompleteEditor.prototype.discardEditor = function (result) { - _handsontableEditor2.default.prototype.discardEditor.apply(this, arguments); - - this.instance.view.render(); -}; - -exports.default = AutocompleteEditor; - -/***/ }), -/* 149 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _unicode = __webpack_require__(16); - -var _object = __webpack_require__(1); - -var _element = __webpack_require__(0); - -var _event = __webpack_require__(7); - -var _textEditor = __webpack_require__(43); - -var _textEditor2 = _interopRequireDefault(_textEditor); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var HandsontableEditor = _textEditor2.default.prototype.extend(); - -/** - * @private - * @editor HandsontableEditor - * @class HandsontableEditor - * @dependencies TextEditor - */ -HandsontableEditor.prototype.createElements = function () { - _textEditor2.default.prototype.createElements.apply(this, arguments); - - var DIV = document.createElement('DIV'); - DIV.className = 'handsontableEditor'; - this.TEXTAREA_PARENT.appendChild(DIV); - - this.htContainer = DIV; - this.assignHooks(); -}; - -HandsontableEditor.prototype.prepare = function (td, row, col, prop, value, cellProperties) { - _textEditor2.default.prototype.prepare.apply(this, arguments); - - var parent = this; - var options = { - startRows: 0, - startCols: 0, - minRows: 0, - minCols: 0, - className: 'listbox', - copyPaste: false, - autoColumnSize: false, - autoRowSize: false, - readOnly: true, - fillHandle: false, - afterOnCellMouseDown: function afterOnCellMouseDown(_, coords) { - var value = this.getSourceData(coords.row, coords.col); - - // if the value is undefined then it means we don't want to set the value - if (value !== void 0) { - parent.setValue(value); - } - parent.instance.destroyEditor(); - } - }; - - if (this.cellProperties.handsontable) { - (0, _object.extend)(options, cellProperties.handsontable); - } - this.htOptions = options; -}; - -var onBeforeKeyDown = function onBeforeKeyDown(event) { - if ((0, _event.isImmediatePropagationStopped)(event)) { - return; - } - var editor = this.getActiveEditor(); - - var innerHOT = editor.htEditor.getInstance(); - - var rowToSelect; - var selectedRow; - - if (event.keyCode == _unicode.KEY_CODES.ARROW_DOWN) { - if (!innerHOT.getSelected() && !innerHOT.flipped) { - rowToSelect = 0; - } else if (innerHOT.getSelected()) { - if (innerHOT.flipped) { - rowToSelect = innerHOT.getSelected()[0] + 1; - } else if (!innerHOT.flipped) { - selectedRow = innerHOT.getSelected()[0]; - var lastRow = innerHOT.countRows() - 1; - rowToSelect = Math.min(lastRow, selectedRow + 1); - } - } - } else if (event.keyCode == _unicode.KEY_CODES.ARROW_UP) { - if (!innerHOT.getSelected() && innerHOT.flipped) { - rowToSelect = innerHOT.countRows() - 1; - } else if (innerHOT.getSelected()) { - if (innerHOT.flipped) { - selectedRow = innerHOT.getSelected()[0]; - rowToSelect = Math.max(0, selectedRow - 1); - } else { - selectedRow = innerHOT.getSelected()[0]; - rowToSelect = selectedRow - 1; - } - } - } - - if (rowToSelect !== void 0) { - if (rowToSelect < 0 || innerHOT.flipped && rowToSelect > innerHOT.countRows() - 1) { - innerHOT.deselectCell(); - } else { - innerHOT.selectCell(rowToSelect, 0); - } - if (innerHOT.getData().length) { - event.preventDefault(); - (0, _event.stopImmediatePropagation)(event); - - editor.instance.listen(); - editor.TEXTAREA.focus(); - } - } -}; - -HandsontableEditor.prototype.open = function () { - this.instance.addHook('beforeKeyDown', onBeforeKeyDown); - - _textEditor2.default.prototype.open.apply(this, arguments); - - if (this.htEditor) { - this.htEditor.destroy(); - } - // Construct and initialise a new Handsontable - this.htEditor = new this.instance.constructor(this.htContainer, this.htOptions); - this.htEditor.init(); - - if (this.cellProperties.strict) { - this.htEditor.selectCell(0, 0); - this.TEXTAREA.style.visibility = 'hidden'; - } else { - this.htEditor.deselectCell(); - this.TEXTAREA.style.visibility = 'visible'; - } - - (0, _element.setCaretPosition)(this.TEXTAREA, 0, this.TEXTAREA.value.length); -}; - -HandsontableEditor.prototype.close = function () { - this.instance.removeHook('beforeKeyDown', onBeforeKeyDown); - this.instance.listen(); - - _textEditor2.default.prototype.close.apply(this, arguments); -}; - -HandsontableEditor.prototype.focus = function () { - this.instance.listen(); - _textEditor2.default.prototype.focus.apply(this, arguments); -}; - -HandsontableEditor.prototype.beginEditing = function (initialValue) { - var onBeginEditing = this.instance.getSettings().onBeginEditing; - - if (onBeginEditing && onBeginEditing() === false) { - return; - } - _textEditor2.default.prototype.beginEditing.apply(this, arguments); -}; - -HandsontableEditor.prototype.finishEditing = function (isCancelled, ctrlDown) { - if (this.htEditor && this.htEditor.isListening()) { - // if focus is still in the HOT editor - - this.instance.listen(); // return the focus to the parent HOT instance - } - - if (this.htEditor && this.htEditor.getSelected()) { - var value = this.htEditor.getInstance().getValue(); - - if (value !== void 0) { - // if the value is undefined then it means we don't want to set the value - this.setValue(value); - } - } - - return _textEditor2.default.prototype.finishEditing.apply(this, arguments); -}; - -HandsontableEditor.prototype.assignHooks = function () { - var _this = this; - - this.instance.addHook('afterDestroy', function () { - if (_this.htEditor) { - _this.htEditor.destroy(); - } - }); -}; - -exports.default = HandsontableEditor; - -/***/ }), -/* 150 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _array = __webpack_require__(2); - -var _object = __webpack_require__(1); - -var _number = __webpack_require__(6); - -var MIXIN_NAME = 'arrayMapper'; - -/** - * @type {Object} - */ -var arrayMapper = { - _arrayMap: [], - - /** - * Get value by map index. - * - * @param {Number} index Array index. - * @return {*} Returns value mapped to passed index. - */ - getValueByIndex: function getValueByIndex(index) { - var value = void 0; - - // eslint-disable-next-line no-cond-assign, no-return-assign - return (value = this._arrayMap[index]) === void 0 ? null : value; - }, - - - /** - * Get map index by its value. - * - * @param {*} value Value to search. - * @returns {Number} Returns array index. - */ - getIndexByValue: function getIndexByValue(value) { - var index = void 0; - - // eslint-disable-next-line no-cond-assign, no-return-assign - return (index = this._arrayMap.indexOf(value)) === -1 ? null : index; - }, - - - /** - * Insert new items to array mapper starting at passed index. New entries will be a continuation of last value in the array. - * - * @param {Number} index Array index. - * @param {Number} [amount=1] Defines how many items will be created to an array. - * @returns {Array} Returns added items. - */ - insertItems: function insertItems(index) { - var _this = this; - - var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; - - var newIndex = (0, _array.arrayMax)(this._arrayMap) + 1; - var addedItems = []; - - (0, _number.rangeEach)(amount - 1, function (count) { - addedItems.push(_this._arrayMap.splice(index + count, 0, newIndex + count)); - }); - - return addedItems; - }, - - - /** - * Remove items from array mapper. - * - * @param {Number} index Array index. - * @param {Number} [amount=1] Defines how many items will be created to an array. - * @returns {Array} Returns removed items. - */ - removeItems: function removeItems(index) { - var _this2 = this; - - var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; - - var removedItems = []; - - if (Array.isArray(index)) { - var mapCopy = [].concat(this._arrayMap); - - // Sort descending - index.sort(function (a, b) { - return b - a; - }); - - removedItems = (0, _array.arrayReduce)(index, function (acc, item) { - _this2._arrayMap.splice(item, 1); - - return acc.concat(mapCopy.slice(item, item + 1)); - }, []); - } else { - removedItems = this._arrayMap.splice(index, amount); - } - - return removedItems; - }, - - - /** - * Unshift items (remove and shift chunk of array to the left). - * - * @param {Number|Array} index Array index or Array of indexes to unshift. - * @param {Number} [amount=1] Defines how many items will be removed from an array (when index is passed as number). - */ - unshiftItems: function unshiftItems(index) { - var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; - - var removedItems = this.removeItems(index, amount); - - function countRowShift(logicalRow) { - // Todo: compare perf between reduce vs sort->each->brake - return (0, _array.arrayReduce)(removedItems, function (count, removedLogicalRow) { - if (logicalRow > removedLogicalRow) { - count++; - } - - return count; - }, 0); - } - - this._arrayMap = (0, _array.arrayMap)(this._arrayMap, function (logicalRow, physicalRow) { - var rowShift = countRowShift(logicalRow); - - if (rowShift) { - logicalRow -= rowShift; - } - - return logicalRow; - }); - }, - - - /** - * Shift (right shifting) items starting at passed index. - * - * @param {Number} index Array index. - * @param {Number} [amount=1] Defines how many items will be created to an array. - */ - shiftItems: function shiftItems(index) { - var _this3 = this; - - var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; - - this._arrayMap = (0, _array.arrayMap)(this._arrayMap, function (row) { - if (row >= index) { - row += amount; - } - - return row; - }); - - (0, _number.rangeEach)(amount - 1, function (count) { - _this3._arrayMap.splice(index + count, 0, index + count); - }); - }, - - - /** - * Clear all stored index<->value information from an array. - */ - clearMap: function clearMap() { - this._arrayMap.length = 0; - } -}; - -(0, _object.defineGetter)(arrayMapper, 'MIXIN_NAME', MIXIN_NAME, { - writable: false, - enumerable: false -}); - -exports.default = arrayMapper; - -/***/ }), -/* 151 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _number = __webpack_require__(6); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var STATE_INITIALIZED = 0; -var STATE_BUILT = 1; -var STATE_APPENDED = 2; -var UNIT = 'px'; - -/** - * @class - * @private - */ - -var BaseUI = function () { - function BaseUI(hotInstance) { - _classCallCheck(this, BaseUI); - - /** - * Instance of Handsontable. - * - * @type {Core} - */ - this.hot = hotInstance; - /** - * DOM element representing the ui element. - * - * @type {HTMLElement} - * @private - */ - this._element = null; - /** - * Flag which determines build state of element. - * - * @type {Boolean} - */ - this.state = STATE_INITIALIZED; - } - - /** - * Add created UI elements to table. - * - * @param {HTMLElement} wrapper Element which are parent for our UI element. - */ - - - _createClass(BaseUI, [{ - key: 'appendTo', - value: function appendTo(wrapper) { - wrapper.appendChild(this._element); - - this.state = STATE_APPENDED; - } - - /** - * Method for create UI element. Only create, without append to table. - */ - - }, { - key: 'build', - value: function build() { - this._element = document.createElement('div'); - this.state = STATE_BUILT; - } - - /** - * Method for remove UI element. - */ - - }, { - key: 'destroy', - value: function destroy() { - if (this.isAppended()) { - this._element.parentElement.removeChild(this._element); - } - - this._element = null; - this.state = STATE_INITIALIZED; - } - - /** - * Check if UI element are appended. - * - * @returns {Boolean} - */ - - }, { - key: 'isAppended', - value: function isAppended() { - return this.state === STATE_APPENDED; - } - - /** - * Check if UI element are built. - * - * @returns {Boolean} - */ - - }, { - key: 'isBuilt', - value: function isBuilt() { - return this.state >= STATE_BUILT; - } - - /** - * Setter for position. - * - * @param {Number} top New top position of the element. - * @param {Number} left New left position of the element. - */ - - }, { - key: 'setPosition', - value: function setPosition(top, left) { - if ((0, _number.isNumeric)(top)) { - this._element.style.top = top + UNIT; - } - if ((0, _number.isNumeric)(left)) { - this._element.style.left = left + UNIT; - } - } - - /** - * Getter for the element position. - * - * @returns {Object} Object contains left and top position of the element. - */ - - }, { - key: 'getPosition', - value: function getPosition() { - return { - top: this._element.style.top ? parseInt(this._element.style.top, 10) : 0, - left: this._element.style.left ? parseInt(this._element.style.left, 10) : 0 - }; - } - - /** - * Setter for the element size. - * - * @param {Number} width New width of the element. - * @param {Number} height New height of the element. - */ - - }, { - key: 'setSize', - value: function setSize(width, height) { - if ((0, _number.isNumeric)(width)) { - this._element.style.width = width + UNIT; - } - if ((0, _number.isNumeric)(height)) { - this._element.style.height = height + UNIT; - } - } - - /** - * Getter for the element position. - * - * @returns {Object} Object contains height and width of the element. - */ - - }, { - key: 'getSize', - value: function getSize() { - return { - width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0, - height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0 - }; - } - - /** - * Setter for the element offset. Offset means marginTop and marginLeft of the element. - * - * @param {Number} top New margin top of the element. - * @param {Number} left New margin left of the element. - */ - - }, { - key: 'setOffset', - value: function setOffset(top, left) { - if ((0, _number.isNumeric)(top)) { - this._element.style.marginTop = top + UNIT; - } - if ((0, _number.isNumeric)(left)) { - this._element.style.marginLeft = left + UNIT; - } - } - - /** - * Getter for the element offset. - * - * @returns {Object} Object contains top and left offset of the element. - */ - - }, { - key: 'getOffset', - value: function getOffset() { - return { - top: this._element.style.marginTop ? parseInt(this._element.style.marginTop, 10) : 0, - left: this._element.style.marginLeft ? parseInt(this._element.style.marginLeft, 10) : 0 - }; - } - }]); - - return BaseUI; -}(); - -exports.default = BaseUI; - -/***/ }), -/* 152 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var STATE_INITIALIZED = 0; -var STATE_BUILT = 1; -var STATE_APPENDED = 2; -var UNIT = 'px'; - -/** - * @class - * @private - */ - -var BaseUI = function () { - function BaseUI(hotInstance) { - _classCallCheck(this, BaseUI); - - /** - * Instance of Handsontable. - * - * @type {Core} - */ - this.hot = hotInstance; - /** - * DOM element representing the ui element. - * - * @type {HTMLElement} - * @private - */ - this._element = null; - /** - * Flag which determines build state of element. - * - * @type {Boolean} - */ - this.state = STATE_INITIALIZED; - } - - /** - * Add created UI elements to table. - * - * @param {HTMLElement} wrapper Element which are parent for our UI element. - */ - - - _createClass(BaseUI, [{ - key: 'appendTo', - value: function appendTo(wrapper) { - wrapper.appendChild(this._element); - - this.state = STATE_APPENDED; - } - - /** - * Method for create UI element. Only create, without append to table. - */ - - }, { - key: 'build', - value: function build() { - this._element = document.createElement('div'); - this.state = STATE_BUILT; - } - - /** - * Method for remove UI element. - */ - - }, { - key: 'destroy', - value: function destroy() { - if (this.isAppended()) { - this._element.parentElement.removeChild(this._element); - } - - this._element = null; - this.state = STATE_INITIALIZED; - } - - /** - * Check if UI element are appended. - * - * @returns {Boolean} - */ - - }, { - key: 'isAppended', - value: function isAppended() { - return this.state === STATE_APPENDED; - } - - /** - * Check if UI element are built. - * - * @returns {Boolean} - */ - - }, { - key: 'isBuilt', - value: function isBuilt() { - return this.state >= STATE_BUILT; - } - - /** - * Setter for position. - * - * @param {Number} top New top position of the element. - * @param {Number} left New left position of the element. - */ - - }, { - key: 'setPosition', - value: function setPosition(top, left) { - if (top) { - this._element.style.top = top + UNIT; - } - if (left) { - this._element.style.left = left + UNIT; - } - } - - /** - * Getter for the element position. - * - * @returns {Object} Object contains left and top position of the element. - */ - - }, { - key: 'getPosition', - value: function getPosition() { - return { - top: this._element.style.top ? parseInt(this._element.style.top, 10) : 0, - left: this._element.style.left ? parseInt(this._element.style.left, 10) : 0 - }; - } - - /** - * Setter for the element size. - * - * @param {Number} width New width of the element. - * @param {Number} height New height of the element. - */ - - }, { - key: 'setSize', - value: function setSize(width, height) { - if (width) { - this._element.style.width = width + UNIT; - } - if (height) { - this._element.style.height = height + UNIT; - } - } - - /** - * Getter for the element position. - * - * @returns {Object} Object contains height and width of the element. - */ - - }, { - key: 'getSize', - value: function getSize() { - return { - width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0, - height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0 - }; - } - - /** - * Setter for the element offset. Offset means marginTop and marginLeft of the element. - * - * @param {Number} top New margin top of the element. - * @param {Number} left New margin left of the element. - */ - - }, { - key: 'setOffset', - value: function setOffset(top, left) { - if (top) { - this._element.style.marginTop = top + UNIT; - } - if (left) { - this._element.style.marginLeft = left + UNIT; - } - } - - /** - * Getter for the element offset. - * - * @returns {Object} Object contains top and left offset of the element. - */ - - }, { - key: 'getOffset', - value: function getOffset() { - return { - top: this._element.style.marginTop ? parseInt(this._element.style.marginTop, 10) : 0, - left: this._element.style.marginLeft ? parseInt(this._element.style.marginLeft, 10) : 0 - }; - } - }]); - - return BaseUI; -}(); - -exports.default = BaseUI; - -/***/ }), -/* 153 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.RecordTranslator = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -exports.registerIdentity = registerIdentity; -exports.getTranslator = getTranslator; - -var _core = __webpack_require__(63); - -var _core2 = _interopRequireDefault(_core); - -var _object = __webpack_require__(1); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class RecordTranslator - * @util - */ -var RecordTranslator = function () { - function RecordTranslator(hot) { - _classCallCheck(this, RecordTranslator); - - this.hot = hot; - } - - /** - * Translate physical row index into visual. - * - * @param {Number} row Physical row index. - * @returns {Number} Returns visual row index. - */ - - - _createClass(RecordTranslator, [{ - key: 'toVisualRow', - value: function toVisualRow(row) { - return this.hot.runHooks('unmodifyRow', row); - } - - /** - * Translate physical column index into visual. - * - * @param {Number} column Physical column index. - * @returns {Number} Returns visual column index. - */ - - }, { - key: 'toVisualColumn', - value: function toVisualColumn(column) { - return this.hot.runHooks('unmodifyCol', column); - } - - /** - * Translate physical coordinates into visual. Can be passed as separate 2 arguments (row, column) or as an object in first - * argument with `row` and `column` keys. - * - * @param {Number|Object} row Physical coordinates or row index. - * @param {Number} [column] Physical column index. - * @returns {Object|Array} Returns an object with visual records or an array if coordinates passed as separate arguments. - */ - - }, { - key: 'toVisual', - value: function toVisual(row, column) { - var result = void 0; - - if ((0, _object.isObject)(row)) { - result = { - row: this.toVisualRow(row.row), - column: this.toVisualColumn(row.column) - }; - } else { - result = [this.toVisualRow(row), this.toVisualColumn(column)]; - } - - return result; - } - - /** - * Translate visual row index into physical. - * - * @param {Number} row Visual row index. - * @returns {Number} Returns physical row index. - */ - - }, { - key: 'toPhysicalRow', - value: function toPhysicalRow(row) { - return this.hot.runHooks('modifyRow', row); - } - - /** - * Translate visual column index into physical. - * - * @param {Number} column Visual column index. - * @returns {Number} Returns physical column index. - */ - - }, { - key: 'toPhysicalColumn', - value: function toPhysicalColumn(column) { - return this.hot.runHooks('modifyCol', column); - } - - /** - * Translate visual coordinates into physical. Can be passed as separate 2 arguments (row, column) or as an object in first - * argument with `row` and `column` keys. - * - * @param {Number|Object} row Visual coordinates or row index. - * @param {Number} [column] Visual column index. - * @returns {Object|Array} Returns an object with physical records or an array if coordinates passed as separate arguments. - */ - - }, { - key: 'toPhysical', - value: function toPhysical(row, column) { - var result = void 0; - - if ((0, _object.isObject)(row)) { - result = { - row: this.toPhysicalRow(row.row), - column: this.toPhysicalColumn(row.column) - }; - } else { - result = [this.toPhysicalRow(row), this.toPhysicalColumn(column)]; - } - - return result; - } - }]); - - return RecordTranslator; -}(); - -exports.RecordTranslator = RecordTranslator; - - -var identities = new WeakMap(); -var translatorSingletons = new WeakMap(); - -function registerIdentity(identity, hot) { - identities.set(identity, hot); -} - -function getTranslator(identity) { - var singleton = void 0; - - if (!(identity instanceof _core2.default)) { - if (!identities.has(identity)) { - throw Error('Record translator was not registered for this object identity'); - } - identity = identities.get(identity); - } - if (translatorSingletons.has(identity)) { - singleton = translatorSingletons.get(identity); - } else { - singleton = new RecordTranslator(identity); - translatorSingletons.set(identity, singleton); - } - - return singleton; -} - -/***/ }), -/* 154 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _object = __webpack_require__(1); - -var _number = __webpack_require__(6); - -var _mixed = __webpack_require__(20); - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class SamplesGenerator - * @util - */ -var SamplesGenerator = function () { - _createClass(SamplesGenerator, null, [{ - key: 'SAMPLE_COUNT', - - /** - * Number of samples to take of each value length. - * - * @type {Number} - */ - get: function get() { - return 3; - } - }]); - - function SamplesGenerator(dataFactory) { - _classCallCheck(this, SamplesGenerator); - - /** - * Samples prepared for calculations. - * - * @type {Map} - * @default {null} - */ - this.samples = null; - /** - * Function which give the data to collect samples. - * - * @type {Function} - */ - this.dataFactory = dataFactory; - /** - * Custom number of samples to take of each value length. - * - * @type {Number} - * @default {null} - */ - this.customSampleCount = null; - /** - * `true` if duplicate samples collection should be allowed, `false` otherwise. - * - * @type {Boolean} - * @default {false} - */ - this.allowDuplicates = false; - } - - /** - * Get the sample count for this instance. - * - * @returns {Number} - */ - - - _createClass(SamplesGenerator, [{ - key: 'getSampleCount', - value: function getSampleCount() { - if (this.customSampleCount) { - return this.customSampleCount; - } - return SamplesGenerator.SAMPLE_COUNT; - } - }, { - key: 'setSampleCount', - - - /** - * Set the sample count. - * - * @param {Number} sampleCount Number of samples to be collected. - */ - value: function setSampleCount(sampleCount) { - this.customSampleCount = sampleCount; - } - - /** - * Set if the generator should accept duplicate values. - * - * @param {Boolean} allowDuplicates `true` to allow duplicate values. - */ - - }, { - key: 'setAllowDuplicates', - value: function setAllowDuplicates(allowDuplicates) { - this.allowDuplicates = allowDuplicates; - } - - /** - * Generate samples for row. You can control which area should be sampled by passing `rowRange` object and `colRange` object. - * - * @param {Object|Number} rowRange - * @param {Object} colRange - * @returns {Object} - */ - - }, { - key: 'generateRowSamples', - value: function generateRowSamples(rowRange, colRange) { - return this.generateSamples('row', colRange, rowRange); - } - - /** - * Generate samples for column. You can control which area should be sampled by passing `colRange` object and `rowRange` object. - * - * @param {Object} colRange Column index. - * @param {Object} rowRange Column index. - * @returns {Object} - */ - - }, { - key: 'generateColumnSamples', - value: function generateColumnSamples(colRange, rowRange) { - return this.generateSamples('col', rowRange, colRange); - } - - /** - * Generate collection of samples. - * - * @param {String} type Type to generate. Can be `col` or `row`. - * @param {Object} range - * @param {Object|Number} specifierRange - * @returns {Map} - */ - - }, { - key: 'generateSamples', - value: function generateSamples(type, range, specifierRange) { - var _this = this; - - var samples = new Map(); - - if (typeof specifierRange === 'number') { - specifierRange = { from: specifierRange, to: specifierRange }; - } - (0, _number.rangeEach)(specifierRange.from, specifierRange.to, function (index) { - var sample = _this.generateSample(type, range, index); - - samples.set(index, sample); - }); - - return samples; - } - - /** - * Generate sample for specified type (`row` or `col`). - * - * @param {String} type Samples type `row` or `col`. - * @param {Object} range - * @param {Number} specifierValue - * @returns {Map} - */ - - }, { - key: 'generateSample', - value: function generateSample(type, range, specifierValue) { - var _this2 = this; - - var samples = new Map(); - var sampledValues = []; - var length = void 0; - - (0, _number.rangeEach)(range.from, range.to, function (index) { - var value = void 0; - - if (type === 'row') { - value = _this2.dataFactory(specifierValue, index); - } else if (type === 'col') { - value = _this2.dataFactory(index, specifierValue); - } else { - throw new Error('Unsupported sample type'); - } - - if ((0, _object.isObject)(value)) { - length = Object.keys(value).length; - } else if (Array.isArray(value)) { - length = value.length; - } else { - length = (0, _mixed.stringify)(value).length; - } - - if (!samples.has(length)) { - samples.set(length, { - needed: _this2.getSampleCount(), - strings: [] - }); - } - var sample = samples.get(length); - - if (sample.needed) { - var duplicate = sampledValues.indexOf(value) > -1; - - if (!duplicate || _this2.allowDuplicates) { - var computedKey = type === 'row' ? 'col' : 'row'; - - sample.strings.push(_defineProperty({ value: value }, computedKey, index)); - sampledValues.push(value); - sample.needed--; - } - } - }); - - return samples; - } - }]); - - return SamplesGenerator; -}(); - -exports.default = SamplesGenerator; - -/***/ }), -/* 155 */ -/***/ (function(module, exports, __webpack_require__) { - -// false -> Array#indexOf -// true -> Array#includes -var toIObject = __webpack_require__(23) - , toLength = __webpack_require__(24) - , toIndex = __webpack_require__(59); -module.exports = function(IS_INCLUDES){ - return function($this, el, fromIndex){ - var O = toIObject($this) - , length = toLength(O.length) - , index = toIndex(fromIndex, length) - , value; - // Array#includes uses SameValueZero equality algorithm - if(IS_INCLUDES && el != el)while(length > index){ - value = O[index++]; - if(value != value)return true; - // Array#toIndex ignores holes, Array#includes - not - } else for(;length > index; index++)if(IS_INCLUDES || index in O){ - if(O[index] === el)return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; -}; - -/***/ }), -/* 156 */ -/***/ (function(module, exports, __webpack_require__) { - -// getting tag from 19.1.3.6 Object.prototype.toString() -var cof = __webpack_require__(38) - , TAG = __webpack_require__(10)('toStringTag') - // ES3 wrong here - , ARG = cof(function(){ return arguments; }()) == 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function(it, key){ - try { - return it[key]; - } catch(e){ /* empty */ } -}; - -module.exports = function(it){ - var O, T, B; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T - // builtinTag case - : ARG ? cof(O) - // ES3 arguments fallback - : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; -}; - -/***/ }), -/* 157 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var dP = __webpack_require__(19).f - , create = __webpack_require__(79) - , redefineAll = __webpack_require__(58) - , ctx = __webpack_require__(29) - , anInstance = __webpack_require__(51) - , defined = __webpack_require__(30) - , forOf = __webpack_require__(55) - , $iterDefine = __webpack_require__(166) - , step = __webpack_require__(167) - , setSpecies = __webpack_require__(172) - , DESCRIPTORS = __webpack_require__(21) - , fastKey = __webpack_require__(46).fastKey - , SIZE = DESCRIPTORS ? '_s' : 'size'; - -var getEntry = function(that, key){ - // fast case - var index = fastKey(key), entry; - if(index !== 'F')return that._i[index]; - // frozen object case - for(entry = that._f; entry; entry = entry.n){ - if(entry.k == key)return entry; - } -}; - -module.exports = { - getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ - var C = wrapper(function(that, iterable){ - anInstance(that, C, NAME, '_i'); - that._i = create(null); // index - that._f = undefined; // first entry - that._l = undefined; // last entry - that[SIZE] = 0; // size - if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); - }); - redefineAll(C.prototype, { - // 23.1.3.1 Map.prototype.clear() - // 23.2.3.2 Set.prototype.clear() - clear: function clear(){ - for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){ - entry.r = true; - if(entry.p)entry.p = entry.p.n = undefined; - delete data[entry.i]; - } - that._f = that._l = undefined; - that[SIZE] = 0; - }, - // 23.1.3.3 Map.prototype.delete(key) - // 23.2.3.4 Set.prototype.delete(value) - 'delete': function(key){ - var that = this - , entry = getEntry(that, key); - if(entry){ - var next = entry.n - , prev = entry.p; - delete that._i[entry.i]; - entry.r = true; - if(prev)prev.n = next; - if(next)next.p = prev; - if(that._f == entry)that._f = next; - if(that._l == entry)that._l = prev; - that[SIZE]--; - } return !!entry; - }, - // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) - // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) - forEach: function forEach(callbackfn /*, that = undefined */){ - anInstance(this, C, 'forEach'); - var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3) - , entry; - while(entry = entry ? entry.n : this._f){ - f(entry.v, entry.k, this); - // revert to the last existing entry - while(entry && entry.r)entry = entry.p; - } - }, - // 23.1.3.7 Map.prototype.has(key) - // 23.2.3.7 Set.prototype.has(value) - has: function has(key){ - return !!getEntry(this, key); - } - }); - if(DESCRIPTORS)dP(C.prototype, 'size', { - get: function(){ - return defined(this[SIZE]); - } - }); - return C; - }, - def: function(that, key, value){ - var entry = getEntry(that, key) - , prev, index; - // change existing entry - if(entry){ - entry.v = value; - // create new entry - } else { - that._l = entry = { - i: index = fastKey(key, true), // <- index - k: key, // <- key - v: value, // <- value - p: prev = that._l, // <- previous entry - n: undefined, // <- next entry - r: false // <- removed - }; - if(!that._f)that._f = entry; - if(prev)prev.n = entry; - that[SIZE]++; - // add to index - if(index !== 'F')that._i[index] = entry; - } return that; - }, - getEntry: getEntry, - setStrong: function(C, NAME, IS_MAP){ - // add .keys, .values, .entries, [@@iterator] - // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 - $iterDefine(C, NAME, function(iterated, kind){ - this._t = iterated; // target - this._k = kind; // kind - this._l = undefined; // previous - }, function(){ - var that = this - , kind = that._k - , entry = that._l; - // revert to the last existing entry - while(entry && entry.r)entry = entry.p; - // get next entry - if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){ - // or finish the iteration - that._t = undefined; - return step(1); - } - // return step by kind - if(kind == 'keys' )return step(0, entry.k); - if(kind == 'values')return step(0, entry.v); - return step(0, [entry.k, entry.v]); - }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true); - - // add [@@species], 23.1.2.2, 23.2.2.2 - setSpecies(NAME); - } -}; - -/***/ }), -/* 158 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var redefineAll = __webpack_require__(58) - , getWeak = __webpack_require__(46).getWeak - , anObject = __webpack_require__(18) - , isObject = __webpack_require__(15) - , anInstance = __webpack_require__(51) - , forOf = __webpack_require__(55) - , createArrayMethod = __webpack_require__(52) - , $has = __webpack_require__(22) - , arrayFind = createArrayMethod(5) - , arrayFindIndex = createArrayMethod(6) - , id = 0; - -// fallback for uncaught frozen keys -var uncaughtFrozenStore = function(that){ - return that._l || (that._l = new UncaughtFrozenStore); -}; -var UncaughtFrozenStore = function(){ - this.a = []; -}; -var findUncaughtFrozen = function(store, key){ - return arrayFind(store.a, function(it){ - return it[0] === key; - }); -}; -UncaughtFrozenStore.prototype = { - get: function(key){ - var entry = findUncaughtFrozen(this, key); - if(entry)return entry[1]; - }, - has: function(key){ - return !!findUncaughtFrozen(this, key); - }, - set: function(key, value){ - var entry = findUncaughtFrozen(this, key); - if(entry)entry[1] = value; - else this.a.push([key, value]); - }, - 'delete': function(key){ - var index = arrayFindIndex(this.a, function(it){ - return it[0] === key; - }); - if(~index)this.a.splice(index, 1); - return !!~index; - } -}; - -module.exports = { - getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ - var C = wrapper(function(that, iterable){ - anInstance(that, C, NAME, '_i'); - that._i = id++; // collection id - that._l = undefined; // leak store for uncaught frozen objects - if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); - }); - redefineAll(C.prototype, { - // 23.3.3.2 WeakMap.prototype.delete(key) - // 23.4.3.3 WeakSet.prototype.delete(value) - 'delete': function(key){ - if(!isObject(key))return false; - var data = getWeak(key); - if(data === true)return uncaughtFrozenStore(this)['delete'](key); - return data && $has(data, this._i) && delete data[this._i]; - }, - // 23.3.3.4 WeakMap.prototype.has(key) - // 23.4.3.4 WeakSet.prototype.has(value) - has: function has(key){ - if(!isObject(key))return false; - var data = getWeak(key); - if(data === true)return uncaughtFrozenStore(this).has(key); - return data && $has(data, this._i); - } - }); - return C; - }, - def: function(that, key, value){ - var data = getWeak(anObject(key), true); - if(data === true)uncaughtFrozenStore(that).set(key, value); - else data[that._i] = value; - return that; - }, - ufstore: uncaughtFrozenStore -}; - -/***/ }), -/* 159 */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(13).document && document.documentElement; - -/***/ }), -/* 160 */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = !__webpack_require__(21) && !__webpack_require__(31)(function(){ - return Object.defineProperty(__webpack_require__(74)('div'), 'a', {get: function(){ return 7; }}).a != 7; -}); - -/***/ }), -/* 161 */ -/***/ (function(module, exports, __webpack_require__) { - -// check on default Array iterator -var Iterators = __webpack_require__(45) - , ITERATOR = __webpack_require__(10)('iterator') - , ArrayProto = Array.prototype; - -module.exports = function(it){ - return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); -}; - -/***/ }), -/* 162 */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.2.2 IsArray(argument) -var cof = __webpack_require__(38); -module.exports = Array.isArray || function isArray(arg){ - return cof(arg) == 'Array'; -}; - -/***/ }), -/* 163 */ -/***/ (function(module, exports, __webpack_require__) { - -// 20.1.2.3 Number.isInteger(number) -var isObject = __webpack_require__(15) - , floor = Math.floor; -module.exports = function isInteger(it){ - return !isObject(it) && isFinite(it) && floor(it) === it; -}; - -/***/ }), -/* 164 */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.2.8 IsRegExp(argument) -var isObject = __webpack_require__(15) - , cof = __webpack_require__(38) - , MATCH = __webpack_require__(10)('match'); -module.exports = function(it){ - var isRegExp; - return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); -}; - -/***/ }), -/* 165 */ -/***/ (function(module, exports, __webpack_require__) { - -// call something on iterator step with safe closing on error -var anObject = __webpack_require__(18); -module.exports = function(iterator, fn, value, entries){ - try { - return entries ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch(e){ - var ret = iterator['return']; - if(ret !== undefined)anObject(ret.call(iterator)); - throw e; - } -}; - -/***/ }), -/* 166 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var LIBRARY = __webpack_require__(56) - , $export = __webpack_require__(3) - , redefine = __webpack_require__(33) - , hide = __webpack_require__(32) - , has = __webpack_require__(22) - , Iterators = __webpack_require__(45) - , $iterCreate = __webpack_require__(285) - , setToStringTag = __webpack_require__(48) - , getPrototypeOf = __webpack_require__(290) - , ITERATOR = __webpack_require__(10)('iterator') - , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` - , FF_ITERATOR = '@@iterator' - , KEYS = 'keys' - , VALUES = 'values'; - -var returnThis = function(){ return this; }; - -module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){ - $iterCreate(Constructor, NAME, next); - var getMethod = function(kind){ - if(!BUGGY && kind in proto)return proto[kind]; - switch(kind){ - case KEYS: return function keys(){ return new Constructor(this, kind); }; - case VALUES: return function values(){ return new Constructor(this, kind); }; - } return function entries(){ return new Constructor(this, kind); }; - }; - var TAG = NAME + ' Iterator' - , DEF_VALUES = DEFAULT == VALUES - , VALUES_BUG = false - , proto = Base.prototype - , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] - , $default = $native || getMethod(DEFAULT) - , $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined - , $anyNative = NAME == 'Array' ? proto.entries || $native : $native - , methods, key, IteratorPrototype; - // Fix native - if($anyNative){ - IteratorPrototype = getPrototypeOf($anyNative.call(new Base)); - if(IteratorPrototype !== Object.prototype){ - // Set @@toStringTag to native iterators - setToStringTag(IteratorPrototype, TAG, true); - // fix for some old engines - if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis); - } - } - // fix Array#{values, @@iterator}.name in V8 / FF - if(DEF_VALUES && $native && $native.name !== VALUES){ - VALUES_BUG = true; - $default = function values(){ return $native.call(this); }; - } - // Define iterator - if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){ - hide(proto, ITERATOR, $default); - } - // Plug for library - Iterators[NAME] = $default; - Iterators[TAG] = returnThis; - if(DEFAULT){ - methods = { - values: DEF_VALUES ? $default : getMethod(VALUES), - keys: IS_SET ? $default : getMethod(KEYS), - entries: $entries - }; - if(FORCED)for(key in methods){ - if(!(key in proto))redefine(proto, key, methods[key]); - } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); - } - return methods; -}; - -/***/ }), -/* 167 */ -/***/ (function(module, exports) { - -module.exports = function(done, value){ - return {value: value, done: !!done}; -}; - -/***/ }), -/* 168 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// 19.1.2.1 Object.assign(target, source, ...) -var getKeys = __webpack_require__(39) - , gOPS = __webpack_require__(57) - , pIE = __webpack_require__(47) - , toObject = __webpack_require__(41) - , IObject = __webpack_require__(77) - , $assign = Object.assign; - -// should work with symbols and should have deterministic property order (V8 bug) -module.exports = !$assign || __webpack_require__(31)(function(){ - var A = {} - , B = {} - , S = Symbol() - , K = 'abcdefghijklmnopqrst'; - A[S] = 7; - K.split('').forEach(function(k){ B[k] = k; }); - return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; -}) ? function assign(target, source){ // eslint-disable-line no-unused-vars - var T = toObject(target) - , aLen = arguments.length - , index = 1 - , getSymbols = gOPS.f - , isEnum = pIE.f; - while(aLen > index){ - var S = IObject(arguments[index++]) - , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S) - , length = keys.length - , j = 0 - , key; - while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key]; - } return T; -} : $assign; - -/***/ }), -/* 169 */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(22) - , toIObject = __webpack_require__(23) - , arrayIndexOf = __webpack_require__(155)(false) - , IE_PROTO = __webpack_require__(82)('IE_PROTO'); - -module.exports = function(object, names){ - var O = toIObject(object) - , i = 0 - , result = [] - , key; - for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key); - // Don't enum bug & hidden keys - while(names.length > i)if(has(O, key = names[i++])){ - ~arrayIndexOf(result, key) || result.push(key); - } - return result; -}; - -/***/ }), -/* 170 */ -/***/ (function(module, exports, __webpack_require__) { - -var getKeys = __webpack_require__(39) - , toIObject = __webpack_require__(23) - , isEnum = __webpack_require__(47).f; -module.exports = function(isEntries){ - return function(it){ - var O = toIObject(it) - , keys = getKeys(O) - , length = keys.length - , i = 0 - , result = [] - , key; - while(length > i)if(isEnum.call(O, key = keys[i++])){ - result.push(isEntries ? [key, O[key]] : O[key]); - } return result; - }; -}; - -/***/ }), -/* 171 */ -/***/ (function(module, exports, __webpack_require__) { - -// Works with __proto__ only. Old v8 can't work with null proto objects. -/* eslint-disable no-proto */ -var isObject = __webpack_require__(15) - , anObject = __webpack_require__(18); -var check = function(O, proto){ - anObject(O); - if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!"); -}; -module.exports = { - set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line - function(test, buggy, set){ - try { - set = __webpack_require__(29)(Function.call, __webpack_require__(80).f(Object.prototype, '__proto__').set, 2); - set(test, []); - buggy = !(test instanceof Array); - } catch(e){ buggy = true; } - return function setPrototypeOf(O, proto){ - check(O, proto); - if(buggy)O.__proto__ = proto; - else set(O, proto); - return O; - }; - }({}, false) : undefined), - check: check -}; - -/***/ }), -/* 172 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var global = __webpack_require__(13) - , dP = __webpack_require__(19) - , DESCRIPTORS = __webpack_require__(21) - , SPECIES = __webpack_require__(10)('species'); - -module.exports = function(KEY){ - var C = global[KEY]; - if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, { - configurable: true, - get: function(){ return this; } - }); -}; - -/***/ }), -/* 173 */ -/***/ (function(module, exports, __webpack_require__) { - -// https://github.com/tc39/proposal-string-pad-start-end -var toLength = __webpack_require__(24) - , repeat = __webpack_require__(174) - , defined = __webpack_require__(30); - -module.exports = function(that, maxLength, fillString, left){ - var S = String(defined(that)) - , stringLength = S.length - , fillStr = fillString === undefined ? ' ' : String(fillString) - , intMaxLength = toLength(maxLength); - if(intMaxLength <= stringLength || fillStr == '')return S; - var fillLen = intMaxLength - stringLength - , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); - if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen); - return left ? stringFiller + S : S + stringFiller; -}; - - -/***/ }), -/* 174 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var toInteger = __webpack_require__(60) - , defined = __webpack_require__(30); - -module.exports = function repeat(count){ - var str = String(defined(this)) - , res = '' - , n = toInteger(count); - if(n < 0 || n == Infinity)throw RangeError("Count can't be negative"); - for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str; - return res; -}; - -/***/ }), -/* 175 */ -/***/ (function(module, exports, __webpack_require__) { - -exports.f = __webpack_require__(10); - -/***/ }), -/* 176 */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(156) - , ITERATOR = __webpack_require__(10)('iterator') - , Iterators = __webpack_require__(45); -module.exports = __webpack_require__(44).getIteratorMethod = function(it){ - if(it != undefined)return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; -}; - -/***/ }), -/* 177 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = jQueryWrapper; -function jQueryWrapper(Handsontable) { - var jQuery = typeof window === 'undefined' ? false : window.jQuery; - - if (!jQuery) { - return; - } - - jQuery.fn.handsontable = function (action) { - var $this = this.first(); // Use only first element from list - var instance = $this.data('handsontable'); - - // Init case - if (typeof action !== 'string') { - var userSettings = action || {}; - - if (instance) { - instance.updateSettings(userSettings); - } else { - instance = new Handsontable.Core($this[0], userSettings); - $this.data('handsontable', instance); - instance.init(); - } - - return $this; - } - - // Action case - var args = []; - var output = void 0; - - if (arguments.length > 1) { - for (var i = 1, ilen = arguments.length; i < ilen; i++) { - args.push(arguments[i]); - } - } - - if (instance) { - if (typeof instance[action] !== 'undefined') { - output = instance[action].apply(instance, args); - - if (action === 'destroy') { - $this.removeData(); - } - } else { - throw new Error('Handsontable do not provide action: ' + action); - } - } - - return output; - }; -}; - -/***/ }), -/* 178 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.Base = exports.UndoRedo = exports.TouchScroll = exports.Search = exports.PersistentState = exports.ObserveChanges = exports.MultipleSelectionHandles = exports.MergeCells = exports.ManualRowResize = exports.ManualRowMove = exports.ManualColumnResize = exports.ManualColumnMove = exports.ManualColumnFreeze = exports.DragToScroll = exports.CustomBorders = exports.CopyPaste = exports.ContextMenu = exports.Comments = exports.ColumnSorting = exports.AutoRowSize = exports.AutoFill = exports.AutoColumnSize = undefined; - -var _autoColumnSize = __webpack_require__(210); - -var _autoColumnSize2 = _interopRequireDefault(_autoColumnSize); - -var _autofill = __webpack_require__(212); - -var _autofill2 = _interopRequireDefault(_autofill); - -var _autoRowSize = __webpack_require__(211); - -var _autoRowSize2 = _interopRequireDefault(_autoRowSize); - -var _columnSorting = __webpack_require__(214); - -var _columnSorting2 = _interopRequireDefault(_columnSorting); - -var _comments = __webpack_require__(216); - -var _comments2 = _interopRequireDefault(_comments); - -var _contextMenu = __webpack_require__(219); - -var _contextMenu2 = _interopRequireDefault(_contextMenu); - -var _copyPaste = __webpack_require__(236); - -var _copyPaste2 = _interopRequireDefault(_copyPaste); - -var _customBorders = __webpack_require__(238); - -var _customBorders2 = _interopRequireDefault(_customBorders); - -var _dragToScroll = __webpack_require__(239); - -var _dragToScroll2 = _interopRequireDefault(_dragToScroll); - -var _manualColumnFreeze = __webpack_require__(242); - -var _manualColumnFreeze2 = _interopRequireDefault(_manualColumnFreeze); - -var _manualColumnMove = __webpack_require__(244); - -var _manualColumnMove2 = _interopRequireDefault(_manualColumnMove); - -var _manualColumnResize = __webpack_require__(247); - -var _manualColumnResize2 = _interopRequireDefault(_manualColumnResize); - -var _manualRowMove = __webpack_require__(248); - -var _manualRowMove2 = _interopRequireDefault(_manualRowMove); - -var _manualRowResize = __webpack_require__(252); - -var _manualRowResize2 = _interopRequireDefault(_manualRowResize); - -var _mergeCells = __webpack_require__(253); - -var _mergeCells2 = _interopRequireDefault(_mergeCells); - -var _multipleSelectionHandles = __webpack_require__(254); - -var _multipleSelectionHandles2 = _interopRequireDefault(_multipleSelectionHandles); - -var _observeChanges = __webpack_require__(256); - -var _observeChanges2 = _interopRequireDefault(_observeChanges); - -var _persistentState = __webpack_require__(258); - -var _persistentState2 = _interopRequireDefault(_persistentState); - -var _search = __webpack_require__(259); - -var _search2 = _interopRequireDefault(_search); - -var _touchScroll = __webpack_require__(260); - -var _touchScroll2 = _interopRequireDefault(_touchScroll); - -var _undoRedo = __webpack_require__(261); - -var _undoRedo2 = _interopRequireDefault(_undoRedo); - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.AutoColumnSize = _autoColumnSize2.default; -exports.AutoFill = _autofill2.default; -exports.AutoRowSize = _autoRowSize2.default; -exports.ColumnSorting = _columnSorting2.default; -exports.Comments = _comments2.default; -exports.ContextMenu = _contextMenu2.default; -exports.CopyPaste = _copyPaste2.default; -exports.CustomBorders = _customBorders2.default; -exports.DragToScroll = _dragToScroll2.default; -exports.ManualColumnFreeze = _manualColumnFreeze2.default; -exports.ManualColumnMove = _manualColumnMove2.default; -exports.ManualColumnResize = _manualColumnResize2.default; -exports.ManualRowMove = _manualRowMove2.default; -exports.ManualRowResize = _manualRowResize2.default; -exports.MergeCells = _mergeCells2.default; -exports.MultipleSelectionHandles = _multipleSelectionHandles2.default; -exports.ObserveChanges = _observeChanges2.default; -exports.PersistentState = _persistentState2.default; -exports.Search = _search2.default; -exports.TouchScroll = _touchScroll2.default; -exports.UndoRedo = _undoRedo2.default; -exports.Base = _base2.default; - -/***/ }), -/* 179 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 180 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 181 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 182 */ -/***/ (function(module, exports) { - - - -/***/ }), -/* 183 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * autoResize - resizes a DOM element to the width and height of another DOM element - * - * Copyright 2014, Marcin Warpechowski - * Licensed under the MIT license - */ - -function autoResize() { - var defaults = { - minHeight: 200, - maxHeight: 300, - minWidth: 100, - maxWidth: 300 - }, - el, - body = document.body, - text = document.createTextNode(''), - span = document.createElement('SPAN'), - observe = function observe(element, event, handler) { - if (element.attachEvent) { - element.attachEvent('on' + event, handler); - } else { - element.addEventListener(event, handler, false); - } - }, - _unObserve = function _unObserve(element, event, handler) { - if (element.removeEventListener) { - element.removeEventListener(event, handler, false); - } else { - element.detachEvent('on' + event, handler); - } - }, - resize = function resize(newChar) { - var width, scrollHeight; - - if (!newChar) { - newChar = ""; - } else if (!/^[a-zA-Z \.,\\\/\|0-9]$/.test(newChar)) { - newChar = "."; - } - - if (text.textContent !== void 0) { - text.textContent = el.value + newChar; - } else { - text.data = el.value + newChar; //IE8 - } - span.style.fontSize = getComputedStyle(el).fontSize; - span.style.fontFamily = getComputedStyle(el).fontFamily; - span.style.whiteSpace = "pre"; - - body.appendChild(span); - width = span.clientWidth + 2; - body.removeChild(span); - - el.style.height = defaults.minHeight + 'px'; - - if (defaults.minWidth > width) { - el.style.width = defaults.minWidth + 'px'; - } else if (width > defaults.maxWidth) { - el.style.width = defaults.maxWidth + 'px'; - } else { - el.style.width = width + 'px'; - } - scrollHeight = el.scrollHeight ? el.scrollHeight - 1 : 0; - - if (defaults.minHeight > scrollHeight) { - el.style.height = defaults.minHeight + 'px'; - } else if (defaults.maxHeight < scrollHeight) { - el.style.height = defaults.maxHeight + 'px'; - el.style.overflowY = 'visible'; - } else { - el.style.height = scrollHeight + 'px'; - } - }, - delayedResize = function delayedResize() { - window.setTimeout(resize, 0); - }, - extendDefaults = function extendDefaults(config) { - - if (config && config.minHeight) { - if (config.minHeight == 'inherit') { - defaults.minHeight = el.clientHeight; - } else { - var minHeight = parseInt(config.minHeight); - if (!isNaN(minHeight)) { - defaults.minHeight = minHeight; - } - } - } - - if (config && config.maxHeight) { - if (config.maxHeight == 'inherit') { - defaults.maxHeight = el.clientHeight; - } else { - var maxHeight = parseInt(config.maxHeight); - if (!isNaN(maxHeight)) { - defaults.maxHeight = maxHeight; - } - } - } - - if (config && config.minWidth) { - if (config.minWidth == 'inherit') { - defaults.minWidth = el.clientWidth; - } else { - var minWidth = parseInt(config.minWidth); - if (!isNaN(minWidth)) { - defaults.minWidth = minWidth; - } - } - } - - if (config && config.maxWidth) { - if (config.maxWidth == 'inherit') { - defaults.maxWidth = el.clientWidth; - } else { - var maxWidth = parseInt(config.maxWidth); - if (!isNaN(maxWidth)) { - defaults.maxWidth = maxWidth; - } - } - } - - if (!span.firstChild) { - span.className = "autoResize"; - span.style.display = 'inline-block'; - span.appendChild(text); - } - }, - _init = function _init(el_, config, doObserve) { - el = el_; - extendDefaults(config); - - if (el.nodeName == 'TEXTAREA') { - - el.style.resize = 'none'; - el.style.overflowY = ''; - el.style.height = defaults.minHeight + 'px'; - el.style.minWidth = defaults.minWidth + 'px'; - el.style.maxWidth = defaults.maxWidth + 'px'; - el.style.overflowY = 'hidden'; - } - - if (doObserve) { - observe(el, 'change', resize); - observe(el, 'cut', delayedResize); - observe(el, 'paste', delayedResize); - observe(el, 'drop', delayedResize); - observe(el, 'keydown', delayedResize); - observe(el, 'focus', resize); - } - - resize(); - }; - - function getComputedStyle(element) { - return element.currentStyle || document.defaultView.getComputedStyle(element); - } - - return { - init: function init(el_, config, doObserve) { - _init(el_, config, doObserve); - }, - unObserve: function unObserve() { - _unObserve(el, 'change', resize); - _unObserve(el, 'cut', delayedResize); - _unObserve(el, 'paste', delayedResize); - _unObserve(el, 'drop', delayedResize); - _unObserve(el, 'keydown', delayedResize); - _unObserve(el, 'focus', resize); - }, - resize: resize - }; -} - -if (true) { - module.exports = autoResize; -} - -/***/ }), -/* 184 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _element = __webpack_require__(0); - -var _base = __webpack_require__(28); - -var _base2 = _interopRequireDefault(_base); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * A overlay that renders ALL available rows & columns positioned on top of the original Walkontable instance and all other overlays. - * Used for debugging purposes to see if the other overlays (that render only part of the rows & columns) are positioned correctly - * - * @class DebugOverlay - */ -var DebugOverlay = function (_Overlay) { - _inherits(DebugOverlay, _Overlay); - - /** - * @param {Walkontable} wotInstance - */ - function DebugOverlay(wotInstance) { - _classCallCheck(this, DebugOverlay); - - var _this = _possibleConstructorReturn(this, (DebugOverlay.__proto__ || Object.getPrototypeOf(DebugOverlay)).call(this, wotInstance)); - - _this.clone = _this.makeClone(_base2.default.CLONE_DEBUG); - _this.clone.wtTable.holder.style.opacity = 0.4; - _this.clone.wtTable.holder.style.textShadow = '0 0 2px #ff0000'; - - (0, _element.addClass)(_this.clone.wtTable.holder.parentNode, 'wtDebugVisible'); - return _this; - } - - return DebugOverlay; -}(_base2.default); - -_base2.default.registerOverlay(_base2.default.CLONE_DEBUG, DebugOverlay); - -exports.default = DebugOverlay; - -/***/ }), -/* 185 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _base = __webpack_require__(28); - -var _base2 = _interopRequireDefault(_base); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * @class LeftOverlay - */ -var LeftOverlay = function (_Overlay) { - _inherits(LeftOverlay, _Overlay); - - /** - * @param {Walkontable} wotInstance - */ - function LeftOverlay(wotInstance) { - _classCallCheck(this, LeftOverlay); - - var _this = _possibleConstructorReturn(this, (LeftOverlay.__proto__ || Object.getPrototypeOf(LeftOverlay)).call(this, wotInstance)); - - _this.clone = _this.makeClone(_base2.default.CLONE_LEFT); - return _this; - } - - /** - * Checks if overlay should be fully rendered - * - * @returns {Boolean} - */ - - - _createClass(LeftOverlay, [{ - key: 'shouldBeRendered', - value: function shouldBeRendered() { - return !!(this.wot.getSetting('fixedColumnsLeft') || this.wot.getSetting('rowHeaders').length); - } - - /** - * Updates the left overlay position - */ - - }, { - key: 'resetFixedPosition', - value: function resetFixedPosition() { - if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) { - // removed from DOM - return; - } - var overlayRoot = this.clone.wtTable.holder.parentNode; - var headerPosition = 0; - var preventOverflow = this.wot.getSetting('preventOverflow'); - - if (this.trimmingContainer === window && (!preventOverflow || preventOverflow !== 'horizontal')) { - var box = this.wot.wtTable.hider.getBoundingClientRect(); - var left = Math.ceil(box.left); - var right = Math.ceil(box.right); - var finalLeft = void 0; - var finalTop = void 0; - - finalTop = this.wot.wtTable.hider.style.top; - finalTop = finalTop === '' ? 0 : finalTop; - - if (left < 0 && right - overlayRoot.offsetWidth > 0) { - finalLeft = -left; - } else { - finalLeft = 0; - } - headerPosition = finalLeft; - finalLeft += 'px'; - - (0, _element.setOverlayPosition)(overlayRoot, finalLeft, finalTop); - } else { - headerPosition = this.getScrollPosition(); - (0, _element.resetCssTransform)(overlayRoot); - } - this.adjustHeaderBordersPosition(headerPosition); - - this.adjustElementsSize(); - } - - /** - * Sets the main overlay's horizontal scroll position - * - * @param {Number} pos - */ - - }, { - key: 'setScrollPosition', - value: function setScrollPosition(pos) { - if (this.mainTableScrollableElement === window) { - window.scrollTo(pos, (0, _element.getWindowScrollTop)()); - } else { - this.mainTableScrollableElement.scrollLeft = pos; - } - } - - /** - * Triggers onScroll hook callback - */ - - }, { - key: 'onScroll', - value: function onScroll() { - this.wot.getSetting('onScrollVertically'); - } - - /** - * Calculates total sum cells width - * - * @param {Number} from Column index which calculates started from - * @param {Number} to Column index where calculation is finished - * @returns {Number} Width sum - */ - - }, { - key: 'sumCellSizes', - value: function sumCellSizes(from, to) { - var sum = 0; - var defaultColumnWidth = this.wot.wtSettings.defaultColumnWidth; - - while (from < to) { - sum += this.wot.wtTable.getStretchedColumnWidth(from) || defaultColumnWidth; - from++; - } - - return sum; - } - - /** - * Adjust overlay root element, childs and master table element sizes (width, height). - * - * @param {Boolean} [force=false] - */ - - }, { - key: 'adjustElementsSize', - value: function adjustElementsSize() { - var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - this.updateTrimmingContainer(); - - if (this.needFullRender || force) { - this.adjustRootElementSize(); - this.adjustRootChildrenSize(); - - if (!force) { - this.areElementSizesAdjusted = true; - } - } - } - - /** - * Adjust overlay root element size (width and height). - */ - - }, { - key: 'adjustRootElementSize', - value: function adjustRootElementSize() { - var masterHolder = this.wot.wtTable.holder; - var scrollbarHeight = masterHolder.clientHeight === masterHolder.offsetHeight ? 0 : (0, _element.getScrollbarWidth)(); - var overlayRoot = this.clone.wtTable.holder.parentNode; - var overlayRootStyle = overlayRoot.style; - var preventOverflow = this.wot.getSetting('preventOverflow'); - var tableWidth = void 0; - - if (this.trimmingContainer !== window || preventOverflow === 'vertical') { - var height = this.wot.wtViewport.getWorkspaceHeight() - scrollbarHeight; - - height = Math.min(height, (0, _element.innerHeight)(this.wot.wtTable.wtRootElement)); - - overlayRootStyle.height = height + 'px'; - } else { - overlayRootStyle.height = ''; - } - - this.clone.wtTable.holder.style.height = overlayRootStyle.height; - - tableWidth = (0, _element.outerWidth)(this.clone.wtTable.TABLE); - overlayRootStyle.width = (tableWidth === 0 ? tableWidth : tableWidth + 4) + 'px'; - } - - /** - * Adjust overlay root childs size - */ - - }, { - key: 'adjustRootChildrenSize', - value: function adjustRootChildrenSize() { - var scrollbarWidth = (0, _element.getScrollbarWidth)(); - - this.clone.wtTable.hider.style.height = this.hider.style.height; - this.clone.wtTable.holder.style.height = this.clone.wtTable.holder.parentNode.style.height; - - if (scrollbarWidth === 0) { - scrollbarWidth = 30; - } - this.clone.wtTable.holder.style.width = parseInt(this.clone.wtTable.holder.parentNode.style.width, 10) + scrollbarWidth + 'px'; - } - - /** - * Adjust the overlay dimensions and position - */ - - }, { - key: 'applyToDOM', - value: function applyToDOM() { - var total = this.wot.getSetting('totalColumns'); - - if (!this.areElementSizesAdjusted) { - this.adjustElementsSize(); - } - if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') { - this.spreader.style.left = this.wot.wtViewport.columnsRenderCalculator.startPosition + 'px'; - } else if (total === 0) { - this.spreader.style.left = '0'; - } else { - throw new Error('Incorrect value of the columnsRenderCalculator'); - } - this.spreader.style.right = ''; - - if (this.needFullRender) { - this.syncOverlayOffset(); - } - } - - /** - * Synchronize calculated top position to an element - */ - - }, { - key: 'syncOverlayOffset', - value: function syncOverlayOffset() { - if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') { - this.clone.wtTable.spreader.style.top = this.wot.wtViewport.rowsRenderCalculator.startPosition + 'px'; - } else { - this.clone.wtTable.spreader.style.top = ''; - } - } - - /** - * Scrolls horizontally to a column at the left edge of the viewport - * - * @param sourceCol {Number} Column index which you want to scroll to - * @param [beyondRendered=false] {Boolean} if `true`, scrolls according to the bottom edge (top edge is by default) - */ - - }, { - key: 'scrollTo', - value: function scrollTo(sourceCol, beyondRendered) { - var newX = this.getTableParentOffset(); - var sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot; - var mainHolder = sourceInstance.wtTable.holder; - var scrollbarCompensation = 0; - - if (beyondRendered && mainHolder.offsetWidth !== mainHolder.clientWidth) { - scrollbarCompensation = (0, _element.getScrollbarWidth)(); - } - if (beyondRendered) { - newX += this.sumCellSizes(0, sourceCol + 1); - newX -= this.wot.wtViewport.getViewportWidth(); - } else { - newX += this.sumCellSizes(this.wot.getSetting('fixedColumnsLeft'), sourceCol); - } - newX += scrollbarCompensation; - - this.setScrollPosition(newX); - } - - /** - * Gets table parent left position - * - * @returns {Number} - */ - - }, { - key: 'getTableParentOffset', - value: function getTableParentOffset() { - var preventOverflow = this.wot.getSetting('preventOverflow'); - var offset = 0; - - if (!preventOverflow && this.trimmingContainer === window) { - offset = this.wot.wtTable.holderOffset.left; - } - - return offset; - } - - /** - * Gets the main overlay's horizontal scroll position - * - * @returns {Number} Main table's vertical scroll position - */ - - }, { - key: 'getScrollPosition', - value: function getScrollPosition() { - return (0, _element.getScrollLeft)(this.mainTableScrollableElement); - } - - /** - * Adds css classes to hide the header border's header (cell-selection border hiding issue) - * - * @param {Number} position Header X position if trimming container is window or scroll top if not - */ - - }, { - key: 'adjustHeaderBordersPosition', - value: function adjustHeaderBordersPosition(position) { - var masterParent = this.wot.wtTable.holder.parentNode; - var rowHeaders = this.wot.getSetting('rowHeaders'); - var fixedColumnsLeft = this.wot.getSetting('fixedColumnsLeft'); - var totalRows = this.wot.getSetting('totalRows'); - - if (totalRows) { - (0, _element.removeClass)(masterParent, 'emptyRows'); - } else { - (0, _element.addClass)(masterParent, 'emptyRows'); - } - - if (fixedColumnsLeft && !rowHeaders.length) { - (0, _element.addClass)(masterParent, 'innerBorderLeft'); - } else if (!fixedColumnsLeft && rowHeaders.length) { - var previousState = (0, _element.hasClass)(masterParent, 'innerBorderLeft'); - - if (position) { - (0, _element.addClass)(masterParent, 'innerBorderLeft'); - } else { - (0, _element.removeClass)(masterParent, 'innerBorderLeft'); - } - if (!previousState && position || previousState && !position) { - this.wot.wtOverlays.adjustElementsSize(); - } - } - } - }]); - - return LeftOverlay; -}(_base2.default); - -_base2.default.registerOverlay(_base2.default.CLONE_LEFT, LeftOverlay); - -exports.default = LeftOverlay; - -/***/ }), -/* 186 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _base = __webpack_require__(28); - -var _base2 = _interopRequireDefault(_base); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * @class TopOverlay - */ -var TopOverlay = function (_Overlay) { - _inherits(TopOverlay, _Overlay); - - /** - * @param {Walkontable} wotInstance - */ - function TopOverlay(wotInstance) { - _classCallCheck(this, TopOverlay); - - var _this = _possibleConstructorReturn(this, (TopOverlay.__proto__ || Object.getPrototypeOf(TopOverlay)).call(this, wotInstance)); - - _this.clone = _this.makeClone(_base2.default.CLONE_TOP); - return _this; - } - - /** - * Checks if overlay should be fully rendered - * - * @returns {Boolean} - */ - - - _createClass(TopOverlay, [{ - key: 'shouldBeRendered', - value: function shouldBeRendered() { - return !!(this.wot.getSetting('fixedRowsTop') || this.wot.getSetting('columnHeaders').length); - } - - /** - * Updates the top overlay position - */ - - }, { - key: 'resetFixedPosition', - value: function resetFixedPosition() { - if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) { - // removed from DOM - return; - } - var overlayRoot = this.clone.wtTable.holder.parentNode; - var headerPosition = 0; - var preventOverflow = this.wot.getSetting('preventOverflow'); - - if (this.trimmingContainer === window && (!preventOverflow || preventOverflow !== 'vertical')) { - var box = this.wot.wtTable.hider.getBoundingClientRect(); - var top = Math.ceil(box.top); - var bottom = Math.ceil(box.bottom); - var finalLeft = void 0; - var finalTop = void 0; - - finalLeft = this.wot.wtTable.hider.style.left; - finalLeft = finalLeft === '' ? 0 : finalLeft; - - if (top < 0 && bottom - overlayRoot.offsetHeight > 0) { - finalTop = -top; - } else { - finalTop = 0; - } - headerPosition = finalTop; - finalTop += 'px'; - - (0, _element.setOverlayPosition)(overlayRoot, finalLeft, finalTop); - } else { - headerPosition = this.getScrollPosition(); - (0, _element.resetCssTransform)(overlayRoot); - } - - this.adjustHeaderBordersPosition(headerPosition); - - this.adjustElementsSize(); - } - - /** - * Sets the main overlay's vertical scroll position - * - * @param {Number} pos - */ - - }, { - key: 'setScrollPosition', - value: function setScrollPosition(pos) { - if (this.mainTableScrollableElement === window) { - window.scrollTo((0, _element.getWindowScrollLeft)(), pos); - } else { - this.mainTableScrollableElement.scrollTop = pos; - } - } - - /** - * Triggers onScroll hook callback - */ - - }, { - key: 'onScroll', - value: function onScroll() { - this.wot.getSetting('onScrollHorizontally'); - } - - /** - * Calculates total sum cells height - * - * @param {Number} from Row index which calculates started from - * @param {Number} to Row index where calculation is finished - * @returns {Number} Height sum - */ - - }, { - key: 'sumCellSizes', - value: function sumCellSizes(from, to) { - var sum = 0; - var defaultRowHeight = this.wot.wtSettings.settings.defaultRowHeight; - - while (from < to) { - var height = this.wot.wtTable.getRowHeight(from); - - sum += height === void 0 ? defaultRowHeight : height; - from++; - } - - return sum; - } - - /** - * Adjust overlay root element, childs and master table element sizes (width, height). - * - * @param {Boolean} [force=false] - */ - - }, { - key: 'adjustElementsSize', - value: function adjustElementsSize() { - var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - this.updateTrimmingContainer(); - - if (this.needFullRender || force) { - this.adjustRootElementSize(); - this.adjustRootChildrenSize(); - - if (!force) { - this.areElementSizesAdjusted = true; - } - } - } - - /** - * Adjust overlay root element size (width and height). - */ - - }, { - key: 'adjustRootElementSize', - value: function adjustRootElementSize() { - var masterHolder = this.wot.wtTable.holder; - var scrollbarWidth = masterHolder.clientWidth === masterHolder.offsetWidth ? 0 : (0, _element.getScrollbarWidth)(); - var overlayRoot = this.clone.wtTable.holder.parentNode; - var overlayRootStyle = overlayRoot.style; - var preventOverflow = this.wot.getSetting('preventOverflow'); - var tableHeight = void 0; - - if (this.trimmingContainer !== window || preventOverflow === 'horizontal') { - var width = this.wot.wtViewport.getWorkspaceWidth() - scrollbarWidth; - - width = Math.min(width, (0, _element.innerWidth)(this.wot.wtTable.wtRootElement)); - - overlayRootStyle.width = width + 'px'; - } else { - overlayRootStyle.width = ''; - } - - this.clone.wtTable.holder.style.width = overlayRootStyle.width; - - tableHeight = (0, _element.outerHeight)(this.clone.wtTable.TABLE); - overlayRootStyle.height = (tableHeight === 0 ? tableHeight : tableHeight + 4) + 'px'; - } - - /** - * Adjust overlay root childs size - */ - - }, { - key: 'adjustRootChildrenSize', - value: function adjustRootChildrenSize() { - var scrollbarWidth = (0, _element.getScrollbarWidth)(); - - this.clone.wtTable.hider.style.width = this.hider.style.width; - this.clone.wtTable.holder.style.width = this.clone.wtTable.holder.parentNode.style.width; - - if (scrollbarWidth === 0) { - scrollbarWidth = 30; - } - this.clone.wtTable.holder.style.height = parseInt(this.clone.wtTable.holder.parentNode.style.height, 10) + scrollbarWidth + 'px'; - } - - /** - * Adjust the overlay dimensions and position - */ - - }, { - key: 'applyToDOM', - value: function applyToDOM() { - var total = this.wot.getSetting('totalRows'); - - if (!this.areElementSizesAdjusted) { - this.adjustElementsSize(); - } - if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') { - this.spreader.style.top = this.wot.wtViewport.rowsRenderCalculator.startPosition + 'px'; - } else if (total === 0) { - // can happen if there are 0 rows - this.spreader.style.top = '0'; - } else { - throw new Error('Incorrect value of the rowsRenderCalculator'); - } - this.spreader.style.bottom = ''; - - if (this.needFullRender) { - this.syncOverlayOffset(); - } - } - - /** - * Synchronize calculated left position to an element - */ - - }, { - key: 'syncOverlayOffset', - value: function syncOverlayOffset() { - if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') { - this.clone.wtTable.spreader.style.left = this.wot.wtViewport.columnsRenderCalculator.startPosition + 'px'; - } else { - this.clone.wtTable.spreader.style.left = ''; - } - } - - /** - * Scrolls vertically to a row - * - * @param sourceRow {Number} Row index which you want to scroll to - * @param [bottomEdge=false] {Boolean} if `true`, scrolls according to the bottom edge (top edge is by default) - */ - - }, { - key: 'scrollTo', - value: function scrollTo(sourceRow, bottomEdge) { - var newY = this.getTableParentOffset(); - var sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot; - var mainHolder = sourceInstance.wtTable.holder; - var scrollbarCompensation = 0; - - if (bottomEdge && mainHolder.offsetHeight !== mainHolder.clientHeight) { - scrollbarCompensation = (0, _element.getScrollbarWidth)(); - } - - if (bottomEdge) { - var fixedRowsBottom = this.wot.getSetting('fixedRowsBottom'); - var fixedRowsTop = this.wot.getSetting('fixedRowsTop'); - var totalRows = this.wot.getSetting('totalRows'); - - newY += this.sumCellSizes(0, sourceRow + 1); - newY -= this.wot.wtViewport.getViewportHeight() - this.sumCellSizes(totalRows - fixedRowsBottom, totalRows); - // Fix 1 pixel offset when cell is selected - newY += 1; - } else { - newY += this.sumCellSizes(this.wot.getSetting('fixedRowsTop'), sourceRow); - } - newY += scrollbarCompensation; - - this.setScrollPosition(newY); - } - - /** - * Gets table parent top position - * - * @returns {Number} - */ - - }, { - key: 'getTableParentOffset', - value: function getTableParentOffset() { - if (this.mainTableScrollableElement === window) { - return this.wot.wtTable.holderOffset.top; - } - return 0; - } - - /** - * Gets the main overlay's vertical scroll position - * - * @returns {Number} Main table's vertical scroll position - */ - - }, { - key: 'getScrollPosition', - value: function getScrollPosition() { - return (0, _element.getScrollTop)(this.mainTableScrollableElement); - } - - /** - * Redraw borders of selection - * - * @param {WalkontableSelection} selection Selection for redraw - */ - - }, { - key: 'redrawSelectionBorders', - value: function redrawSelectionBorders(selection) { - if (selection && selection.cellRange) { - var border = selection.getBorder(this.wot); - - if (border) { - var corners = selection.getCorners(); - border.disappear(); - border.appear(corners); - } - } - } - - /** - * Redrawing borders of all selections - */ - - }, { - key: 'redrawAllSelectionsBorders', - value: function redrawAllSelectionsBorders() { - var selections = this.wot.selections; - - this.redrawSelectionBorders(selections.current); - this.redrawSelectionBorders(selections.area); - this.redrawSelectionBorders(selections.fill); - this.wot.wtTable.wot.wtOverlays.leftOverlay.refresh(); - } - - /** - * Adds css classes to hide the header border's header (cell-selection border hiding issue) - * - * @param {Number} position Header Y position if trimming container is window or scroll top if not - */ - - }, { - key: 'adjustHeaderBordersPosition', - value: function adjustHeaderBordersPosition(position) { - var masterParent = this.wot.wtTable.holder.parentNode; - var totalColumns = this.wot.getSetting('totalColumns'); - - if (totalColumns) { - (0, _element.removeClass)(masterParent, 'emptyColumns'); - } else { - (0, _element.addClass)(masterParent, 'emptyColumns'); - } - - if (this.wot.getSetting('fixedRowsTop') === 0 && this.wot.getSetting('columnHeaders').length > 0) { - var previousState = (0, _element.hasClass)(masterParent, 'innerBorderTop'); - - if (position || this.wot.getSetting('totalRows') === 0) { - (0, _element.addClass)(masterParent, 'innerBorderTop'); - } else { - (0, _element.removeClass)(masterParent, 'innerBorderTop'); - } - - if (!previousState && position || previousState && !position) { - this.wot.wtOverlays.adjustElementsSize(); - - // cell borders should be positioned once again, - // because we added / removed 1px border from table header - this.redrawAllSelectionsBorders(); - } - } - - // nasty workaround for double border in the header, TODO: find a pure-css solution - if (this.wot.getSetting('rowHeaders').length === 0) { - var secondHeaderCell = this.clone.wtTable.THEAD.querySelectorAll('th:nth-of-type(2)'); - - if (secondHeaderCell) { - for (var i = 0; i < secondHeaderCell.length; i++) { - secondHeaderCell[i].style['border-left-width'] = 0; - } - } - } - } - }]); - - return TopOverlay; -}(_base2.default); - -_base2.default.registerOverlay(_base2.default.CLONE_TOP, TopOverlay); - -exports.default = TopOverlay; - -/***/ }), -/* 187 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _base = __webpack_require__(28); - -var _base2 = _interopRequireDefault(_base); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * @class TopLeftCornerOverlay - */ -var TopLeftCornerOverlay = function (_Overlay) { - _inherits(TopLeftCornerOverlay, _Overlay); - - /** - * @param {Walkontable} wotInstance - */ - function TopLeftCornerOverlay(wotInstance) { - _classCallCheck(this, TopLeftCornerOverlay); - - var _this = _possibleConstructorReturn(this, (TopLeftCornerOverlay.__proto__ || Object.getPrototypeOf(TopLeftCornerOverlay)).call(this, wotInstance)); - - _this.clone = _this.makeClone(_base2.default.CLONE_TOP_LEFT_CORNER); - return _this; - } - - /** - * Checks if overlay should be fully rendered - * - * @returns {Boolean} - */ - - - _createClass(TopLeftCornerOverlay, [{ - key: 'shouldBeRendered', - value: function shouldBeRendered() { - return !!((this.wot.getSetting('fixedRowsTop') || this.wot.getSetting('columnHeaders').length) && (this.wot.getSetting('fixedColumnsLeft') || this.wot.getSetting('rowHeaders').length)); - } - - /** - * Updates the corner overlay position - */ - - }, { - key: 'resetFixedPosition', - value: function resetFixedPosition() { - this.updateTrimmingContainer(); - - if (!this.wot.wtTable.holder.parentNode) { - // removed from DOM - return; - } - var overlayRoot = this.clone.wtTable.holder.parentNode; - var tableHeight = (0, _element.outerHeight)(this.clone.wtTable.TABLE); - var tableWidth = (0, _element.outerWidth)(this.clone.wtTable.TABLE); - var preventOverflow = this.wot.getSetting('preventOverflow'); - - if (this.trimmingContainer === window) { - var box = this.wot.wtTable.hider.getBoundingClientRect(); - var top = Math.ceil(box.top); - var left = Math.ceil(box.left); - var bottom = Math.ceil(box.bottom); - var right = Math.ceil(box.right); - var finalLeft = '0'; - var finalTop = '0'; - - if (!preventOverflow || preventOverflow === 'vertical') { - if (left < 0 && right - overlayRoot.offsetWidth > 0) { - finalLeft = -left + 'px'; - } - } - - if (!preventOverflow || preventOverflow === 'horizontal') { - if (top < 0 && bottom - overlayRoot.offsetHeight > 0) { - finalTop = -top + 'px'; - } - } - (0, _element.setOverlayPosition)(overlayRoot, finalLeft, finalTop); - } else { - (0, _element.resetCssTransform)(overlayRoot); - } - overlayRoot.style.height = (tableHeight === 0 ? tableHeight : tableHeight + 4) + 'px'; - overlayRoot.style.width = (tableWidth === 0 ? tableWidth : tableWidth + 4) + 'px'; - } - }]); - - return TopLeftCornerOverlay; -}(_base2.default); - -_base2.default.registerOverlay(_base2.default.CLONE_TOP_LEFT_CORNER, TopLeftCornerOverlay); - -exports.default = TopLeftCornerOverlay; - -/***/ }), -/* 188 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _border2 = __webpack_require__(135); - -var _border3 = _interopRequireDefault(_border2); - -var _coords = __webpack_require__(42); - -var _coords2 = _interopRequireDefault(_coords); - -var _range = __webpack_require__(68); - -var _range2 = _interopRequireDefault(_range); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class Selection - */ -var Selection = function () { - /** - * @param {Object} settings - * @param {CellRange} cellRange - */ - function Selection(settings, cellRange) { - _classCallCheck(this, Selection); - - this.settings = settings; - this.cellRange = cellRange || null; - this.instanceBorders = {}; - } - - /** - * Each Walkontable clone requires it's own border for every selection. This method creates and returns selection - * borders per instance - * - * @param {Walkontable} wotInstance - * @returns {Border} - */ - - - _createClass(Selection, [{ - key: 'getBorder', - value: function getBorder(wotInstance) { - if (this.instanceBorders[wotInstance.guid]) { - return this.instanceBorders[wotInstance.guid]; - } - - // where is this returned? - this.instanceBorders[wotInstance.guid] = new _border3.default(wotInstance, this.settings); - } - - /** - * Checks if selection is empty - * - * @returns {Boolean} - */ - - }, { - key: 'isEmpty', - value: function isEmpty() { - return this.cellRange === null; - } - - /** - * Adds a cell coords to the selection - * - * @param {CellCoords} coords - */ - - }, { - key: 'add', - value: function add(coords) { - if (this.isEmpty()) { - this.cellRange = new _range2.default(coords, coords, coords); - } else { - this.cellRange.expand(coords); - } - } - - /** - * If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean - * information about success - * - * @param {CellCoords} oldCoords - * @param {CellCoords} newCoords - * @returns {Boolean} - */ - - }, { - key: 'replace', - value: function replace(oldCoords, newCoords) { - if (!this.isEmpty()) { - if (this.cellRange.from.isEqual(oldCoords)) { - this.cellRange.from = newCoords; - - return true; - } - if (this.cellRange.to.isEqual(oldCoords)) { - this.cellRange.to = newCoords; - - return true; - } - } - - return false; - } - - /** - * Clears selection - */ - - }, { - key: 'clear', - value: function clear() { - this.cellRange = null; - } - - /** - * Returns the top left (TL) and bottom right (BR) selection coordinates - * - * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]` - */ - - }, { - key: 'getCorners', - value: function getCorners() { - var topLeft = this.cellRange.getTopLeftCorner(); - var bottomRight = this.cellRange.getBottomRightCorner(); - - return [topLeft.row, topLeft.col, bottomRight.row, bottomRight.col]; - } - - /** - * Adds class name to cell element at given coords - * - * @param {Walkontable} wotInstance Walkontable instance - * @param {Number} sourceRow Cell row coord - * @param {Number} sourceColumn Cell column coord - * @param {String} className Class name - */ - - }, { - key: 'addClassAtCoords', - value: function addClassAtCoords(wotInstance, sourceRow, sourceColumn, className) { - var TD = wotInstance.wtTable.getCell(new _coords2.default(sourceRow, sourceColumn)); - - if ((typeof TD === 'undefined' ? 'undefined' : _typeof(TD)) === 'object') { - (0, _element.addClass)(TD, className); - } - } - - /** - * @param wotInstance - */ - - }, { - key: 'draw', - value: function draw(wotInstance) { - if (this.isEmpty()) { - if (this.settings.border) { - var border = this.getBorder(wotInstance); - - if (border) { - border.disappear(); - } - } - - return; - } - var renderedRows = wotInstance.wtTable.getRenderedRowsCount(); - var renderedColumns = wotInstance.wtTable.getRenderedColumnsCount(); - var corners = this.getCorners(); - var sourceRow = void 0, - sourceCol = void 0, - TH = void 0; - - for (var column = 0; column < renderedColumns; column++) { - sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column); - - if (sourceCol >= corners[1] && sourceCol <= corners[3]) { - TH = wotInstance.wtTable.getColumnHeader(sourceCol); - - if (TH) { - var newClasses = []; - - if (this.settings.highlightHeaderClassName) { - newClasses.push(this.settings.highlightHeaderClassName); - } - - if (this.settings.highlightColumnClassName) { - newClasses.push(this.settings.highlightColumnClassName); - } - - (0, _element.addClass)(TH, newClasses); - } - } - } - - for (var row = 0; row < renderedRows; row++) { - sourceRow = wotInstance.wtTable.rowFilter.renderedToSource(row); - - if (sourceRow >= corners[0] && sourceRow <= corners[2]) { - TH = wotInstance.wtTable.getRowHeader(sourceRow); - - if (TH) { - var _newClasses = []; - - if (this.settings.highlightHeaderClassName) { - _newClasses.push(this.settings.highlightHeaderClassName); - } - - if (this.settings.highlightRowClassName) { - _newClasses.push(this.settings.highlightRowClassName); - } - - (0, _element.addClass)(TH, _newClasses); - } - } - - for (var _column = 0; _column < renderedColumns; _column++) { - sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(_column); - - if (sourceRow >= corners[0] && sourceRow <= corners[2] && sourceCol >= corners[1] && sourceCol <= corners[3]) { - // selected cell - if (this.settings.className) { - this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.className); - } - } else if (sourceRow >= corners[0] && sourceRow <= corners[2]) { - // selection is in this row - if (this.settings.highlightRowClassName) { - this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.highlightRowClassName); - } - } else if (sourceCol >= corners[1] && sourceCol <= corners[3]) { - // selection is in this column - if (this.settings.highlightColumnClassName) { - this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.highlightColumnClassName); - } - } - } - } - wotInstance.getSetting('onBeforeDrawBorders', corners, this.settings.className); - - if (this.settings.border) { - var _border = this.getBorder(wotInstance); - - if (_border) { - // warning! border.appear modifies corners! - _border.appear(corners); - } - } - } - }]); - - return Selection; -}(); - -exports.default = Selection; - -/***/ }), -/* 189 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _editors = __webpack_require__(14); - -var _renderers = __webpack_require__(9); - -var _validators = __webpack_require__(26); - -var CELL_TYPE = 'autocomplete'; - -exports.default = { - editor: (0, _editors.getEditor)(CELL_TYPE), - renderer: (0, _renderers.getRenderer)(CELL_TYPE), - validator: (0, _validators.getValidator)(CELL_TYPE) -}; - -/***/ }), -/* 190 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _editors = __webpack_require__(14); - -var _renderers = __webpack_require__(9); - -var CELL_TYPE = 'checkbox'; - -exports.default = { - editor: (0, _editors.getEditor)(CELL_TYPE), - renderer: (0, _renderers.getRenderer)(CELL_TYPE) -}; - -/***/ }), -/* 191 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _editors = __webpack_require__(14); - -var _renderers = __webpack_require__(9); - -var _validators = __webpack_require__(26); - -var CELL_TYPE = 'date'; - -exports.default = { - editor: (0, _editors.getEditor)(CELL_TYPE), - // displays small gray arrow on right side of the cell - renderer: (0, _renderers.getRenderer)('autocomplete'), - validator: (0, _validators.getValidator)(CELL_TYPE) -}; - -/***/ }), -/* 192 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _editors = __webpack_require__(14); - -var _renderers = __webpack_require__(9); - -var _validators = __webpack_require__(26); - -var CELL_TYPE = 'dropdown'; - -exports.default = { - editor: (0, _editors.getEditor)(CELL_TYPE), - // displays small gray arrow on right side of the cell - renderer: (0, _renderers.getRenderer)('autocomplete'), - validator: (0, _validators.getValidator)('autocomplete') -}; - -/***/ }), -/* 193 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _editors = __webpack_require__(14); - -var _renderers = __webpack_require__(9); - -var CELL_TYPE = 'handsontable'; - -exports.default = { - editor: (0, _editors.getEditor)(CELL_TYPE), - // displays small gray arrow on right side of the cell - renderer: (0, _renderers.getRenderer)('autocomplete') -}; - -/***/ }), -/* 194 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _editors = __webpack_require__(14); - -var _renderers = __webpack_require__(9); - -var _validators = __webpack_require__(26); - -var CELL_TYPE = 'numeric'; - -exports.default = { - editor: (0, _editors.getEditor)(CELL_TYPE), - renderer: (0, _renderers.getRenderer)(CELL_TYPE), - validator: (0, _validators.getValidator)(CELL_TYPE), - dataType: 'number' -}; - -/***/ }), -/* 195 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _editors = __webpack_require__(14); - -var _renderers = __webpack_require__(9); - -var _validators = __webpack_require__(26); - -var CELL_TYPE = 'password'; - -exports.default = { - editor: (0, _editors.getEditor)(CELL_TYPE), - renderer: (0, _renderers.getRenderer)(CELL_TYPE), - copyable: false -}; - -/***/ }), -/* 196 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _browser = __webpack_require__(25); - -var _editors = __webpack_require__(14); - -var _renderers = __webpack_require__(9); - -var CELL_TYPE = 'text'; - -exports.default = { - editor: (0, _browser.isMobileBrowser)() ? (0, _editors.getEditor)('mobile') : (0, _editors.getEditor)(CELL_TYPE), - renderer: (0, _renderers.getRenderer)(CELL_TYPE) -}; - -/***/ }), -/* 197 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _editors = __webpack_require__(14); - -var _renderers = __webpack_require__(9); - -var _validators = __webpack_require__(26); - -var CELL_TYPE = 'time'; - -exports.default = { - editor: (0, _editors.getEditor)('text'), - // displays small gray arrow on right side of the cell - renderer: (0, _renderers.getRenderer)('text'), - validator: (0, _validators.getValidator)(CELL_TYPE) -}; - -/***/ }), -/* 198 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _SheetClip = __webpack_require__(133); - -var _SheetClip2 = _interopRequireDefault(_SheetClip); - -var _data = __webpack_require__(64); - -var _setting = __webpack_require__(65); - -var _object = __webpack_require__(1); - -var _array = __webpack_require__(2); - -var _interval = __webpack_require__(271); - -var _interval2 = _interopRequireDefault(_interval); - -var _number = __webpack_require__(6); - -var _multiMap = __webpack_require__(209); - -var _multiMap2 = _interopRequireDefault(_multiMap); - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Utility class that gets and saves data from/to the data source using mapping of columns numbers to object property names - * @todo refactor arguments of methods getRange, getText to be numbers (not objects) - * @todo remove priv, GridSettings from object constructor - * - * @param {Object} instance Instance of Handsontable - * @param {*} priv - * @param {*} GridSettings Grid settings - * @util - * @class DataMap - */ -function DataMap(instance, priv, GridSettings) { - var _this = this; - - this.instance = instance; - this.priv = priv; - this.GridSettings = GridSettings; - this.dataSource = this.instance.getSettings().data; - this.cachedLength = null; - this.skipCache = false; - this.latestSourceRowsCount = 0; - - if (this.dataSource && this.dataSource[0]) { - this.duckSchema = this.recursiveDuckSchema(this.dataSource[0]); - } else { - this.duckSchema = {}; - } - this.createMap(); - this.interval = _interval2.default.create(function () { - return _this.clearLengthCache(); - }, '15fps'); - - this.instance.addHook('skipLengthCache', function (delay) { - return _this.onSkipLengthCache(delay); - }); - this.onSkipLengthCache(500); -} - -DataMap.prototype.DESTINATION_RENDERER = 1; -DataMap.prototype.DESTINATION_CLIPBOARD_GENERATOR = 2; - -/** - * @param {Object|Array} object - * @returns {Object|Array} - */ -DataMap.prototype.recursiveDuckSchema = function (object) { - return (0, _object.duckSchema)(object); -}; - -/** - * @param {Object} schema - * @param {Number} lastCol - * @param {Number} parent - * @returns {Number} - */ -DataMap.prototype.recursiveDuckColumns = function (schema, lastCol, parent) { - var prop, i; - if (typeof lastCol === 'undefined') { - lastCol = 0; - parent = ''; - } - if ((typeof schema === 'undefined' ? 'undefined' : _typeof(schema)) === 'object' && !Array.isArray(schema)) { - for (i in schema) { - if ((0, _object.hasOwnProperty)(schema, i)) { - if (schema[i] === null) { - prop = parent + i; - this.colToPropCache.push(prop); - this.propToColCache.set(prop, lastCol); - - lastCol++; - } else { - lastCol = this.recursiveDuckColumns(schema[i], lastCol, i + '.'); - } - } - } - } - - return lastCol; -}; - -DataMap.prototype.createMap = function () { - var i = void 0; - var schema = this.getSchema(); - - if (typeof schema === 'undefined') { - throw new Error('trying to create `columns` definition but you didn\'t provide `schema` nor `data`'); - } - - this.colToPropCache = []; - this.propToColCache = new _multiMap2.default(); - - var columns = this.instance.getSettings().columns; - - if (columns) { - var maxCols = this.instance.getSettings().maxCols; - var columnsLen = Math.min(maxCols, columns.length); - var filteredIndex = 0; - var columnsAsFunc = false; - var schemaLen = (0, _object.deepObjectSize)(schema); - - if (typeof columns === 'function') { - columnsLen = schemaLen > 0 ? schemaLen : this.instance.countSourceCols(); - columnsAsFunc = true; - } - - for (i = 0; i < columnsLen; i++) { - var column = columnsAsFunc ? columns(i) : columns[i]; - - if ((0, _object.isObject)(column)) { - if (typeof column.data !== 'undefined') { - var index = columnsAsFunc ? filteredIndex : i; - this.colToPropCache[index] = column.data; - this.propToColCache.set(column.data, index); - } - - filteredIndex++; - } - } - } else { - this.recursiveDuckColumns(schema); - } -}; - -/** - * Returns property name that corresponds with the given column index. - * - * @param {Number} col Visual column index. - * @returns {Number} Physical column index. - */ -DataMap.prototype.colToProp = function (col) { - col = this.instance.runHooks('modifyCol', col); - - if (!isNaN(col) && this.colToPropCache && typeof this.colToPropCache[col] !== 'undefined') { - return this.colToPropCache[col]; - } - - return col; -}; - -/** - * @param {Object} prop - * @fires Hooks#modifyCol - * @returns {*} - */ -DataMap.prototype.propToCol = function (prop) { - var col; - - if (typeof this.propToColCache.get(prop) === 'undefined') { - col = prop; - } else { - col = this.propToColCache.get(prop); - } - col = this.instance.runHooks('unmodifyCol', col); - - return col; -}; - -/** - * @returns {Object} - */ -DataMap.prototype.getSchema = function () { - var schema = this.instance.getSettings().dataSchema; - - if (schema) { - if (typeof schema === 'function') { - return schema(); - } - return schema; - } - - return this.duckSchema; -}; - -/** - * Creates row at the bottom of the data array. - * - * @param {Number} [index] Physical index of the row before which the new row will be inserted. - * @param {Number} [amount] An amount of rows to add. - * @param {String} [source] Source of method call. - * @fires Hooks#afterCreateRow - * @returns {Number} Returns number of created rows. - */ -DataMap.prototype.createRow = function (index, amount, source) { - var row, - colCount = this.instance.countCols(), - numberOfCreatedRows = 0, - currentIndex; - - if (!amount) { - amount = 1; - } - - if (typeof index !== 'number' || index >= this.instance.countSourceRows()) { - index = this.instance.countSourceRows(); - } - this.instance.runHooks('beforeCreateRow', index, amount, source); - - currentIndex = index; - var maxRows = this.instance.getSettings().maxRows; - - while (numberOfCreatedRows < amount && this.instance.countSourceRows() < maxRows) { - if (this.instance.dataType === 'array') { - if (this.instance.getSettings().dataSchema) { - // Clone template array - row = (0, _object.deepClone)(this.getSchema()); - } else { - row = []; - /* eslint-disable no-loop-func */ - (0, _number.rangeEach)(colCount - 1, function () { - return row.push(null); - }); - } - } else if (this.instance.dataType === 'function') { - row = this.instance.getSettings().dataSchema(index); - } else { - row = {}; - (0, _object.deepExtend)(row, this.getSchema()); - } - - if (index === this.instance.countSourceRows()) { - this.dataSource.push(row); - } else { - this.spliceData(index, 0, row); - } - - numberOfCreatedRows++; - currentIndex++; - } - - this.instance.runHooks('afterCreateRow', index, numberOfCreatedRows, source); - this.instance.forceFullRender = true; // used when data was changed - - return numberOfCreatedRows; -}; - -/** - * Creates col at the right of the data array. - * - * @param {Number} [index] Visual index of the column before which the new column will be inserted - * @param {Number} [amount] An amount of columns to add. - * @param {String} [source] Source of method call. - * @fires Hooks#afterCreateCol - * @returns {Number} Returns number of created columns - */ -DataMap.prototype.createCol = function (index, amount, source) { - if (!this.instance.isColumnModificationAllowed()) { - throw new Error('Cannot create new column. When data source in an object, ' + 'you can only have as much columns as defined in first data row, data schema or in the \'columns\' setting.' + 'If you want to be able to add new columns, you have to use array datasource.'); - } - var rlen = this.instance.countSourceRows(), - data = this.dataSource, - constructor, - numberOfCreatedCols = 0, - currentIndex; - - if (!amount) { - amount = 1; - } - - if (typeof index !== 'number' || index >= this.instance.countCols()) { - index = this.instance.countCols(); - } - this.instance.runHooks('beforeCreateCol', index, amount, source); - - currentIndex = index; - - var maxCols = this.instance.getSettings().maxCols; - while (numberOfCreatedCols < amount && this.instance.countCols() < maxCols) { - constructor = (0, _setting.columnFactory)(this.GridSettings, this.priv.columnsSettingConflicts); - - if (typeof index !== 'number' || index >= this.instance.countCols()) { - if (rlen > 0) { - for (var r = 0; r < rlen; r++) { - if (typeof data[r] === 'undefined') { - data[r] = []; - } - data[r].push(null); - } - } else { - data.push([null]); - } - // Add new column constructor - this.priv.columnSettings.push(constructor); - } else { - for (var _r = 0; _r < rlen; _r++) { - data[_r].splice(currentIndex, 0, null); - } - // Add new column constructor at given index - this.priv.columnSettings.splice(currentIndex, 0, constructor); - } - - numberOfCreatedCols++; - currentIndex++; - } - - this.instance.runHooks('afterCreateCol', index, numberOfCreatedCols, source); - this.instance.forceFullRender = true; // used when data was changed - - return numberOfCreatedCols; -}; - -/** - * Removes row from the data array. - * - * @param {Number} [index] Visual index of the row to be removed. If not provided, the last row will be removed - * @param {Number} [amount] Amount of the rows to be removed. If not provided, one row will be removed - * @param {String} [source] Source of method call. - * @fires Hooks#beforeRemoveRow - * @fires Hooks#afterRemoveRow - */ -DataMap.prototype.removeRow = function (index, amount, source) { - if (!amount) { - amount = 1; - } - if (typeof index !== 'number') { - index = -amount; - } - - amount = this.instance.runHooks('modifyRemovedAmount', amount, index); - - index = (this.instance.countSourceRows() + index) % this.instance.countSourceRows(); - - var logicRows = this.visualRowsToPhysical(index, amount); - var actionWasNotCancelled = this.instance.runHooks('beforeRemoveRow', index, amount, logicRows, source); - - if (actionWasNotCancelled === false) { - return; - } - - var data = this.dataSource; - var newData = void 0; - - newData = this.filterData(index, amount); - - if (newData) { - data.length = 0; - Array.prototype.push.apply(data, newData); - } - - this.instance.runHooks('afterRemoveRow', index, amount, logicRows, source); - - this.instance.forceFullRender = true; // used when data was changed -}; - -/** - * Removes column from the data array. - * - * @param {Number} [index] Visual index of the column to be removed. If not provided, the last column will be removed - * @param {Number} [amount] Amount of the columns to be removed. If not provided, one column will be removed - * @param {String} [source] Source of method call. - * @fires Hooks#beforeRemoveCol - * @fires Hooks#afterRemoveCol - */ -DataMap.prototype.removeCol = function (index, amount, source) { - if (this.instance.dataType === 'object' || this.instance.getSettings().columns) { - throw new Error('cannot remove column with object data source or columns option specified'); - } - if (!amount) { - amount = 1; - } - if (typeof index !== 'number') { - index = -amount; - } - - index = (this.instance.countCols() + index) % this.instance.countCols(); - - var logicColumns = this.visualColumnsToPhysical(index, amount); - var descendingLogicColumns = logicColumns.slice(0).sort(function (a, b) { - return b - a; - }); - var actionWasNotCancelled = this.instance.runHooks('beforeRemoveCol', index, amount, logicColumns, source); - - if (actionWasNotCancelled === false) { - return; - } - - var isTableUniform = true; - var removedColumnsCount = descendingLogicColumns.length; - var data = this.dataSource; - - for (var c = 0; c < removedColumnsCount; c++) { - if (isTableUniform && logicColumns[0] !== logicColumns[c] - c) { - isTableUniform = false; - } - } - - if (isTableUniform) { - for (var r = 0, rlen = this.instance.countSourceRows(); r < rlen; r++) { - data[r].splice(logicColumns[0], amount); - } - } else { - for (var _r2 = 0, _rlen = this.instance.countSourceRows(); _r2 < _rlen; _r2++) { - for (var _c = 0; _c < removedColumnsCount; _c++) { - data[_r2].splice(descendingLogicColumns[_c], 1); - } - } - - for (var _c2 = 0; _c2 < removedColumnsCount; _c2++) { - this.priv.columnSettings.splice(logicColumns[_c2], 1); - } - } - - this.instance.runHooks('afterRemoveCol', index, amount, logicColumns, source); - - this.instance.forceFullRender = true; // used when data was changed -}; - -/** - * Add/Removes data from the column. - * - * @param {Number} col Physical index of column in which do you want to do splice - * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end - * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed - * @returns {Array} Returns removed portion of columns - */ -DataMap.prototype.spliceCol = function (col, index, amount /* , elements... */) { - var elements = arguments.length >= 4 ? [].slice.call(arguments, 3) : []; - - var colData = this.instance.getDataAtCol(col); - var removed = colData.slice(index, index + amount); - var after = colData.slice(index + amount); - - (0, _array.extendArray)(elements, after); - var i = 0; - while (i < amount) { - elements.push(null); // add null in place of removed elements - i++; - } - (0, _array.to2dArray)(elements); - this.instance.populateFromArray(index, col, elements, null, null, 'spliceCol'); - - return removed; -}; - -/** - * Add/Removes data from the row. - * - * @param {Number} row Physical index of row in which do you want to do splice - * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end. - * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed. - * @returns {Array} Returns removed portion of rows - */ -DataMap.prototype.spliceRow = function (row, index, amount /* , elements... */) { - var elements = arguments.length >= 4 ? [].slice.call(arguments, 3) : []; - - var rowData = this.instance.getSourceDataAtRow(row); - var removed = rowData.slice(index, index + amount); - var after = rowData.slice(index + amount); - - (0, _array.extendArray)(elements, after); - var i = 0; - while (i < amount) { - elements.push(null); // add null in place of removed elements - i++; - } - this.instance.populateFromArray(row, index, [elements], null, null, 'spliceRow'); - - return removed; -}; - -/** - * Add/remove row(s) to/from the data source. - * - * @param {Number} index Physical index of the element to remove. - * @param {Number} amount Number of rows to add/remove. - * @param {Object} element Row to add. - */ -DataMap.prototype.spliceData = function (index, amount, element) { - var continueSplicing = this.instance.runHooks('beforeDataSplice', index, amount, element); - - if (continueSplicing !== false) { - this.dataSource.splice(index, amount, element); - } -}; - -/** - * Filter unwanted data elements from the data source. - * - * @param {Number} index Visual index of the element to remove. - * @param {Number} amount Number of rows to add/remove. - * @returns {Array} - */ -DataMap.prototype.filterData = function (index, amount) { - var physicalRows = this.visualRowsToPhysical(index, amount); - var continueSplicing = this.instance.runHooks('beforeDataFilter', index, amount, physicalRows); - - if (continueSplicing !== false) { - var newData = this.dataSource.filter(function (row, index) { - return physicalRows.indexOf(index) == -1; - }); - - return newData; - } -}; - -/** - * Returns single value from the data array. - * - * @param {Number} row Visual row index. - * @param {Number} prop - */ -DataMap.prototype.get = function (row, prop) { - row = this.instance.runHooks('modifyRow', row); - - var dataRow = this.dataSource[row]; - // TODO: To remove, use 'modifyData' hook instead (see below) - var modifiedRowData = this.instance.runHooks('modifyRowData', row); - - dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow; - // - - var value = null; - - // try to get value under property `prop` (includes dot) - if (dataRow && dataRow.hasOwnProperty && (0, _object.hasOwnProperty)(dataRow, prop)) { - value = dataRow[prop]; - } else if (typeof prop === 'string' && prop.indexOf('.') > -1) { - var sliced = prop.split('.'); - var out = dataRow; - - if (!out) { - return null; - } - for (var i = 0, ilen = sliced.length; i < ilen; i++) { - out = out[sliced[i]]; - - if (typeof out === 'undefined') { - return null; - } - } - value = out; - } else if (typeof prop === 'function') { - /** - * allows for interacting with complex structures, for example - * d3/jQuery getter/setter properties: - * - * {columns: [{ - * data: function(row, value){ - * if(arguments.length === 1){ - * return row.property(); - * } - * row.property(value); - * } - * }]} - */ - value = prop(this.dataSource.slice(row, row + 1)[0]); - } - - if (this.instance.hasHook('modifyData')) { - var valueHolder = (0, _object.createObjectPropListener)(value); - - this.instance.runHooks('modifyData', row, this.propToCol(prop), valueHolder, 'get'); - - if (valueHolder.isTouched()) { - value = valueHolder.value; - } - } - - return value; -}; - -var copyableLookup = (0, _data.cellMethodLookupFactory)('copyable', false); - -/** - * Returns single value from the data array (intended for clipboard copy to an external application). - * - * @param {Number} row Physical row index. - * @param {Number} prop - * @returns {String} - */ -DataMap.prototype.getCopyable = function (row, prop) { - if (copyableLookup.call(this.instance, row, this.propToCol(prop))) { - return this.get(row, prop); - } - return ''; -}; - -/** - * Saves single value to the data array. - * - * @param {Number} row Visual row index. - * @param {Number} prop - * @param {String} value - * @param {String} [source] Source of hook runner. - */ -DataMap.prototype.set = function (row, prop, value, source) { - row = this.instance.runHooks('modifyRow', row, source || 'datamapGet'); - - var dataRow = this.dataSource[row]; - // TODO: To remove, use 'modifyData' hook instead (see below) - var modifiedRowData = this.instance.runHooks('modifyRowData', row); - - dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow; - // - - if (this.instance.hasHook('modifyData')) { - var valueHolder = (0, _object.createObjectPropListener)(value); - - this.instance.runHooks('modifyData', row, this.propToCol(prop), valueHolder, 'set'); - - if (valueHolder.isTouched()) { - value = valueHolder.value; - } - } - - // try to set value under property `prop` (includes dot) - if (dataRow && dataRow.hasOwnProperty && (0, _object.hasOwnProperty)(dataRow, prop)) { - dataRow[prop] = value; - } else if (typeof prop === 'string' && prop.indexOf('.') > -1) { - var sliced = prop.split('.'); - var out = dataRow; - var i = 0; - var ilen = void 0; - - for (i = 0, ilen = sliced.length - 1; i < ilen; i++) { - if (typeof out[sliced[i]] === 'undefined') { - out[sliced[i]] = {}; - } - out = out[sliced[i]]; - } - out[sliced[i]] = value; - } else if (typeof prop === 'function') { - /* see the `function` handler in `get` */ - prop(this.dataSource.slice(row, row + 1)[0], value); - } else { - dataRow[prop] = value; - } -}; - -/** - * This ridiculous piece of code maps rows Id that are present in table data to those displayed for user. - * The trick is, the physical row id (stored in settings.data) is not necessary the same - * as the visual (displayed) row id (e.g. when sorting is applied). - * - * @param {Number} index Visual row index. - * @param {Number} amount - * @fires Hooks#modifyRow - * @returns {Number} - */ -DataMap.prototype.visualRowsToPhysical = function (index, amount) { - var totalRows = this.instance.countSourceRows(); - var physicRow = (totalRows + index) % totalRows; - var logicRows = []; - var rowsToRemove = amount; - var row; - - while (physicRow < totalRows && rowsToRemove) { - row = this.instance.runHooks('modifyRow', physicRow); - logicRows.push(row); - - rowsToRemove--; - physicRow++; - } - - return logicRows; -}; - -/** - * - * @param index Visual column index. - * @param amount - * @returns {Array} - */ -DataMap.prototype.visualColumnsToPhysical = function (index, amount) { - var totalCols = this.instance.countCols(); - var physicalCol = (totalCols + index) % totalCols; - var visualCols = []; - var colsToRemove = amount; - - while (physicalCol < totalCols && colsToRemove) { - var col = this.instance.runHooks('modifyCol', physicalCol); - - visualCols.push(col); - - colsToRemove--; - physicalCol++; - } - - return visualCols; -}; - -/** - * Clears the data array. - */ -DataMap.prototype.clear = function () { - for (var r = 0; r < this.instance.countSourceRows(); r++) { - for (var c = 0; c < this.instance.countCols(); c++) { - this.set(r, this.colToProp(c), ''); - } - } -}; - -/** - * Clear cached data length. - */ -DataMap.prototype.clearLengthCache = function () { - this.cachedLength = null; -}; - -/** - * Get data length. - * - * @returns {Number} - */ -DataMap.prototype.getLength = function () { - var _this2 = this; - - var maxRows = void 0, - maxRowsFromSettings = this.instance.getSettings().maxRows; - - if (maxRowsFromSettings < 0 || maxRowsFromSettings === 0) { - maxRows = 0; - } else { - maxRows = maxRowsFromSettings || Infinity; - } - - var length = this.instance.countSourceRows(); - - if (this.instance.hasHook('modifyRow')) { - var reValidate = this.skipCache; - - this.interval.start(); - if (length !== this.latestSourceRowsCount) { - reValidate = true; - } - - this.latestSourceRowsCount = length; - if (this.cachedLength === null || reValidate) { - (0, _number.rangeEach)(length - 1, function (row) { - row = _this2.instance.runHooks('modifyRow', row); - - if (row === null) { - --length; - } - }); - this.cachedLength = length; - } else { - length = this.cachedLength; - } - } else { - this.interval.stop(); - } - - return Math.min(length, maxRows); -}; - -/** - * Returns the data array. - * - * @returns {Array} - */ -DataMap.prototype.getAll = function () { - var start = { - row: 0, - col: 0 - }; - - var end = { - row: Math.max(this.instance.countSourceRows() - 1, 0), - col: Math.max(this.instance.countCols() - 1, 0) - }; - - if (start.row - end.row === 0 && !this.instance.countSourceRows()) { - return []; - } - - return this.getRange(start, end, DataMap.prototype.DESTINATION_RENDERER); -}; - -/** - * Returns data range as array. - * - * @param {Object} [start] Start selection position. Visual indexes. - * @param {Object} [end] End selection position. Visual indexes. - * @param {Number} destination Destination of datamap.get - * @returns {Array} - */ -DataMap.prototype.getRange = function (start, end, destination) { - var r, - rlen, - c, - clen, - output = [], - row; - - var maxRows = this.instance.getSettings().maxRows; - var maxCols = this.instance.getSettings().maxCols; - - if (maxRows === 0 || maxCols === 0) { - return []; - } - - var getFn = destination === this.DESTINATION_CLIPBOARD_GENERATOR ? this.getCopyable : this.get; - - rlen = Math.min(Math.max(maxRows - 1, 0), Math.max(start.row, end.row)); - clen = Math.min(Math.max(maxCols - 1, 0), Math.max(start.col, end.col)); - - for (r = Math.min(start.row, end.row); r <= rlen; r++) { - row = []; - var physicalRow = this.instance.runHooks('modifyRow', r); - - for (c = Math.min(start.col, end.col); c <= clen; c++) { - - if (physicalRow === null) { - break; - } - row.push(getFn.call(this, r, this.colToProp(c))); - } - if (physicalRow !== null) { - output.push(row); - } - } - - return output; -}; - -/** - * Return data as text (tab separated columns). - * - * @param {Object} [start] Start selection position. Visual indexes. - * @param {Object} [end] End selection position. Visual indexes. - * @returns {String} - */ -DataMap.prototype.getText = function (start, end) { - return _SheetClip2.default.stringify(this.getRange(start, end, this.DESTINATION_RENDERER)); -}; - -/** - * Return data as copyable text (tab separated columns intended for clipboard copy to an external application). - * - * @param {Object} [start] Start selection position. Visual indexes. - * @param {Object} [end] End selection position. Visual indexes. - * @returns {String} - */ -DataMap.prototype.getCopyableText = function (start, end) { - return _SheetClip2.default.stringify(this.getRange(start, end, this.DESTINATION_CLIPBOARD_GENERATOR)); -}; - -/** - * `skipLengthCache` callback. - * @private - * @param {Number} delay Time of the delay in milliseconds. - */ -DataMap.prototype.onSkipLengthCache = function (delay) { - var _this3 = this; - - this.skipCache = true; - setTimeout(function () { - _this3.skipCache = false; - }, delay); -}; - -/** - * Destroy instance. - */ -DataMap.prototype.destroy = function () { - this.interval.stop(); - - this.interval = null; - this.instance = null; - this.priv = null; - this.GridSettings = null; - this.dataSource = null; - this.cachedLength = null; - this.duckSchema = null; -}; - -exports.default = DataMap; - -/***/ }), -/* 199 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _object = __webpack_require__(1); - -var _array = __webpack_require__(2); - -var _number = __webpack_require__(6); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class DataSource - * @private - */ -var DataSource = function () { - function DataSource(hotInstance) { - var dataSource = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - _classCallCheck(this, DataSource); - - /** - * Instance of Handsontable. - * - * @type {Handsontable} - */ - this.hot = hotInstance; - /** - * Data source - * - * @type {Array} - */ - this.data = dataSource; - /** - * Type of data source. - * - * @type {String} - * @default 'array' - */ - this.dataType = 'array'; - - this.colToProp = function () {}; - this.propToCol = function () {}; - } - - /** - * Get all data. - * - * @param {Boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided - * in another format. - * @returns {Array} - */ - - - _createClass(DataSource, [{ - key: 'getData', - value: function getData() { - var toArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - var result = this.data; - - if (toArray) { - result = this.getByRange({ row: 0, col: 0 }, { row: Math.max(this.countRows() - 1, 0), col: Math.max(this.countColumns() - 1, 0) }, true); - } - - return result; - } - - /** - * Set new data source. - * - * @param data {Array} - */ - - }, { - key: 'setData', - value: function setData(data) { - this.data = data; - } - - /** - * Returns array of column values from the data source. `column` is the index of the row in the data source. - * - * @param {Number} column Visual column index. - * @returns {Array} - */ - - }, { - key: 'getAtColumn', - value: function getAtColumn(column) { - var _this = this; - - var result = []; - - (0, _array.arrayEach)(this.data, function (row) { - var property = _this.colToProp(column); - - if (typeof property === 'string') { - row = (0, _object.getProperty)(row, property); - } else { - row = row[property]; - } - result.push(row); - }); - - return result; - } - - /** - * Returns a single row of the data (array or object, depending on what you have). `row` is the index of the row in the data source. - * - * @param {Number} row Physical row index. - * @returns {Array|Object} - */ - - }, { - key: 'getAtRow', - value: function getAtRow(row) { - return this.data[row]; - } - - /** - * Returns a single value from the data. - * - * @param {Number} row Physical row index. - * @param {Number} column Visual column index. - * @returns {*} - */ - - }, { - key: 'getAtCell', - value: function getAtCell(row, column) { - var result = null; - - var modifyRowData = this.hot.runHooks('modifyRowData', row); - - var dataRow = isNaN(modifyRowData) ? modifyRowData : this.data[row]; - - if (dataRow) { - var prop = this.colToProp(column); - - if (typeof prop === 'string') { - result = (0, _object.getProperty)(dataRow, prop); - } else if (typeof prop === 'function') { - result = prop(this.data.slice(row, row + 1)[0]); - } else { - result = dataRow[prop]; - } - } - - return result; - } - - /** - * Returns source data by passed range. - * - * @param {Object} start Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects). - * @param {Object} end Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects). - * @param {Boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided - * in another format. - * @returns {Array} - */ - - }, { - key: 'getByRange', - value: function getByRange(start, end) { - var _this2 = this; - - var toArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var startRow = Math.min(start.row, end.row); - var startCol = Math.min(start.col, end.col); - var endRow = Math.max(start.row, end.row); - var endCol = Math.max(start.col, end.col); - var result = []; - - (0, _number.rangeEach)(startRow, endRow, function (currentRow) { - var row = _this2.getAtRow(currentRow); - var newRow = void 0; - - if (_this2.dataType === 'array') { - newRow = row.slice(startCol, endCol + 1); - } else if (_this2.dataType === 'object') { - newRow = toArray ? [] : {}; - - (0, _number.rangeEach)(startCol, endCol, function (column) { - var prop = _this2.colToProp(column); - - if (toArray) { - newRow.push(row[prop]); - } else { - newRow[prop] = row[prop]; - } - }); - } - - result.push(newRow); - }); - - return result; - } - - /** - * Count number of rows. - * - * @returns {Number} - */ - - }, { - key: 'countRows', - value: function countRows() { - return Array.isArray(this.data) ? this.data.length : 0; - } - - /** - * Count number of columns. - * - * @returns {Number} - */ - - }, { - key: 'countColumns', - value: function countColumns() { - var result = 0; - - if (Array.isArray(this.data)) { - if (this.dataType === 'array') { - result = this.data[0].length; - } else if (this.dataType === 'object') { - result = Object.keys(this.data[0]).length; - } - } - - return result; - } - - /** - * Destroy instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - this.data = null; - this.hot = null; - } - }]); - - return DataSource; -}(); - -exports.default = DataSource; - -/***/ }), -/* 200 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _src = __webpack_require__(11); - -var _unicode = __webpack_require__(16); - -var _event = __webpack_require__(7); - -var _editors = __webpack_require__(14); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _baseEditor = __webpack_require__(36); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function EditorManager(instance, priv, selection) { - var _this = this, - destroyed = false, - eventManager, - activeEditor; - - eventManager = new _eventManager2.default(instance); - - function moveSelectionAfterEnter(shiftKey) { - selection.setSelectedHeaders(false, false, false); - var enterMoves = typeof priv.settings.enterMoves === 'function' ? priv.settings.enterMoves(event) : priv.settings.enterMoves; - - if (shiftKey) { - // move selection up - selection.transformStart(-enterMoves.row, -enterMoves.col); - } else { - // move selection down (add a new row if needed) - selection.transformStart(enterMoves.row, enterMoves.col, true); - } - } - - function moveSelectionUp(shiftKey) { - if (shiftKey) { - if (selection.selectedHeader.cols) { - selection.setSelectedHeaders(selection.selectedHeader.rows, false, false); - } - selection.transformEnd(-1, 0); - } else { - selection.setSelectedHeaders(false, false, false); - selection.transformStart(-1, 0); - } - } - - function moveSelectionDown(shiftKey) { - if (shiftKey) { - // expanding selection down with shift - selection.transformEnd(1, 0); - } else { - selection.setSelectedHeaders(false, false, false); - selection.transformStart(1, 0); - } - } - - function moveSelectionRight(shiftKey) { - if (shiftKey) { - selection.transformEnd(0, 1); - } else { - selection.setSelectedHeaders(false, false, false); - selection.transformStart(0, 1); - } - } - - function moveSelectionLeft(shiftKey) { - if (shiftKey) { - if (selection.selectedHeader.rows) { - selection.setSelectedHeaders(false, selection.selectedHeader.cols, false); - } - selection.transformEnd(0, -1); - } else { - selection.setSelectedHeaders(false, false, false); - selection.transformStart(0, -1); - } - } - - function onKeyDown(event) { - var ctrlDown, rangeModifier; - - if (!instance.isListening()) { - return; - } - instance.runHooks('beforeKeyDown', event); - - if (destroyed) { - return; - } - if ((0, _event.isImmediatePropagationStopped)(event)) { - return; - } - priv.lastKeyCode = event.keyCode; - - if (!selection.isSelected()) { - return; - } - // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL) - ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey; - - if (activeEditor && !activeEditor.isWaiting()) { - if (!(0, _unicode.isMetaKey)(event.keyCode) && !(0, _unicode.isCtrlKey)(event.keyCode) && !ctrlDown && !_this.isEditorOpened()) { - _this.openEditor('', event); - - return; - } - } - rangeModifier = event.shiftKey ? selection.setRangeEnd : selection.setRangeStart; - - switch (event.keyCode) { - case _unicode.KEY_CODES.A: - if (!_this.isEditorOpened() && ctrlDown) { - selection.selectAll(); - - event.preventDefault(); - (0, _event.stopPropagation)(event); - } - break; - - case _unicode.KEY_CODES.ARROW_UP: - if (_this.isEditorOpened() && !activeEditor.isWaiting()) { - _this.closeEditorAndSaveChanges(ctrlDown); - } - moveSelectionUp(event.shiftKey); - - event.preventDefault(); - (0, _event.stopPropagation)(event); - break; - - case _unicode.KEY_CODES.ARROW_DOWN: - if (_this.isEditorOpened() && !activeEditor.isWaiting()) { - _this.closeEditorAndSaveChanges(ctrlDown); - } - - moveSelectionDown(event.shiftKey); - - event.preventDefault(); - (0, _event.stopPropagation)(event); - break; - - case _unicode.KEY_CODES.ARROW_RIGHT: - if (_this.isEditorOpened() && !activeEditor.isWaiting()) { - _this.closeEditorAndSaveChanges(ctrlDown); - } - - moveSelectionRight(event.shiftKey); - - event.preventDefault(); - (0, _event.stopPropagation)(event); - break; - - case _unicode.KEY_CODES.ARROW_LEFT: - if (_this.isEditorOpened() && !activeEditor.isWaiting()) { - _this.closeEditorAndSaveChanges(ctrlDown); - } - - moveSelectionLeft(event.shiftKey); - - event.preventDefault(); - (0, _event.stopPropagation)(event); - break; - - case _unicode.KEY_CODES.TAB: - selection.setSelectedHeaders(false, false, false); - var tabMoves = typeof priv.settings.tabMoves === 'function' ? priv.settings.tabMoves(event) : priv.settings.tabMoves; - - if (event.shiftKey) { - // move selection left - selection.transformStart(-tabMoves.row, -tabMoves.col); - } else { - // move selection right (add a new column if needed) - selection.transformStart(tabMoves.row, tabMoves.col, true); - } - event.preventDefault(); - (0, _event.stopPropagation)(event); - break; - - case _unicode.KEY_CODES.BACKSPACE: - case _unicode.KEY_CODES.DELETE: - selection.empty(event); - _this.prepareEditor(); - event.preventDefault(); - break; - - case _unicode.KEY_CODES.F2: - /* F2 */ - _this.openEditor(null, event); - - if (activeEditor) { - activeEditor.enableFullEditMode(); - } - event.preventDefault(); // prevent Opera from opening 'Go to Page dialog' - break; - - case _unicode.KEY_CODES.ENTER: - /* return/enter */ - if (_this.isEditorOpened()) { - - if (activeEditor && activeEditor.state !== _baseEditor.EditorState.WAITING) { - _this.closeEditorAndSaveChanges(ctrlDown); - } - moveSelectionAfterEnter(event.shiftKey); - } else if (instance.getSettings().enterBeginsEditing) { - _this.openEditor(null, event); - - if (activeEditor) { - activeEditor.enableFullEditMode(); - } - } else { - moveSelectionAfterEnter(event.shiftKey); - } - event.preventDefault(); // don't add newline to field - (0, _event.stopImmediatePropagation)(event); // required by HandsontableEditor - break; - - case _unicode.KEY_CODES.ESCAPE: - if (_this.isEditorOpened()) { - _this.closeEditorAndRestoreOriginalValue(ctrlDown); - } - event.preventDefault(); - break; - - case _unicode.KEY_CODES.HOME: - selection.setSelectedHeaders(false, false, false); - if (event.ctrlKey || event.metaKey) { - rangeModifier(new _src.CellCoords(0, priv.selRange.from.col)); - } else { - rangeModifier(new _src.CellCoords(priv.selRange.from.row, 0)); - } - event.preventDefault(); // don't scroll the window - (0, _event.stopPropagation)(event); - break; - - case _unicode.KEY_CODES.END: - selection.setSelectedHeaders(false, false, false); - if (event.ctrlKey || event.metaKey) { - rangeModifier(new _src.CellCoords(instance.countRows() - 1, priv.selRange.from.col)); - } else { - rangeModifier(new _src.CellCoords(priv.selRange.from.row, instance.countCols() - 1)); - } - event.preventDefault(); // don't scroll the window - (0, _event.stopPropagation)(event); - break; - - case _unicode.KEY_CODES.PAGE_UP: - selection.setSelectedHeaders(false, false, false); - selection.transformStart(-instance.countVisibleRows(), 0); - event.preventDefault(); // don't page up the window - (0, _event.stopPropagation)(event); - break; - - case _unicode.KEY_CODES.PAGE_DOWN: - selection.setSelectedHeaders(false, false, false); - selection.transformStart(instance.countVisibleRows(), 0); - event.preventDefault(); // don't page down the window - (0, _event.stopPropagation)(event); - break; - default: - break; - } - } - - function init() { - instance.addHook('afterDocumentKeyDown', onKeyDown); - - eventManager.addEventListener(document.documentElement, 'keydown', function (event) { - if (!destroyed) { - instance.runHooks('afterDocumentKeyDown', event); - } - }); - - function onDblClick(event, coords, elem) { - // may be TD or TH - if (elem.nodeName == 'TD') { - _this.openEditor(); - - if (activeEditor) { - activeEditor.enableFullEditMode(); - } - } - } - instance.view.wt.update('onCellDblClick', onDblClick); - - instance.addHook('afterDestroy', function () { - destroyed = true; - }); - } - - /** - * Destroy current editor, if exists. - * - * @function destroyEditor - * @memberof! Handsontable.EditorManager# - * @param {Boolean} revertOriginal - */ - this.destroyEditor = function (revertOriginal) { - this.closeEditor(revertOriginal); - }; - - /** - * Get active editor. - * - * @function getActiveEditor - * @memberof! Handsontable.EditorManager# - * @returns {*} - */ - this.getActiveEditor = function () { - return activeEditor; - }; - - /** - * Prepare text input to be displayed at given grid cell. - * - * @function prepareEditor - * @memberof! Handsontable.EditorManager# - */ - this.prepareEditor = function () { - var row, col, prop, td, originalValue, cellProperties, editorClass; - - if (activeEditor && activeEditor.isWaiting()) { - this.closeEditor(false, false, function (dataSaved) { - if (dataSaved) { - _this.prepareEditor(); - } - }); - - return; - } - row = priv.selRange.highlight.row; - col = priv.selRange.highlight.col; - prop = instance.colToProp(col); - td = instance.getCell(row, col); - - originalValue = instance.getSourceDataAtCell(instance.runHooks('modifyRow', row), col); - cellProperties = instance.getCellMeta(row, col); - editorClass = instance.getCellEditor(cellProperties); - - if (editorClass) { - activeEditor = (0, _editors.getEditorInstance)(editorClass, instance); - activeEditor.prepare(row, col, prop, td, originalValue, cellProperties); - } else { - activeEditor = void 0; - } - }; - - /** - * Check is editor is opened/showed. - * - * @function isEditorOpened - * @memberof! Handsontable.EditorManager# - * @returns {Boolean} - */ - this.isEditorOpened = function () { - return activeEditor && activeEditor.isOpened(); - }; - - /** - * Open editor with initial value. - * - * @function openEditor - * @memberof! Handsontable.EditorManager# - * @param {String} initialValue - * @param {DOMEvent} event - */ - this.openEditor = function (initialValue, event) { - if (activeEditor && !activeEditor.cellProperties.readOnly) { - activeEditor.beginEditing(initialValue, event); - } else if (activeEditor && activeEditor.cellProperties.readOnly) { - - // move the selection after opening the editor with ENTER key - if (event && event.keyCode === _unicode.KEY_CODES.ENTER) { - moveSelectionAfterEnter(); - } - } - }; - - /** - * Close editor, finish editing cell. - * - * @function closeEditor - * @memberof! Handsontable.EditorManager# - * @param {Boolean} restoreOriginalValue - * @param {Boolean} [ctrlDown] - * @param {Function} [callback] - */ - this.closeEditor = function (restoreOriginalValue, ctrlDown, callback) { - if (activeEditor) { - activeEditor.finishEditing(restoreOriginalValue, ctrlDown, callback); - } else if (callback) { - callback(false); - } - }; - - /** - * Close editor and save changes. - * - * @function closeEditorAndSaveChanges - * @memberof! Handsontable.EditorManager# - * @param {Boolean} ctrlDown - */ - this.closeEditorAndSaveChanges = function (ctrlDown) { - return this.closeEditor(false, ctrlDown); - }; - - /** - * Close editor and restore original value. - * - * @function closeEditorAndRestoreOriginalValue - * @memberof! Handsontable.EditorManager# - * @param {Boolean} ctrlDown - */ - this.closeEditorAndRestoreOriginalValue = function (ctrlDown) { - return this.closeEditor(true, ctrlDown); - }; - - init(); -} - -exports.default = EditorManager; - -/***/ }), -/* 201 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _baseEditor = __webpack_require__(36); - -var _baseEditor2 = _interopRequireDefault(_baseEditor); - -var _element = __webpack_require__(0); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * @private - * @editor CheckboxEditor - * @class CheckboxEditor - */ -var CheckboxEditor = function (_BaseEditor) { - _inherits(CheckboxEditor, _BaseEditor); - - function CheckboxEditor() { - _classCallCheck(this, CheckboxEditor); - - return _possibleConstructorReturn(this, (CheckboxEditor.__proto__ || Object.getPrototypeOf(CheckboxEditor)).apply(this, arguments)); - } - - _createClass(CheckboxEditor, [{ - key: 'beginEditing', - value: function beginEditing(initialValue, event) { - // editorManager return double click event as undefined - if (event === void 0) { - var checkbox = this.TD.querySelector('input[type="checkbox"]'); - - if (!(0, _element.hasClass)(checkbox, 'htBadValue')) { - checkbox.click(); - } - } - } - }, { - key: 'finishEditing', - value: function finishEditing() {} - }, { - key: 'init', - value: function init() {} - }, { - key: 'open', - value: function open() {} - }, { - key: 'close', - value: function close() {} - }, { - key: 'getValue', - value: function getValue() {} - }, { - key: 'setValue', - value: function setValue() {} - }, { - key: 'focus', - value: function focus() {} - }]); - - return CheckboxEditor; -}(_baseEditor2.default); - -exports.default = CheckboxEditor; - -/***/ }), -/* 202 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _moment = __webpack_require__(61); - -var _moment2 = _interopRequireDefault(_moment); - -var _pikaday = __webpack_require__(302); - -var _pikaday2 = _interopRequireDefault(_pikaday); - -__webpack_require__(182); - -var _element = __webpack_require__(0); - -var _object = __webpack_require__(1); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _unicode = __webpack_require__(16); - -var _event = __webpack_require__(7); - -var _textEditor = __webpack_require__(43); - -var _textEditor2 = _interopRequireDefault(_textEditor); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * @private - * @editor DateEditor - * @class DateEditor - * @dependencies TextEditor moment pikaday - */ -var DateEditor = function (_TextEditor) { - _inherits(DateEditor, _TextEditor); - - /** - * @param {Core} hotInstance Handsontable instance - * @private - */ - function DateEditor(hotInstance) { - _classCallCheck(this, DateEditor); - - // TODO: Move this option to general settings - var _this = _possibleConstructorReturn(this, (DateEditor.__proto__ || Object.getPrototypeOf(DateEditor)).call(this, hotInstance)); - - _this.defaultDateFormat = 'DD/MM/YYYY'; - _this.isCellEdited = false; - _this.parentDestroyed = false; - return _this; - } - - _createClass(DateEditor, [{ - key: 'init', - value: function init() { - var _this2 = this; - - if (typeof _moment2.default !== 'function') { - throw new Error('You need to include moment.js to your project.'); - } - - if (typeof _pikaday2.default !== 'function') { - throw new Error('You need to include Pikaday to your project.'); - } - _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'init', this).call(this); - this.instance.addHook('afterDestroy', function () { - _this2.parentDestroyed = true; - _this2.destroyElements(); - }); - } - - /** - * Create data picker instance - */ - - }, { - key: 'createElements', - value: function createElements() { - _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'createElements', this).call(this); - - this.datePicker = document.createElement('DIV'); - this.datePickerStyle = this.datePicker.style; - this.datePickerStyle.position = 'absolute'; - this.datePickerStyle.top = 0; - this.datePickerStyle.left = 0; - this.datePickerStyle.zIndex = 9999; - - (0, _element.addClass)(this.datePicker, 'htDatepickerHolder'); - document.body.appendChild(this.datePicker); - - this.$datePicker = new _pikaday2.default(this.getDatePickerConfig()); - var eventManager = new _eventManager2.default(this); - - /** - * Prevent recognizing clicking on datepicker as clicking outside of table - */ - eventManager.addEventListener(this.datePicker, 'mousedown', function (event) { - return (0, _event.stopPropagation)(event); - }); - this.hideDatepicker(); - } - - /** - * Destroy data picker instance - */ - - }, { - key: 'destroyElements', - value: function destroyElements() { - this.$datePicker.destroy(); - } - - /** - * Prepare editor to appear - * - * @param {Number} row Row index - * @param {Number} col Column index - * @param {String} prop Property name (passed when datasource is an array of objects) - * @param {HTMLTableCellElement} td Table cell element - * @param {*} originalValue Original value - * @param {Object} cellProperties Object with cell properties ({@see Core#getCellMeta}) - */ - - }, { - key: 'prepare', - value: function prepare(row, col, prop, td, originalValue, cellProperties) { - this._opened = false; - _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'prepare', this).call(this, row, col, prop, td, originalValue, cellProperties); - } - - /** - * Open editor - * - * @param {Event} [event=null] - */ - - }, { - key: 'open', - value: function open() { - var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'open', this).call(this); - this.showDatepicker(event); - } - - /** - * Close editor - */ - - }, { - key: 'close', - value: function close() { - var _this3 = this; - - this._opened = false; - this.instance._registerTimeout(setTimeout(function () { - _this3.instance.selection.refreshBorders(); - }, 0)); - - _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'close', this).call(this); - } - - /** - * @param {Boolean} [isCancelled=false] - * @param {Boolean} [ctrlDown=false] - */ - - }, { - key: 'finishEditing', - value: function finishEditing() { - var isCancelled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var ctrlDown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - if (isCancelled) { - // pressed ESC, restore original value - // var value = this.instance.getDataAtCell(this.row, this.col); - var value = this.originalValue; - - if (value !== void 0) { - this.setValue(value); - } - } - this.hideDatepicker(); - _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'finishEditing', this).call(this, isCancelled, ctrlDown); - } - - /** - * Show data picker - * - * @param {Event} event - */ - - }, { - key: 'showDatepicker', - value: function showDatepicker(event) { - this.$datePicker.config(this.getDatePickerConfig()); - - var offset = this.TD.getBoundingClientRect(); - var dateFormat = this.cellProperties.dateFormat || this.defaultDateFormat; - var datePickerConfig = this.$datePicker.config(); - var dateStr = void 0; - var isMouseDown = this.instance.view.isMouseDown(); - var isMeta = event ? (0, _unicode.isMetaKey)(event.keyCode) : false; - - this.datePickerStyle.top = window.pageYOffset + offset.top + (0, _element.outerHeight)(this.TD) + 'px'; - this.datePickerStyle.left = window.pageXOffset + offset.left + 'px'; - - this.$datePicker._onInputFocus = function () {}; - datePickerConfig.format = dateFormat; - - if (this.originalValue) { - dateStr = this.originalValue; - - if ((0, _moment2.default)(dateStr, dateFormat, true).isValid()) { - this.$datePicker.setMoment((0, _moment2.default)(dateStr, dateFormat), true); - } - - // workaround for date/time cells - pikaday resets the cell value to 12:00 AM by default, this will overwrite the value. - if (this.getValue() !== this.originalValue) { - this.setValue(this.originalValue); - } - - if (!isMeta && !isMouseDown) { - this.setValue(''); - } - } else if (this.cellProperties.defaultDate) { - dateStr = this.cellProperties.defaultDate; - - datePickerConfig.defaultDate = dateStr; - - if ((0, _moment2.default)(dateStr, dateFormat, true).isValid()) { - this.$datePicker.setMoment((0, _moment2.default)(dateStr, dateFormat), true); - } - - if (!isMeta && !isMouseDown) { - this.setValue(''); - } - } else { - // if a default date is not defined, set a soft-default-date: display the current day and month in the - // datepicker, but don't fill the editor input - this.$datePicker.gotoToday(); - } - - this.datePickerStyle.display = 'block'; - this.$datePicker.show(); - } - - /** - * Hide data picker - */ - - }, { - key: 'hideDatepicker', - value: function hideDatepicker() { - this.datePickerStyle.display = 'none'; - this.$datePicker.hide(); - } - - /** - * Get date picker options. - * - * @returns {Object} - */ - - }, { - key: 'getDatePickerConfig', - value: function getDatePickerConfig() { - var _this4 = this; - - var htInput = this.TEXTAREA; - var options = {}; - - if (this.cellProperties && this.cellProperties.datePickerConfig) { - (0, _object.deepExtend)(options, this.cellProperties.datePickerConfig); - } - var origOnSelect = options.onSelect; - var origOnClose = options.onClose; - - options.field = htInput; - options.trigger = htInput; - options.container = this.datePicker; - options.bound = false; - options.format = options.format || this.defaultDateFormat; - options.reposition = options.reposition || false; - options.onSelect = function (dateStr) { - if (!isNaN(dateStr.getTime())) { - dateStr = (0, _moment2.default)(dateStr).format(_this4.cellProperties.dateFormat || _this4.defaultDateFormat); - } - _this4.setValue(dateStr); - _this4.hideDatepicker(); - - if (origOnSelect) { - origOnSelect(); - } - }; - options.onClose = function () { - if (!_this4.parentDestroyed) { - _this4.finishEditing(false); - } - if (origOnClose) { - origOnClose(); - } - }; - - return options; - } - }]); - - return DateEditor; -}(_textEditor2.default); - -exports.default = DateEditor; - -/***/ }), -/* 203 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _autocompleteEditor = __webpack_require__(148); - -var _autocompleteEditor2 = _interopRequireDefault(_autocompleteEditor); - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * @private - * @editor DropdownEditor - * @class DropdownEditor - * @dependencies AutocompleteEditor - */ -var DropdownEditor = function (_AutocompleteEditor) { - _inherits(DropdownEditor, _AutocompleteEditor); - - function DropdownEditor() { - _classCallCheck(this, DropdownEditor); - - return _possibleConstructorReturn(this, (DropdownEditor.__proto__ || Object.getPrototypeOf(DropdownEditor)).apply(this, arguments)); - } - - _createClass(DropdownEditor, [{ - key: 'prepare', - value: function prepare(row, col, prop, td, originalValue, cellProperties) { - _get(DropdownEditor.prototype.__proto__ || Object.getPrototypeOf(DropdownEditor.prototype), 'prepare', this).call(this, row, col, prop, td, originalValue, cellProperties); - this.cellProperties.filter = false; - this.cellProperties.strict = true; - } - }]); - - return DropdownEditor; -}(_autocompleteEditor2.default); - -_pluginHooks2.default.getSingleton().add('beforeValidate', function (value, row, col, source) { - var cellMeta = this.getCellMeta(row, this.propToCol(col)); - - if (cellMeta.editor === DropdownEditor) { - if (cellMeta.strict === void 0) { - cellMeta.filter = false; - cellMeta.strict = true; - } - } -}); - -exports.default = DropdownEditor; - -/***/ }), -/* 204 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _unicode = __webpack_require__(16); - -var _event = __webpack_require__(7); - -var _element = __webpack_require__(0); - -var _baseEditor = __webpack_require__(36); - -var _baseEditor2 = _interopRequireDefault(_baseEditor); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var MobileTextEditor = _baseEditor2.default.prototype.extend(); -var domDimensionsCache = {}; - -/** - * @private - * @editor MobileTextEditor - * @class MobileTextEditor - */ -var createControls = function createControls() { - this.controls = {}; - - this.controls.leftButton = document.createElement('DIV'); - this.controls.leftButton.className = 'leftButton'; - this.controls.rightButton = document.createElement('DIV'); - this.controls.rightButton.className = 'rightButton'; - this.controls.upButton = document.createElement('DIV'); - this.controls.upButton.className = 'upButton'; - this.controls.downButton = document.createElement('DIV'); - this.controls.downButton.className = 'downButton'; - - for (var button in this.controls) { - if (Object.prototype.hasOwnProperty.call(this.controls, button)) { - this.positionControls.appendChild(this.controls[button]); - } - } -}; - -MobileTextEditor.prototype.valueChanged = function () { - return this.initValue != this.getValue(); -}; - -MobileTextEditor.prototype.init = function () { - var that = this; - this.eventManager = new _eventManager2.default(this.instance); - - this.createElements(); - this.bindEvents(); - - this.instance.addHook('afterDestroy', function () { - that.destroy(); - }); -}; - -MobileTextEditor.prototype.getValue = function () { - return this.TEXTAREA.value; -}; - -MobileTextEditor.prototype.setValue = function (newValue) { - this.initValue = newValue; - - this.TEXTAREA.value = newValue; -}; - -MobileTextEditor.prototype.createElements = function () { - this.editorContainer = document.createElement('DIV'); - this.editorContainer.className = 'htMobileEditorContainer'; - - this.cellPointer = document.createElement('DIV'); - this.cellPointer.className = 'cellPointer'; - - this.moveHandle = document.createElement('DIV'); - this.moveHandle.className = 'moveHandle'; - - this.inputPane = document.createElement('DIV'); - this.inputPane.className = 'inputs'; - - this.positionControls = document.createElement('DIV'); - this.positionControls.className = 'positionControls'; - - this.TEXTAREA = document.createElement('TEXTAREA'); - (0, _element.addClass)(this.TEXTAREA, 'handsontableInput'); - - this.inputPane.appendChild(this.TEXTAREA); - - this.editorContainer.appendChild(this.cellPointer); - this.editorContainer.appendChild(this.moveHandle); - this.editorContainer.appendChild(this.inputPane); - this.editorContainer.appendChild(this.positionControls); - - createControls.call(this); - - document.body.appendChild(this.editorContainer); -}; - -MobileTextEditor.prototype.onBeforeKeyDown = function (event) { - var instance = this; - var that = instance.getActiveEditor(); - - if (event.target !== that.TEXTAREA || (0, _event.isImmediatePropagationStopped)(event)) { - return; - } - - switch (event.keyCode) { - case _unicode.KEY_CODES.ENTER: - that.close(); - event.preventDefault(); // don't add newline to field - break; - case _unicode.KEY_CODES.BACKSPACE: - (0, _event.stopImmediatePropagation)(event); // backspace, delete, home, end should only work locally when cell is edited (not in table context) - break; - default: - break; - } -}; - -MobileTextEditor.prototype.open = function () { - this.instance.addHook('beforeKeyDown', this.onBeforeKeyDown); - - (0, _element.addClass)(this.editorContainer, 'active'); - (0, _element.removeClass)(this.cellPointer, 'hidden'); - - this.updateEditorPosition(); -}; - -MobileTextEditor.prototype.focus = function () { - this.TEXTAREA.focus(); - (0, _element.setCaretPosition)(this.TEXTAREA, this.TEXTAREA.value.length); -}; - -MobileTextEditor.prototype.close = function () { - this.TEXTAREA.blur(); - this.instance.removeHook('beforeKeyDown', this.onBeforeKeyDown); - - (0, _element.removeClass)(this.editorContainer, 'active'); -}; - -MobileTextEditor.prototype.scrollToView = function () { - var coords = this.instance.getSelectedRange().highlight; - this.instance.view.scrollViewport(coords); -}; - -MobileTextEditor.prototype.hideCellPointer = function () { - if (!(0, _element.hasClass)(this.cellPointer, 'hidden')) { - (0, _element.addClass)(this.cellPointer, 'hidden'); - } -}; - -MobileTextEditor.prototype.updateEditorPosition = function (x, y) { - if (x && y) { - x = parseInt(x, 10); - y = parseInt(y, 10); - - this.editorContainer.style.top = y + 'px'; - this.editorContainer.style.left = x + 'px'; - } else { - var selection = this.instance.getSelected(), - selectedCell = this.instance.getCell(selection[0], selection[1]); - - // cache sizes - if (!domDimensionsCache.cellPointer) { - domDimensionsCache.cellPointer = { - height: (0, _element.outerHeight)(this.cellPointer), - width: (0, _element.outerWidth)(this.cellPointer) - }; - } - if (!domDimensionsCache.editorContainer) { - domDimensionsCache.editorContainer = { - width: (0, _element.outerWidth)(this.editorContainer) - }; - } - - if (selectedCell !== undefined) { - var scrollLeft = this.instance.view.wt.wtOverlays.leftOverlay.trimmingContainer == window ? 0 : (0, _element.getScrollLeft)(this.instance.view.wt.wtOverlays.leftOverlay.holder); - var scrollTop = this.instance.view.wt.wtOverlays.topOverlay.trimmingContainer == window ? 0 : (0, _element.getScrollTop)(this.instance.view.wt.wtOverlays.topOverlay.holder); - - var selectedCellOffset = (0, _element.offset)(selectedCell), - selectedCellWidth = (0, _element.outerWidth)(selectedCell), - currentScrollPosition = { - x: scrollLeft, - y: scrollTop - }; - - this.editorContainer.style.top = parseInt(selectedCellOffset.top + (0, _element.outerHeight)(selectedCell) - currentScrollPosition.y + domDimensionsCache.cellPointer.height, 10) + 'px'; - this.editorContainer.style.left = parseInt(window.innerWidth / 2 - domDimensionsCache.editorContainer.width / 2, 10) + 'px'; - - if (selectedCellOffset.left + selectedCellWidth / 2 > parseInt(this.editorContainer.style.left, 10) + domDimensionsCache.editorContainer.width) { - this.editorContainer.style.left = window.innerWidth - domDimensionsCache.editorContainer.width + 'px'; - } else if (selectedCellOffset.left + selectedCellWidth / 2 < parseInt(this.editorContainer.style.left, 10) + 20) { - this.editorContainer.style.left = 0 + 'px'; - } - - this.cellPointer.style.left = parseInt(selectedCellOffset.left - domDimensionsCache.cellPointer.width / 2 - (0, _element.offset)(this.editorContainer).left + selectedCellWidth / 2 - currentScrollPosition.x, 10) + 'px'; - } - } -}; - -MobileTextEditor.prototype.updateEditorData = function () { - var selected = this.instance.getSelected(), - selectedValue = this.instance.getDataAtCell(selected[0], selected[1]); - - this.row = selected[0]; - this.col = selected[1]; - this.setValue(selectedValue); - this.updateEditorPosition(); -}; - -MobileTextEditor.prototype.prepareAndSave = function () { - var val; - - if (!this.valueChanged()) { - return; - } - - if (this.instance.getSettings().trimWhitespace) { - val = [[String.prototype.trim.call(this.getValue())]]; - } else { - val = [[this.getValue()]]; - } - - this.saveValue(val); -}; - -MobileTextEditor.prototype.bindEvents = function () { - var that = this; - - this.eventManager.addEventListener(this.controls.leftButton, 'touchend', function (event) { - that.prepareAndSave(); - that.instance.selection.transformStart(0, -1, null, true); - that.updateEditorData(); - event.preventDefault(); - }); - this.eventManager.addEventListener(this.controls.rightButton, 'touchend', function (event) { - that.prepareAndSave(); - that.instance.selection.transformStart(0, 1, null, true); - that.updateEditorData(); - event.preventDefault(); - }); - this.eventManager.addEventListener(this.controls.upButton, 'touchend', function (event) { - that.prepareAndSave(); - that.instance.selection.transformStart(-1, 0, null, true); - that.updateEditorData(); - event.preventDefault(); - }); - this.eventManager.addEventListener(this.controls.downButton, 'touchend', function (event) { - that.prepareAndSave(); - that.instance.selection.transformStart(1, 0, null, true); - that.updateEditorData(); - event.preventDefault(); - }); - - this.eventManager.addEventListener(this.moveHandle, 'touchstart', function (event) { - if (event.touches.length == 1) { - var touch = event.touches[0]; - var onTouchPosition = { - x: that.editorContainer.offsetLeft, - y: that.editorContainer.offsetTop - }; - var onTouchOffset = { - x: touch.pageX - onTouchPosition.x, - y: touch.pageY - onTouchPosition.y - }; - - that.eventManager.addEventListener(this, 'touchmove', function (event) { - var touch = event.touches[0]; - that.updateEditorPosition(touch.pageX - onTouchOffset.x, touch.pageY - onTouchOffset.y); - that.hideCellPointer(); - event.preventDefault(); - }); - } - }); - - this.eventManager.addEventListener(document.body, 'touchend', function (event) { - if (!(0, _element.isChildOf)(event.target, that.editorContainer) && !(0, _element.isChildOf)(event.target, that.instance.rootElement)) { - that.close(); - } - }); - - this.eventManager.addEventListener(this.instance.view.wt.wtOverlays.leftOverlay.holder, 'scroll', function (event) { - if (that.instance.view.wt.wtOverlays.leftOverlay.trimmingContainer != window) { - that.hideCellPointer(); - } - }); - - this.eventManager.addEventListener(this.instance.view.wt.wtOverlays.topOverlay.holder, 'scroll', function (event) { - if (that.instance.view.wt.wtOverlays.topOverlay.trimmingContainer != window) { - that.hideCellPointer(); - } - }); -}; - -MobileTextEditor.prototype.destroy = function () { - this.eventManager.clear(); - - this.editorContainer.parentNode.removeChild(this.editorContainer); -}; - -exports.default = MobileTextEditor; - -/***/ }), -/* 205 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _numbro = __webpack_require__(87); - -var _numbro2 = _interopRequireDefault(_numbro); - -var _textEditor = __webpack_require__(43); - -var _textEditor2 = _interopRequireDefault(_textEditor); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * @private - * @editor NumericEditor - * @class NumericEditor - * @dependencies TextEditor numbro - */ -var NumericEditor = function (_TextEditor) { - _inherits(NumericEditor, _TextEditor); - - function NumericEditor() { - _classCallCheck(this, NumericEditor); - - return _possibleConstructorReturn(this, (NumericEditor.__proto__ || Object.getPrototypeOf(NumericEditor)).apply(this, arguments)); - } - - _createClass(NumericEditor, [{ - key: 'beginEditing', - - /** - * @param {*} initialValue - */ - value: function beginEditing(initialValue) { - if (typeof initialValue === 'undefined' && this.originalValue) { - if (typeof this.cellProperties.language !== 'undefined') { - _numbro2.default.culture(this.cellProperties.language); - } - var decimalDelimiter = _numbro2.default.cultureData().delimiters.decimal; - initialValue = ('' + this.originalValue).replace('.', decimalDelimiter); - } - _get(NumericEditor.prototype.__proto__ || Object.getPrototypeOf(NumericEditor.prototype), 'beginEditing', this).call(this, initialValue); - } - }]); - - return NumericEditor; -}(_textEditor2.default); - -exports.default = NumericEditor; - -/***/ }), -/* 206 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _element = __webpack_require__(0); - -var _textEditor = __webpack_require__(43); - -var _textEditor2 = _interopRequireDefault(_textEditor); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * @private - * @editor PasswordEditor - * @class PasswordEditor - * @dependencies TextEditor - */ -var PasswordEditor = function (_TextEditor) { - _inherits(PasswordEditor, _TextEditor); - - function PasswordEditor() { - _classCallCheck(this, PasswordEditor); - - return _possibleConstructorReturn(this, (PasswordEditor.__proto__ || Object.getPrototypeOf(PasswordEditor)).apply(this, arguments)); - } - - _createClass(PasswordEditor, [{ - key: 'createElements', - value: function createElements() { - _get(PasswordEditor.prototype.__proto__ || Object.getPrototypeOf(PasswordEditor.prototype), 'createElements', this).call(this); - - this.TEXTAREA = document.createElement('input'); - this.TEXTAREA.setAttribute('type', 'password'); - this.TEXTAREA.className = 'handsontableInput'; - this.textareaStyle = this.TEXTAREA.style; - this.textareaStyle.width = 0; - this.textareaStyle.height = 0; - - (0, _element.empty)(this.TEXTAREA_PARENT); - this.TEXTAREA_PARENT.appendChild(this.TEXTAREA); - } - }]); - - return PasswordEditor; -}(_textEditor2.default); - -exports.default = PasswordEditor; - -/***/ }), -/* 207 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _element = __webpack_require__(0); - -var _event = __webpack_require__(7); - -var _unicode = __webpack_require__(16); - -var _baseEditor = __webpack_require__(36); - -var _baseEditor2 = _interopRequireDefault(_baseEditor); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SelectEditor = _baseEditor2.default.prototype.extend(); - -/** - * @private - * @editor SelectEditor - * @class SelectEditor - */ -SelectEditor.prototype.init = function () { - this.select = document.createElement('SELECT'); - (0, _element.addClass)(this.select, 'htSelectEditor'); - this.select.style.display = 'none'; - this.instance.rootElement.appendChild(this.select); - this.registerHooks(); -}; - -SelectEditor.prototype.registerHooks = function () { - var _this = this; - - this.instance.addHook('afterScrollHorizontally', function () { - return _this.refreshDimensions(); - }); - this.instance.addHook('afterScrollVertically', function () { - return _this.refreshDimensions(); - }); - this.instance.addHook('afterColumnResize', function () { - return _this.refreshDimensions(); - }); - this.instance.addHook('afterRowResize', function () { - return _this.refreshDimensions(); - }); -}; - -SelectEditor.prototype.prepare = function () { - _baseEditor2.default.prototype.prepare.apply(this, arguments); - - var selectOptions = this.cellProperties.selectOptions; - var options; - - if (typeof selectOptions == 'function') { - options = this.prepareOptions(selectOptions(this.row, this.col, this.prop)); - } else { - options = this.prepareOptions(selectOptions); - } - - (0, _element.empty)(this.select); - - for (var option in options) { - if (Object.prototype.hasOwnProperty.call(options, option)) { - var optionElement = document.createElement('OPTION'); - optionElement.value = option; - (0, _element.fastInnerHTML)(optionElement, options[option]); - this.select.appendChild(optionElement); - } - } -}; - -SelectEditor.prototype.prepareOptions = function (optionsToPrepare) { - var preparedOptions = {}; - - if (Array.isArray(optionsToPrepare)) { - for (var i = 0, len = optionsToPrepare.length; i < len; i++) { - preparedOptions[optionsToPrepare[i]] = optionsToPrepare[i]; - } - } else if ((typeof optionsToPrepare === 'undefined' ? 'undefined' : _typeof(optionsToPrepare)) == 'object') { - preparedOptions = optionsToPrepare; - } - - return preparedOptions; -}; - -SelectEditor.prototype.getValue = function () { - return this.select.value; -}; - -SelectEditor.prototype.setValue = function (value) { - this.select.value = value; -}; - -var onBeforeKeyDown = function onBeforeKeyDown(event) { - var instance = this; - var editor = instance.getActiveEditor(); - - switch (event.keyCode) { - case _unicode.KEY_CODES.ARROW_UP: - var previousOptionIndex = editor.select.selectedIndex - 1; - if (previousOptionIndex >= 0) { - editor.select[previousOptionIndex].selected = true; - } - - (0, _event.stopImmediatePropagation)(event); - event.preventDefault(); - break; - - case _unicode.KEY_CODES.ARROW_DOWN: - var nextOptionIndex = editor.select.selectedIndex + 1; - if (nextOptionIndex <= editor.select.length - 1) { - editor.select[nextOptionIndex].selected = true; - } - - (0, _event.stopImmediatePropagation)(event); - event.preventDefault(); - break; - default: - break; - } -}; - -SelectEditor.prototype.open = function () { - this._opened = true; - this.refreshDimensions(); - this.select.style.display = ''; - this.instance.addHook('beforeKeyDown', onBeforeKeyDown); -}; - -SelectEditor.prototype.close = function () { - this._opened = false; - this.select.style.display = 'none'; - this.instance.removeHook('beforeKeyDown', onBeforeKeyDown); -}; - -SelectEditor.prototype.focus = function () { - this.select.focus(); -}; - -SelectEditor.prototype.refreshValue = function () { - var sourceData = this.instance.getSourceDataAtCell(this.row, this.prop); - this.originalValue = sourceData; - - this.setValue(sourceData); - this.refreshDimensions(); -}; - -SelectEditor.prototype.refreshDimensions = function () { - if (this.state !== _baseEditor.EditorState.EDITING) { - return; - } - this.TD = this.getEditedCell(); - - // TD is outside of the viewport. - if (!this.TD) { - this.close(); - - return; - } - var width = (0, _element.outerWidth)(this.TD) + 1, - height = (0, _element.outerHeight)(this.TD) + 1, - currentOffset = (0, _element.offset)(this.TD), - containerOffset = (0, _element.offset)(this.instance.rootElement), - scrollableContainer = (0, _element.getScrollableElement)(this.TD), - editTop = currentOffset.top - containerOffset.top - 1 - (scrollableContainer.scrollTop || 0), - editLeft = currentOffset.left - containerOffset.left - 1 - (scrollableContainer.scrollLeft || 0), - editorSection = this.checkEditorSection(), - cssTransformOffset; - - var settings = this.instance.getSettings(); - var rowHeadersCount = settings.rowHeaders ? 1 : 0; - var colHeadersCount = settings.colHeaders ? 1 : 0; - - switch (editorSection) { - case 'top': - cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.holder.parentNode); - break; - case 'left': - cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.holder.parentNode); - break; - case 'top-left-corner': - cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode); - break; - case 'bottom-left-corner': - cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode); - break; - case 'bottom': - cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode); - break; - default: - break; - } - if (this.instance.getSelected()[0] === 0) { - editTop += 1; - } - - if (this.instance.getSelected()[1] === 0) { - editLeft += 1; - } - - var selectStyle = this.select.style; - - if (cssTransformOffset && cssTransformOffset != -1) { - selectStyle[cssTransformOffset[0]] = cssTransformOffset[1]; - } else { - (0, _element.resetCssTransform)(this.select); - } - var cellComputedStyle = (0, _element.getComputedStyle)(this.TD); - - if (parseInt(cellComputedStyle.borderTopWidth, 10) > 0) { - height -= 1; - } - if (parseInt(cellComputedStyle.borderLeftWidth, 10) > 0) { - width -= 1; - } - - selectStyle.height = height + 'px'; - selectStyle.minWidth = width + 'px'; - selectStyle.top = editTop + 'px'; - selectStyle.left = editLeft + 'px'; - selectStyle.margin = '0px'; -}; - -SelectEditor.prototype.getEditedCell = function () { - var editorSection = this.checkEditorSection(), - editedCell; - - switch (editorSection) { - case 'top': - editedCell = this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.getCell({ - row: this.row, - col: this.col - }); - this.select.style.zIndex = 101; - break; - case 'corner': - editedCell = this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell({ - row: this.row, - col: this.col - }); - this.select.style.zIndex = 103; - break; - case 'left': - editedCell = this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.getCell({ - row: this.row, - col: this.col - }); - this.select.style.zIndex = 102; - break; - default: - editedCell = this.instance.getCell(this.row, this.col); - this.select.style.zIndex = ''; - break; - } - - return editedCell != -1 && editedCell != -2 ? editedCell : void 0; -}; - -exports.default = SelectEditor; - -/***/ }), -/* 208 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -__webpack_require__(97); - -__webpack_require__(114); - -__webpack_require__(123); - -__webpack_require__(124); - -__webpack_require__(108); - -__webpack_require__(122); - -__webpack_require__(105); - -__webpack_require__(106); - -__webpack_require__(107); - -__webpack_require__(96); - -__webpack_require__(119); - -__webpack_require__(117); - -__webpack_require__(115); - -__webpack_require__(120); - -__webpack_require__(121); - -__webpack_require__(116); - -__webpack_require__(118); - -__webpack_require__(109); - -__webpack_require__(110); - -__webpack_require__(111); - -__webpack_require__(113); - -__webpack_require__(112); - -__webpack_require__(94); - -__webpack_require__(95); - -__webpack_require__(90); - -__webpack_require__(93); - -__webpack_require__(92); - -__webpack_require__(91); - -__webpack_require__(67); - -__webpack_require__(99); - -__webpack_require__(100); - -__webpack_require__(102); - -__webpack_require__(101); - -__webpack_require__(98); - -__webpack_require__(104); - -__webpack_require__(103); - -__webpack_require__(125); - -__webpack_require__(128); - -__webpack_require__(126); - -__webpack_require__(127); - -__webpack_require__(130); - -__webpack_require__(129); - -__webpack_require__(132); - -__webpack_require__(131); - -__webpack_require__(179); - -__webpack_require__(180); - -__webpack_require__(181); - -var _editors = __webpack_require__(14); - -var _renderers = __webpack_require__(9); - -var _validators = __webpack_require__(26); - -var _cellTypes = __webpack_require__(62); - -var _core = __webpack_require__(63); - -var _core2 = _interopRequireDefault(_core); - -var _jquery = __webpack_require__(177); - -var _jquery2 = _interopRequireDefault(_jquery); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _ghostTable = __webpack_require__(66); - -var _ghostTable2 = _interopRequireDefault(_ghostTable); - -var _array = __webpack_require__(2); - -var arrayHelpers = _interopRequireWildcard(_array); - -var _browser = __webpack_require__(25); - -var browserHelpers = _interopRequireWildcard(_browser); - -var _data = __webpack_require__(64); - -var dataHelpers = _interopRequireWildcard(_data); - -var _date = __webpack_require__(89); - -var dateHelpers = _interopRequireWildcard(_date); - -var _feature = __webpack_require__(34); - -var featureHelpers = _interopRequireWildcard(_feature); - -var _function = __webpack_require__(35); - -var functionHelpers = _interopRequireWildcard(_function); - -var _mixed = __webpack_require__(20); - -var mixedHelpers = _interopRequireWildcard(_mixed); - -var _number = __webpack_require__(6); - -var numberHelpers = _interopRequireWildcard(_number); - -var _object = __webpack_require__(1); - -var objectHelpers = _interopRequireWildcard(_object); - -var _setting = __webpack_require__(65); - -var settingHelpers = _interopRequireWildcard(_setting); - -var _string = __webpack_require__(27); - -var stringHelpers = _interopRequireWildcard(_string); - -var _unicode = __webpack_require__(16); - -var unicodeHelpers = _interopRequireWildcard(_unicode); - -var _element = __webpack_require__(0); - -var domHelpers = _interopRequireWildcard(_element); - -var _event = __webpack_require__(7); - -var domEventHelpers = _interopRequireWildcard(_event); - -var _index = __webpack_require__(178); - -var plugins = _interopRequireWildcard(_index); - -var _plugins = __webpack_require__(5); - -var _defaultSettings = __webpack_require__(88); - -var _defaultSettings2 = _interopRequireDefault(_defaultSettings); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function Handsontable(rootElement, userSettings) { - var instance = new _core2.default(rootElement, userSettings || {}); - - instance.init(); - - return instance; -} - -(0, _jquery2.default)(Handsontable); - -Handsontable.Core = _core2.default; -Handsontable.DefaultSettings = _defaultSettings2.default; -Handsontable.EventManager = _eventManager2.default; -Handsontable._getListenersCounter = _eventManager.getListenersCounter; // For MemoryLeak tests - -Handsontable.buildDate = "2017-07-27T11:34:25.509Z"; -Handsontable.packageName = "handsontable"; -Handsontable.version = "0.34.0"; - -var baseVersion = undefined; - -if (baseVersion) { - Handsontable.baseVersion = baseVersion; -} - -// Export Hooks singleton -Handsontable.hooks = _pluginHooks2.default.getSingleton(); - -// TODO: Remove this exports after rewrite tests about this module -Handsontable.__GhostTable = _ghostTable2.default; -// - -// Export all helpers to the Handsontable object -var HELPERS = [arrayHelpers, browserHelpers, dataHelpers, dateHelpers, featureHelpers, functionHelpers, mixedHelpers, numberHelpers, objectHelpers, settingHelpers, stringHelpers, unicodeHelpers]; -var DOM = [domHelpers, domEventHelpers]; - -Handsontable.helper = {}; -Handsontable.dom = {}; - -// Fill general helpers. -arrayHelpers.arrayEach(HELPERS, function (helper) { - arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), function (key) { - if (key.charAt(0) !== '_') { - Handsontable.helper[key] = helper[key]; - } - }); -}); - -// Fill DOM helpers. -arrayHelpers.arrayEach(DOM, function (helper) { - arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), function (key) { - if (key.charAt(0) !== '_') { - Handsontable.dom[key] = helper[key]; - } - }); -}); - -// Export cell types. -Handsontable.cellTypes = {}; - -arrayHelpers.arrayEach((0, _cellTypes.getRegisteredCellTypeNames)(), function (cellTypeName) { - Handsontable.cellTypes[cellTypeName] = (0, _cellTypes.getCellType)(cellTypeName); -}); - -Handsontable.cellTypes.registerCellType = _cellTypes.registerCellType; -Handsontable.cellTypes.getCellType = _cellTypes.getCellType; - -// Export all registered editors from the Handsontable. -Handsontable.editors = {}; - -arrayHelpers.arrayEach((0, _editors.getRegisteredEditorNames)(), function (editorName) { - Handsontable.editors[stringHelpers.toUpperCaseFirst(editorName) + 'Editor'] = (0, _editors.getEditor)(editorName); -}); - -Handsontable.editors.registerEditor = _editors.registerEditor; -Handsontable.editors.getEditor = _editors.getEditor; - -// Export all registered renderers from the Handsontable. -Handsontable.renderers = {}; - -arrayHelpers.arrayEach((0, _renderers.getRegisteredRendererNames)(), function (rendererName) { - var renderer = (0, _renderers.getRenderer)(rendererName); - - if (rendererName === 'base') { - Handsontable.renderers.cellDecorator = renderer; - } - Handsontable.renderers[stringHelpers.toUpperCaseFirst(rendererName) + 'Renderer'] = renderer; -}); - -Handsontable.renderers.registerRenderer = _renderers.registerRenderer; -Handsontable.renderers.getRenderer = _renderers.getRenderer; - -// Export all registered validators from the Handsontable. -Handsontable.validators = {}; - -arrayHelpers.arrayEach((0, _validators.getRegisteredValidatorNames)(), function (validatorName) { - Handsontable.validators[stringHelpers.toUpperCaseFirst(validatorName) + 'Validator'] = (0, _validators.getValidator)(validatorName); -}); - -Handsontable.validators.registerValidator = _validators.registerValidator; -Handsontable.validators.getValidator = _validators.getValidator; - -// Export all registered plugins from the Handsontable. -Handsontable.plugins = {}; - -arrayHelpers.arrayEach(Object.getOwnPropertyNames(plugins), function (pluginName) { - var plugin = plugins[pluginName]; - - if (pluginName === 'Base') { - Handsontable.plugins[pluginName + 'Plugin'] = plugin; - } else { - Handsontable.plugins[pluginName] = plugin; - } -}); - -Handsontable.plugins.registerPlugin = _plugins.registerPlugin; - -// Export Handsontable -module.exports = Handsontable; - -/***/ }), -/* 209 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -function MultiMap() { - var map = { - arrayMap: [], - weakMap: new WeakMap() - }; - - return { - get: function get(key) { - if (canBeAnArrayMapKey(key)) { - return map.arrayMap[key]; - } else if (canBeAWeakMapKey(key)) { - return map.weakMap.get(key); - } - }, - set: function set(key, value) { - if (canBeAnArrayMapKey(key)) { - map.arrayMap[key] = value; - } else if (canBeAWeakMapKey(key)) { - map.weakMap.set(key, value); - } else { - throw new Error('Invalid key type'); - } - }, - delete: function _delete(key) { - if (canBeAnArrayMapKey(key)) { - delete map.arrayMap[key]; - } else if (canBeAWeakMapKey(key)) { - map.weakMap.delete(key); - } - } - }; - - function canBeAnArrayMapKey(obj) { - return obj !== null && !isNaNSymbol(obj) && (typeof obj == 'string' || typeof obj == 'number'); - } - - function canBeAWeakMapKey(obj) { - return obj !== null && ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) == 'object' || typeof obj == 'function'); - } - - function isNaNSymbol(obj) { - /* eslint-disable no-self-compare */ - return obj !== obj; // NaN === NaN is always false - } -} - -exports.default = MultiMap; - -/***/ }), -/* 210 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _array = __webpack_require__(2); - -var _feature = __webpack_require__(34); - -var _element = __webpack_require__(0); - -var _ghostTable = __webpack_require__(66); - -var _ghostTable2 = _interopRequireDefault(_ghostTable); - -var _object = __webpack_require__(1); - -var _number = __webpack_require__(6); - -var _plugins = __webpack_require__(5); - -var _samplesGenerator = __webpack_require__(154); - -var _samplesGenerator2 = _interopRequireDefault(_samplesGenerator); - -var _string = __webpack_require__(27); - -var _src = __webpack_require__(11); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var privatePool = new WeakMap(); - -/** - * @plugin AutoColumnSize - * - * @description - * This plugin allows to set column widths based on their widest cells. - * - * By default, the plugin is declared as `undefined`, which makes it enabled (same as if it was declared as `true`). - * Enabling this plugin may decrease the overall table performance, as it needs to calculate the widths of all cells to - * resize the columns accordingly. - * If you experience problems with the performance, try turning this feature off and declaring the column widths manually. - * - * Column width calculations are divided into sync and async part. Each of this parts has their own advantages and - * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous operations don't - * block the browser UI. - * - * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value to a config object: - * ```js - * ... - * // as a number (300 columns in sync, rest async) - * autoColumnSize: {syncLimit: 300}, - * ... - * - * ... - * // as a string (percent) - * autoColumnSize: {syncLimit: '40%'}, - * ... - * ``` - * - * To configure this plugin see {@link Options#autoColumnSize}. - * - * @example - * ```js - * ... - * var hot = new Handsontable(document.getElementById('example'), { - * date: getData(), - * autoColumnSize: true - * }); - * // Access to plugin instance: - * var plugin = hot.getPlugin('autoColumnSize'); - * - * plugin.getColumnWidth(4); - * - * if (plugin.isEnabled()) { - * // code... - * } - * ... - * ``` - */ - -var AutoColumnSize = function (_BasePlugin) { - _inherits(AutoColumnSize, _BasePlugin); - - _createClass(AutoColumnSize, null, [{ - key: 'CALCULATION_STEP', - get: function get() { - return 50; - } - }, { - key: 'SYNC_CALCULATION_LIMIT', - get: function get() { - return 50; - } - }]); - - function AutoColumnSize(hotInstance) { - _classCallCheck(this, AutoColumnSize); - - var _this = _possibleConstructorReturn(this, (AutoColumnSize.__proto__ || Object.getPrototypeOf(AutoColumnSize)).call(this, hotInstance)); - - privatePool.set(_this, { - /** - * Cached column header names. It is used to diff current column headers with previous state and detect which - * columns width should be updated. - * - * @private - * @type {Array} - */ - cachedColumnHeaders: [] - }); - /** - * Cached columns widths. - * - * @type {Array} - */ - _this.widths = []; - /** - * Instance of {@link GhostTable} for rows and columns size calculations. - * - * @type {GhostTable} - */ - _this.ghostTable = new _ghostTable2.default(_this.hot); - /** - * Instance of {@link SamplesGenerator} for generating samples necessary for columns width calculations. - * - * @type {SamplesGenerator} - */ - _this.samplesGenerator = new _samplesGenerator2.default(function (row, col) { - return _this.hot.getDataAtCell(row, col); - }); - /** - * `true` only if the first calculation was performed - * - * @type {Boolean} - */ - _this.firstCalculation = true; - /** - * `true` if the size calculation is in progress. - * - * @type {Boolean} - */ - _this.inProgress = false; - - // moved to constructor to allow auto-sizing the columns when the plugin is disabled - _this.addHook('beforeColumnResize', function (col, size, isDblClick) { - return _this.onBeforeColumnResize(col, size, isDblClick); - }); - return _this; - } - - /** - * Check if the plugin is enabled in the handsontable settings. - * - * @returns {Boolean} - */ - - - _createClass(AutoColumnSize, [{ - key: 'isEnabled', - value: function isEnabled() { - return this.hot.getSettings().autoColumnSize !== false && !this.hot.getSettings().colWidths; - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - - var setting = this.hot.getSettings().autoColumnSize; - - if (setting && setting.useHeaders != null) { - this.ghostTable.setSetting('useHeaders', setting.useHeaders); - } - - this.addHook('afterLoadData', function () { - return _this2.onAfterLoadData(); - }); - this.addHook('beforeChange', function (changes) { - return _this2.onBeforeChange(changes); - }); - - this.addHook('beforeRender', function (force) { - return _this2.onBeforeRender(force); - }); - this.addHook('modifyColWidth', function (width, col) { - return _this2.getColumnWidth(col, width); - }); - this.addHook('afterInit', function () { - return _this2.onAfterInit(); - }); - _get(AutoColumnSize.prototype.__proto__ || Object.getPrototypeOf(AutoColumnSize.prototype), 'enablePlugin', this).call(this); - } - - /** - * Update plugin state. - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() { - var changedColumns = this.findColumnsWhereHeaderWasChanged(); - - if (changedColumns.length) { - this.clearCache(changedColumns); - } - _get(AutoColumnSize.prototype.__proto__ || Object.getPrototypeOf(AutoColumnSize.prototype), 'updatePlugin', this).call(this); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - _get(AutoColumnSize.prototype.__proto__ || Object.getPrototypeOf(AutoColumnSize.prototype), 'disablePlugin', this).call(this); - } - - /** - * Calculate a columns width. - * - * @param {Number|Object} colRange Column range object. - * @param {Number|Object} rowRange Row range object. - * @param {Boolean} [force=false] If `true` force calculate width even when value was cached earlier. - */ - - }, { - key: 'calculateColumnsWidth', - value: function calculateColumnsWidth() { - var colRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { from: 0, to: this.hot.countCols() - 1 }; - - var _this3 = this; - - var rowRange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { from: 0, to: this.hot.countRows() - 1 }; - var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - if (typeof colRange === 'number') { - colRange = { from: colRange, to: colRange }; - } - if (typeof rowRange === 'number') { - rowRange = { from: rowRange, to: rowRange }; - } - - (0, _number.rangeEach)(colRange.from, colRange.to, function (col) { - if (force || _this3.widths[col] === void 0 && !_this3.hot._getColWidthFromSettings(col)) { - var samples = _this3.samplesGenerator.generateColumnSamples(col, rowRange); - - samples.forEach(function (sample, col) { - return _this3.ghostTable.addColumn(col, sample); - }); - } - }); - - if (this.ghostTable.columns.length) { - this.ghostTable.getWidths(function (col, width) { - _this3.widths[col] = width; - }); - this.ghostTable.clean(); - } - } - - /** - * Calculate all columns width. - * - * @param {Object|Number} rowRange Row range object. - */ - - }, { - key: 'calculateAllColumnsWidth', - value: function calculateAllColumnsWidth() { - var _this4 = this; - - var rowRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { from: 0, to: this.hot.countRows() - 1 }; - - var current = 0; - var length = this.hot.countCols() - 1; - var timer = null; - - this.inProgress = true; - - var loop = function loop() { - // When hot was destroyed after calculating finished cancel frame - if (!_this4.hot) { - (0, _feature.cancelAnimationFrame)(timer); - _this4.inProgress = false; - - return; - } - - _this4.calculateColumnsWidth({ - from: current, - to: Math.min(current + AutoColumnSize.CALCULATION_STEP, length) - }, rowRange); - - current = current + AutoColumnSize.CALCULATION_STEP + 1; - - if (current < length) { - timer = (0, _feature.requestAnimationFrame)(loop); - } else { - (0, _feature.cancelAnimationFrame)(timer); - _this4.inProgress = false; - - // @TODO Should call once per render cycle, currently fired separately in different plugins - _this4.hot.view.wt.wtOverlays.adjustElementsSize(true); - // tmp - if (_this4.hot.view.wt.wtOverlays.leftOverlay.needFullRender) { - _this4.hot.view.wt.wtOverlays.leftOverlay.clone.draw(); - } - } - }; - // sync - if (this.firstCalculation && this.getSyncCalculationLimit()) { - this.calculateColumnsWidth({ from: 0, to: this.getSyncCalculationLimit() }, rowRange); - this.firstCalculation = false; - current = this.getSyncCalculationLimit() + 1; - } - // async - if (current < length) { - loop(); - } else { - this.inProgress = false; - } - } - - /** - * Set the sampling options. - * - * @private - */ - - }, { - key: 'setSamplingOptions', - value: function setSamplingOptions() { - var setting = this.hot.getSettings().autoColumnSize; - var samplingRatio = setting && (0, _object.hasOwnProperty)(setting, 'samplingRatio') ? this.hot.getSettings().autoColumnSize.samplingRatio : void 0; - var allowSampleDuplicates = setting && (0, _object.hasOwnProperty)(setting, 'allowSampleDuplicates') ? this.hot.getSettings().autoColumnSize.allowSampleDuplicates : void 0; - - if (samplingRatio && !isNaN(samplingRatio)) { - this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10)); - } - - if (allowSampleDuplicates) { - this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates); - } - } - - /** - * Recalculate all columns width (overwrite cache values). - */ - - }, { - key: 'recalculateAllColumnsWidth', - value: function recalculateAllColumnsWidth() { - if (this.hot.view && (0, _element.isVisible)(this.hot.view.wt.wtTable.TABLE)) { - this.clearCache(); - this.calculateAllColumnsWidth(); - } - } - - /** - * Get value which tells how many columns should be calculated synchronously. Rest of the columns will be calculated asynchronously. - * - * @returns {Number} - */ - - }, { - key: 'getSyncCalculationLimit', - value: function getSyncCalculationLimit() { - /* eslint-disable no-bitwise */ - var limit = AutoColumnSize.SYNC_CALCULATION_LIMIT; - var colsLimit = this.hot.countCols() - 1; - - if ((0, _object.isObject)(this.hot.getSettings().autoColumnSize)) { - limit = this.hot.getSettings().autoColumnSize.syncLimit; - - if ((0, _string.isPercentValue)(limit)) { - limit = (0, _number.valueAccordingPercent)(colsLimit, limit); - } else { - // Force to Number - limit >>= 0; - } - } - - return Math.min(limit, colsLimit); - } - - /** - * Get the calculated column width. - * - * @param {Number} col Column index. - * @param {Number} [defaultWidth] Default column width. It will be picked up if no calculated width found. - * @param {Boolean} [keepMinimum=true] If `true` then returned value won't be smaller then 50 (default column width). - * @returns {Number} - */ - - }, { - key: 'getColumnWidth', - value: function getColumnWidth(col) { - var defaultWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : void 0; - var keepMinimum = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - - var width = defaultWidth; - - if (width === void 0) { - width = this.widths[col]; - - if (keepMinimum && typeof width === 'number') { - width = Math.max(width, _src.ViewportColumnsCalculator.DEFAULT_WIDTH); - } - } - - return width; - } - - /** - * Get the first visible column. - * - * @returns {Number} Returns column index or -1 if table is not rendered. - */ - - }, { - key: 'getFirstVisibleColumn', - value: function getFirstVisibleColumn() { - var wot = this.hot.view.wt; - - if (wot.wtViewport.columnsVisibleCalculator) { - return wot.wtTable.getFirstVisibleColumn(); - } - if (wot.wtViewport.columnsRenderCalculator) { - return wot.wtTable.getFirstRenderedColumn(); - } - - return -1; - } - - /** - * Get the last visible column. - * - * @returns {Number} Returns column index or -1 if table is not rendered. - */ - - }, { - key: 'getLastVisibleColumn', - value: function getLastVisibleColumn() { - var wot = this.hot.view.wt; - - if (wot.wtViewport.columnsVisibleCalculator) { - return wot.wtTable.getLastVisibleColumn(); - } - if (wot.wtViewport.columnsRenderCalculator) { - return wot.wtTable.getLastRenderedColumn(); - } - - return -1; - } - - /** - * Collects all columns which titles has been changed in comparison to the previous state. - * - * @returns {Array} It returns an array of physical column indexes. - */ - - }, { - key: 'findColumnsWhereHeaderWasChanged', - value: function findColumnsWhereHeaderWasChanged() { - var columnHeaders = this.hot.getColHeader(); - - var _privatePool$get = privatePool.get(this), - cachedColumnHeaders = _privatePool$get.cachedColumnHeaders; - - var changedColumns = (0, _array.arrayReduce)(columnHeaders, function (acc, columnTitle, physicalColumn) { - var cachedColumnsLength = cachedColumnHeaders.length; - - if (cachedColumnsLength - 1 < physicalColumn || cachedColumnHeaders[physicalColumn] !== columnTitle) { - acc.push(physicalColumn); - } - if (cachedColumnsLength - 1 < physicalColumn) { - cachedColumnHeaders.push(columnTitle); - } else { - cachedColumnHeaders[physicalColumn] = columnTitle; - } - - return acc; - }, []); - - return changedColumns; - } - - /** - * Clear cache of calculated column widths. If you want to clear only selected columns pass an array with their indexes. - * Otherwise whole cache will be cleared. - * - * @param {Array} [columns=[]] List of column indexes (physical indexes) to clear. - */ - - }, { - key: 'clearCache', - value: function clearCache() { - var _this5 = this; - - var columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - - if (columns.length) { - (0, _array.arrayEach)(columns, function (physicalIndex) { - _this5.widths[physicalIndex] = void 0; - }); - } else { - this.widths.length = 0; - } - } - - /** - * Check if all widths were calculated. If not then return `true` (need recalculate). - * - * @returns {Boolean} - */ - - }, { - key: 'isNeedRecalculate', - value: function isNeedRecalculate() { - return !!(0, _array.arrayFilter)(this.widths, function (item) { - return item === void 0; - }).length; - } - - /** - * On before render listener. - * - * @private - */ - - }, { - key: 'onBeforeRender', - value: function onBeforeRender() { - var force = this.hot.renderCall; - var rowsCount = this.hot.countRows(); - - // Keep last column widths unchanged for situation when all rows was deleted or trimmed (pro #6) - if (!rowsCount) { - return; - } - - this.calculateColumnsWidth({ from: this.getFirstVisibleColumn(), to: this.getLastVisibleColumn() }, void 0, force); - - if (this.isNeedRecalculate() && !this.inProgress) { - this.calculateAllColumnsWidth(); - } - } - - /** - * On after load data listener. - * - * @private - */ - - }, { - key: 'onAfterLoadData', - value: function onAfterLoadData() { - var _this6 = this; - - if (this.hot.view) { - this.recalculateAllColumnsWidth(); - } else { - // first load - initialization - setTimeout(function () { - if (_this6.hot) { - _this6.recalculateAllColumnsWidth(); - } - }, 0); - } - } - - /** - * On before change listener. - * - * @private - * @param {Array} changes - */ - - }, { - key: 'onBeforeChange', - value: function onBeforeChange(changes) { - var _this7 = this; - - var changedColumns = (0, _array.arrayMap)(changes, function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - row = _ref2[0], - column = _ref2[1]; - - return _this7.hot.propToCol(column); - }); - - this.clearCache(changedColumns); - } - - /** - * On before column resize listener. - * - * @private - * @param {Number} col - * @param {Number} size - * @param {Boolean} isDblClick - * @returns {Number} - */ - - }, { - key: 'onBeforeColumnResize', - value: function onBeforeColumnResize(col, size, isDblClick) { - if (isDblClick) { - this.calculateColumnsWidth(col, void 0, true); - size = this.getColumnWidth(col, void 0, false); - } - - return size; - } - - /** - * On after Handsontable init fill plugin with all necessary values. - * - * @private - */ - - }, { - key: 'onAfterInit', - value: function onAfterInit() { - privatePool.get(this).cachedColumnHeaders = this.hot.getColHeader(); - } - - /** - * Destroy plugin instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - this.ghostTable.clean(); - _get(AutoColumnSize.prototype.__proto__ || Object.getPrototypeOf(AutoColumnSize.prototype), 'destroy', this).call(this); - } - }]); - - return AutoColumnSize; -}(_base2.default); - -(0, _plugins.registerPlugin)('autoColumnSize', AutoColumnSize); - -exports.default = AutoColumnSize; - -/***/ }), -/* 211 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _array = __webpack_require__(2); - -var _feature = __webpack_require__(34); - -var _element = __webpack_require__(0); - -var _ghostTable = __webpack_require__(66); - -var _ghostTable2 = _interopRequireDefault(_ghostTable); - -var _object = __webpack_require__(1); - -var _number = __webpack_require__(6); - -var _plugins = __webpack_require__(5); - -var _samplesGenerator = __webpack_require__(154); - -var _samplesGenerator2 = _interopRequireDefault(_samplesGenerator); - -var _string = __webpack_require__(27); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * @plugin AutoRowSize - * - * @description - * This plugin allows to set row heights based on their highest cells. - * - * By default, the plugin is declared as `undefined`, which makes it disabled (same as if it was declared as `false`). - * Enabling this plugin may decrease the overall table performance, as it needs to calculate the heights of all cells to - * resize the rows accordingly. - * If you experience problems with the performance, try turning this feature off and declaring the row heights manually. - * - * Row height calculations are divided into sync and async part. Each of this parts has their own advantages and - * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous operations don't - * block the browser UI. - * - * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value to a config object: - * ```js - * ... - * // as a number (300 columns in sync, rest async) - * autoRowSize: {syncLimit: 300}, - * ... - * - * ... - * // as a string (percent) - * autoRowSize: {syncLimit: '40%'}, - * ... - * ``` - * - * You can also use the `allowSampleDuplicates` option to allow sampling duplicate values when calculating the row height. Note, that this might have - * a negative impact on performance. - * - * To configure this plugin see {@link Options#autoRowSize}. - * - * @example - * - * ```js - * ... - * var hot = new Handsontable(document.getElementById('example'), { - * date: getData(), - * autoRowSize: true - * }); - * // Access to plugin instance: - * var plugin = hot.getPlugin('autoRowSize'); - * - * plugin.getRowHeight(4); - * - * if (plugin.isEnabled()) { - * // code... - * } - * ... - * ``` - */ -var AutoRowSize = function (_BasePlugin) { - _inherits(AutoRowSize, _BasePlugin); - - _createClass(AutoRowSize, null, [{ - key: 'CALCULATION_STEP', - get: function get() { - return 50; - } - }, { - key: 'SYNC_CALCULATION_LIMIT', - get: function get() { - return 500; - } - }]); - - function AutoRowSize(hotInstance) { - _classCallCheck(this, AutoRowSize); - - /** - * Cached rows heights. - * - * @type {Array} - */ - var _this = _possibleConstructorReturn(this, (AutoRowSize.__proto__ || Object.getPrototypeOf(AutoRowSize)).call(this, hotInstance)); - - _this.heights = []; - /** - * Instance of {@link GhostTable} for rows and columns size calculations. - * - * @type {GhostTable} - */ - _this.ghostTable = new _ghostTable2.default(_this.hot); - /** - * Instance of {@link SamplesGenerator} for generating samples necessary for rows height calculations. - * - * @type {SamplesGenerator} - */ - _this.samplesGenerator = new _samplesGenerator2.default(function (row, col) { - if (row >= 0) { - return _this.hot.getDataAtCell(row, col); - } else if (row === -1) { - return _this.hot.getColHeader(col); - } - return null; - }); - /** - * `true` if only the first calculation was performed. - * - * @type {Boolean} - */ - _this.firstCalculation = true; - /** - * `true` if the size calculation is in progress. - * - * @type {Boolean} - */ - _this.inProgress = false; - - // moved to constructor to allow auto-sizing the rows when the plugin is disabled - _this.addHook('beforeRowResize', function (row, size, isDblClick) { - return _this.onBeforeRowResize(row, size, isDblClick); - }); - return _this; - } - - /** - * Check if the plugin is enabled in the Handsontable settings. - * - * @returns {Boolean} - */ - - - _createClass(AutoRowSize, [{ - key: 'isEnabled', - value: function isEnabled() { - return this.hot.getSettings().autoRowSize === true || (0, _object.isObject)(this.hot.getSettings().autoRowSize); - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - - this.setSamplingOptions(); - - this.addHook('afterLoadData', function () { - return _this2.onAfterLoadData(); - }); - this.addHook('beforeChange', function (changes) { - return _this2.onBeforeChange(changes); - }); - this.addHook('beforeColumnMove', function () { - return _this2.recalculateAllRowsHeight(); - }); - this.addHook('beforeColumnResize', function () { - return _this2.recalculateAllRowsHeight(); - }); - this.addHook('beforeColumnSort', function () { - return _this2.clearCache(); - }); - this.addHook('beforeRender', function (force) { - return _this2.onBeforeRender(force); - }); - this.addHook('beforeRowMove', function (rowStart, rowEnd) { - return _this2.onBeforeRowMove(rowStart, rowEnd); - }); - this.addHook('modifyRowHeight', function (height, row) { - return _this2.getRowHeight(row, height); - }); - this.addHook('modifyColumnHeaderHeight', function () { - return _this2.getColumnHeaderHeight(); - }); - _get(AutoRowSize.prototype.__proto__ || Object.getPrototypeOf(AutoRowSize.prototype), 'enablePlugin', this).call(this); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - _get(AutoRowSize.prototype.__proto__ || Object.getPrototypeOf(AutoRowSize.prototype), 'disablePlugin', this).call(this); - } - - /** - * Calculate a given rows height. - * - * @param {Number|Object} rowRange Row range object. - * @param {Number|Object} colRange Column range object. - * @param {Boolean} [force=false] If `true` force calculate height even when value was cached earlier. - */ - - }, { - key: 'calculateRowsHeight', - value: function calculateRowsHeight() { - var rowRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { from: 0, to: this.hot.countRows() - 1 }; - - var _this3 = this; - - var colRange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { from: 0, to: this.hot.countCols() - 1 }; - var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - if (typeof rowRange === 'number') { - rowRange = { from: rowRange, to: rowRange }; - } - if (typeof colRange === 'number') { - colRange = { from: colRange, to: colRange }; - } - - if (this.hot.getColHeader(0) !== null) { - var samples = this.samplesGenerator.generateRowSamples(-1, colRange); - - this.ghostTable.addColumnHeadersRow(samples.get(-1)); - } - - (0, _number.rangeEach)(rowRange.from, rowRange.to, function (row) { - // For rows we must calculate row height even when user had set height value manually. - // We can shrink column but cannot shrink rows! - if (force || _this3.heights[row] === void 0) { - var _samples = _this3.samplesGenerator.generateRowSamples(row, colRange); - - _samples.forEach(function (sample, row) { - _this3.ghostTable.addRow(row, sample); - }); - } - }); - if (this.ghostTable.rows.length) { - this.ghostTable.getHeights(function (row, height) { - _this3.heights[row] = height; - }); - this.ghostTable.clean(); - } - } - - /** - * Calculate the height of all the rows. - * - * @param {Object|Number} colRange Column range object. - */ - - }, { - key: 'calculateAllRowsHeight', - value: function calculateAllRowsHeight() { - var _this4 = this; - - var colRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { from: 0, to: this.hot.countCols() - 1 }; - - var current = 0; - var length = this.hot.countRows() - 1; - var timer = null; - - this.inProgress = true; - - var loop = function loop() { - // When hot was destroyed after calculating finished cancel frame - if (!_this4.hot) { - (0, _feature.cancelAnimationFrame)(timer); - _this4.inProgress = false; - - return; - } - _this4.calculateRowsHeight({ from: current, to: Math.min(current + AutoRowSize.CALCULATION_STEP, length) }, colRange); - current = current + AutoRowSize.CALCULATION_STEP + 1; - - if (current < length) { - timer = (0, _feature.requestAnimationFrame)(loop); - } else { - (0, _feature.cancelAnimationFrame)(timer); - _this4.inProgress = false; - - // @TODO Should call once per render cycle, currently fired separately in different plugins - _this4.hot.view.wt.wtOverlays.adjustElementsSize(true); - // tmp - if (_this4.hot.view.wt.wtOverlays.leftOverlay.needFullRender) { - _this4.hot.view.wt.wtOverlays.leftOverlay.clone.draw(); - } - } - }; - // sync - if (this.firstCalculation && this.getSyncCalculationLimit()) { - this.calculateRowsHeight({ from: 0, to: this.getSyncCalculationLimit() }, colRange); - this.firstCalculation = false; - current = this.getSyncCalculationLimit() + 1; - } - // async - if (current < length) { - loop(); - } else { - this.inProgress = false; - this.hot.view.wt.wtOverlays.adjustElementsSize(false); - } - } - - /** - * Set the sampling options. - * - * @private - */ - - }, { - key: 'setSamplingOptions', - value: function setSamplingOptions() { - var setting = this.hot.getSettings().autoRowSize; - var samplingRatio = setting && (0, _object.hasOwnProperty)(setting, 'samplingRatio') ? this.hot.getSettings().autoRowSize.samplingRatio : void 0; - var allowSampleDuplicates = setting && (0, _object.hasOwnProperty)(setting, 'allowSampleDuplicates') ? this.hot.getSettings().autoRowSize.allowSampleDuplicates : void 0; - - if (samplingRatio && !isNaN(samplingRatio)) { - this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10)); - } - - if (allowSampleDuplicates) { - this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates); - } - } - - /** - * Recalculate all rows height (overwrite cache values). - */ - - }, { - key: 'recalculateAllRowsHeight', - value: function recalculateAllRowsHeight() { - if ((0, _element.isVisible)(this.hot.view.wt.wtTable.TABLE)) { - this.clearCache(); - this.calculateAllRowsHeight(); - } - } - - /** - * Get value which tells how much rows will be calculated synchronously. Rest rows will be calculated asynchronously. - * - * @returns {Number} - */ - - }, { - key: 'getSyncCalculationLimit', - value: function getSyncCalculationLimit() { - /* eslint-disable no-bitwise */ - var limit = AutoRowSize.SYNC_CALCULATION_LIMIT; - var rowsLimit = this.hot.countRows() - 1; - - if ((0, _object.isObject)(this.hot.getSettings().autoRowSize)) { - limit = this.hot.getSettings().autoRowSize.syncLimit; - - if ((0, _string.isPercentValue)(limit)) { - limit = (0, _number.valueAccordingPercent)(rowsLimit, limit); - } else { - // Force to Number - limit >>= 0; - } - } - - return Math.min(limit, rowsLimit); - } - - /** - * Get the calculated row height. - * - * @param {Number} row Visual row index. - * @param {Number} [defaultHeight] Default row height. It will be pick up if no calculated height found. - * @returns {Number} - */ - - }, { - key: 'getRowHeight', - value: function getRowHeight(row) { - var defaultHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : void 0; - - var height = defaultHeight; - - if (this.heights[row] !== void 0 && this.heights[row] > (defaultHeight || 0)) { - height = this.heights[row]; - } - - return height; - } - - /** - * Get the calculated column header height. - * - * @returns {Number|undefined} - */ - - }, { - key: 'getColumnHeaderHeight', - value: function getColumnHeaderHeight() { - return this.heights[-1]; - } - - /** - * Get the first visible row. - * - * @returns {Number} Returns row index or -1 if table is not rendered. - */ - - }, { - key: 'getFirstVisibleRow', - value: function getFirstVisibleRow() { - var wot = this.hot.view.wt; - - if (wot.wtViewport.rowsVisibleCalculator) { - return wot.wtTable.getFirstVisibleRow(); - } - if (wot.wtViewport.rowsRenderCalculator) { - return wot.wtTable.getFirstRenderedRow(); - } - - return -1; - } - - /** - * Get the last visible row. - * - * @returns {Number} Returns row index or -1 if table is not rendered. - */ - - }, { - key: 'getLastVisibleRow', - value: function getLastVisibleRow() { - var wot = this.hot.view.wt; - - if (wot.wtViewport.rowsVisibleCalculator) { - return wot.wtTable.getLastVisibleRow(); - } - if (wot.wtViewport.rowsRenderCalculator) { - return wot.wtTable.getLastRenderedRow(); - } - - return -1; - } - - /** - * Clear cached heights. - */ - - }, { - key: 'clearCache', - value: function clearCache() { - this.heights.length = 0; - this.heights[-1] = void 0; - } - - /** - * Clear cache by range. - * - * @param {Object|Number} range Row range object. - */ - - }, { - key: 'clearCacheByRange', - value: function clearCacheByRange(range) { - var _this5 = this; - - if (typeof range === 'number') { - range = { from: range, to: range }; - } - (0, _number.rangeEach)(Math.min(range.from, range.to), Math.max(range.from, range.to), function (row) { - _this5.heights[row] = void 0; - }); - } - - /** - * @returns {Boolean} - */ - - }, { - key: 'isNeedRecalculate', - value: function isNeedRecalculate() { - return !!(0, _array.arrayFilter)(this.heights, function (item) { - return item === void 0; - }).length; - } - - /** - * On before render listener. - * - * @private - */ - - }, { - key: 'onBeforeRender', - value: function onBeforeRender() { - var force = this.hot.renderCall; - this.calculateRowsHeight({ from: this.getFirstVisibleRow(), to: this.getLastVisibleRow() }, void 0, force); - - var fixedRowsBottom = this.hot.getSettings().fixedRowsBottom; - - // Calculate rows height synchronously for bottom overlay - if (fixedRowsBottom) { - var totalRows = this.hot.countRows() - 1; - this.calculateRowsHeight({ from: totalRows - fixedRowsBottom, to: totalRows }); - } - - if (this.isNeedRecalculate() && !this.inProgress) { - this.calculateAllRowsHeight(); - } - } - - /** - * On before row move listener. - * - * @private - * @param {Number} from Row index where was grabbed. - * @param {Number} to Destination row index. - */ - - }, { - key: 'onBeforeRowMove', - value: function onBeforeRowMove(from, to) { - this.clearCacheByRange({ from: from, to: to }); - this.calculateAllRowsHeight(); - } - - /** - * On before row resize listener. - * - * @private - * @param {Number} row - * @param {Number} size - * @param {Boolean} isDblClick - * @returns {Number} - */ - - }, { - key: 'onBeforeRowResize', - value: function onBeforeRowResize(row, size, isDblClick) { - if (isDblClick) { - this.calculateRowsHeight(row, void 0, true); - size = this.getRowHeight(row); - } - - return size; - } - - /** - * On after load data listener. - * - * @private - */ - - }, { - key: 'onAfterLoadData', - value: function onAfterLoadData() { - var _this6 = this; - - if (this.hot.view) { - this.recalculateAllRowsHeight(); - } else { - // first load - initialization - setTimeout(function () { - if (_this6.hot) { - _this6.recalculateAllRowsHeight(); - } - }, 0); - } - } - - /** - * On before change listener. - * - * @private - * @param {Array} changes - */ - - }, { - key: 'onBeforeChange', - value: function onBeforeChange(changes) { - var range = null; - - if (changes.length === 1) { - range = changes[0][0]; - } else if (changes.length > 1) { - range = { - from: changes[0][0], - to: changes[changes.length - 1][0] - }; - } - if (range !== null) { - this.clearCacheByRange(range); - } - } - - /** - * Destroy plugin instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - this.ghostTable.clean(); - _get(AutoRowSize.prototype.__proto__ || Object.getPrototypeOf(AutoRowSize.prototype), 'destroy', this).call(this); - } - }]); - - return AutoRowSize; -}(_base2.default); - -(0, _plugins.registerPlugin)('autoRowSize', AutoRowSize); - -exports.default = AutoRowSize; - -/***/ }), -/* 212 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _element = __webpack_require__(0); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _plugins = __webpack_require__(5); - -var _src = __webpack_require__(11); - -var _utils = __webpack_require__(213); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -_pluginHooks2.default.getSingleton().register('modifyAutofillRange'); -_pluginHooks2.default.getSingleton().register('beforeAutofill'); - -var INSERT_ROW_ALTER_ACTION_NAME = 'insert_row'; -var INTERVAL_FOR_ADDING_ROW = 200; - -/** - * This plugin provides "drag-down" and "copy-down" functionalities, both operated - * using the small square in the right bottom of the cell selection. - * - * "Drag-down" expands the value of the selected cells to the neighbouring - * cells when you drag the small square in the corner. - * - * "Copy-down" copies the value of the selection to all empty cells - * below when you double click the small square. - * - * @class Autofill - * @plugin Autofill - */ - -var Autofill = function (_BasePlugin) { - _inherits(Autofill, _BasePlugin); - - function Autofill(hotInstance) { - _classCallCheck(this, Autofill); - - /** - * Event manager - * - * @type {EventManager} - */ - var _this = _possibleConstructorReturn(this, (Autofill.__proto__ || Object.getPrototypeOf(Autofill)).call(this, hotInstance)); - - _this.eventManager = new _eventManager2.default(_this); - /** - * Specifies if adding new row started. - * - * @type {Boolean} - */ - _this.addingStarted = false; - /** - * Specifies if there was mouse down on the cell corner. - * - * @type {Boolean} - */ - _this.mouseDownOnCellCorner = false; - /** - * Specifies if mouse was dragged outside Handsontable. - * - * @type {Boolean} - */ - _this.mouseDragOutside = false; - /** - * Specifies how many cell levels were dragged using the handle. - * - * @type {Boolean} - */ - _this.handleDraggedCells = 0; - /** - * Specifies allowed directions of drag. - * - * @type {Array} - */ - _this.directions = []; - /** - * Specifies if can insert new rows if needed. - * - * @type {Boolean} - */ - _this.autoInsertRow = false; - return _this; - } - - /** - * Check if the plugin is enabled in the Handsontable settings. - * - * @returns {Boolean} - */ - - - _createClass(Autofill, [{ - key: 'isEnabled', - value: function isEnabled() { - return this.hot.getSettings().fillHandle; - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - - this.mapSettings(); - this.registerEvents(); - - this.addHook('afterOnCellCornerMouseDown', function (event) { - return _this2.onAfterCellCornerMouseDown(event); - }); - this.addHook('afterOnCellCornerDblClick', function (event) { - return _this2.onCellCornerDblClick(event); - }); - this.addHook('beforeOnCellMouseOver', function (event, coords, TD) { - return _this2.onBeforeCellMouseOver(coords); - }); - - _get(Autofill.prototype.__proto__ || Object.getPrototypeOf(Autofill.prototype), 'enablePlugin', this).call(this); - } - - /** - * Update plugin for this Handsontable instance. - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() { - this.disablePlugin(); - this.enablePlugin(); - _get(Autofill.prototype.__proto__ || Object.getPrototypeOf(Autofill.prototype), 'updatePlugin', this).call(this); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - this.clearMappedSettings(); - _get(Autofill.prototype.__proto__ || Object.getPrototypeOf(Autofill.prototype), 'disablePlugin', this).call(this); - } - - /** - * Get selection data - * - * @private - * @returns {Array} Array with the data. - */ - - }, { - key: 'getSelectionData', - value: function getSelectionData() { - var selRange = { - from: this.hot.getSelectedRange().from, - to: this.hot.getSelectedRange().to - }; - - return this.hot.getData(selRange.from.row, selRange.from.col, selRange.to.row, selRange.to.col); - } - - /** - * Try to apply fill values to the area in fill border, omitting the selection border. - * - * @private - * @returns {Boolean} reports if fill was applied. - */ - - }, { - key: 'fillIn', - value: function fillIn() { - if (this.hot.view.wt.selections.fill.isEmpty()) { - return false; - } - - var cornersOfSelectionAndDragAreas = this.hot.view.wt.selections.fill.getCorners(); - - this.resetSelectionOfDraggedArea(); - - var cornersOfSelectedCells = this.getCornersOfSelectedCells(); - - var _getDragDirectionAndR = (0, _utils.getDragDirectionAndRange)(cornersOfSelectedCells, cornersOfSelectionAndDragAreas), - directionOfDrag = _getDragDirectionAndR.directionOfDrag, - startOfDragCoords = _getDragDirectionAndR.startOfDragCoords, - endOfDragCoords = _getDragDirectionAndR.endOfDragCoords; - - this.hot.runHooks('modifyAutofillRange', cornersOfSelectedCells, cornersOfSelectionAndDragAreas); - - if (startOfDragCoords && startOfDragCoords.row > -1 && startOfDragCoords.col > -1) { - var selectionData = this.getSelectionData(); - var deltas = (0, _utils.getDeltas)(startOfDragCoords, endOfDragCoords, selectionData, directionOfDrag); - var fillData = selectionData; - - this.hot.runHooks('beforeAutofill', startOfDragCoords, endOfDragCoords, selectionData); - - if (['up', 'left'].indexOf(directionOfDrag) > -1) { - fillData = []; - - var dragLength = null; - var fillOffset = null; - - if (directionOfDrag === 'up') { - dragLength = endOfDragCoords.row - startOfDragCoords.row + 1; - fillOffset = dragLength % selectionData.length; - - for (var i = 0; i < dragLength; i++) { - fillData.push(selectionData[(i + (selectionData.length - fillOffset)) % selectionData.length]); - } - } else { - dragLength = endOfDragCoords.col - startOfDragCoords.col + 1; - fillOffset = dragLength % selectionData[0].length; - - for (var _i = 0; _i < selectionData.length; _i++) { - fillData.push([]); - for (var j = 0; j < dragLength; j++) { - fillData[_i].push(selectionData[_i][(j + (selectionData[_i].length - fillOffset)) % selectionData[_i].length]); - } - } - } - } - - this.hot.populateFromArray(startOfDragCoords.row, startOfDragCoords.col, fillData, endOfDragCoords.row, endOfDragCoords.col, this.pluginName + '.fill', null, directionOfDrag, deltas); - - this.setSelection(cornersOfSelectionAndDragAreas); - } else { - // reset to avoid some range bug - this.hot.selection.refreshBorders(); - } - - return true; - } - - /** - * Reduce the selection area if the handle was dragged outside of the table or on headers. - * - * @private - * @param {CellCoords} coords indexes of selection corners. - * @returns {CellCoords} - */ - - }, { - key: 'reduceSelectionAreaIfNeeded', - value: function reduceSelectionAreaIfNeeded(coords) { - if (coords.row < 0) { - coords.row = 0; - } - - if (coords.col < 0) { - coords.col = 0; - } - return coords; - } - - /** - * Get the coordinates of the drag & drop borders. - * - * @private - * @param {CellCoords} coordsOfSelection `CellCoords` coord object. - * @returns {Array} - */ - - }, { - key: 'getCoordsOfDragAndDropBorders', - value: function getCoordsOfDragAndDropBorders(coordsOfSelection) { - var topLeftCorner = this.hot.getSelectedRange().getTopLeftCorner(); - var bottomRightCorner = this.hot.getSelectedRange().getBottomRightCorner(); - var coords = void 0; - - if (this.directions.includes(_utils.DIRECTIONS.vertical) && (bottomRightCorner.row < coordsOfSelection.row || topLeftCorner.row > coordsOfSelection.row)) { - coords = new _src.CellCoords(coordsOfSelection.row, bottomRightCorner.col); - } else if (this.directions.includes(_utils.DIRECTIONS.horizontal)) { - coords = new _src.CellCoords(bottomRightCorner.row, coordsOfSelection.col); - } else { - // wrong direction - return; - } - - return this.reduceSelectionAreaIfNeeded(coords); - } - - /** - * Show the fill border. - * - * @private - * @param {CellCoords} coordsOfSelection `CellCoords` coord object. - */ - - }, { - key: 'showBorder', - value: function showBorder(coordsOfSelection) { - var coordsOfDragAndDropBorders = this.getCoordsOfDragAndDropBorders(coordsOfSelection); - - if (coordsOfDragAndDropBorders) { - this.redrawBorders(coordsOfDragAndDropBorders); - } - } - - /** - * Add new row - * - * @private - */ - - }, { - key: 'addRow', - value: function addRow() { - var _this3 = this; - - this.hot._registerTimeout(setTimeout(function () { - _this3.hot.alter(INSERT_ROW_ALTER_ACTION_NAME, void 0, 1, _this3.pluginName + '.fill'); - - _this3.addingStarted = false; - }, INTERVAL_FOR_ADDING_ROW)); - } - - /** - * Add new rows if they are needed to continue auto-filling values. - * - * @private - */ - - }, { - key: 'addNewRowIfNeeded', - value: function addNewRowIfNeeded() { - if (this.hot.view.wt.selections.fill.cellRange && this.addingStarted === false && this.autoInsertRow) { - var cornersOfSelectedCells = this.hot.getSelected(); - var cornersOfSelectedDragArea = this.hot.view.wt.selections.fill.getCorners(); - var nrOfTableRows = this.hot.countRows(); - - if (cornersOfSelectedCells[2] < nrOfTableRows - 1 && cornersOfSelectedDragArea[2] === nrOfTableRows - 1) { - this.addingStarted = true; - - this.addRow(); - } - } - } - - /** - * Get corners of selected cells. - * - * @private - * @returns {Array} - */ - - }, { - key: 'getCornersOfSelectedCells', - value: function getCornersOfSelectedCells() { - if (this.hot.selection.isMultiple()) { - return this.hot.view.wt.selections.area.getCorners(); - } - return this.hot.view.wt.selections.current.getCorners(); - } - - /** - * Get index of last adjacent filled in row - * - * @private - * @param {Array} cornersOfSelectedCells indexes of selection corners. - * @returns {Number} gives number greater than or equal to zero when selection adjacent can be applied. - * or -1 when selection adjacent can't be applied - */ - - }, { - key: 'getIndexOfLastAdjacentFilledInRow', - value: function getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells) { - var data = this.hot.getData(); - var nrOfTableRows = this.hot.countRows(); - var lastFilledInRowIndex = void 0; - - for (var rowIndex = cornersOfSelectedCells[2] + 1; rowIndex < nrOfTableRows; rowIndex++) { - for (var columnIndex = cornersOfSelectedCells[1]; columnIndex <= cornersOfSelectedCells[3]; columnIndex++) { - var dataInCell = data[rowIndex][columnIndex]; - - if (dataInCell) { - return -1; - } - } - - var dataInNextLeftCell = data[rowIndex][cornersOfSelectedCells[1] - 1]; - var dataInNextRightCell = data[rowIndex][cornersOfSelectedCells[3] + 1]; - - if (!!dataInNextLeftCell || !!dataInNextRightCell) { - lastFilledInRowIndex = rowIndex; - } - } - return lastFilledInRowIndex; - } - - /** - * Add a selection from the start area to the specific row index. - * - * @private - * @param {Array} selectStartArea selection area from which we start to create more comprehensive selection. - * @param {Number} rowIndex - */ - - }, { - key: 'addSelectionFromStartAreaToSpecificRowIndex', - value: function addSelectionFromStartAreaToSpecificRowIndex(selectStartArea, rowIndex) { - this.hot.view.wt.selections.fill.clear(); - this.hot.view.wt.selections.fill.add(new _src.CellCoords(selectStartArea[0], selectStartArea[1])); - this.hot.view.wt.selections.fill.add(new _src.CellCoords(rowIndex, selectStartArea[3])); - } - - /** - * Set selection based on passed corners. - * - * @private - * @param {Array} cornersOfArea - */ - - }, { - key: 'setSelection', - value: function setSelection(cornersOfArea) { - this.hot.selection.setRangeStart(new _src.CellCoords(cornersOfArea[0], cornersOfArea[1])); - this.hot.selection.setRangeEnd(new _src.CellCoords(cornersOfArea[2], cornersOfArea[3])); - } - - /** - * Try to select cells down to the last row in the left column and then returns if selection was applied. - * - * @private - * @returns {Boolean} - */ - - }, { - key: 'selectAdjacent', - value: function selectAdjacent() { - var cornersOfSelectedCells = this.getCornersOfSelectedCells(); - var lastFilledInRowIndex = this.getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells); - - if (lastFilledInRowIndex === -1) { - return false; - } - this.addSelectionFromStartAreaToSpecificRowIndex(cornersOfSelectedCells, lastFilledInRowIndex); - - return true; - } - - /** - * Reset selection of dragged area. - * - * @private - */ - - }, { - key: 'resetSelectionOfDraggedArea', - value: function resetSelectionOfDraggedArea() { - this.handleDraggedCells = 0; - - this.hot.view.wt.selections.fill.clear(); - } - - /** - * Redraw borders. - * - * @private - * @param {CellCoords} coords `CellCoords` coord object. - */ - - }, { - key: 'redrawBorders', - value: function redrawBorders(coords) { - this.hot.view.wt.selections.fill.clear(); - this.hot.view.wt.selections.fill.add(this.hot.getSelectedRange().from); - this.hot.view.wt.selections.fill.add(this.hot.getSelectedRange().to); - this.hot.view.wt.selections.fill.add(coords); - this.hot.view.render(); - } - - /** - * Get if mouse was dragged outside. - * - * @private - * @param {MouseEvent} event `mousemove` event properties. - * @returns {Boolean} - */ - - }, { - key: 'getIfMouseWasDraggedOutside', - value: function getIfMouseWasDraggedOutside(event) { - var tableBottom = (0, _element.offset)(this.hot.table).top - (window.pageYOffset || document.documentElement.scrollTop) + (0, _element.outerHeight)(this.hot.table); - var tableRight = (0, _element.offset)(this.hot.table).left - (window.pageXOffset || document.documentElement.scrollLeft) + (0, _element.outerWidth)(this.hot.table); - - return event.clientY > tableBottom && event.clientX <= tableRight; - } - - /** - * Bind the events used by the plugin. - * - * @private - */ - - }, { - key: 'registerEvents', - value: function registerEvents() { - var _this4 = this; - - this.eventManager.addEventListener(document.documentElement, 'mouseup', function () { - return _this4.onMouseUp(); - }); - this.eventManager.addEventListener(document.documentElement, 'mousemove', function (event) { - return _this4.onMouseMove(event); - }); - } - - /** - * On cell corner double click callback. - * - * @private - */ - - }, { - key: 'onCellCornerDblClick', - value: function onCellCornerDblClick() { - var selectionApplied = this.selectAdjacent(); - - if (selectionApplied) { - this.fillIn(); - } - } - - /** - * On after cell corner mouse down listener. - * - * @private - */ - - }, { - key: 'onAfterCellCornerMouseDown', - value: function onAfterCellCornerMouseDown() { - this.handleDraggedCells = 1; - this.mouseDownOnCellCorner = true; - } - - /** - * On before cell mouse over listener. - * - * @private - * @param {CellCoords} coords `CellCoords` coord object. - */ - - }, { - key: 'onBeforeCellMouseOver', - value: function onBeforeCellMouseOver(coords) { - if (this.mouseDownOnCellCorner && !this.hot.view.isMouseDown() && this.handleDraggedCells) { - this.handleDraggedCells++; - - this.showBorder(coords); - this.addNewRowIfNeeded(); - } - } - - /** - * On mouse up listener. - * - * @private - */ - - }, { - key: 'onMouseUp', - value: function onMouseUp() { - if (this.handleDraggedCells) { - if (this.handleDraggedCells > 1) { - this.fillIn(); - } - - this.handleDraggedCells = 0; - this.mouseDownOnCellCorner = false; - } - } - - /** - * On mouse move listener. - * - * @private - * @param {MouseEvent} event `mousemove` event properties. - */ - - }, { - key: 'onMouseMove', - value: function onMouseMove(event) { - var mouseWasDraggedOutside = this.getIfMouseWasDraggedOutside(event); - - if (this.addingStarted === false && this.handleDraggedCells > 0 && mouseWasDraggedOutside) { - this.mouseDragOutside = true; - this.addingStarted = true; - } else { - this.mouseDragOutside = false; - } - - if (this.mouseDragOutside && this.autoInsertRow) { - this.addRow(); - } - } - - /** - * Clear mapped settings. - * - * @private - */ - - }, { - key: 'clearMappedSettings', - value: function clearMappedSettings() { - this.directions.length = 0; - this.autoInsertRow = false; - } - - /** - * Map settings. - * - * @private - */ - - }, { - key: 'mapSettings', - value: function mapSettings() { - var mappedSettings = (0, _utils.getMappedFillHandleSetting)(this.hot.getSettings().fillHandle); - this.directions = mappedSettings.directions; - this.autoInsertRow = mappedSettings.autoInsertRow; - } - - /** - * Destroy plugin instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - _get(Autofill.prototype.__proto__ || Object.getPrototypeOf(Autofill.prototype), 'destroy', this).call(this); - } - }]); - - return Autofill; -}(_base2.default); - -(0, _plugins.registerPlugin)('autofill', Autofill); - -exports.default = Autofill; - -/***/ }), -/* 213 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.DIRECTIONS = undefined; -exports.getDeltas = getDeltas; -exports.getDragDirectionAndRange = getDragDirectionAndRange; -exports.getMappedFillHandleSetting = getMappedFillHandleSetting; - -var _object = __webpack_require__(1); - -var _mixed = __webpack_require__(20); - -var _src = __webpack_require__(11); - -var DIRECTIONS = exports.DIRECTIONS = { - horizontal: 'horizontal', - vertical: 'vertical' -}; - -/** - * Get deltas array. - * - * @param {CellCoords} start - * @param {CellCoords} end - * @param {Array} data - * @param {String} direction - * @returns {Array} - */ -function getDeltas(start, end, data, direction) { - var rowsLength = data.length; - var columnsLength = data ? data[0].length : 0; - var deltas = []; - var diffRow = end.row - start.row; - var diffCol = end.col - start.col; - - if (['down', 'up'].indexOf(direction) !== -1) { - var arr = []; - - for (var col = 0; col <= diffCol; col++) { - var startValue = parseInt(data[0][col], 10); - var endValue = parseInt(data[rowsLength - 1][col], 10); - var delta = (direction === 'down' ? endValue - startValue : startValue - endValue) / (rowsLength - 1) || 0; - - arr.push(delta); - } - - deltas.push(arr); - } - - if (['right', 'left'].indexOf(direction) !== -1) { - for (var row = 0; row <= diffRow; row++) { - var _startValue = parseInt(data[row][0], 10); - var _endValue = parseInt(data[row][columnsLength - 1], 10); - var _delta = (direction === 'right' ? _endValue - _startValue : _startValue - _endValue) / (columnsLength - 1) || 0; - - deltas.push([_delta]); - } - } - - return deltas; -} - -/** - * Get direction between positions and cords of selections difference (drag area) - * - * @param {Array} startSelection - * @param {Array} endSelection - * @returns {{direction: String, start: CellCoords, end: CellCoords}} - */ -function getDragDirectionAndRange(startSelection, endSelection) { - var startOfDragCoords = void 0, - endOfDragCoords = void 0, - directionOfDrag = void 0; - - if (endSelection[0] === startSelection[0] && endSelection[1] < startSelection[1]) { - directionOfDrag = 'left'; - - startOfDragCoords = new _src.CellCoords(endSelection[0], endSelection[1]); - endOfDragCoords = new _src.CellCoords(endSelection[2], startSelection[1] - 1); - } else if (endSelection[0] === startSelection[0] && endSelection[3] > startSelection[3]) { - directionOfDrag = 'right'; - - startOfDragCoords = new _src.CellCoords(endSelection[0], startSelection[3] + 1); - endOfDragCoords = new _src.CellCoords(endSelection[2], endSelection[3]); - } else if (endSelection[0] < startSelection[0] && endSelection[1] === startSelection[1]) { - directionOfDrag = 'up'; - - startOfDragCoords = new _src.CellCoords(endSelection[0], endSelection[1]); - endOfDragCoords = new _src.CellCoords(startSelection[0] - 1, endSelection[3]); - } else if (endSelection[2] > startSelection[2] && endSelection[1] === startSelection[1]) { - directionOfDrag = 'down'; - - startOfDragCoords = new _src.CellCoords(startSelection[2] + 1, endSelection[1]); - endOfDragCoords = new _src.CellCoords(endSelection[2], endSelection[3]); - } - - return { - directionOfDrag: directionOfDrag, - startOfDragCoords: startOfDragCoords, - endOfDragCoords: endOfDragCoords - }; -} - -/** - * Get mapped FillHandle setting containing information about - * allowed FillHandle directions and if allowed is automatic insertion of rows on drag - * - * @param {Boolean|Object} fillHandle property of Handsontable settings - * @returns {{directions: Array, autoInsertRow: Boolean}} object allowing access to information - * about FillHandle in more useful way - */ -function getMappedFillHandleSetting(fillHandle) { - var mappedSettings = {}; - - if (fillHandle === true) { - mappedSettings.directions = Object.keys(DIRECTIONS); - mappedSettings.autoInsertRow = true; - } else if ((0, _object.isObject)(fillHandle)) { - if ((0, _mixed.isDefined)(fillHandle.autoInsertRow)) { - - // autoInsertRow for horizontal direction will be always false - - if (fillHandle.direction === DIRECTIONS.horizontal) { - mappedSettings.autoInsertRow = false; - } else { - mappedSettings.autoInsertRow = fillHandle.autoInsertRow; - } - } else { - mappedSettings.autoInsertRow = false; - } - - if ((0, _mixed.isDefined)(fillHandle.direction)) { - mappedSettings.directions = [fillHandle.direction]; - } else { - mappedSettings.directions = Object.keys(DIRECTIONS); - } - } else if (typeof fillHandle === 'string') { - mappedSettings.directions = [fillHandle]; - mappedSettings.autoInsertRow = true; - } else { - mappedSettings.directions = []; - mappedSettings.autoInsertRow = false; - } - - return mappedSettings; -} - -/***/ }), -/* 214 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _moment = __webpack_require__(61); - -var _moment2 = _interopRequireDefault(_moment); - -var _element = __webpack_require__(0); - -var _array = __webpack_require__(2); - -var _mixed = __webpack_require__(20); - -var _object = __webpack_require__(1); - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _plugins = __webpack_require__(5); - -var _mergeSort = __webpack_require__(272); - -var _mergeSort2 = _interopRequireDefault(_mergeSort); - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -_pluginHooks2.default.getSingleton().register('beforeColumnSort'); -_pluginHooks2.default.getSingleton().register('afterColumnSort'); - -// TODO: Implement mixin arrayMapper to ColumnSorting plugin. - -/** - * @plugin ColumnSorting - * - * @description - * This plugin sorts the view by a column (but does not sort the data source!). - * To enable the plugin, set the `columnSorting` property to either: - * * a boolean value (`true`/`false`), - * * an object defining the initial sorting order (see the example below). - * - * @example - * ```js - * ... - * // as boolean - * columnSorting: true - * ... - * // as a object with initial order (sort ascending column at index 2) - * columnSorting: { - * column: 2, - * sortOrder: true, // true = ascending, false = descending, undefined = original order - * sortEmptyCells: true // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table - * } - * ... - * ``` - * @dependencies ObserveChanges - */ - -var ColumnSorting = function (_BasePlugin) { - _inherits(ColumnSorting, _BasePlugin); - - function ColumnSorting(hotInstance) { - _classCallCheck(this, ColumnSorting); - - var _this2 = _possibleConstructorReturn(this, (ColumnSorting.__proto__ || Object.getPrototypeOf(ColumnSorting)).call(this, hotInstance)); - - _this2.sortIndicators = []; - _this2.lastSortedColumn = null; - _this2.sortEmptyCells = false; - return _this2; - } - - /** - * Check if the plugin is enabled in the handsontable settings. - * - * @returns {Boolean} - */ - - - _createClass(ColumnSorting, [{ - key: 'isEnabled', - value: function isEnabled() { - return !!this.hot.getSettings().columnSorting; - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this3 = this; - - if (this.enabled) { - return; - } - - this.setPluginOptions(); - - var _this = this; - this.hot.sortIndex = []; - - this.hot.sort = function () { - var args = Array.prototype.slice.call(arguments); - - return _this.sortByColumn.apply(_this, _toConsumableArray(args)); - }; - - if (typeof this.hot.getSettings().observeChanges === 'undefined') { - this.enableObserveChangesPlugin(); - } - - this.addHook('afterTrimRow', function (row) { - return _this3.sort(); - }); - this.addHook('afterUntrimRow', function (row) { - return _this3.sort(); - }); - this.addHook('modifyRow', function (row) { - return _this3.translateRow(row); - }); - this.addHook('unmodifyRow', function (row) { - return _this3.untranslateRow(row); - }); - this.addHook('afterUpdateSettings', function () { - return _this3.onAfterUpdateSettings(); - }); - this.addHook('afterGetColHeader', function (col, TH) { - return _this3.getColHeader(col, TH); - }); - this.addHook('afterOnCellMouseDown', function (event, target) { - return _this3.onAfterOnCellMouseDown(event, target); - }); - this.addHook('afterCreateRow', function () { - _this.afterCreateRow.apply(_this, arguments); - }); - this.addHook('afterRemoveRow', function () { - _this.afterRemoveRow.apply(_this, arguments); - }); - this.addHook('afterInit', function () { - return _this3.sortBySettings(); - }); - this.addHook('afterLoadData', function () { - _this3.hot.sortIndex = []; - - if (_this3.hot.view) { - _this3.sortBySettings(); - } - }); - if (this.hot.view) { - this.sortBySettings(); - } - _get(ColumnSorting.prototype.__proto__ || Object.getPrototypeOf(ColumnSorting.prototype), 'enablePlugin', this).call(this); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - this.hot.sort = void 0; - _get(ColumnSorting.prototype.__proto__ || Object.getPrototypeOf(ColumnSorting.prototype), 'disablePlugin', this).call(this); - } - - /** - * afterUpdateSettings callback. - * - * @private - */ - - }, { - key: 'onAfterUpdateSettings', - value: function onAfterUpdateSettings() { - this.sortBySettings(); - } - }, { - key: 'sortBySettings', - value: function sortBySettings() { - var sortingSettings = this.hot.getSettings().columnSorting; - var loadedSortingState = this.loadSortingState(); - var sortingColumn = void 0; - var sortingOrder = void 0; - - if (typeof loadedSortingState === 'undefined') { - sortingColumn = sortingSettings.column; - sortingOrder = sortingSettings.sortOrder; - } else { - sortingColumn = loadedSortingState.sortColumn; - sortingOrder = loadedSortingState.sortOrder; - } - if (typeof sortingColumn === 'number') { - this.lastSortedColumn = sortingColumn; - this.sortByColumn(sortingColumn, sortingOrder); - } - } - - /** - * Set sorted column and order info - * - * @param {number} col Sorted visual column index. - * @param {boolean|undefined} order Sorting order (`true` for ascending, `false` for descending). - */ - - }, { - key: 'setSortingColumn', - value: function setSortingColumn(col, order) { - if (typeof col == 'undefined') { - this.hot.sortColumn = void 0; - this.hot.sortOrder = void 0; - - return; - } else if (this.hot.sortColumn === col && typeof order == 'undefined') { - if (this.hot.sortOrder === false) { - this.hot.sortOrder = void 0; - } else { - this.hot.sortOrder = !this.hot.sortOrder; - } - } else { - this.hot.sortOrder = typeof order === 'undefined' ? true : order; - } - - this.hot.sortColumn = col; - } - }, { - key: 'sortByColumn', - value: function sortByColumn(col, order) { - this.setSortingColumn(col, order); - - if (typeof this.hot.sortColumn == 'undefined') { - return; - } - - var allowSorting = this.hot.runHooks('beforeColumnSort', this.hot.sortColumn, this.hot.sortOrder); - - if (allowSorting !== false) { - this.sort(); - } - this.updateOrderClass(); - this.updateSortIndicator(); - - this.hot.runHooks('afterColumnSort', this.hot.sortColumn, this.hot.sortOrder); - - this.hot.render(); - this.saveSortingState(); - } - - /** - * Save the sorting state - */ - - }, { - key: 'saveSortingState', - value: function saveSortingState() { - var sortingState = {}; - - if (typeof this.hot.sortColumn != 'undefined') { - sortingState.sortColumn = this.hot.sortColumn; - } - - if (typeof this.hot.sortOrder != 'undefined') { - sortingState.sortOrder = this.hot.sortOrder; - } - - if ((0, _object.hasOwnProperty)(sortingState, 'sortColumn') || (0, _object.hasOwnProperty)(sortingState, 'sortOrder')) { - this.hot.runHooks('persistentStateSave', 'columnSorting', sortingState); - } - } - - /** - * Load the sorting state. - * - * @returns {*} Previously saved sorting state. - */ - - }, { - key: 'loadSortingState', - value: function loadSortingState() { - var storedState = {}; - this.hot.runHooks('persistentStateLoad', 'columnSorting', storedState); - - return storedState.value; - } - - /** - * Update sorting class name state. - */ - - }, { - key: 'updateOrderClass', - value: function updateOrderClass() { - var orderClass = void 0; - - if (this.hot.sortOrder === true) { - orderClass = 'ascending'; - } else if (this.hot.sortOrder === false) { - orderClass = 'descending'; - } - this.sortOrderClass = orderClass; - } - }, { - key: 'enableObserveChangesPlugin', - value: function enableObserveChangesPlugin() { - var _this = this; - - this.hot._registerTimeout(setTimeout(function () { - _this.hot.updateSettings({ - observeChanges: true - }); - }, 0)); - } - - /** - * Default sorting algorithm. - * - * @param {Boolean} sortOrder Sorting order - `true` for ascending, `false` for descending. - * @param {Object} columnMeta Column meta object. - * @returns {Function} The comparing function. - */ - - }, { - key: 'defaultSort', - value: function defaultSort(sortOrder, columnMeta) { - return function (a, b) { - if (typeof a[1] == 'string') { - a[1] = a[1].toLowerCase(); - } - if (typeof b[1] == 'string') { - b[1] = b[1].toLowerCase(); - } - - if (a[1] === b[1]) { - return 0; - } - - if ((0, _mixed.isEmpty)(a[1])) { - if ((0, _mixed.isEmpty)(b[1])) { - return 0; - } - - if (columnMeta.columnSorting.sortEmptyCells) { - return sortOrder ? -1 : 1; - } - - return 1; - } - if ((0, _mixed.isEmpty)(b[1])) { - if ((0, _mixed.isEmpty)(a[1])) { - return 0; - } - - if (columnMeta.columnSorting.sortEmptyCells) { - return sortOrder ? 1 : -1; - } - - return -1; - } - - if (isNaN(a[1]) && !isNaN(b[1])) { - return sortOrder ? 1 : -1; - } else if (!isNaN(a[1]) && isNaN(b[1])) { - return sortOrder ? -1 : 1; - } else if (!(isNaN(a[1]) || isNaN(b[1]))) { - a[1] = parseFloat(a[1]); - b[1] = parseFloat(b[1]); - } - if (a[1] < b[1]) { - return sortOrder ? -1 : 1; - } - if (a[1] > b[1]) { - return sortOrder ? 1 : -1; - } - - return 0; - }; - } - - /** - * Date sorting algorithm - * @param {Boolean} sortOrder Sorting order (`true` for ascending, `false` for descending). - * @param {Object} columnMeta Column meta object. - * @returns {Function} The compare function. - */ - - }, { - key: 'dateSort', - value: function dateSort(sortOrder, columnMeta) { - return function (a, b) { - if (a[1] === b[1]) { - return 0; - } - - if ((0, _mixed.isEmpty)(a[1])) { - if ((0, _mixed.isEmpty)(b[1])) { - return 0; - } - - if (columnMeta.columnSorting.sortEmptyCells) { - return sortOrder ? -1 : 1; - } - - return 1; - } - - if ((0, _mixed.isEmpty)(b[1])) { - if ((0, _mixed.isEmpty)(a[1])) { - return 0; - } - - if (columnMeta.columnSorting.sortEmptyCells) { - return sortOrder ? 1 : -1; - } - - return -1; - } - - var aDate = (0, _moment2.default)(a[1], columnMeta.dateFormat); - var bDate = (0, _moment2.default)(b[1], columnMeta.dateFormat); - - if (!aDate.isValid()) { - return 1; - } - if (!bDate.isValid()) { - return -1; - } - - if (bDate.isAfter(aDate)) { - return sortOrder ? -1 : 1; - } - if (bDate.isBefore(aDate)) { - return sortOrder ? 1 : -1; - } - - return 0; - }; - } - - /** - * Numeric sorting algorithm. - * - * @param {Boolean} sortOrder Sorting order (`true` for ascending, `false` for descending). - * @param {Object} columnMeta Column meta object. - * @returns {Function} The compare function. - */ - - }, { - key: 'numericSort', - value: function numericSort(sortOrder, columnMeta) { - return function (a, b) { - var parsedA = parseFloat(a[1]); - var parsedB = parseFloat(b[1]); - - // Watch out when changing this part of code! - // Check below returns 0 (as expected) when comparing empty string, null, undefined - if (parsedA === parsedB || isNaN(parsedA) && isNaN(parsedB)) { - return 0; - } - - if (columnMeta.columnSorting.sortEmptyCells) { - if ((0, _mixed.isEmpty)(a[1])) { - return sortOrder ? -1 : 1; - } - - if ((0, _mixed.isEmpty)(b[1])) { - return sortOrder ? 1 : -1; - } - } - - if (isNaN(parsedA)) { - return 1; - } - - if (isNaN(parsedB)) { - return -1; - } - - if (parsedA < parsedB) { - return sortOrder ? -1 : 1; - } else if (parsedA > parsedB) { - return sortOrder ? 1 : -1; - } - - return 0; - }; - } - - /** - * Perform the sorting. - */ - - }, { - key: 'sort', - value: function sort() { - if (typeof this.hot.sortOrder == 'undefined') { - this.hot.sortIndex.length = 0; - - return; - } - - var colMeta = this.hot.getCellMeta(0, this.hot.sortColumn); - var emptyRows = this.hot.countEmptyRows(); - var sortFunction = void 0; - var nrOfRows = void 0; - - this.hot.sortingEnabled = false; // this is required by translateRow plugin hook - this.hot.sortIndex.length = 0; - - if (typeof colMeta.columnSorting.sortEmptyCells === 'undefined') { - colMeta.columnSorting = { sortEmptyCells: this.sortEmptyCells }; - } - - if (this.hot.getSettings().maxRows === Number.POSITIVE_INFINITY) { - nrOfRows = this.hot.countRows() - this.hot.getSettings().minSpareRows; - } else { - nrOfRows = this.hot.countRows() - emptyRows; - } - - for (var i = 0, ilen = nrOfRows; i < ilen; i++) { - this.hot.sortIndex.push([i, this.hot.getDataAtCell(i, this.hot.sortColumn)]); - } - - if (colMeta.sortFunction) { - sortFunction = colMeta.sortFunction; - } else { - switch (colMeta.type) { - case 'date': - sortFunction = this.dateSort; - break; - case 'numeric': - sortFunction = this.numericSort; - break; - default: - sortFunction = this.defaultSort; - } - } - - (0, _mergeSort2.default)(this.hot.sortIndex, sortFunction(this.hot.sortOrder, colMeta)); - - // Append spareRows - for (var _i = this.hot.sortIndex.length; _i < this.hot.countRows(); _i++) { - this.hot.sortIndex.push([_i, this.hot.getDataAtCell(_i, this.hot.sortColumn)]); - } - - this.hot.sortingEnabled = true; // this is required by translateRow plugin hook - } - - /** - * Update indicator states. - */ - - }, { - key: 'updateSortIndicator', - value: function updateSortIndicator() { - if (typeof this.hot.sortOrder == 'undefined') { - return; - } - var colMeta = this.hot.getCellMeta(0, this.hot.sortColumn); - - this.sortIndicators[this.hot.sortColumn] = colMeta.sortIndicator; - } - - /** - * `modifyRow` hook callback. Translates physical row index to the sorted row index. - * - * @param {Number} row Row index. - * @returns {Number} Sorted row index. - */ - - }, { - key: 'translateRow', - value: function translateRow(row) { - if (this.hot.sortingEnabled && typeof this.hot.sortOrder !== 'undefined' && this.hot.sortIndex && this.hot.sortIndex.length && this.hot.sortIndex[row]) { - return this.hot.sortIndex[row][0]; - } - - return row; - } - - /** - * Translates sorted row index to physical row index. - * - * @param {Number} row Sorted (visual) row index. - * @returns {number} Physical row index. - */ - - }, { - key: 'untranslateRow', - value: function untranslateRow(row) { - if (this.hot.sortingEnabled && this.hot.sortIndex && this.hot.sortIndex.length) { - for (var i = 0; i < this.hot.sortIndex.length; i++) { - if (this.hot.sortIndex[i][0] == row) { - return i; - } - } - } - } - - /** - * `afterGetColHeader` callback. Adds column sorting css classes to clickable headers. - * - * @private - * @param {Number} col Visual column index. - * @param {Element} TH TH HTML element. - */ - - }, { - key: 'getColHeader', - value: function getColHeader(col, TH) { - if (col < 0 || !TH.parentNode) { - return false; - } - - var headerLink = TH.querySelector('.colHeader'); - var colspan = TH.getAttribute('colspan'); - var TRs = TH.parentNode.parentNode.childNodes; - var headerLevel = Array.prototype.indexOf.call(TRs, TH.parentNode); - headerLevel -= TRs.length; - - if (!headerLink) { - return; - } - - if (this.hot.getSettings().columnSorting && col >= 0 && headerLevel === -1) { - (0, _element.addClass)(headerLink, 'columnSorting'); - } - (0, _element.removeClass)(headerLink, 'descending'); - (0, _element.removeClass)(headerLink, 'ascending'); - - if (this.sortIndicators[col]) { - if (col === this.hot.sortColumn) { - if (this.sortOrderClass === 'ascending') { - (0, _element.addClass)(headerLink, 'ascending'); - } else if (this.sortOrderClass === 'descending') { - (0, _element.addClass)(headerLink, 'descending'); - } - } - } - } - - /** - * Check if any column is in a sorted state. - * - * @returns {Boolean} - */ - - }, { - key: 'isSorted', - value: function isSorted() { - return typeof this.hot.sortColumn != 'undefined'; - } - - /** - * `afterCreateRow` callback. Updates the sorting state after a row have been created. - * - * @private - * @param {Number} index Visual row index. - * @param {Number} amount - */ - - }, { - key: 'afterCreateRow', - value: function afterCreateRow(index, amount) { - if (!this.isSorted()) { - return; - } - - for (var i = 0; i < this.hot.sortIndex.length; i++) { - if (this.hot.sortIndex[i][0] >= index) { - this.hot.sortIndex[i][0] += amount; - } - } - - for (var _i2 = 0; _i2 < amount; _i2++) { - this.hot.sortIndex.splice(index + _i2, 0, [index + _i2, this.hot.getSourceData()[index + _i2][this.hot.sortColumn + this.hot.colOffset()]]); - } - - this.saveSortingState(); - } - - /** - * `afterRemoveRow` hook callback. - * - * @private - * @param {Number} index Visual row index. - * @param {Number} amount - */ - - }, { - key: 'afterRemoveRow', - value: function afterRemoveRow(index, amount) { - if (!this.isSorted()) { - return; - } - var removedRows = this.hot.sortIndex.splice(index, amount); - - removedRows = (0, _array.arrayMap)(removedRows, function (row) { - return row[0]; - }); - - function countRowShift(logicalRow) { - // Todo: compare perf between reduce vs sort->each->brake - return (0, _array.arrayReduce)(removedRows, function (count, removedLogicalRow) { - if (logicalRow > removedLogicalRow) { - count++; - } - - return count; - }, 0); - } - - this.hot.sortIndex = (0, _array.arrayMap)(this.hot.sortIndex, function (logicalRow, physicalRow) { - var rowShift = countRowShift(logicalRow[0]); - - if (rowShift) { - logicalRow[0] -= rowShift; - } - - return logicalRow; - }); - - this.saveSortingState(); - } - - /** - * Set options by passed settings - * - * @private - */ - - }, { - key: 'setPluginOptions', - value: function setPluginOptions() { - var columnSorting = this.hot.getSettings().columnSorting; - - if ((typeof columnSorting === 'undefined' ? 'undefined' : _typeof(columnSorting)) === 'object') { - this.sortEmptyCells = columnSorting.sortEmptyCells || false; - } else { - this.sortEmptyCells = false; - } - } - - /** - * `onAfterOnCellMouseDown` hook callback. - * - * @private - * @param {Event} event Event which are provided by hook. - * @param {CellCoords} coords Visual coords of the selected cell. - */ - - }, { - key: 'onAfterOnCellMouseDown', - value: function onAfterOnCellMouseDown(event, coords) { - if (coords.row > -1) { - return; - } - - if ((0, _element.hasClass)(event.realTarget, 'columnSorting')) { - // reset order state on every new column header click - if (coords.col !== this.lastSortedColumn) { - this.hot.sortOrder = true; - } - - this.lastSortedColumn = coords.col; - - this.sortByColumn(coords.col); - } - } - }]); - - return ColumnSorting; -}(_base2.default); - -(0, _plugins.registerPlugin)('columnSorting', ColumnSorting); - -exports.default = ColumnSorting; - -/***/ }), -/* 215 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * Comment editor for the Comments plugin. - * - * @class CommentEditor - * @plugin Comments - */ -var CommentEditor = function () { - _createClass(CommentEditor, null, [{ - key: 'CLASS_EDITOR_CONTAINER', - get: function get() { - return 'htCommentsContainer'; - } - }, { - key: 'CLASS_EDITOR', - get: function get() { - return 'htComments'; - } - }, { - key: 'CLASS_INPUT', - get: function get() { - return 'htCommentTextArea'; - } - }, { - key: 'CLASS_CELL', - get: function get() { - return 'htCommentCell'; - } - }]); - - function CommentEditor() { - _classCallCheck(this, CommentEditor); - - this.editor = this.createEditor(); - this.editorStyle = this.editor.style; - - this.hidden = true; - - this.hide(); - } - - /** - * Set position of the comments editor according to the provided x and y coordinates. - * - * @param {Number} x X position (in pixels). - * @param {Number} y Y position (in pixels). - */ - - - _createClass(CommentEditor, [{ - key: 'setPosition', - value: function setPosition(x, y) { - this.editorStyle.left = x + 'px'; - this.editorStyle.top = y + 'px'; - } - - /** - * Set the editor size according to the provided arguments. - * - * @param {Number} width Width in pixels. - * @param {Number} height Height in pixels. - */ - - }, { - key: 'setSize', - value: function setSize(width, height) { - if (width && height) { - var input = this.getInputElement(); - - input.style.width = width + 'px'; - input.style.height = height + 'px'; - } - } - - /** - * Reset the editor size to its initial state. - */ - - }, { - key: 'resetSize', - value: function resetSize() { - var input = this.getInputElement(); - - input.style.width = ''; - input.style.height = ''; - } - - /** - * Set the read-only state for the comments editor. - * - * @param {Boolean} state The new read only state. - */ - - }, { - key: 'setReadOnlyState', - value: function setReadOnlyState(state) { - var input = this.getInputElement(); - - input.readOnly = state; - } - - /** - * Show the comments editor. - */ - - }, { - key: 'show', - value: function show() { - this.editorStyle.display = 'block'; - this.hidden = false; - } - - /** - * Hide the comments editor. - */ - - }, { - key: 'hide', - value: function hide() { - this.editorStyle.display = 'none'; - this.hidden = true; - } - - /** - * Checks if the editor is visible. - * - * @returns {Boolean} - */ - - }, { - key: 'isVisible', - value: function isVisible() { - return this.editorStyle.display === 'block'; - } - - /** - * Set the comment value. - * - * @param {String} [value] The value to use. - */ - - }, { - key: 'setValue', - value: function setValue() { - var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - - value = value || ''; - this.getInputElement().value = value; - } - - /** - * Get the comment value. - * - * @returns {String} - */ - - }, { - key: 'getValue', - value: function getValue() { - return this.getInputElement().value; - } - - /** - * Checks if the comment input element is focused. - * - * @returns {Boolean} - */ - - }, { - key: 'isFocused', - value: function isFocused() { - return document.activeElement === this.getInputElement(); - } - - /** - * Focus the comments input element. - */ - - }, { - key: 'focus', - value: function focus() { - this.getInputElement().focus(); - } - - /** - * Create the `textarea` to be used as a comments editor. - * - * @returns {HTMLElement} - */ - - }, { - key: 'createEditor', - value: function createEditor() { - var container = document.querySelector('.' + CommentEditor.CLASS_EDITOR_CONTAINER); - var editor = void 0; - var textArea = void 0; - - if (!container) { - container = document.createElement('div'); - (0, _element.addClass)(container, CommentEditor.CLASS_EDITOR_CONTAINER); - document.body.appendChild(container); - } - editor = document.createElement('div'); - (0, _element.addClass)(editor, CommentEditor.CLASS_EDITOR); - - textArea = document.createElement('textarea'); - (0, _element.addClass)(textArea, CommentEditor.CLASS_INPUT); - - editor.appendChild(textArea); - container.appendChild(editor); - - return editor; - } - - /** - * Get the input element. - * - * @returns {HTMLElement} - */ - - }, { - key: 'getInputElement', - value: function getInputElement() { - return this.editor.querySelector('.' + CommentEditor.CLASS_INPUT); - } - - /** - * Destroy the comments editor. - */ - - }, { - key: 'destroy', - value: function destroy() { - this.editor.parentNode.removeChild(this.editor); - this.editor = null; - this.editorStyle = null; - } - }]); - - return CommentEditor; -}(); - -exports.default = CommentEditor; - -/***/ }), -/* 216 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _element = __webpack_require__(0); - -var _object = __webpack_require__(1); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _src = __webpack_require__(11); - -var _plugins = __webpack_require__(5); - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _commentEditor = __webpack_require__(215); - -var _commentEditor2 = _interopRequireDefault(_commentEditor); - -var _utils = __webpack_require__(17); - -var _displaySwitch = __webpack_require__(217); - -var _displaySwitch2 = _interopRequireDefault(_displaySwitch); - -__webpack_require__(296); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var privatePool = new WeakMap(); -var META_COMMENT = 'comment'; -var META_COMMENT_VALUE = 'value'; -var META_STYLE = 'style'; -var META_READONLY = 'readOnly'; - -/** - * @plugin Comments - * - * @description - * This plugin allows setting and managing cell comments by either an option in the context menu or with the use of the API. - * - * To enable the plugin, you'll need to set the comments property of the config object to `true`: - * ```js - * ... - * comments: true - * ... - * ``` - * - * or object with extra predefined plugin config: - * - * ```js - * ... - * comments: { - * displayDelay: 1000 - * } - * ... - * ``` - * - * To add comments at the table initialization, define the `comment` property in the `cell` config array as in an example below. - * - * @example - * - * ```js - * ... - * var hot = new Handsontable(document.getElementById('example'), { - * date: getData(), - * comments: true, - * cell: [ - * {row: 1, col: 1, comment: {value: 'Foo'}}, - * {row: 2, col: 2, comment: {value: 'Bar'}} - * ] - * }); - * - * // Access to the Comments plugin instance: - * var commentsPlugin = hot.getPlugin('comments'); - * - * // Manage comments programmatically: - * commentsPlugin.setCommentAtCell(1, 6, 'Comment contents'); - * commentsPlugin.showAtCell(1, 6); - * commentsPlugin.removeCommentAtCell(1, 6); - * - * // You can also set range once and use proper methods: - * commentsPlugin.setRange({row: 1, col: 6}); - * commentsPlugin.setComment('Comment contents'); - * commentsPlugin.show(); - * commentsPlugin.removeComment(); - * ... - * ``` - */ - -var Comments = function (_BasePlugin) { - _inherits(Comments, _BasePlugin); - - function Comments(hotInstance) { - _classCallCheck(this, Comments); - - /** - * Instance of {@link CommentEditor}. - * - * @type {CommentEditor} - */ - var _this = _possibleConstructorReturn(this, (Comments.__proto__ || Object.getPrototypeOf(Comments)).call(this, hotInstance)); - - _this.editor = null; - /** - * Instance of {@link DisplaySwitch}. - * - * @type {DisplaySwitch} - */ - _this.displaySwitch = null; - /** - * Instance of {@link EventManager}. - * - * @private - * @type {EventManager} - */ - _this.eventManager = null; - /** - * Current cell range. - * - * @type {Object} - */ - _this.range = {}; - /** - * @private - * @type {Boolean} - */ - _this.mouseDown = false; - /** - * @private - * @type {Boolean} - */ - _this.contextMenuEvent = false; - /** - * @private - * @type {*} - */ - _this.timer = null; - - privatePool.set(_this, { - tempEditorDimensions: {}, - cellBelowCursor: null - }); - return _this; - } - - /** - * Check if the plugin is enabled in the Handsontable settings. - * - * @returns {Boolean} - */ - - - _createClass(Comments, [{ - key: 'isEnabled', - value: function isEnabled() { - return !!this.hot.getSettings().comments; - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - - if (!this.editor) { - this.editor = new _commentEditor2.default(); - } - - if (!this.eventManager) { - this.eventManager = new _eventManager2.default(this); - } - - if (!this.displaySwitch) { - this.displaySwitch = new _displaySwitch2.default(this.getDisplayDelaySetting()); - } - - this.addHook('afterContextMenuDefaultOptions', function (options) { - return _this2.addToContextMenu(options); - }); - this.addHook('afterRenderer', function (TD, row, col, prop, value, cellProperties) { - return _this2.onAfterRenderer(TD, cellProperties); - }); - this.addHook('afterScrollHorizontally', function () { - return _this2.hide(); - }); - this.addHook('afterScrollVertically', function () { - return _this2.hide(); - }); - this.addHook('afterBeginEditing', function (args) { - return _this2.onAfterBeginEditing(args); - }); - - this.displaySwitch.addLocalHook('hide', function () { - return _this2.hide(); - }); - this.displaySwitch.addLocalHook('show', function (row, col) { - return _this2.showAtCell(row, col); - }); - - this.registerListeners(); - - _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), 'enablePlugin', this).call(this); - } - - /** - * Update plugin for this Handsontable instance. - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() { - this.disablePlugin(); - this.enablePlugin(); - _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), 'updatePlugin', this).call(this); - - this.displaySwitch.updateDelay(this.getDisplayDelaySetting()); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), 'disablePlugin', this).call(this); - } - - /** - * Register all necessary DOM listeners. - * - * @private - */ - - }, { - key: 'registerListeners', - value: function registerListeners() { - var _this3 = this; - - this.eventManager.addEventListener(document, 'mouseover', function (event) { - return _this3.onMouseOver(event); - }); - this.eventManager.addEventListener(document, 'mousedown', function (event) { - return _this3.onMouseDown(event); - }); - this.eventManager.addEventListener(document, 'mouseup', function (event) { - return _this3.onMouseUp(event); - }); - this.eventManager.addEventListener(this.editor.getInputElement(), 'blur', function (event) { - return _this3.onEditorBlur(event); - }); - this.eventManager.addEventListener(this.editor.getInputElement(), 'mousedown', function (event) { - return _this3.onEditorMouseDown(event); - }); - this.eventManager.addEventListener(this.editor.getInputElement(), 'mouseup', function (event) { - return _this3.onEditorMouseUp(event); - }); - } - - /** - * Set current cell range to be able to use general methods like {@link Comments#setComment}, - * {@link Comments#removeComment}, {@link Comments#show}. - * - * @param {Object} range Object with `from` and `to` properties, each with `row` and `col` properties. - */ - - }, { - key: 'setRange', - value: function setRange(range) { - this.range = range; - } - - /** - * Clear the currently selected cell. - */ - - }, { - key: 'clearRange', - value: function clearRange() { - this.range = {}; - } - - /** - * Check if the event target is a cell containing a comment. - * - * @param {Event} event DOM event - * @returns {Boolean} - */ - - }, { - key: 'targetIsCellWithComment', - value: function targetIsCellWithComment(event) { - var closestCell = (0, _element.closest)(event.target, 'TD', 'TBODY'); - - return !!(closestCell && (0, _element.hasClass)(closestCell, 'htCommentCell') && (0, _element.closest)(closestCell, [this.hot.rootElement])); - } - - /** - * Check if the event target is a comment textarea. - * - * @param {Event} event DOM event. - * @returns {Boolean} - */ - - }, { - key: 'targetIsCommentTextArea', - value: function targetIsCommentTextArea(event) { - return this.editor.getInputElement() === event.target; - } - - /** - * Set a comment for a cell according to the previously set range (see {@link Comments#setRange}). - * - * @param {String} value Comment contents. - */ - - }, { - key: 'setComment', - value: function setComment(value) { - if (!this.range.from) { - throw new Error('Before using this method, first set cell range (hot.getPlugin("comment").setRange())'); - } - var editorValue = this.editor.getValue(); - var comment = ''; - - if (value != null) { - comment = value; - } else if (editorValue != null) { - comment = editorValue; - } - - var row = this.range.from.row; - var col = this.range.from.col; - - this.updateCommentMeta(row, col, _defineProperty({}, META_COMMENT_VALUE, comment)); - this.hot.render(); - } - - /** - * Set a comment for a cell. - * - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {String} value Comment contents. - */ - - }, { - key: 'setCommentAtCell', - value: function setCommentAtCell(row, col, value) { - this.setRange({ - from: new _src.CellCoords(row, col) - }); - this.setComment(value); - } - - /** - * Remove a comment from a cell according to previously set range (see {@link Comments#setRange}). - * - * @param {Boolean} [forceRender = true] If set to `true`, the table will be re-rendered at the end of the operation. - */ - - }, { - key: 'removeComment', - value: function removeComment() { - var forceRender = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - if (!this.range.from) { - throw new Error('Before using this method, first set cell range (hot.getPlugin("comment").setRange())'); - } - - this.hot.setCellMeta(this.range.from.row, this.range.from.col, META_COMMENT, void 0); - - if (forceRender) { - this.hot.render(); - } - - this.hide(); - } - - /** - * Remove comment from a cell. - * - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param {Boolean} [forceRender = true] If `true`, the table will be re-rendered at the end of the operation. - */ - - }, { - key: 'removeCommentAtCell', - value: function removeCommentAtCell(row, col) { - var forceRender = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - - this.setRange({ - from: new _src.CellCoords(row, col) - }); - this.removeComment(forceRender); - } - - /** - * Get comment from a cell at the predefined range. - */ - - }, { - key: 'getComment', - value: function getComment() { - var row = this.range.from.row; - var column = this.range.from.col; - - return this.getCommentMeta(row, column, META_COMMENT_VALUE); - } - - /** - * Get comment from a cell at the provided coordinates. - * - * @param {Number} row Visual row index. - * @param {Number} column Visual column index. - */ - - }, { - key: 'getCommentAtCell', - value: function getCommentAtCell(row, column) { - return this.getCommentMeta(row, column, META_COMMENT_VALUE); - } - - /** - * Show the comment editor accordingly to the previously set range (see {@link Comments#setRange}). - * - * @returns {Boolean} Returns `true` if comment editor was shown. - */ - - }, { - key: 'show', - value: function show() { - if (!this.range.from) { - throw new Error('Before using this method, first set cell range (hot.getPlugin("comment").setRange())'); - } - var meta = this.hot.getCellMeta(this.range.from.row, this.range.from.col); - - this.refreshEditor(true); - this.editor.setValue(meta[META_COMMENT] ? meta[META_COMMENT][META_COMMENT_VALUE] : null || ''); - - if (this.editor.hidden) { - this.editor.show(); - } - - return true; - } - - /** - * Show comment editor according to cell coordinates. - * - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @returns {Boolean} Returns `true` if comment editor was shown. - */ - - }, { - key: 'showAtCell', - value: function showAtCell(row, col) { - this.setRange({ - from: new _src.CellCoords(row, col) - }); - - return this.show(); - } - - /** - * Hide the comment editor. - */ - - }, { - key: 'hide', - value: function hide() { - if (!this.editor.hidden) { - this.editor.hide(); - } - } - - /** - * Refresh comment editor position and styling. - * - * @param {Boolean} [force=false] If `true` then recalculation will be forced. - */ - - }, { - key: 'refreshEditor', - value: function refreshEditor() { - var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (!force && (!this.range.from || !this.editor.isVisible())) { - return; - } - var scrollableElement = (0, _element.getScrollableElement)(this.hot.view.wt.wtTable.TABLE); - var TD = this.hot.view.wt.wtTable.getCell(this.range.from); - var row = this.range.from.row; - var column = this.range.from.col; - var cellOffset = (0, _element.offset)(TD); - var lastColWidth = this.hot.view.wt.wtTable.getStretchedColumnWidth(column); - var cellTopOffset = cellOffset.top < 0 ? 0 : cellOffset.top; - var cellLeftOffset = cellOffset.left; - - if (this.hot.view.wt.wtViewport.hasVerticalScroll() && scrollableElement !== window) { - cellTopOffset -= this.hot.view.wt.wtOverlays.topOverlay.getScrollPosition(); - } - - if (this.hot.view.wt.wtViewport.hasHorizontalScroll() && scrollableElement !== window) { - cellLeftOffset -= this.hot.view.wt.wtOverlays.leftOverlay.getScrollPosition(); - } - - var x = cellLeftOffset + lastColWidth; - var y = cellTopOffset; - - var commentStyle = this.getCommentMeta(row, column, META_STYLE); - var readOnly = this.getCommentMeta(row, column, META_READONLY); - - if (commentStyle) { - this.editor.setSize(commentStyle.width, commentStyle.height); - } else { - this.editor.resetSize(); - } - - this.editor.setReadOnlyState(readOnly); - - this.editor.setPosition(x, y); - } - - /** - * Check if there is a comment for selected range. - * - * @private - * @returns {Boolean} - */ - - }, { - key: 'checkSelectionCommentsConsistency', - value: function checkSelectionCommentsConsistency() { - var selected = this.hot.getSelectedRange(); - - if (!selected) { - return false; - } - var hasComment = false; - var cell = selected.from; // IN EXCEL THERE IS COMMENT ONLY FOR TOP LEFT CELL IN SELECTION - - if (this.getCommentMeta(cell.row, cell.col, META_COMMENT_VALUE)) { - hasComment = true; - } - - return hasComment; - } - - /** - * Set or update the comment-related cell meta. - * - * @param {Number} row Visual row index. - * @param {Number} column Visual column index. - * @param {Object} metaObject Object defining all the comment-related meta information. - */ - - }, { - key: 'updateCommentMeta', - value: function updateCommentMeta(row, column, metaObject) { - var oldComment = this.hot.getCellMeta(row, column)[META_COMMENT]; - var newComment = void 0; - - if (oldComment) { - newComment = (0, _object.deepClone)(oldComment); - (0, _object.deepExtend)(newComment, metaObject); - } else { - newComment = metaObject; - } - - this.hot.setCellMeta(row, column, META_COMMENT, newComment); - } - - /** - * Get the comment related meta information. - * - * @param {Number} row Visual row index. - * @param {Number} column Visual column index. - * @param {String} property Cell meta property. - * @returns {Mixed} - */ - - }, { - key: 'getCommentMeta', - value: function getCommentMeta(row, column, property) { - var cellMeta = this.hot.getCellMeta(row, column); - - if (!cellMeta[META_COMMENT]) { - return void 0; - } - - return cellMeta[META_COMMENT][property]; - } - - /** - * `mousedown` event callback. - * - * @private - * @param {MouseEvent} event The `mousedown` event. - */ - - }, { - key: 'onMouseDown', - value: function onMouseDown(event) { - this.mouseDown = true; - - if (!this.hot.view || !this.hot.view.wt) { - return; - } - - if (!this.contextMenuEvent && !this.targetIsCommentTextArea(event)) { - var eventCell = (0, _element.closest)(event.target, 'TD', 'TBODY'); - var coordinates = null; - - if (eventCell) { - coordinates = this.hot.view.wt.wtTable.getCoords(eventCell); - } - - if (!eventCell || this.range.from && coordinates && (this.range.from.row !== coordinates.row || this.range.from.col !== coordinates.col)) { - this.hide(); - } - } - this.contextMenuEvent = false; - } - - /** - * `mouseover` event callback. - * - * @private - * @param {MouseEvent} event The `mouseover` event. - */ - - }, { - key: 'onMouseOver', - value: function onMouseOver(event) { - var priv = privatePool.get(this); - - priv.cellBelowCursor = document.elementFromPoint(event.clientX, event.clientY); - - if (this.mouseDown || this.editor.isFocused() || (0, _element.hasClass)(event.target, 'wtBorder') || priv.cellBelowCursor !== event.target || !this.editor) { - return; - } - - if (this.targetIsCellWithComment(event)) { - var coordinates = this.hot.view.wt.wtTable.getCoords(event.target); - var range = { - from: new _src.CellCoords(coordinates.row, coordinates.col) - }; - - this.displaySwitch.show(range); - } else if ((0, _element.isChildOf)(event.target, document) && !this.targetIsCommentTextArea(event)) { - this.displaySwitch.hide(); - } - } - - /** - * `mouseup` event callback. - * - * @private - * @param {MouseEvent} event The `mouseup` event. - */ - - }, { - key: 'onMouseUp', - value: function onMouseUp(event) { - this.mouseDown = false; - } - - /** * - * The `afterRenderer` hook callback.. - * - * @private - * @param {HTMLTableCellElement} TD The rendered `TD` element. - * @param {Object} cellProperties The rendered cell's property object. - */ - - }, { - key: 'onAfterRenderer', - value: function onAfterRenderer(TD, cellProperties) { - if (cellProperties[META_COMMENT] && cellProperties[META_COMMENT][META_COMMENT_VALUE]) { - (0, _element.addClass)(TD, cellProperties.commentedCellClassName); - } - } - - /** - * `blur` event callback for the comment editor. - * - * @private - * @param {Event} event The `blur` event. - */ - - }, { - key: 'onEditorBlur', - value: function onEditorBlur(event) { - this.setComment(); - } - - /** - * `mousedown` hook. Along with `onEditorMouseUp` used to simulate the textarea resizing event. - * - * @private - * @param {MouseEvent} event The `mousedown` event. - */ - - }, { - key: 'onEditorMouseDown', - value: function onEditorMouseDown(event) { - var priv = privatePool.get(this); - - priv.tempEditorDimensions = { - width: (0, _element.outerWidth)(event.target), - height: (0, _element.outerHeight)(event.target) - }; - } - - /** - * `mouseup` hook. Along with `onEditorMouseDown` used to simulate the textarea resizing event. - * - * @private - * @param {MouseEvent} event The `mouseup` event. - */ - - }, { - key: 'onEditorMouseUp', - value: function onEditorMouseUp(event) { - var priv = privatePool.get(this); - var currentWidth = (0, _element.outerWidth)(event.target); - var currentHeight = (0, _element.outerHeight)(event.target); - - if (currentWidth !== priv.tempEditorDimensions.width + 1 || currentHeight !== priv.tempEditorDimensions.height + 2) { - this.updateCommentMeta(this.range.from.row, this.range.from.col, _defineProperty({}, META_STYLE, { - width: currentWidth, - height: currentHeight - })); - } - } - - /** - * Context Menu's "Add comment" callback. Results in showing the comment editor. - * - * @private - */ - - }, { - key: 'onContextMenuAddComment', - value: function onContextMenuAddComment() { - var _this4 = this; - - this.displaySwitch.cancelHiding(); - var coords = this.hot.getSelectedRange(); - - this.contextMenuEvent = true; - this.setRange({ - from: coords.from - }); - this.show(); - setTimeout(function () { - if (_this4.hot) { - _this4.hot.deselectCell(); - _this4.editor.focus(); - } - }, 10); - } - - /** - * Context Menu's "remove comment" callback. - * - * @private - * @param {Object} selection The current selection. - */ - - }, { - key: 'onContextMenuRemoveComment', - value: function onContextMenuRemoveComment(selection) { - this.contextMenuEvent = true; - - for (var i = selection.start.row; i <= selection.end.row; i++) { - for (var j = selection.start.col; j <= selection.end.col; j++) { - this.removeCommentAtCell(i, j, false); - } - } - - this.hot.render(); - } - - /** - * Context Menu's "make comment read-only" callback. - * - * @private - * @param {Object} selection The current selection. - */ - - }, { - key: 'onContextMenuMakeReadOnly', - value: function onContextMenuMakeReadOnly(selection) { - this.contextMenuEvent = true; - - for (var i = selection.start.row; i <= selection.end.row; i++) { - for (var j = selection.start.col; j <= selection.end.col; j++) { - var currentState = !!this.getCommentMeta(i, j, META_READONLY); - - this.updateCommentMeta(i, j, _defineProperty({}, META_READONLY, !currentState)); - } - } - } - - /** - * Add Comments plugin options to the Context Menu. - * - * @private - * @param {Object} defaultOptions - */ - - }, { - key: 'addToContextMenu', - value: function addToContextMenu(defaultOptions) { - var _this5 = this; - - defaultOptions.items.push({ - name: '---------' - }, { - key: 'commentsAddEdit', - name: function name() { - return _this5.checkSelectionCommentsConsistency() ? 'Edit comment' : 'Add comment'; - }, - callback: function callback() { - return _this5.onContextMenuAddComment(); - }, - disabled: function disabled() { - return !(this.getSelected() && !this.selection.selectedHeader.corner); - } - }, { - key: 'commentsRemove', - name: function name() { - return 'Delete comment'; - }, - - callback: function callback(key, selection) { - return _this5.onContextMenuRemoveComment(selection); - }, - disabled: function disabled() { - return _this5.hot.selection.selectedHeader.corner; - } - }, { - key: 'commentsReadOnly', - name: function name() { - var _this6 = this; - - var label = 'Read only comment'; - var hasProperty = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) { - var readOnlyProperty = _this6.getCellMeta(row, col)[META_COMMENT]; - if (readOnlyProperty) { - readOnlyProperty = readOnlyProperty[META_READONLY]; - } - - if (readOnlyProperty) { - return true; - } - }); - - if (hasProperty) { - label = (0, _utils.markLabelAsSelected)(label); - } - - return label; - }, - - callback: function callback(key, selection) { - return _this5.onContextMenuMakeReadOnly(selection); - }, - disabled: function disabled() { - return _this5.hot.selection.selectedHeader.corner || !_this5.checkSelectionCommentsConsistency(); - } - }); - } - - /** - * Get `displayDelay` setting of comment plugin. - * - * @returns {Number|undefined} - */ - - }, { - key: 'getDisplayDelaySetting', - value: function getDisplayDelaySetting() { - var commentSetting = this.hot.getSettings().comments; - - if ((0, _object.isObject)(commentSetting)) { - return commentSetting.displayDelay; - } - - return void 0; - } - - /** - * `afterBeginEditing` hook callback. - * - * @private - * @param {Number} row Visual row index of the currently edited cell. - * @param {Number} column Visual column index of the currently edited cell. - */ - - }, { - key: 'onAfterBeginEditing', - value: function onAfterBeginEditing(row, column) { - this.hide(); - } - - /** - * Destroy plugin instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - if (this.editor) { - this.editor.destroy(); - } - - if (this.displaySwitch) { - this.displaySwitch.destroy(); - } - - _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), 'destroy', this).call(this); - } - }]); - - return Comments; -}(_base2.default); - -(0, _plugins.registerPlugin)('comments', Comments); - -exports.default = Comments; - -/***/ }), -/* 217 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _function = __webpack_require__(35); - -var _object = __webpack_require__(1); - -var _localHooks = __webpack_require__(69); - -var _localHooks2 = _interopRequireDefault(_localHooks); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var DEFAULT_DISPLAY_DELAY = 250; -var DEFAULT_HIDE_DELAY = 250; - -/** - * Display switch for the Comments plugin. Manages the time of delayed displaying / hiding comments. - * - * @class DisplaySwitch - * @plugin Comments - */ - -var DisplaySwitch = function () { - function DisplaySwitch(displayDelay) { - _classCallCheck(this, DisplaySwitch); - - /** - * Flag to determine if comment can be showed or hidden. State `true` mean that last performed action - * was an attempt to show comment element. State `false` mean that it was attempt to hide comment element. - * - * @type {Boolean} - */ - this.wasLastActionShow = true; - /** - * Show comment after predefined delay. It keeps reference to immutable `debounce` function. - * - * @type {Function} - */ - this.showDebounced = null; - /** - * Reference to timer, run by `setTimeout`, which is hiding comment - * - * @type {Number} - */ - this.hidingTimer = null; - - this.updateDelay(displayDelay); - } - - /** - * Responsible for hiding comment after proper delay. - */ - - - _createClass(DisplaySwitch, [{ - key: 'hide', - value: function hide() { - var _this = this; - - this.wasLastActionShow = false; - - this.hidingTimer = setTimeout(function () { - if (_this.wasLastActionShow === false) { - _this.runLocalHooks('hide'); - } - }, DEFAULT_HIDE_DELAY); - } - - /** - * Responsible for showing comment after proper delay. - * - * @param {Object} range Coordinates of selected cell. - */ - - }, { - key: 'show', - value: function show(range) { - this.wasLastActionShow = true; - this.showDebounced(range); - } - }, { - key: 'cancelHiding', - - - /** - * Cancel hiding comment. - */ - value: function cancelHiding() { - this.wasLastActionShow = true; - - clearTimeout(this.hidingTimer); - this.hidingTimer = null; - } - - /** - * Update the switch settings. - * - * @param {Number} displayDelay Delay of showing the comments (in milliseconds). - */ - - }, { - key: 'updateDelay', - value: function updateDelay() { - var _this2 = this; - - var displayDelay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_DISPLAY_DELAY; - - this.showDebounced = (0, _function.debounce)(function (range) { - if (_this2.wasLastActionShow) { - _this2.runLocalHooks('show', range.from.row, range.from.col); - } - }, displayDelay); - } - - /** - * Destroy the switcher. - */ - - }, { - key: 'destroy', - value: function destroy() { - this.clearLocalHooks(); - } - }]); - - return DisplaySwitch; -}(); - -(0, _object.mixin)(DisplaySwitch, _localHooks2.default); - -exports.default = DisplaySwitch; - -/***/ }), -/* 218 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _array = __webpack_require__(2); - -var _object = __webpack_require__(1); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * Command executor for ContextMenu. - * - * @class CommandExecutor - * @plugin ContextMenu - */ -var CommandExecutor = function () { - function CommandExecutor(hotInstance) { - _classCallCheck(this, CommandExecutor); - - this.hot = hotInstance; - this.commands = {}; - this.commonCallback = null; - } - - /** - * Register command. - * - * @param {String} name Command name. - * @param {Object} commandDescriptor Command descriptor object with properties like `key` (command id), - * `callback` (task to execute), `name` (command name), `disabled` (command availability). - */ - - - _createClass(CommandExecutor, [{ - key: 'registerCommand', - value: function registerCommand(name, commandDescriptor) { - this.commands[name] = commandDescriptor; - } - - /** - * Set common callback which will be trigger on every executed command. - * - * @param {Function} callback Function which will be fired on every command execute. - */ - - }, { - key: 'setCommonCallback', - value: function setCommonCallback(callback) { - this.commonCallback = callback; - } - - /** - * Execute command by its name. - * - * @param {String} commandName Command id. - * @param {*} params Arguments passed to command task. - */ - - }, { - key: 'execute', - value: function execute(commandName) { - var _this = this; - - for (var _len = arguments.length, params = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - params[_key - 1] = arguments[_key]; - } - - var commandSplit = commandName.split(':'); - commandName = commandSplit[0]; - - var subCommandName = commandSplit.length === 2 ? commandSplit[1] : null; - var command = this.commands[commandName]; - - if (!command) { - throw new Error('Menu command \'' + commandName + '\' not exists.'); - } - if (subCommandName && command.submenu) { - command = findSubCommand(subCommandName, command.submenu.items); - } - if (command.disabled === true) { - return; - } - if (typeof command.disabled == 'function' && command.disabled.call(this.hot) === true) { - return; - } - if ((0, _object.hasOwnProperty)(command, 'submenu')) { - return; - } - var callbacks = []; - - if (typeof command.callback === 'function') { - callbacks.push(command.callback); - } - if (typeof this.commonCallback === 'function') { - callbacks.push(this.commonCallback); - } - params.unshift(commandSplit.join(':')); - (0, _array.arrayEach)(callbacks, function (callback) { - return callback.apply(_this.hot, params); - }); - } - }]); - - return CommandExecutor; -}(); - -function findSubCommand(subCommandName, subCommands) { - var command = void 0; - - (0, _array.arrayEach)(subCommands, function (cmd) { - var cmds = cmd.key ? cmd.key.split(':') : null; - - if (Array.isArray(cmds) && cmds[1] === subCommandName) { - command = cmd; - - return false; - } - }); - - return command; -} - -exports.default = CommandExecutor; - -/***/ }), -/* 219 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _array = __webpack_require__(2); - -var _commandExecutor = __webpack_require__(218); - -var _commandExecutor2 = _interopRequireDefault(_commandExecutor); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _itemsFactory = __webpack_require__(221); - -var _itemsFactory2 = _interopRequireDefault(_itemsFactory); - -var _menu = __webpack_require__(222); - -var _menu2 = _interopRequireDefault(_menu); - -var _plugins = __webpack_require__(5); - -var _event = __webpack_require__(7); - -var _element = __webpack_require__(0); - -var _predefinedItems = __webpack_require__(70); - -__webpack_require__(297); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -_pluginHooks2.default.getSingleton().register('afterContextMenuDefaultOptions'); -_pluginHooks2.default.getSingleton().register('afterContextMenuShow'); -_pluginHooks2.default.getSingleton().register('afterContextMenuHide'); -_pluginHooks2.default.getSingleton().register('afterContextMenuExecute'); - -/** - * @description - * This plugin creates the Handsontable Context Menu. It allows to create a new row or - * column at any place in the grid among [other features](http://docs.handsontable.com/demo-context-menu.html). - * Possible values: - * * `true` (to enable default options), - * * `false` (to disable completely) - * - * or array of any available strings: - * * `["row_above", "row_below", "col_left", "col_right", - * "remove_row", "remove_col", "---------", "undo", "redo"]`. - * - * See [the context menu demo](http://docs.handsontable.com/demo-context-menu.html) for examples. - * - * @example - * ```js - * ... - * // as a boolean - * contextMenu: true - * ... - * // as a array - * contextMenu: ['row_above', 'row_below', '---------', 'undo', 'redo'] - * ... - * ``` - * - * @plugin ContextMenu - */ - -var ContextMenu = function (_BasePlugin) { - _inherits(ContextMenu, _BasePlugin); - - _createClass(ContextMenu, null, [{ - key: 'DEFAULT_ITEMS', - - /** - * Default menu items order when `contextMenu` is enabled by `true`. - * - * @returns {Array} - */ - get: function get() { - return [_predefinedItems.ROW_ABOVE, _predefinedItems.ROW_BELOW, _predefinedItems.SEPARATOR, _predefinedItems.COLUMN_LEFT, _predefinedItems.COLUMN_RIGHT, _predefinedItems.SEPARATOR, _predefinedItems.REMOVE_ROW, _predefinedItems.REMOVE_COLUMN, _predefinedItems.SEPARATOR, _predefinedItems.UNDO, _predefinedItems.REDO, _predefinedItems.SEPARATOR, _predefinedItems.READ_ONLY, _predefinedItems.SEPARATOR, _predefinedItems.ALIGNMENT]; - } - }]); - - function ContextMenu(hotInstance) { - _classCallCheck(this, ContextMenu); - - /** - * Instance of {@link EventManager}. - * - * @type {EventManager} - */ - var _this = _possibleConstructorReturn(this, (ContextMenu.__proto__ || Object.getPrototypeOf(ContextMenu)).call(this, hotInstance)); - - _this.eventManager = new _eventManager2.default(_this); - /** - * Instance of {@link CommandExecutor}. - * - * @type {CommandExecutor} - */ - _this.commandExecutor = new _commandExecutor2.default(_this.hot); - /** - * Instance of {@link ItemsFactory}. - * - * @type {ItemsFactory} - */ - _this.itemsFactory = null; - /** - * Instance of {@link Menu}. - * - * @type {Menu} - */ - _this.menu = null; - return _this; - } - - /** - * Check if the plugin is enabled in the Handsontable settings. - * - * @returns {Boolean} - */ - - - _createClass(ContextMenu, [{ - key: 'isEnabled', - value: function isEnabled() { - return this.hot.getSettings().contextMenu; - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - this.itemsFactory = new _itemsFactory2.default(this.hot, ContextMenu.DEFAULT_ITEMS); - - var settings = this.hot.getSettings().contextMenu; - var predefinedItems = { - items: this.itemsFactory.getItems(settings) - }; - this.registerEvents(); - - if (typeof settings.callback === 'function') { - this.commandExecutor.setCommonCallback(settings.callback); - } - _get(ContextMenu.prototype.__proto__ || Object.getPrototypeOf(ContextMenu.prototype), 'enablePlugin', this).call(this); - - this.callOnPluginsReady(function () { - _this2.hot.runHooks('afterContextMenuDefaultOptions', predefinedItems); - - _this2.itemsFactory.setPredefinedItems(predefinedItems.items); - var menuItems = _this2.itemsFactory.getItems(settings); - - _this2.menu = new _menu2.default(_this2.hot, { - className: 'htContextMenu', - keepInViewport: true - }); - _this2.hot.runHooks('beforeContextMenuSetItems', menuItems); - - _this2.menu.setMenuItems(menuItems); - - _this2.menu.addLocalHook('afterOpen', function () { - return _this2.onMenuAfterOpen(); - }); - _this2.menu.addLocalHook('afterClose', function () { - return _this2.onMenuAfterClose(); - }); - _this2.menu.addLocalHook('executeCommand', function () { - for (var _len = arguments.length, params = Array(_len), _key = 0; _key < _len; _key++) { - params[_key] = arguments[_key]; - } - - return _this2.executeCommand.apply(_this2, params); - }); - - // Register all commands. Predefined and added by user or by plugins - (0, _array.arrayEach)(menuItems, function (command) { - return _this2.commandExecutor.registerCommand(command.key, command); - }); - }); - } - - /** - * Updates the plugin to use the latest options you have specified. - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() { - this.disablePlugin(); - this.enablePlugin(); - - _get(ContextMenu.prototype.__proto__ || Object.getPrototypeOf(ContextMenu.prototype), 'updatePlugin', this).call(this); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - this.close(); - - if (this.menu) { - this.menu.destroy(); - this.menu = null; - } - _get(ContextMenu.prototype.__proto__ || Object.getPrototypeOf(ContextMenu.prototype), 'disablePlugin', this).call(this); - } - - /** - * Register dom listeners. - * - * @private - */ - - }, { - key: 'registerEvents', - value: function registerEvents() { - var _this3 = this; - - this.eventManager.addEventListener(this.hot.rootElement, 'contextmenu', function (event) { - return _this3.onContextMenu(event); - }); - } - - /** - * Open menu and re-position it based on dom event object. - * - * @param {Event} event The event object. - */ - - }, { - key: 'open', - value: function open(event) { - if (!this.menu) { - return; - } - this.menu.open(); - this.menu.setPosition({ - top: parseInt((0, _event.pageY)(event), 10) - (0, _element.getWindowScrollTop)(), - left: parseInt((0, _event.pageX)(event), 10) - (0, _element.getWindowScrollLeft)() - }); - - // ContextMenu is not detected HotTableEnv correctly because is injected outside hot-table - this.menu.hotMenu.isHotTableEnv = this.hot.isHotTableEnv; - // Handsontable.eventManager.isHotTableEnv = this.hot.isHotTableEnv; - } - - /** - * Close menu. - */ - - }, { - key: 'close', - value: function close() { - if (!this.menu) { - return; - } - this.menu.close(); - } - - /** - * Execute context menu command. - * - * You can execute all predefined commands: - * * `'row_above'` - Insert row above - * * `'row_below'` - Insert row below - * * `'col_left'` - Insert column on the left - * * `'col_right'` - Insert column on the right - * * `'clear_column'` - Clear selected column - * * `'remove_row'` - Remove row - * * `'remove_col'` - Remove column - * * `'undo'` - Undo last action - * * `'redo'` - Redo last action - * * `'make_read_only'` - Make cell read only - * * `'alignment:left'` - Alignment to the left - * * `'alignment:top'` - Alignment to the top - * * `'alignment:right'` - Alignment to the right - * * `'alignment:bottom'` - Alignment to the bottom - * * `'alignment:middle'` - Alignment to the middle - * * `'alignment:center'` - Alignment to the center (justify) - * - * Or you can execute command registered in settings where `key` is your command name. - * - * @param {String} commandName - * @param {*} params - */ - - }, { - key: 'executeCommand', - value: function executeCommand() { - for (var _len2 = arguments.length, params = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - params[_key2] = arguments[_key2]; - } - - this.commandExecutor.execute.apply(this.commandExecutor, params); - } - - /** - * On context menu listener. - * - * @private - * @param {Event} event - */ - - }, { - key: 'onContextMenu', - value: function onContextMenu(event) { - var settings = this.hot.getSettings(); - var showRowHeaders = settings.rowHeaders; - var showColHeaders = settings.colHeaders; - - function isValidElement(element) { - return element.nodeName === 'TD' || element.parentNode.nodeName === 'TD'; - } - // if event is from hot-table we must get web component element not element inside him - var element = event.realTarget; - this.close(); - - if ((0, _element.hasClass)(element, 'handsontableInput')) { - return; - } - - event.preventDefault(); - (0, _event.stopPropagation)(event); - - if (!(showRowHeaders || showColHeaders)) { - if (!isValidElement(element) && !((0, _element.hasClass)(element, 'current') && (0, _element.hasClass)(element, 'wtBorder'))) { - return; - } - } - - this.open(event); - } - - /** - * On menu after open listener. - * - * @private - */ - - }, { - key: 'onMenuAfterOpen', - value: function onMenuAfterOpen() { - this.hot.runHooks('afterContextMenuShow', this); - } - - /** - * On menu after close listener. - * - * @private - */ - - }, { - key: 'onMenuAfterClose', - value: function onMenuAfterClose() { - this.hot.listen(); - this.hot.runHooks('afterContextMenuHide', this); - } - - /** - * Destroy instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - this.close(); - - if (this.menu) { - this.menu.destroy(); - } - _get(ContextMenu.prototype.__proto__ || Object.getPrototypeOf(ContextMenu.prototype), 'destroy', this).call(this); - } - }]); - - return ContextMenu; -}(_base2.default); - -ContextMenu.SEPARATOR = { - name: _predefinedItems.SEPARATOR -}; - -(0, _plugins.registerPlugin)('contextMenu', ContextMenu); - -exports.default = ContextMenu; - -/***/ }), -/* 220 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _element = __webpack_require__(0); - -var _event = __webpack_require__(7); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * Helper class for checking if element will fit at the desired side of cursor. - * - * @class Cursor - * @plugin ContextMenu - */ -var Cursor = function () { - function Cursor(object) { - _classCallCheck(this, Cursor); - - var windowScrollTop = (0, _element.getWindowScrollTop)(); - var windowScrollLeft = (0, _element.getWindowScrollLeft)(); - var top = void 0, - topRelative = void 0; - var left = void 0, - leftRelative = void 0; - var cellHeight = void 0, - cellWidth = void 0; - - this.type = this.getSourceType(object); - - if (this.type === 'literal') { - top = parseInt(object.top, 10); - left = parseInt(object.left, 10); - cellHeight = object.height || 0; - cellWidth = object.width || 0; - topRelative = top; - leftRelative = left; - top += windowScrollTop; - left += windowScrollLeft; - } else if (this.type === 'event') { - top = parseInt((0, _event.pageY)(object), 10); - left = parseInt((0, _event.pageX)(object), 10); - cellHeight = object.target.clientHeight; - cellWidth = object.target.clientWidth; - topRelative = top - windowScrollTop; - leftRelative = left - windowScrollLeft; - } - - this.top = top; - this.topRelative = topRelative; - this.left = left; - this.leftRelative = leftRelative; - this.scrollTop = windowScrollTop; - this.scrollLeft = windowScrollLeft; - this.cellHeight = cellHeight; - this.cellWidth = cellWidth; - } - - /** - * Get source type name. - * - * @param {*} object Event or Object with coordinates. - * @returns {String} Returns one of this values: `'literal'`, `'event'`. - */ - - - _createClass(Cursor, [{ - key: 'getSourceType', - value: function getSourceType(object) { - var type = 'literal'; - - if (object instanceof Event) { - type = 'event'; - } - - return type; - } - - /** - * Checks if element can be placed above the cursor. - * - * @param {HTMLElement} element Element to check if it's size will fit above the cursor. - * @returns {Boolean} - */ - - }, { - key: 'fitsAbove', - value: function fitsAbove(element) { - return this.topRelative >= element.offsetHeight; - } - - /** - * Checks if element can be placed below the cursor. - * - * @param {HTMLElement} element Element to check if it's size will fit below the cursor. - * @param {Number} [viewportHeight] The viewport height. - * @returns {Boolean} - */ - - }, { - key: 'fitsBelow', - value: function fitsBelow(element) { - var viewportHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.innerHeight; - - return this.topRelative + element.offsetHeight <= viewportHeight; - } - - /** - * Checks if element can be placed on the right of the cursor. - * - * @param {HTMLElement} element Element to check if it's size will fit on the right of the cursor. - * @param {Number} [viewportWidth] The viewport width. - * @returns {Boolean} - */ - - }, { - key: 'fitsOnRight', - value: function fitsOnRight(element) { - var viewportWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.innerWidth; - - return this.leftRelative + this.cellWidth + element.offsetWidth <= viewportWidth; - } - - /** - * Checks if element can be placed on the left on the cursor. - * - * @param {HTMLElement} element Element to check if it's size will fit on the left of the cursor. - * @returns {Boolean} - */ - - }, { - key: 'fitsOnLeft', - value: function fitsOnLeft(element) { - return this.leftRelative >= element.offsetWidth; - } - }]); - - return Cursor; -}(); - -exports.default = Cursor; - -/***/ }), -/* 221 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _object = __webpack_require__(1); - -var _array = __webpack_require__(2); - -var _predefinedItems = __webpack_require__(70); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * Predefined items class factory for menu items. - * - * @class ItemsFactory - * @plugin ContextMenu - */ -var ItemsFactory = function () { - function ItemsFactory(hotInstance) { - var orderPattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - _classCallCheck(this, ItemsFactory); - - this.hot = hotInstance; - this.predefinedItems = (0, _predefinedItems.predefinedItems)(); - this.defaultOrderPattern = orderPattern; - } - - /** - * Set predefined items. - * - * @param {Array} predefinedItems Array of predefined items. - */ - - - _createClass(ItemsFactory, [{ - key: 'setPredefinedItems', - value: function setPredefinedItems(predefinedItems) { - var _this = this; - - var items = {}; - - this.defaultOrderPattern.length = 0; - - (0, _object.objectEach)(predefinedItems, function (value, key) { - var menuItemKey = ''; - - if (value.name === _predefinedItems.SEPARATOR) { - items[_predefinedItems.SEPARATOR] = value; - menuItemKey = _predefinedItems.SEPARATOR; - - // Menu item added as a property to array - } else if (isNaN(parseInt(key, 10))) { - value.key = value.key === void 0 ? key : value.key; - items[key] = value; - menuItemKey = value.key; - } else { - items[value.key] = value; - menuItemKey = value.key; - } - _this.defaultOrderPattern.push(menuItemKey); - }); - this.predefinedItems = items; - } - - /** - * Get all menu items based on pattern. - * - * @param {Array|Object|Boolean} pattern Pattern which you can define by displaying menu items order. If `true` default - * pattern will be used. - * @returns {Array} - */ - - }, { - key: 'getItems', - value: function getItems() { - var pattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - return _getItems(pattern, this.defaultOrderPattern, this.predefinedItems); - } - }]); - - return ItemsFactory; -}(); - -function _getItems() { - var pattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var defaultPattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - var items = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - var result = []; - - if (pattern && pattern.items) { - pattern = pattern.items; - } else if (!Array.isArray(pattern)) { - pattern = defaultPattern; - } - if ((0, _object.isObject)(pattern)) { - (0, _object.objectEach)(pattern, function (value, key) { - var item = items[typeof value === 'string' ? value : key]; - - if (!item) { - item = value; - } - if ((0, _object.isObject)(value)) { - (0, _object.extend)(item, value); - } else if (typeof item === 'string') { - item = { name: item }; - } - if (item.key === void 0) { - item.key = key; - } - result.push(item); - }); - } else { - (0, _array.arrayEach)(pattern, function (name, key) { - var item = items[name]; - - // Item deleted from settings `allowInsertRow: false` etc. - if (!item && _predefinedItems.ITEMS.indexOf(name) >= 0) { - return; - } - if (!item) { - item = { name: name, key: '' + key }; - } - if ((0, _object.isObject)(name)) { - (0, _object.extend)(item, name); - } - if (item.key === void 0) { - item.key = key; - } - result.push(item); - }); - } - - return result; -} - -exports.default = ItemsFactory; - -/***/ }), -/* 222 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _core = __webpack_require__(63); - -var _core2 = _interopRequireDefault(_core); - -var _element = __webpack_require__(0); - -var _array = __webpack_require__(2); - -var _cursor = __webpack_require__(220); - -var _cursor2 = _interopRequireDefault(_cursor); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _object = __webpack_require__(1); - -var _function = __webpack_require__(35); - -var _utils = __webpack_require__(17); - -var _unicode = __webpack_require__(16); - -var _localHooks = __webpack_require__(69); - -var _localHooks2 = _interopRequireDefault(_localHooks); - -var _predefinedItems = __webpack_require__(70); - -var _event = __webpack_require__(7); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class Menu - * @plugin ContextMenu - */ -var Menu = function () { - function Menu(hotInstance, options) { - _classCallCheck(this, Menu); - - this.hot = hotInstance; - this.options = options || { - parent: null, - name: null, - className: '', - keepInViewport: true, - standalone: false - }; - this.eventManager = new _eventManager2.default(this); - this.container = this.createContainer(this.options.name); - this.hotMenu = null; - this.hotSubMenus = {}; - this.parentMenu = this.options.parent || null; - this.menuItems = null; - this.origOutsideClickDeselects = null; - this.keyEvent = false; - - this.offset = { - above: 0, - below: 0, - left: 0, - right: 0 - }; - this._afterScrollCallback = null; - - this.registerEvents(); - } - - /** - * Register event listeners. - * - * @private - */ - - - _createClass(Menu, [{ - key: 'registerEvents', - value: function registerEvents() { - var _this = this; - - this.eventManager.addEventListener(document.documentElement, 'mousedown', function (event) { - return _this.onDocumentMouseDown(event); - }); - } - - /** - * Set array of objects which defines menu items. - * - * @param {Array} menuItems Menu items to display. - */ - - }, { - key: 'setMenuItems', - value: function setMenuItems(menuItems) { - this.menuItems = menuItems; - } - - /** - * Set offset menu position for specified area (`above`, `below`, `left` or `right`). - * - * @param {String} area Specified area name (`above`, `below`, `left` or `right`). - * @param {Number} offset Offset value. - */ - - }, { - key: 'setOffset', - value: function setOffset(area) { - var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - this.offset[area] = offset; - } - - /** - * Check if menu is using as sub-menu. - * - * @returns {Boolean} - */ - - }, { - key: 'isSubMenu', - value: function isSubMenu() { - return this.parentMenu !== null; - } - - /** - * Open menu. - */ - - }, { - key: 'open', - value: function open() { - var _this2 = this; - - this.container.removeAttribute('style'); - this.container.style.display = 'block'; - - var delayedOpenSubMenu = (0, _function.debounce)(function (row) { - return _this2.openSubMenu(row); - }, 300); - - var filteredItems = (0, _array.arrayFilter)(this.menuItems, function (item) { - return (0, _utils.isItemHidden)(item, _this2.hot); - }); - - filteredItems = (0, _utils.filterSeparators)(filteredItems, _predefinedItems.SEPARATOR); - - var settings = { - data: filteredItems, - colHeaders: false, - colWidths: [200], - autoRowSize: false, - readOnly: true, - copyPaste: false, - columns: [{ - data: 'name', - renderer: function renderer(hot, TD, row, col, prop, value) { - return _this2.menuItemRenderer(hot, TD, row, col, prop, value); - } - }], - renderAllRows: true, - fragmentSelection: 'cell', - disableVisualSelection: 'area', - beforeKeyDown: function beforeKeyDown(event) { - return _this2.onBeforeKeyDown(event); - }, - afterOnCellMouseOver: function afterOnCellMouseOver(event, coords, TD) { - if (_this2.isAllSubMenusClosed()) { - delayedOpenSubMenu(coords.row); - } else { - _this2.openSubMenu(coords.row); - } - }, - rowHeights: function rowHeights(row) { - return filteredItems[row].name === _predefinedItems.SEPARATOR ? 1 : 23; - } - }; - this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects; - this.hot.getSettings().outsideClickDeselects = false; - this.hotMenu = new _core2.default(this.container, settings); - this.hotMenu.addHook('afterInit', function () { - return _this2.onAfterInit(); - }); - this.hotMenu.addHook('afterSelection', function (r, c, r2, c2, preventScrolling) { - return _this2.onAfterSelection(r, c, r2, c2, preventScrolling); - }); - this.hotMenu.init(); - this.hotMenu.listen(); - this.blockMainTableCallbacks(); - this.runLocalHooks('afterOpen'); - } - - /** - * Close menu. - * - * @param {Boolean} [closeParent=false] if `true` try to close parent menu if exists. - */ - - }, { - key: 'close', - value: function close() { - var closeParent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (!this.isOpened()) { - return; - } - if (closeParent && this.parentMenu) { - this.parentMenu.close(); - } else { - this.closeAllSubMenus(); - this.container.style.display = 'none'; - this.releaseMainTableCallbacks(); - this.hotMenu.destroy(); - this.hotMenu = null; - this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects; - this.runLocalHooks('afterClose'); - - if (this.parentMenu) { - this.parentMenu.hotMenu.listen(); - } - } - } - - /** - * Open sub menu at the provided row index. - * - * @param {Number} row Row index. - * @returns {Menu|Boolean} Returns created menu or `false` if no one menu was created. - */ - - }, { - key: 'openSubMenu', - value: function openSubMenu(row) { - if (!this.hotMenu) { - return false; - } - var cell = this.hotMenu.getCell(row, 0); - - this.closeAllSubMenus(); - - if (!cell || !(0, _utils.hasSubMenu)(cell)) { - return false; - } - var dataItem = this.hotMenu.getSourceDataAtRow(row); - var subMenu = new Menu(this.hot, { - parent: this, - name: dataItem.name, - className: this.options.className, - keepInViewport: true - }); - subMenu.setMenuItems(dataItem.submenu.items); - subMenu.open(); - subMenu.setPosition(cell.getBoundingClientRect()); - this.hotSubMenus[dataItem.key] = subMenu; - - return subMenu; - } - - /** - * Close sub menu at row index. - * - * @param {Number} row Row index. - */ - - }, { - key: 'closeSubMenu', - value: function closeSubMenu(row) { - var dataItem = this.hotMenu.getSourceDataAtRow(row); - var menus = this.hotSubMenus[dataItem.key]; - - if (menus) { - menus.destroy(); - delete this.hotSubMenus[dataItem.key]; - } - } - - /** - * Close all opened sub menus. - */ - - }, { - key: 'closeAllSubMenus', - value: function closeAllSubMenus() { - var _this3 = this; - - (0, _array.arrayEach)(this.hotMenu.getData(), function (value, row) { - return _this3.closeSubMenu(row); - }); - } - - /** - * Checks if all created and opened sub menus are closed. - * - * @returns {Boolean} - */ - - }, { - key: 'isAllSubMenusClosed', - value: function isAllSubMenusClosed() { - return Object.keys(this.hotSubMenus).length === 0; - } - - /** - * Destroy instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - this.clearLocalHooks(); - this.close(); - this.parentMenu = null; - this.eventManager.destroy(); - } - - /** - * Checks if menu was opened. - * - * @returns {Boolean} Returns `true` if menu was opened. - */ - - }, { - key: 'isOpened', - value: function isOpened() { - return this.hotMenu !== null; - } - - /** - * Execute menu command. - * - * @param {Event} [event] - */ - - }, { - key: 'executeCommand', - value: function executeCommand(event) { - if (!this.isOpened() || !this.hotMenu.getSelected()) { - return; - } - var selectedItem = this.hotMenu.getSourceDataAtRow(this.hotMenu.getSelected()[0]); - - this.runLocalHooks('select', selectedItem, event); - - if (selectedItem.isCommand === false || selectedItem.name === _predefinedItems.SEPARATOR) { - return; - } - var selRange = this.hot.getSelectedRange(); - var normalizedSelection = selRange ? (0, _utils.normalizeSelection)(selRange) : {}; - var autoClose = true; - - // Don't close context menu if item is disabled or it has submenu - if (selectedItem.disabled === true || typeof selectedItem.disabled === 'function' && selectedItem.disabled.call(this.hot) === true || selectedItem.submenu) { - autoClose = false; - } - - this.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event); - - if (this.isSubMenu()) { - this.parentMenu.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event); - } - - if (autoClose) { - this.close(true); - } - } - - /** - * Set menu position based on dom event or based on literal object. - * - * @param {Event|Object} coords Event or literal Object with coordinates. - */ - - }, { - key: 'setPosition', - value: function setPosition(coords) { - var cursor = new _cursor2.default(coords); - - if (this.options.keepInViewport) { - if (cursor.fitsBelow(this.container)) { - this.setPositionBelowCursor(cursor); - } else if (cursor.fitsAbove(this.container)) { - this.setPositionAboveCursor(cursor); - } else { - this.setPositionBelowCursor(cursor); - } - if (cursor.fitsOnRight(this.container)) { - this.setPositionOnRightOfCursor(cursor); - } else { - this.setPositionOnLeftOfCursor(cursor); - } - } else { - this.setPositionBelowCursor(cursor); - this.setPositionOnRightOfCursor(cursor); - } - } - - /** - * Set menu position above cursor object. - * - * @param {Cursor} cursor `Cursor` object. - */ - - }, { - key: 'setPositionAboveCursor', - value: function setPositionAboveCursor(cursor) { - var top = this.offset.above + cursor.top - this.container.offsetHeight; - - if (this.isSubMenu()) { - top = cursor.top + cursor.cellHeight - this.container.offsetHeight + 3; - } - this.container.style.top = top + 'px'; - } - - /** - * Set menu position below cursor object. - * - * @param {Cursor} cursor `Cursor` object. - */ - - }, { - key: 'setPositionBelowCursor', - value: function setPositionBelowCursor(cursor) { - var top = this.offset.below + cursor.top; - - if (this.isSubMenu()) { - top = cursor.top - 1; - } - this.container.style.top = top + 'px'; - } - - /** - * Set menu position on the right of cursor object. - * - * @param {Cursor} cursor `Cursor` object. - */ - - }, { - key: 'setPositionOnRightOfCursor', - value: function setPositionOnRightOfCursor(cursor) { - var left = void 0; - - if (this.isSubMenu()) { - left = 1 + cursor.left + cursor.cellWidth; - } else { - left = this.offset.right + 1 + cursor.left; - } - - this.container.style.left = left + 'px'; - } - - /** - * Set menu position on the left of cursor object. - * - * @param {Cursor} cursor `Cursor` object. - */ - - }, { - key: 'setPositionOnLeftOfCursor', - value: function setPositionOnLeftOfCursor(cursor) { - var left = this.offset.left + cursor.left - this.container.offsetWidth + (0, _element.getScrollbarWidth)() + 4; - - this.container.style.left = left + 'px'; - } - - /** - * Select first cell in opened menu. - */ - - }, { - key: 'selectFirstCell', - value: function selectFirstCell() { - var cell = this.hotMenu.getCell(0, 0); - - if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) { - this.selectNextCell(0, 0); - } else { - this.hotMenu.selectCell(0, 0); - } - } - - /** - * Select last cell in opened menu. - */ - - }, { - key: 'selectLastCell', - value: function selectLastCell() { - var lastRow = this.hotMenu.countRows() - 1; - var cell = this.hotMenu.getCell(lastRow, 0); - - if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) { - this.selectPrevCell(lastRow, 0); - } else { - this.hotMenu.selectCell(lastRow, 0); - } - } - - /** - * Select next cell in opened menu. - * - * @param {Number} row Row index. - * @param {Number} col Column index. - */ - - }, { - key: 'selectNextCell', - value: function selectNextCell(row, col) { - var nextRow = row + 1; - var cell = nextRow < this.hotMenu.countRows() ? this.hotMenu.getCell(nextRow, col) : null; - - if (!cell) { - return; - } - if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) { - this.selectNextCell(nextRow, col); - } else { - this.hotMenu.selectCell(nextRow, col); - } - } - - /** - * Select previous cell in opened menu. - * - * @param {Number} row Row index. - * @param {Number} col Column index. - */ - - }, { - key: 'selectPrevCell', - value: function selectPrevCell(row, col) { - var prevRow = row - 1; - var cell = prevRow >= 0 ? this.hotMenu.getCell(prevRow, col) : null; - - if (!cell) { - return; - } - if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) { - this.selectPrevCell(prevRow, col); - } else { - this.hotMenu.selectCell(prevRow, col); - } - } - - /** - * Menu item renderer. - * - * @private - */ - - }, { - key: 'menuItemRenderer', - value: function menuItemRenderer(hot, TD, row, col, prop, value) { - var _this4 = this; - - var item = hot.getSourceDataAtRow(row); - var wrapper = document.createElement('div'); - - var isSubMenu = function isSubMenu(item) { - return (0, _object.hasOwnProperty)(item, 'submenu'); - }; - var itemIsSeparator = function itemIsSeparator(item) { - return new RegExp(_predefinedItems.SEPARATOR, 'i').test(item.name); - }; - var itemIsDisabled = function itemIsDisabled(item) { - return item.disabled === true || typeof item.disabled == 'function' && item.disabled.call(_this4.hot) === true; - }; - var itemIsSelectionDisabled = function itemIsSelectionDisabled(item) { - return item.disableSelection; - }; - - if (typeof value === 'function') { - value = value.call(this.hot); - } - (0, _element.empty)(TD); - (0, _element.addClass)(wrapper, 'htItemWrapper'); - TD.appendChild(wrapper); - - if (itemIsSeparator(item)) { - (0, _element.addClass)(TD, 'htSeparator'); - } else if (typeof item.renderer === 'function') { - (0, _element.addClass)(TD, 'htCustomMenuRenderer'); - TD.appendChild(item.renderer(hot, wrapper, row, col, prop, value)); - } else { - (0, _element.fastInnerHTML)(wrapper, value); - } - if (itemIsDisabled(item)) { - (0, _element.addClass)(TD, 'htDisabled'); - this.eventManager.addEventListener(TD, 'mouseenter', function () { - return hot.deselectCell(); - }); - } else if (itemIsSelectionDisabled(item)) { - (0, _element.addClass)(TD, 'htSelectionDisabled'); - this.eventManager.addEventListener(TD, 'mouseenter', function () { - return hot.deselectCell(); - }); - } else if (isSubMenu(item)) { - (0, _element.addClass)(TD, 'htSubmenu'); - - if (itemIsSelectionDisabled(item)) { - this.eventManager.addEventListener(TD, 'mouseenter', function () { - return hot.deselectCell(); - }); - } else { - this.eventManager.addEventListener(TD, 'mouseenter', function () { - return hot.selectCell(row, col, void 0, void 0, false, false); - }); - } - } else { - (0, _element.removeClass)(TD, 'htSubmenu'); - (0, _element.removeClass)(TD, 'htDisabled'); - - if (itemIsSelectionDisabled(item)) { - this.eventManager.addEventListener(TD, 'mouseenter', function () { - return hot.deselectCell(); - }); - } else { - this.eventManager.addEventListener(TD, 'mouseenter', function () { - return hot.selectCell(row, col, void 0, void 0, false, false); - }); - } - } - } - - /** - * Create container/wrapper for handsontable. - * - * @private - * @param {String} [name] Class name. - * @returns {HTMLElement} - */ - - }, { - key: 'createContainer', - value: function createContainer() { - var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - if (name) { - name = name.replace(/[^A-z0-9]/g, '_'); - name = this.options.className + 'Sub_' + name; - } - var container = void 0; - - if (name) { - container = document.querySelector('.' + this.options.className + '.' + name); - } else { - container = document.querySelector('.' + this.options.className); - } - if (!container) { - container = document.createElement('div'); - (0, _element.addClass)(container, 'htMenu ' + this.options.className); - - if (name) { - (0, _element.addClass)(container, name); - } - document.getElementsByTagName('body')[0].appendChild(container); - } - - return container; - } - - /** - * @private - */ - - }, { - key: 'blockMainTableCallbacks', - value: function blockMainTableCallbacks() { - this._afterScrollCallback = function () {}; - this.hot.addHook('afterScrollVertically', this._afterScrollCallback); - this.hot.addHook('afterScrollHorizontally', this._afterScrollCallback); - } - - /** - * @private - */ - - }, { - key: 'releaseMainTableCallbacks', - value: function releaseMainTableCallbacks() { - if (this._afterScrollCallback) { - this.hot.removeHook('afterScrollVertically', this._afterScrollCallback); - this.hot.removeHook('afterScrollHorizontally', this._afterScrollCallback); - this._afterScrollCallback = null; - } - } - - /** - * On before key down listener. - * - * @private - * @param {Event} event - */ - - }, { - key: 'onBeforeKeyDown', - value: function onBeforeKeyDown(event) { - var selection = this.hotMenu.getSelected(); - var stopEvent = false; - this.keyEvent = true; - - switch (event.keyCode) { - case _unicode.KEY_CODES.ESCAPE: - this.close(); - stopEvent = true; - break; - - case _unicode.KEY_CODES.ENTER: - if (selection) { - if (this.hotMenu.getSourceDataAtRow(selection[0]).submenu) { - stopEvent = true; - } else { - this.executeCommand(event); - this.close(true); - } - } - break; - - case _unicode.KEY_CODES.ARROW_DOWN: - if (selection) { - this.selectNextCell(selection[0], selection[1]); - } else { - this.selectFirstCell(); - } - stopEvent = true; - break; - - case _unicode.KEY_CODES.ARROW_UP: - if (selection) { - this.selectPrevCell(selection[0], selection[1]); - } else { - this.selectLastCell(); - } - stopEvent = true; - break; - - case _unicode.KEY_CODES.ARROW_RIGHT: - if (selection) { - var menu = this.openSubMenu(selection[0]); - - if (menu) { - menu.selectFirstCell(); - } - } - stopEvent = true; - - break; - - case _unicode.KEY_CODES.ARROW_LEFT: - if (selection && this.isSubMenu()) { - this.close(); - - if (this.parentMenu) { - this.parentMenu.hotMenu.listen(); - } - stopEvent = true; - } - break; - default: - break; - } - if (stopEvent) { - event.preventDefault(); - (0, _event.stopImmediatePropagation)(event); - } - - this.keyEvent = false; - } - - /** - * On after init listener. - * - * @private - */ - - }, { - key: 'onAfterInit', - value: function onAfterInit() { - var data = this.hotMenu.getSettings().data; - var hiderStyle = this.hotMenu.view.wt.wtTable.hider.style; - var holderStyle = this.hotMenu.view.wt.wtTable.holder.style; - var currentHiderWidth = parseInt(hiderStyle.width, 10); - - var realHeight = (0, _array.arrayReduce)(data, function (accumulator, value) { - return accumulator + (value.name === _predefinedItems.SEPARATOR ? 1 : 26); - }, 0); - - holderStyle.width = currentHiderWidth + 22 + 'px'; - holderStyle.height = realHeight + 4 + 'px'; - hiderStyle.height = holderStyle.height; - } - - /** - * On after selection listener. - * - * @param {Number} r Selection start row index. - * @param {Number} c Selection start column index. - * @param {Number} r2 Selection end row index. - * @param {Number} c2 Selection end column index. - * @param {Object} preventScrolling Object with `value` property where its value change will be observed. - */ - - }, { - key: 'onAfterSelection', - value: function onAfterSelection(r, c, r2, c2, preventScrolling) { - if (this.keyEvent === false) { - preventScrolling.value = true; - } - } - - /** - * Document mouse down listener. - * - * @private - * @param {Event} event - */ - - }, { - key: 'onDocumentMouseDown', - value: function onDocumentMouseDown(event) { - if (!this.isOpened()) { - return; - } - if (this.container && (0, _element.isChildOf)(event.target, this.container)) { - this.executeCommand(event); - } - // Close menu when clicked element is not belongs to menu itself - if (this.options.standalone && this.hotMenu && !(0, _element.isChildOf)(event.target, this.hotMenu.rootElement)) { - this.close(true); - - // Automatically close menu when clicked element is not belongs to menu or submenu (not necessarily to itself) - } else if ((this.isAllSubMenusClosed() || this.isSubMenu()) && !(0, _element.isChildOf)(event.target, '.htMenu') && (0, _element.isChildOf)(event.target, document)) { - this.close(true); - } - } - }]); - - return Menu; -}(); - -(0, _object.mixin)(Menu, _localHooks2.default); - -exports.default = Menu; - -/***/ }), -/* 223 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.KEY = undefined; -exports.default = alignmentItem; - -var _utils = __webpack_require__(17); - -var _separator = __webpack_require__(71); - -var KEY = exports.KEY = 'alignment'; - -function alignmentItem() { - return { - key: KEY, - name: 'Alignment', - disabled: function disabled() { - return !(this.getSelectedRange() && !this.selection.selectedHeader.corner); - }, - - submenu: { - items: [{ - key: KEY + ':left', - name: function name() { - var _this = this; - - var label = 'Left'; - var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) { - var className = _this.getCellMeta(row, col).className; - - if (className && className.indexOf('htLeft') !== -1) { - return true; - } - }); - - if (hasClass) { - label = (0, _utils.markLabelAsSelected)(label); - } - - return label; - }, - callback: function callback() { - var _this2 = this; - - var range = this.getSelectedRange(); - var stateBefore = (0, _utils.getAlignmentClasses)(range, function (row, col) { - return _this2.getCellMeta(row, col).className; - }); - var type = 'horizontal'; - var alignment = 'htLeft'; - - this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); - (0, _utils.align)(range, type, alignment, function (row, col) { - return _this2.getCellMeta(row, col); - }, function (row, col, key, value) { - return _this2.setCellMeta(row, col, key, value); - }); - this.render(); - }, - - disabled: false - }, { - key: KEY + ':center', - name: function name() { - var _this3 = this; - - var label = 'Center'; - var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) { - var className = _this3.getCellMeta(row, col).className; - - if (className && className.indexOf('htCenter') !== -1) { - return true; - } - }); - - if (hasClass) { - label = (0, _utils.markLabelAsSelected)(label); - } - - return label; - }, - callback: function callback() { - var _this4 = this; - - var range = this.getSelectedRange(); - var stateBefore = (0, _utils.getAlignmentClasses)(range, function (row, col) { - return _this4.getCellMeta(row, col).className; - }); - var type = 'horizontal'; - var alignment = 'htCenter'; - - this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); - (0, _utils.align)(range, type, alignment, function (row, col) { - return _this4.getCellMeta(row, col); - }, function (row, col, key, value) { - return _this4.setCellMeta(row, col, key, value); - }); - this.render(); - }, - - disabled: false - }, { - key: KEY + ':right', - name: function name() { - var _this5 = this; - - var label = 'Right'; - var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) { - var className = _this5.getCellMeta(row, col).className; - - if (className && className.indexOf('htRight') !== -1) { - return true; - } - }); - - if (hasClass) { - label = (0, _utils.markLabelAsSelected)(label); - } - - return label; - }, - callback: function callback() { - var _this6 = this; - - var range = this.getSelectedRange(); - var stateBefore = (0, _utils.getAlignmentClasses)(range, function (row, col) { - return _this6.getCellMeta(row, col).className; - }); - var type = 'horizontal'; - var alignment = 'htRight'; - - this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); - (0, _utils.align)(range, type, alignment, function (row, col) { - return _this6.getCellMeta(row, col); - }, function (row, col, key, value) { - return _this6.setCellMeta(row, col, key, value); - }); - this.render(); - }, - - disabled: false - }, { - key: KEY + ':justify', - name: function name() { - var _this7 = this; - - var label = 'Justify'; - var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) { - var className = _this7.getCellMeta(row, col).className; - - if (className && className.indexOf('htJustify') !== -1) { - return true; - } - }); - - if (hasClass) { - label = (0, _utils.markLabelAsSelected)(label); - } - - return label; - }, - callback: function callback() { - var _this8 = this; - - var range = this.getSelectedRange(); - var stateBefore = (0, _utils.getAlignmentClasses)(range, function (row, col) { - return _this8.getCellMeta(row, col).className; - }); - var type = 'horizontal'; - var alignment = 'htJustify'; - - this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); - (0, _utils.align)(range, type, alignment, function (row, col) { - return _this8.getCellMeta(row, col); - }, function (row, col, key, value) { - return _this8.setCellMeta(row, col, key, value); - }); - this.render(); - }, - - disabled: false - }, { - name: _separator.KEY - }, { - key: KEY + ':top', - name: function name() { - var _this9 = this; - - var label = 'Top'; - var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) { - var className = _this9.getCellMeta(row, col).className; - - if (className && className.indexOf('htTop') !== -1) { - return true; - } - }); - - if (hasClass) { - label = (0, _utils.markLabelAsSelected)(label); - } - return label; - }, - callback: function callback() { - var _this10 = this; - - var range = this.getSelectedRange(); - var stateBefore = (0, _utils.getAlignmentClasses)(range, function (row, col) { - return _this10.getCellMeta(row, col).className; - }); - var type = 'vertical'; - var alignment = 'htTop'; - - this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); - (0, _utils.align)(range, type, alignment, function (row, col) { - return _this10.getCellMeta(row, col); - }, function (row, col, key, value) { - return _this10.setCellMeta(row, col, key, value); - }); - this.render(); - }, - - disabled: false - }, { - key: KEY + ':middle', - name: function name() { - var _this11 = this; - - var label = 'Middle'; - var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) { - var className = _this11.getCellMeta(row, col).className; - - if (className && className.indexOf('htMiddle') !== -1) { - return true; - } - }); - - if (hasClass) { - label = (0, _utils.markLabelAsSelected)(label); - } - - return label; - }, - callback: function callback() { - var _this12 = this; - - var range = this.getSelectedRange(); - var stateBefore = (0, _utils.getAlignmentClasses)(range, function (row, col) { - return _this12.getCellMeta(row, col).className; - }); - var type = 'vertical'; - var alignment = 'htMiddle'; - - this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); - (0, _utils.align)(range, type, alignment, function (row, col) { - return _this12.getCellMeta(row, col); - }, function (row, col, key, value) { - return _this12.setCellMeta(row, col, key, value); - }); - this.render(); - }, - - disabled: false - }, { - key: KEY + ':bottom', - name: function name() { - var _this13 = this; - - var label = 'Bottom'; - var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) { - var className = _this13.getCellMeta(row, col).className; - - if (className && className.indexOf('htBottom') !== -1) { - return true; - } - }); - - if (hasClass) { - label = (0, _utils.markLabelAsSelected)(label); - } - - return label; - }, - callback: function callback() { - var _this14 = this; - - var range = this.getSelectedRange(); - var stateBefore = (0, _utils.getAlignmentClasses)(range, function (row, col) { - return _this14.getCellMeta(row, col).className; - }); - var type = 'vertical'; - var alignment = 'htBottom'; - - this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); - (0, _utils.align)(range, type, alignment, function (row, col) { - return _this14.getCellMeta(row, col); - }, function (row, col, key, value) { - return _this14.setCellMeta(row, col, key, value); - }); - this.render(); - }, - - disabled: false - }] - } - }; -} - -/***/ }), -/* 224 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.KEY = undefined; -exports.default = clearColumnItem; - -var _utils = __webpack_require__(17); - -var KEY = exports.KEY = 'clear_column'; - -function clearColumnItem() { - return { - key: KEY, - name: 'Clear column', - - callback: function callback(key, selection) { - var column = selection.start.col; - - if (this.countRows()) { - this.populateFromArray(0, column, [[null]], Math.max(selection.start.row, selection.end.row), column, 'ContextMenu.clearColumn'); - } - }, - disabled: function disabled() { - var selected = (0, _utils.getValidSelection)(this); - - if (!selected) { - return true; - } - var entireRowSelection = [selected[0], 0, selected[0], this.countCols() - 1]; - var rowSelected = entireRowSelection.join(',') == selected.join(','); - - return selected[1] < 0 || this.countCols() >= this.getSettings().maxCols || rowSelected; - } - }; -} - -/***/ }), -/* 225 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.KEY = undefined; -exports.default = columnLeftItem; - -var _utils = __webpack_require__(17); - -var KEY = exports.KEY = 'col_left'; - -function columnLeftItem() { - return { - key: KEY, - name: 'Insert column on the left', - callback: function callback(key, selection) { - this.alter('insert_col', selection.start.col, 1, 'ContextMenu.columnLeft'); - }, - disabled: function disabled() { - var selected = (0, _utils.getValidSelection)(this); - - if (!selected) { - return true; - } - if (!this.isColumnModificationAllowed()) { - return true; - } - var entireRowSelection = [selected[0], 0, selected[0], this.countCols() - 1]; - var rowSelected = entireRowSelection.join(',') == selected.join(','); - var onlyOneColumn = this.countCols() === 1; - - return selected[1] < 0 || this.countCols() >= this.getSettings().maxCols || !onlyOneColumn && rowSelected; - }, - hidden: function hidden() { - return !this.getSettings().allowInsertColumn; - } - }; -} - -/***/ }), -/* 226 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.KEY = undefined; -exports.default = columnRightItem; - -var _utils = __webpack_require__(17); - -var KEY = exports.KEY = 'col_right'; - -function columnRightItem() { - return { - key: KEY, - name: 'Insert column on the right', - - callback: function callback(key, selection) { - this.alter('insert_col', selection.end.col + 1, 1, 'ContextMenu.columnRight'); - }, - disabled: function disabled() { - var selected = (0, _utils.getValidSelection)(this); - - if (!selected) { - return true; - } - if (!this.isColumnModificationAllowed()) { - return true; - } - var entireRowSelection = [selected[0], 0, selected[0], this.countCols() - 1]; - var rowSelected = entireRowSelection.join(',') == selected.join(','); - var onlyOneColumn = this.countCols() === 1; - - return selected[1] < 0 || this.countCols() >= this.getSettings().maxCols || !onlyOneColumn && rowSelected; - }, - hidden: function hidden() { - return !this.getSettings().allowInsertColumn; - } - }; -} - -/***/ }), -/* 227 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.KEY = undefined; -exports.default = readOnlyItem; - -var _utils = __webpack_require__(17); - -var KEY = exports.KEY = 'make_read_only'; - -function readOnlyItem() { - return { - key: KEY, - name: function name() { - var _this = this; - - var label = 'Read only'; - var atLeastOneReadOnly = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) { - return _this.getCellMeta(row, col).readOnly; - }); - - if (atLeastOneReadOnly) { - label = (0, _utils.markLabelAsSelected)(label); - } - - return label; - }, - callback: function callback() { - var _this2 = this; - - var range = this.getSelectedRange(); - var atLeastOneReadOnly = (0, _utils.checkSelectionConsistency)(range, function (row, col) { - return _this2.getCellMeta(row, col).readOnly; - }); - - range.forAll(function (row, col) { - _this2.setCellMeta(row, col, 'readOnly', !atLeastOneReadOnly); - }); - this.render(); - }, - disabled: function disabled() { - return !(this.getSelectedRange() && !this.selection.selectedHeader.corner); - } - }; -} - -/***/ }), -/* 228 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = redoItem; -var KEY = exports.KEY = 'redo'; - -function redoItem() { - return { - key: KEY, - name: 'Redo', - - callback: function callback() { - this.redo(); - }, - disabled: function disabled() { - return this.undoRedo && !this.undoRedo.isRedoAvailable(); - } - }; -} - -/***/ }), -/* 229 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.KEY = undefined; -exports.default = removeColumnItem; - -var _utils = __webpack_require__(17); - -var KEY = exports.KEY = 'remove_col'; - -function removeColumnItem() { - return { - key: KEY, - name: 'Remove column', - - callback: function callback(key, selection) { - var amount = selection.end.col - selection.start.col + 1; - - this.alter('remove_col', selection.start.col, amount, 'ContextMenu.removeColumn'); - }, - disabled: function disabled() { - var selected = (0, _utils.getValidSelection)(this); - var totalColumns = this.countCols(); - - return !selected || this.selection.selectedHeader.rows || this.selection.selectedHeader.corner || !this.isColumnModificationAllowed() || !totalColumns; - }, - hidden: function hidden() { - return !this.getSettings().allowRemoveColumn; - } - }; -} - -/***/ }), -/* 230 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.KEY = undefined; -exports.default = removeRowItem; - -var _utils = __webpack_require__(17); - -var KEY = exports.KEY = 'remove_row'; - -function removeRowItem() { - return { - key: KEY, - name: 'Remove row', - - callback: function callback(key, selection) { - var amount = selection.end.row - selection.start.row + 1; - - this.alter('remove_row', selection.start.row, amount, 'ContextMenu.removeRow'); - }, - disabled: function disabled() { - var selected = (0, _utils.getValidSelection)(this); - var totalRows = this.countRows(); - - return !selected || this.selection.selectedHeader.cols || this.selection.selectedHeader.corner || !totalRows; - }, - hidden: function hidden() { - return !this.getSettings().allowRemoveRow; - } - }; -} - -/***/ }), -/* 231 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.KEY = undefined; -exports.default = rowAboveItem; - -var _utils = __webpack_require__(17); - -var KEY = exports.KEY = 'row_above'; - -function rowAboveItem() { - return { - key: KEY, - name: 'Insert row above', - - callback: function callback(key, selection) { - this.alter('insert_row', selection.start.row, 1, 'ContextMenu.rowAbove'); - }, - disabled: function disabled() { - var selected = (0, _utils.getValidSelection)(this); - - return !selected || this.selection.selectedHeader.cols || this.countRows() >= this.getSettings().maxRows; - }, - hidden: function hidden() { - return !this.getSettings().allowInsertRow; - } - }; -} - -/***/ }), -/* 232 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.KEY = undefined; -exports.default = rowBelowItem; - -var _utils = __webpack_require__(17); - -var KEY = exports.KEY = 'row_below'; - -function rowBelowItem() { - return { - key: KEY, - name: 'Insert row below', - - callback: function callback(key, selection) { - this.alter('insert_row', selection.end.row + 1, 1, 'ContextMenu.rowBelow'); - }, - disabled: function disabled() { - var selected = (0, _utils.getValidSelection)(this); - - return !selected || this.selection.selectedHeader.cols || this.countRows() >= this.getSettings().maxRows; - }, - hidden: function hidden() { - return !this.getSettings().allowInsertRow; - } - }; -} - -/***/ }), -/* 233 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = undoItem; -var KEY = exports.KEY = 'undo'; - -function undoItem() { - return { - key: KEY, - name: 'Undo', - - callback: function callback() { - this.undo(); - }, - disabled: function disabled() { - return this.undoRedo && !this.undoRedo.isUndoAvailable(); - } - }; -} - -/***/ }), -/* 234 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = copyItem; -function copyItem(copyPastePlugin) { - return { - key: 'copy', - name: 'Copy', - callback: function callback() { - copyPastePlugin.setCopyableText(); - copyPastePlugin.copy(true); - }, - disabled: function disabled() { - return !copyPastePlugin.hot.getSelected(); - }, - - hidden: false - }; -} - -/***/ }), -/* 235 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = cutItem; -function cutItem(copyPastePlugin) { - return { - key: 'cut', - name: 'Cut', - callback: function callback() { - copyPastePlugin.setCopyableText(); - copyPastePlugin.cut(true); - }, - disabled: function disabled() { - return !copyPastePlugin.hot.getSelected(); - }, - - hidden: false - }; -} - -/***/ }), -/* 236 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _SheetClip = __webpack_require__(133); - -var _SheetClip2 = _interopRequireDefault(_SheetClip); - -var _src = __webpack_require__(11); - -var _unicode = __webpack_require__(16); - -var _element = __webpack_require__(0); - -var _array = __webpack_require__(2); - -var _number = __webpack_require__(6); - -var _event = __webpack_require__(7); - -var _plugins = __webpack_require__(5); - -var _textarea = __webpack_require__(237); - -var _textarea2 = _interopRequireDefault(_textarea); - -var _copy = __webpack_require__(234); - -var _copy2 = _interopRequireDefault(_copy); - -var _cut = __webpack_require__(235); - -var _cut2 = _interopRequireDefault(_cut); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -__webpack_require__(298); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -_pluginHooks2.default.getSingleton().register('afterCopyLimit'); -_pluginHooks2.default.getSingleton().register('modifyCopyableRange'); -_pluginHooks2.default.getSingleton().register('beforeCut'); -_pluginHooks2.default.getSingleton().register('afterCut'); -_pluginHooks2.default.getSingleton().register('beforePaste'); -_pluginHooks2.default.getSingleton().register('afterPaste'); -_pluginHooks2.default.getSingleton().register('beforeCopy'); -_pluginHooks2.default.getSingleton().register('afterCopy'); - -var ROWS_LIMIT = 1000; -var COLUMNS_LIMIT = 1000; -var privatePool = new WeakMap(); - -/** - * @description - * This plugin enables the copy/paste functionality in the Handsontable. - * - * @example - * ```js - * ... - * copyPaste: true, - * ... - * ``` - * @class CopyPaste - * @plugin CopyPaste - */ - -var CopyPaste = function (_BasePlugin) { - _inherits(CopyPaste, _BasePlugin); - - function CopyPaste(hotInstance) { - _classCallCheck(this, CopyPaste); - - /** - * Event manager - * - * @type {EventManager} - */ - var _this = _possibleConstructorReturn(this, (CopyPaste.__proto__ || Object.getPrototypeOf(CopyPaste)).call(this, hotInstance)); - - _this.eventManager = new _eventManager2.default(_this); - /** - * Maximum number of columns than can be copied to clipboard using CTRL + C. - * - * @private - * @type {Number} - * @default 1000 - */ - _this.columnsLimit = COLUMNS_LIMIT; - /** - * Ranges of the cells coordinates, which should be used to copy/cut/paste actions. - * - * @private - * @type {Array} - */ - _this.copyableRanges = []; - /** - * Defines paste (CTRL + V) behavior. - * * Default value `"overwrite"` will paste clipboard value over current selection. - * * When set to `"shift_down"`, clipboard data will be pasted in place of current selection, while all selected cells are moved down. - * * When set to `"shift_right"`, clipboard data will be pasted in place of current selection, while all selected cells are moved right. - * - * @private - * @type {String} - * @default 'overwrite' - */ - _this.pasteMode = 'overwrite'; - /** - * Maximum number of rows than can be copied to clipboard using CTRL + C. - * - * @private - * @type {Number} - * @default 1000 - */ - _this.rowsLimit = ROWS_LIMIT; - /** - * The `textarea` element which is necessary to process copying, cutting off and pasting. - * - * @private - * @type {HTMLElement} - * @default undefined - */ - _this.textarea = void 0; - - privatePool.set(_this, { - isTriggeredByPaste: false - }); - return _this; - } - - /** - * Check if plugin is enabled. - * - * @returns {Boolean} - */ - - - _createClass(CopyPaste, [{ - key: 'isEnabled', - value: function isEnabled() { - return !!this.hot.getSettings().copyPaste; - } - - /** - * Enable the plugin. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - - var settings = this.hot.getSettings(); - - this.textarea = _textarea2.default.getSingleton(); - - if (_typeof(settings.copyPaste) === 'object') { - this.pasteMode = settings.copyPaste.pasteMode || this.pasteMode; - this.rowsLimit = settings.copyPaste.rowsLimit || this.rowsLimit; - this.columnsLimit = settings.copyPaste.columnsLimit || this.columnsLimit; - } - - this.addHook('afterContextMenuDefaultOptions', function (options) { - return _this2.onAfterContextMenuDefaultOptions(options); - }); - this.addHook('beforeKeyDown', function (event) { - return _this2.onBeforeKeyDown(event); - }); - - this.registerEvents(); - - _get(CopyPaste.prototype.__proto__ || Object.getPrototypeOf(CopyPaste.prototype), 'enablePlugin', this).call(this); - } - /** - * Updates the plugin to use the latest options you have specified. - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() { - this.disablePlugin(); - this.enablePlugin(); - - _get(CopyPaste.prototype.__proto__ || Object.getPrototypeOf(CopyPaste.prototype), 'updatePlugin', this).call(this); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - if (this.textarea) { - this.textarea.destroy(); - } - - _get(CopyPaste.prototype.__proto__ || Object.getPrototypeOf(CopyPaste.prototype), 'disablePlugin', this).call(this); - } - - /** - * Prepares copyable text from the cells selection in the invisible textarea. - * - * @function setCopyable - * @memberof CopyPaste# - */ - - }, { - key: 'setCopyableText', - value: function setCopyableText() { - var selRange = this.hot.getSelectedRange(); - - if (!selRange) { - return; - } - - var topLeft = selRange.getTopLeftCorner(); - var bottomRight = selRange.getBottomRightCorner(); - var startRow = topLeft.row; - var startCol = topLeft.col; - var endRow = bottomRight.row; - var endCol = bottomRight.col; - var finalEndRow = Math.min(endRow, startRow + this.rowsLimit - 1); - var finalEndCol = Math.min(endCol, startCol + this.columnsLimit - 1); - - this.copyableRanges.length = 0; - - this.copyableRanges.push({ - startRow: startRow, - startCol: startCol, - endRow: finalEndRow, - endCol: finalEndCol - }); - - this.copyableRanges = this.hot.runHooks('modifyCopyableRange', this.copyableRanges); - - var copyableData = this.getRangedCopyableData(this.copyableRanges); - - this.textarea.setValue(copyableData); - - if (endRow !== finalEndRow || endCol !== finalEndCol) { - this.hot.runHooks('afterCopyLimit', endRow - startRow + 1, endCol - startCol + 1, this.rowsLimit, this.columnsLimit); - } - } - - /** - * Create copyable text releated to range objects. - * - * @since 0.19.0 - * @param {Array} ranges Array of Objects with properties `startRow`, `endRow`, `startCol` and `endCol`. - * @returns {String} Returns string which will be copied into clipboard. - */ - - }, { - key: 'getRangedCopyableData', - value: function getRangedCopyableData(ranges) { - var _this3 = this; - - var dataSet = []; - var copyableRows = []; - var copyableColumns = []; - - // Count all copyable rows and columns - (0, _array.arrayEach)(ranges, function (range) { - (0, _number.rangeEach)(range.startRow, range.endRow, function (row) { - if (copyableRows.indexOf(row) === -1) { - copyableRows.push(row); - } - }); - (0, _number.rangeEach)(range.startCol, range.endCol, function (column) { - if (copyableColumns.indexOf(column) === -1) { - copyableColumns.push(column); - } - }); - }); - // Concat all rows and columns data defined in ranges into one copyable string - (0, _array.arrayEach)(copyableRows, function (row) { - var rowSet = []; - - (0, _array.arrayEach)(copyableColumns, function (column) { - rowSet.push(_this3.hot.getCopyableData(row, column)); - }); - - dataSet.push(rowSet); - }); - - return _SheetClip2.default.stringify(dataSet); - } - - /** - * Create copyable text releated to range objects. - * - * @since 0.31.1 - * @param {Array} ranges Array of Objects with properties `startRow`, `startCol`, `endRow` and `endCol`. - * @returns {Array} Returns array of arrays which will be copied into clipboard. - */ - - }, { - key: 'getRangedData', - value: function getRangedData(ranges) { - var _this4 = this; - - var dataSet = []; - var copyableRows = []; - var copyableColumns = []; - - // Count all copyable rows and columns - (0, _array.arrayEach)(ranges, function (range) { - (0, _number.rangeEach)(range.startRow, range.endRow, function (row) { - if (copyableRows.indexOf(row) === -1) { - copyableRows.push(row); - } - }); - (0, _number.rangeEach)(range.startCol, range.endCol, function (column) { - if (copyableColumns.indexOf(column) === -1) { - copyableColumns.push(column); - } - }); - }); - // Concat all rows and columns data defined in ranges into one copyable string - (0, _array.arrayEach)(copyableRows, function (row) { - var rowSet = []; - - (0, _array.arrayEach)(copyableColumns, function (column) { - rowSet.push(_this4.hot.getCopyableData(row, column)); - }); - - dataSet.push(rowSet); - }); - - return dataSet; - } - - /** - * Copy action. - * - * @param {Boolean} isTriggeredByClick Flag to determine that copy action was executed by the mouse click. - */ - - }, { - key: 'copy', - value: function copy(isTriggeredByClick) { - var rangedData = this.getRangedData(this.copyableRanges); - - var allowCopying = !!this.hot.runHooks('beforeCopy', rangedData, this.copyableRanges); - - if (allowCopying) { - this.textarea.setValue(_SheetClip2.default.stringify(rangedData)); - this.textarea.select(); - - if (isTriggeredByClick) { - document.execCommand('copy'); - } - - this.hot.runHooks('afterCopy', rangedData, this.copyableRanges); - } else { - this.textarea.setValue(''); - } - } - - /** - * Cut action. - * - * @param {Boolean} isTriggeredByClick Flag to determine that cut action was executed by the mouse click. - */ - - }, { - key: 'cut', - value: function cut(isTriggeredByClick) { - var rangedData = this.getRangedData(this.copyableRanges); - - var allowCuttingOut = !!this.hot.runHooks('beforeCut', rangedData, this.copyableRanges); - - if (allowCuttingOut) { - this.textarea.setValue(_SheetClip2.default.stringify(rangedData)); - this.hot.selection.empty(); - this.textarea.select(); - - if (isTriggeredByClick) { - document.execCommand('cut'); - } - - this.hot.runHooks('afterCut', rangedData, this.copyableRanges); - } else { - this.textarea.setValue(''); - } - } - - /** - * Simulated paste action. - * - * @param {String} [value=''] New value, which should be `pasted`. - */ - - }, { - key: 'paste', - value: function paste() { - var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - - this.textarea.setValue(value); - - this.onPaste(); - this.onInput(); - } - - /** - * Register event listeners. - * - * @private - */ - - }, { - key: 'registerEvents', - value: function registerEvents() { - var _this5 = this; - - this.eventManager.addEventListener(this.textarea.element, 'paste', function (event) { - return _this5.onPaste(event); - }); - this.eventManager.addEventListener(this.textarea.element, 'input', function (event) { - return _this5.onInput(event); - }); - } - - /** - * Trigger to make possible observe `onInput` in textarea. - * - * @private - */ - - }, { - key: 'triggerPaste', - value: function triggerPaste() { - this.textarea.select(); - - this.onPaste(); - } - - /** - * `paste` event callback on textarea element. - * - * @private - */ - - }, { - key: 'onPaste', - value: function onPaste() { - var priv = privatePool.get(this); - - priv.isTriggeredByPaste = true; - } - - /** - * `input` event callback is called after `paste` event callback. - * - * @private - */ - - }, { - key: 'onInput', - value: function onInput() { - var _this6 = this; - - var priv = privatePool.get(this); - - if (!this.hot.isListening() || !priv.isTriggeredByPaste) { - return; - } - - priv.isTriggeredByPaste = false; - - var input = void 0, - inputArray = void 0, - selected = void 0, - coordsFrom = void 0, - coordsTo = void 0, - cellRange = void 0, - topLeftCorner = void 0, - bottomRightCorner = void 0, - areaStart = void 0, - areaEnd = void 0; - - input = this.textarea.getValue(); - inputArray = _SheetClip2.default.parse(input); - - var allowPasting = !!this.hot.runHooks('beforePaste', inputArray, this.copyableRanges); - - if (!allowPasting) { - return; - } - - selected = this.hot.getSelected(); - coordsFrom = new _src.CellCoords(selected[0], selected[1]); - coordsTo = new _src.CellCoords(selected[2], selected[3]); - cellRange = new _src.CellRange(coordsFrom, coordsFrom, coordsTo); - topLeftCorner = cellRange.getTopLeftCorner(); - bottomRightCorner = cellRange.getBottomRightCorner(); - areaStart = topLeftCorner; - areaEnd = new _src.CellCoords(Math.max(bottomRightCorner.row, inputArray.length - 1 + topLeftCorner.row), Math.max(bottomRightCorner.col, inputArray[0].length - 1 + topLeftCorner.col)); - - var isSelRowAreaCoverInputValue = coordsTo.row - coordsFrom.row >= inputArray.length - 1; - var isSelColAreaCoverInputValue = coordsTo.col - coordsFrom.col >= inputArray[0].length - 1; - - this.hot.addHookOnce('afterChange', function (changes, source) { - var changesLength = changes ? changes.length : 0; - - if (changesLength) { - var offset = { row: 0, col: 0 }; - var highestColumnIndex = -1; - - (0, _array.arrayEach)(changes, function (change, index) { - var nextChange = changesLength > index + 1 ? changes[index + 1] : null; - - if (nextChange) { - if (!isSelRowAreaCoverInputValue) { - offset.row += Math.max(nextChange[0] - change[0] - 1, 0); - } - if (!isSelColAreaCoverInputValue && change[1] > highestColumnIndex) { - highestColumnIndex = change[1]; - offset.col += Math.max(nextChange[1] - change[1] - 1, 0); - } - } - }); - _this6.hot.selectCell(areaStart.row, areaStart.col, areaEnd.row + offset.row, areaEnd.col + offset.col); - } - }); - - this.hot.populateFromArray(areaStart.row, areaStart.col, inputArray, areaEnd.row, areaEnd.col, 'CopyPaste.paste', this.pasteMode); - this.hot.runHooks('afterPaste', inputArray, this.copyableRanges); - } - - /** - * Add copy, cut and paste options to the Context Menu. - * - * @private - * @param {Object} options Contains default added options of the Context Menu. - */ - - }, { - key: 'onAfterContextMenuDefaultOptions', - value: function onAfterContextMenuDefaultOptions(options) { - options.items.push({ - name: '---------' - }, (0, _copy2.default)(this), (0, _cut2.default)(this)); - } - - /** - * beforeKeyDown callback. - * - * @private - * @param {Event} event - */ - - }, { - key: 'onBeforeKeyDown', - value: function onBeforeKeyDown(event) { - var _this7 = this; - - if (!this.hot.getSelected()) { - return; - } - if (this.hot.getActiveEditor() && this.hot.getActiveEditor().isOpened()) { - return; - } - if ((0, _event.isImmediatePropagationStopped)(event)) { - return; - } - if (!this.textarea.isActive() && (0, _element.getSelectionText)()) { - return; - } - - if ((0, _unicode.isCtrlKey)(event.keyCode)) { - // When fragmentSelection is enabled and some text is selected then don't blur selection calling 'setCopyableText' - if (this.hot.getSettings().fragmentSelection && (0, _element.getSelectionText)()) { - return; - } - - // when CTRL is pressed, prepare selectable text in textarea - this.setCopyableText(); - (0, _event.stopImmediatePropagation)(event); - - return; - } - - // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL) - var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey; - - if (ctrlDown) { - if (event.keyCode == _unicode.KEY_CODES.A) { - setTimeout(function () { - _this7.setCopyableText(); - }, 0); - } - if (event.keyCode == _unicode.KEY_CODES.X) { - this.cut(); - } - if (event.keyCode == _unicode.KEY_CODES.C) { - this.copy(); - } - if (event.keyCode == _unicode.KEY_CODES.V) { - this.triggerPaste(); - } - } - } - - /** - * Destroy plugin instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - if (this.textarea) { - this.textarea.destroy(); - } - - _get(CopyPaste.prototype.__proto__ || Object.getPrototypeOf(CopyPaste.prototype), 'destroy', this).call(this); - } - }]); - - return CopyPaste; -}(_base2.default); - -(0, _plugins.registerPlugin)('CopyPaste', CopyPaste); - -exports.default = CopyPaste; - -/***/ }), -/* 237 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class Textarea - * - * @plugin CopyPaste - */ -var Textarea = function () { - _createClass(Textarea, null, [{ - key: 'getSingleton', - value: function getSingleton() { - globalSingleton.append(); - - return globalSingleton; - } - }]); - - function Textarea() { - _classCallCheck(this, Textarea); - - /** - * Main textarea element. - * - * @type {HTMLElement} - */ - this.element = void 0; - /** - * Store information about append to the document.body. - * - * @type {Boolean} - */ - this.isAppended = false; - /** - * Reference counter. - * - * @type {Number} - */ - this.refCounter = 0; - } - - /** - * Apends textarea element to the `body` - */ - - - _createClass(Textarea, [{ - key: 'append', - value: function append() { - if (this.hasBeenDestroyed()) { - this.create(); - } - - this.refCounter++; - - if (!this.isAppended && document.body) { - if (document.body) { - this.isAppended = true; - document.body.appendChild(this.element); - } - } - } - - /** - * Prepares textarea element with proper attributes. - */ - - }, { - key: 'create', - value: function create() { - this.element = document.createElement('textarea'); - this.element.id = 'HandsontableCopyPaste'; - this.element.className = 'copyPaste'; - this.element.tabIndex = -1; - this.element.autocomplete = 'off'; - this.element.wrap = 'off'; - } - - /** - * Deselects textarea element if is active. - */ - - }, { - key: 'deselect', - value: function deselect() { - if (this.element === document.activeElement) { - document.activeElement.blur(); - } - } - - /** - * Destroy instance - */ - - }, { - key: 'destroy', - value: function destroy() { - this.refCounter--; - this.refCounter = this.refCounter < 0 ? 0 : this.refCounter; - - if (this.hasBeenDestroyed() && this.element && this.element.parentNode) { - this.element.parentNode.removeChild(this.element); - this.element = null; - this.isAppended = false; - } - } - - /** - * Getter for the element. - * - * @returns {String} - */ - - }, { - key: 'getValue', - value: function getValue() { - return this.element.value; - } - - /** - * Check if instance has been destroyed - * - * @returns {Boolean} - */ - - }, { - key: 'hasBeenDestroyed', - value: function hasBeenDestroyed() { - return this.refCounter < 1; - } - - /** - * Check if the element is an active element in frame. - * - * @returns {Boolean} - */ - - }, { - key: 'isActive', - value: function isActive() { - return this.element === document.activeElement; - } - - /** - * Sets focus on the element and select content. - */ - - }, { - key: 'select', - value: function select() { - this.element.focus(); - this.element.select(); - } - - /** - * Setter for the element. - * - * @param {String} data Value which should be insert into the element. - */ - - }, { - key: 'setValue', - value: function setValue(data) { - this.element.value = data; - } - }]); - - return Textarea; -}(); - -var globalSingleton = new Textarea(); - -exports.default = Textarea; - -/***/ }), -/* 238 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _plugins = __webpack_require__(5); - -var _object = __webpack_require__(1); - -var _src = __webpack_require__(11); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function CustomBorders() {} -/** * - * Current instance (table where borders should be placed) - */ -var instance; - -/** - * This plugin enables an option to apply custom borders through the context menu (configurable with context menu key `borders`). - * - * To initialize Handsontable with predefined custom borders, provide cell coordinates and border styles in a form of an array. - * - * See [Custom Borders](http://docs.handsontable.com/demo-custom-borders.html) demo for more examples. - * - * @example - * ```js - * ... - * customBorders: [ - * {range: { - * from: {row: 1, col: 1}, - * to: {row: 3, col: 4}}, - * left: {}, - * right: {}, - * top: {}, - * bottom: {} - * } - * ], - * ... - * - * // or - * ... - * customBorders: [ - * {row: 2, col: 2, left: {width: 2, color: 'red'}, - * right: {width: 1, color: 'green'}, top: '', bottom: ''} - * ], - * ... - * ``` - * @private - * @class CustomBorders - * @plugin CustomBorders - */ - -/** * - * Check if plugin should be enabled. - */ -var checkEnable = function checkEnable(customBorders) { - if (typeof customBorders === 'boolean') { - if (customBorders === true) { - return true; - } - } - if ((typeof customBorders === 'undefined' ? 'undefined' : _typeof(customBorders)) === 'object') { - if (customBorders.length > 0) { - return true; - } - } - - return false; -}; - -/** * - * Initialize plugin. - */ -var init = function init() { - if (checkEnable(this.getSettings().customBorders)) { - if (!this.customBorders) { - instance = this; - this.customBorders = new CustomBorders(); - } - } -}; - -/** * - * Get index of border from the settings. - * - * @param {String} className - * @returns {Number} - */ -var getSettingIndex = function getSettingIndex(className) { - for (var i = 0; i < instance.view.wt.selections.length; i++) { - if (instance.view.wt.selections[i].settings.className == className) { - return i; - } - } - - return -1; -}; - -/** * - * Insert WalkontableSelection instance into Walkontable settings. - * - * @param border - */ -var insertBorderIntoSettings = function insertBorderIntoSettings(border) { - var coordinates = { - row: border.row, - col: border.col - }; - var selection = new _src.Selection(border, new _src.CellRange(coordinates, coordinates, coordinates)); - var index = getSettingIndex(border.className); - - if (index >= 0) { - instance.view.wt.selections[index] = selection; - } else { - instance.view.wt.selections.push(selection); - } -}; - -/** * - * Prepare borders from setting (single cell). - * - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @param borderObj - */ -var prepareBorderFromCustomAdded = function prepareBorderFromCustomAdded(row, col, borderObj) { - var border = createEmptyBorders(row, col); - border = extendDefaultBorder(border, borderObj); - this.setCellMeta(row, col, 'borders', border); - - insertBorderIntoSettings(border); -}; - -/** * - * Prepare borders from setting (object). - * - * @param {Object} rowObj - */ -var prepareBorderFromCustomAddedRange = function prepareBorderFromCustomAddedRange(rowObj) { - var range = rowObj.range; - - for (var row = range.from.row; row <= range.to.row; row++) { - for (var col = range.from.col; col <= range.to.col; col++) { - var border = createEmptyBorders(row, col); - var add = 0; - - if (row == range.from.row) { - add++; - - if ((0, _object.hasOwnProperty)(rowObj, 'top')) { - border.top = rowObj.top; - } - } - - if (row == range.to.row) { - add++; - - if ((0, _object.hasOwnProperty)(rowObj, 'bottom')) { - border.bottom = rowObj.bottom; - } - } - - if (col == range.from.col) { - add++; - - if ((0, _object.hasOwnProperty)(rowObj, 'left')) { - border.left = rowObj.left; - } - } - - if (col == range.to.col) { - add++; - - if ((0, _object.hasOwnProperty)(rowObj, 'right')) { - border.right = rowObj.right; - } - } - - if (add > 0) { - this.setCellMeta(row, col, 'borders', border); - insertBorderIntoSettings(border); - } - } - } -}; - -/** * - * Create separated class name for borders for each cell. - * - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @returns {String} - */ -var createClassName = function createClassName(row, col) { - return 'border_row' + row + 'col' + col; -}; - -/** * - * Create default single border for each position (top/right/bottom/left). - * - * @returns {Object} `{{width: number, color: string}}` - */ -var createDefaultCustomBorder = function createDefaultCustomBorder() { - return { - width: 1, - color: '#000' - }; -}; - -/** * - * Create default object for empty border. - * - * @returns {Object} `{{hide: boolean}}` - */ -var createSingleEmptyBorder = function createSingleEmptyBorder() { - return { - hide: true - }; -}; - -/** * - * Create default Handsontable border object. - * - * @returns {Object} `{{width: number, color: string, cornerVisible: boolean}}` - */ -var createDefaultHtBorder = function createDefaultHtBorder() { - return { - width: 1, - color: '#000', - cornerVisible: false - }; -}; - -/** * - * Prepare empty border for each cell with all custom borders hidden. - * - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - * @returns {Object} `{{className: *, border: *, row: *, col: *, top: {hide: boolean}, right: {hide: boolean}, bottom: {hide: boolean}, left: {hide: boolean}}}` - */ -var createEmptyBorders = function createEmptyBorders(row, col) { - return { - className: createClassName(row, col), - border: createDefaultHtBorder(), - row: row, - col: col, - top: createSingleEmptyBorder(), - right: createSingleEmptyBorder(), - bottom: createSingleEmptyBorder(), - left: createSingleEmptyBorder() - }; -}; - -var extendDefaultBorder = function extendDefaultBorder(defaultBorder, customBorder) { - if ((0, _object.hasOwnProperty)(customBorder, 'border')) { - defaultBorder.border = customBorder.border; - } - - if ((0, _object.hasOwnProperty)(customBorder, 'top')) { - defaultBorder.top = customBorder.top; - } - - if ((0, _object.hasOwnProperty)(customBorder, 'right')) { - defaultBorder.right = customBorder.right; - } - - if ((0, _object.hasOwnProperty)(customBorder, 'bottom')) { - defaultBorder.bottom = customBorder.bottom; - } - - if ((0, _object.hasOwnProperty)(customBorder, 'left')) { - defaultBorder.left = customBorder.left; - } - - return defaultBorder; -}; - -/** - * Remove borders divs from DOM. - * - * @param borderClassName - */ -var removeBordersFromDom = function removeBordersFromDom(borderClassName) { - var borders = document.querySelectorAll('.' + borderClassName); - - for (var i = 0; i < borders.length; i++) { - if (borders[i]) { - if (borders[i].nodeName != 'TD') { - var parent = borders[i].parentNode; - - if (parent.parentNode) { - parent.parentNode.removeChild(parent); - } - } - } - } -}; - -/** * - * Remove border (triggered from context menu). - * - * @param {Number} row Visual row index. - * @param {Number} col Visual column index. - */ -var removeAllBorders = function removeAllBorders(row, col) { - var borderClassName = createClassName(row, col); - removeBordersFromDom(borderClassName); - this.removeCellMeta(row, col, 'borders'); -}; - -/** * - * Set borders for each cell re. to border position - * - * @param row Visual row index. - * @param col Visual column index. - * @param place - * @param remove - */ -var setBorder = function setBorder(row, col, place, remove) { - - var bordersMeta = this.getCellMeta(row, col).borders; - - if (!bordersMeta || bordersMeta.border == undefined) { - bordersMeta = createEmptyBorders(row, col); - } - - if (remove) { - bordersMeta[place] = createSingleEmptyBorder(); - } else { - bordersMeta[place] = createDefaultCustomBorder(); - } - - this.setCellMeta(row, col, 'borders', bordersMeta); - - var borderClassName = createClassName(row, col); - removeBordersFromDom(borderClassName); - insertBorderIntoSettings(bordersMeta); - - this.render(); -}; - -/** * - * Prepare borders based on cell and border position - * - * @param range - * @param place - * @param remove - */ -var prepareBorder = function prepareBorder(range, place, remove) { - - if (range.from.row == range.to.row && range.from.col == range.to.col) { - if (place == 'noBorders') { - removeAllBorders.call(this, range.from.row, range.from.col); - } else { - setBorder.call(this, range.from.row, range.from.col, place, remove); - } - } else { - switch (place) { - case 'noBorders': - for (var column = range.from.col; column <= range.to.col; column++) { - for (var row = range.from.row; row <= range.to.row; row++) { - removeAllBorders.call(this, row, column); - } - } - break; - case 'top': - for (var topCol = range.from.col; topCol <= range.to.col; topCol++) { - setBorder.call(this, range.from.row, topCol, place, remove); - } - break; - case 'right': - for (var rowRight = range.from.row; rowRight <= range.to.row; rowRight++) { - setBorder.call(this, rowRight, range.to.col, place); - } - break; - case 'bottom': - for (var bottomCol = range.from.col; bottomCol <= range.to.col; bottomCol++) { - setBorder.call(this, range.to.row, bottomCol, place); - } - break; - case 'left': - for (var rowLeft = range.from.row; rowLeft <= range.to.row; rowLeft++) { - setBorder.call(this, rowLeft, range.from.col, place); - } - break; - default: - break; - } - } -}; - -/** * - * Check if selection has border by className - * - * @param hot - * @param direction - */ -var checkSelectionBorders = function checkSelectionBorders(hot, direction) { - var atLeastOneHasBorder = false; - - hot.getSelectedRange().forAll(function (r, c) { - var metaBorders = hot.getCellMeta(r, c).borders; - - if (metaBorders) { - if (direction) { - if (!(0, _object.hasOwnProperty)(metaBorders[direction], 'hide')) { - atLeastOneHasBorder = true; - return false; // breaks forAll - } - } else { - atLeastOneHasBorder = true; - return false; // breaks forAll - } - } - }); - return atLeastOneHasBorder; -}; - -/** * - * Mark label in contextMenu as selected - * - * @param label - * @returns {string} - */ -var markSelected = function markSelected(label) { - return '' + String.fromCharCode(10003) + '' + label; // workaround for https://github.com/handsontable/handsontable/issues/1946 -}; - -/** * - * Add border options to context menu - * - * @param defaultOptions - */ -var addBordersOptionsToContextMenu = function addBordersOptionsToContextMenu(defaultOptions) { - if (!this.getSettings().customBorders) { - return; - } - - defaultOptions.items.push({ - name: '---------' - }); - defaultOptions.items.push({ - key: 'borders', - name: 'Borders', - disabled: function disabled() { - return this.selection.selectedHeader.corner; - }, - - submenu: { - items: [{ - key: 'borders:top', - name: function name() { - var label = 'Top'; - var hasBorder = checkSelectionBorders(this, 'top'); - if (hasBorder) { - label = markSelected(label); - } - - return label; - }, - callback: function callback() { - var hasBorder = checkSelectionBorders(this, 'top'); - prepareBorder.call(this, this.getSelectedRange(), 'top', hasBorder); - } - }, { - key: 'borders:right', - name: function name() { - var label = 'Right'; - var hasBorder = checkSelectionBorders(this, 'right'); - if (hasBorder) { - label = markSelected(label); - } - return label; - }, - callback: function callback() { - var hasBorder = checkSelectionBorders(this, 'right'); - prepareBorder.call(this, this.getSelectedRange(), 'right', hasBorder); - } - }, { - key: 'borders:bottom', - name: function name() { - var label = 'Bottom'; - var hasBorder = checkSelectionBorders(this, 'bottom'); - if (hasBorder) { - label = markSelected(label); - } - return label; - }, - callback: function callback() { - var hasBorder = checkSelectionBorders(this, 'bottom'); - prepareBorder.call(this, this.getSelectedRange(), 'bottom', hasBorder); - } - }, { - key: 'borders:left', - name: function name() { - var label = 'Left'; - var hasBorder = checkSelectionBorders(this, 'left'); - if (hasBorder) { - label = markSelected(label); - } - - return label; - }, - callback: function callback() { - var hasBorder = checkSelectionBorders(this, 'left'); - prepareBorder.call(this, this.getSelectedRange(), 'left', hasBorder); - } - }, { - key: 'borders:no_borders', - name: 'Remove border(s)', - callback: function callback() { - prepareBorder.call(this, this.getSelectedRange(), 'noBorders'); - }, - disabled: function disabled() { - return !checkSelectionBorders(this); - } - }] - } - }); -}; - -_pluginHooks2.default.getSingleton().add('beforeInit', init); -_pluginHooks2.default.getSingleton().add('afterContextMenuDefaultOptions', addBordersOptionsToContextMenu); -_pluginHooks2.default.getSingleton().add('afterInit', function () { - var customBorders = this.getSettings().customBorders; - - if (customBorders) { - for (var i = 0; i < customBorders.length; i++) { - if (customBorders[i].range) { - prepareBorderFromCustomAddedRange.call(this, customBorders[i]); - } else { - prepareBorderFromCustomAdded.call(this, customBorders[i].row, customBorders[i].col, customBorders[i]); - } - } - - this.render(); - this.view.wt.draw(true); - } -}); - -/***/ }), -/* 239 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _plugins = __webpack_require__(5); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @description - * Plugin used to scroll Handsontable by selecting a cell and dragging outside of the visible viewport. - * - * @private - * @class DragToScroll - * @plugin DragToScroll - */ -function DragToScroll() { - this.boundaries = null; - this.callback = null; -} - -/** - * @param boundaries {Object} compatible with getBoundingClientRect - */ -DragToScroll.prototype.setBoundaries = function (boundaries) { - this.boundaries = boundaries; -}; - -/** - * @param callback {Function} - */ -DragToScroll.prototype.setCallback = function (callback) { - this.callback = callback; -}; - -/** - * Check if mouse position (x, y) is outside of the viewport - * @param x - * @param y - */ -DragToScroll.prototype.check = function (x, y) { - var diffX = 0; - var diffY = 0; - - if (y < this.boundaries.top) { - // y is less than top - diffY = y - this.boundaries.top; - } else if (y > this.boundaries.bottom) { - // y is more than bottom - diffY = y - this.boundaries.bottom; - } - - if (x < this.boundaries.left) { - // x is less than left - diffX = x - this.boundaries.left; - } else if (x > this.boundaries.right) { - // x is more than right - diffX = x - this.boundaries.right; - } - - this.callback(diffX, diffY); -}; - -var dragToScroll; -var instance; - -var setupListening = function setupListening(instance) { - instance.dragToScrollListening = false; - var scrollHandler = instance.view.wt.wtTable.holder; // native scroll - dragToScroll = new DragToScroll(); - - if (scrollHandler === window) { - // not much we can do currently - return; - } - - dragToScroll.setBoundaries(scrollHandler.getBoundingClientRect()); - dragToScroll.setCallback(function (scrollX, scrollY) { - if (scrollX < 0) { - scrollHandler.scrollLeft -= 50; - } else if (scrollX > 0) { - scrollHandler.scrollLeft += 50; - } - - if (scrollY < 0) { - scrollHandler.scrollTop -= 20; - } else if (scrollY > 0) { - scrollHandler.scrollTop += 20; - } - }); - - instance.dragToScrollListening = true; -}; - -_pluginHooks2.default.getSingleton().add('afterInit', function () { - var instance = this; - var eventManager = new _eventManager2.default(this); - - eventManager.addEventListener(document, 'mouseup', function () { - instance.dragToScrollListening = false; - }); - - eventManager.addEventListener(document, 'mousemove', function (event) { - if (instance.dragToScrollListening) { - dragToScroll.check(event.clientX, event.clientY); - } - }); -}); - -_pluginHooks2.default.getSingleton().add('afterDestroy', function () { - new _eventManager2.default(this).clear(); -}); - -_pluginHooks2.default.getSingleton().add('afterOnCellMouseDown', function () { - setupListening(this); -}); - -_pluginHooks2.default.getSingleton().add('afterOnCellCornerMouseDown', function () { - setupListening(this); -}); - -exports.default = DragToScroll; - -/***/ }), -/* 240 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = freezeColumnItem; -function freezeColumnItem(manualColumnFreezePlugin) { - return { - key: 'freeze_column', - name: 'Freeze this column', - callback: function callback() { - var selectedColumn = this.getSelectedRange().from.col; - - manualColumnFreezePlugin.freezeColumn(selectedColumn); - - this.render(); - this.view.wt.wtOverlays.adjustElementsSize(true); - }, - hidden: function hidden() { - var selection = this.getSelectedRange(); - var hide = false; - - if (selection === void 0) { - hide = true; - } else if (selection.from.col !== selection.to.col || selection.from.col <= this.getSettings().fixedColumnsLeft - 1) { - hide = true; - } - - return hide; - } - }; -} - -/***/ }), -/* 241 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = unfreezeColumnItem; -function unfreezeColumnItem(manualColumnFreezePlugin) { - return { - key: 'unfreeze_column', - name: 'Unfreeze this column', - callback: function callback() { - var selectedColumn = this.getSelectedRange().from.col; - - manualColumnFreezePlugin.unfreezeColumn(selectedColumn); - - this.render(); - this.view.wt.wtOverlays.adjustElementsSize(true); - }, - hidden: function hidden() { - var selection = this.getSelectedRange(); - var hide = false; - - if (selection === void 0) { - hide = true; - } else if (selection.from.col !== selection.to.col || selection.from.col >= this.getSettings().fixedColumnsLeft) { - hide = true; - } - - return hide; - } - }; -} - -/***/ }), -/* 242 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _plugins = __webpack_require__(5); - -var _array = __webpack_require__(2); - -var _freezeColumn = __webpack_require__(240); - -var _freezeColumn2 = _interopRequireDefault(_freezeColumn); - -var _unfreezeColumn = __webpack_require__(241); - -var _unfreezeColumn2 = _interopRequireDefault(_unfreezeColumn); - -__webpack_require__(299); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var privatePool = new WeakMap(); -/** - * This plugin allows to manually "freeze" and "unfreeze" a column using an entry in the Context Menu. - * You can turn it on by setting a `manualColumnFreeze` property to `true`. - * - * @plugin ManualColumnFreeze - * @dependencies ManualColumnMove - */ - -var ManualColumnFreeze = function (_BasePlugin) { - _inherits(ManualColumnFreeze, _BasePlugin); - - function ManualColumnFreeze(hotInstance) { - _classCallCheck(this, ManualColumnFreeze); - - var _this = _possibleConstructorReturn(this, (ManualColumnFreeze.__proto__ || Object.getPrototypeOf(ManualColumnFreeze)).call(this, hotInstance)); - - privatePool.set(_this, { - moveByFreeze: false, - afterFirstUse: false - }); - /** - * Original column positions - * - * @type {Array} - */ - _this.frozenColumnsBasePositions = []; - /** - * Reference to the `ManualColumnMove` plugin. - */ - _this.manualColumnMovePlugin = void 0; - return _this; - } - - /** - * Check if the plugin is enabled in the Handsontable settings. - * - * @returns {Boolean} - */ - - - _createClass(ManualColumnFreeze, [{ - key: 'isEnabled', - value: function isEnabled() { - return !!this.hot.getSettings().manualColumnFreeze; - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - - this.addHook('afterContextMenuDefaultOptions', function (options) { - return _this2.addContextMenuEntry(options); - }); - this.addHook('afterInit', function () { - return _this2.onAfterInit(); - }); - this.addHook('beforeColumnMove', function (rows, target) { - return _this2.onBeforeColumnMove(rows, target); - }); - - _get(ManualColumnFreeze.prototype.__proto__ || Object.getPrototypeOf(ManualColumnFreeze.prototype), 'enablePlugin', this).call(this); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - var priv = privatePool.get(this); - - priv.afterFirstUse = false; - priv.moveByFreeze = false; - - _get(ManualColumnFreeze.prototype.__proto__ || Object.getPrototypeOf(ManualColumnFreeze.prototype), 'disablePlugin', this).call(this); - } - - /** - * Updates the plugin to use the latest options you have specified. - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() { - this.disablePlugin(); - this.enablePlugin(); - - _get(ManualColumnFreeze.prototype.__proto__ || Object.getPrototypeOf(ManualColumnFreeze.prototype), 'updatePlugin', this).call(this); - } - - /** - * Freeze the given column (add it to fixed columns). - * - * @param {Number} column Visual column index. - */ - - }, { - key: 'freezeColumn', - value: function freezeColumn(column) { - var priv = privatePool.get(this); - var settings = this.hot.getSettings(); - - if (!priv.afterFirstUse) { - priv.afterFirstUse = true; - } - - if (settings.fixedColumnsLeft === this.hot.countCols() || column <= settings.fixedColumnsLeft - 1) { - return; // already fixed - } - - priv.moveByFreeze = true; - - if (column !== this.getMovePlugin().columnsMapper.getValueByIndex(column)) { - this.frozenColumnsBasePositions[settings.fixedColumnsLeft] = column; - } - - this.getMovePlugin().moveColumn(column, settings.fixedColumnsLeft++); - } - - /** - * Unfreeze the given column (remove it from fixed columns and bring to it's previous position). - * - * @param {Number} column Visual column index. - */ - - }, { - key: 'unfreezeColumn', - value: function unfreezeColumn(column) { - var priv = privatePool.get(this); - var settings = this.hot.getSettings(); - - if (!priv.afterFirstUse) { - priv.afterFirstUse = true; - } - - if (settings.fixedColumnsLeft <= 0 || column > settings.fixedColumnsLeft - 1) { - return; // not fixed - } - - var returnCol = this.getBestColumnReturnPosition(column); - - priv.moveByFreeze = true; - settings.fixedColumnsLeft--; - - this.getMovePlugin().moveColumn(column, returnCol + 1); - } - - /** - * Get the reference to the ManualColumnMove plugin. - * - * @private - * @returns {Object} - */ - - }, { - key: 'getMovePlugin', - value: function getMovePlugin() { - if (!this.manualColumnMovePlugin) { - this.manualColumnMovePlugin = this.hot.getPlugin('manualColumnMove'); - } - - return this.manualColumnMovePlugin; - } - - /** - * Estimates the most fitting return position for unfrozen column. - * - * @private - * @param {Number} column Visual column index. - */ - - }, { - key: 'getBestColumnReturnPosition', - value: function getBestColumnReturnPosition(column) { - var movePlugin = this.getMovePlugin(); - var settings = this.hot.getSettings(); - var i = settings.fixedColumnsLeft; - var j = movePlugin.columnsMapper.getValueByIndex(i); - var initialCol = void 0; - - if (this.frozenColumnsBasePositions[column] == null) { - initialCol = movePlugin.columnsMapper.getValueByIndex(column); - - while (j < initialCol) { - i++; - j = movePlugin.columnsMapper.getValueByIndex(i); - } - } else { - initialCol = this.frozenColumnsBasePositions[column]; - this.frozenColumnsBasePositions[column] = void 0; - - while (j <= initialCol) { - i++; - j = movePlugin.columnsMapper.getValueByIndex(i); - } - i = j; - } - - return i - 1; - } - /** - * Add the manualColumnFreeze context menu entries. - * - * @private - * @param {Object} options Context menu options. - */ - - }, { - key: 'addContextMenuEntry', - value: function addContextMenuEntry(options) { - options.items.push({ name: '---------' }, (0, _freezeColumn2.default)(this), (0, _unfreezeColumn2.default)(this)); - } - - /** - * Enabling `manualColumnMove` plugin on `afterInit` hook. - * - * @private - */ - - }, { - key: 'onAfterInit', - value: function onAfterInit() { - if (!this.getMovePlugin().isEnabled()) { - this.getMovePlugin().enablePlugin(); - } - } - - /** - * Prevent moving the rows from/to fixed area. - * - * @private - * @param {Array} rows - * @param {Number} target - */ - - }, { - key: 'onBeforeColumnMove', - value: function onBeforeColumnMove(rows, target) { - var priv = privatePool.get(this); - - if (priv.afterFirstUse && !priv.moveByFreeze) { - var frozenLen = this.hot.getSettings().fixedColumnsLeft; - var disallowMoving = target < frozenLen; - - if (!disallowMoving) { - (0, _array.arrayEach)(rows, function (value, index, array) { - if (value < frozenLen) { - disallowMoving = true; - return false; - } - }); - } - - if (disallowMoving) { - return false; - } - } - - if (priv.moveByFreeze) { - priv.moveByFreeze = false; - } - } - - /** - * Destroy plugin instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - _get(ManualColumnFreeze.prototype.__proto__ || Object.getPrototypeOf(ManualColumnFreeze.prototype), 'destroy', this).call(this); - } - }]); - - return ManualColumnFreeze; -}(_base2.default); - -(0, _plugins.registerPlugin)('manualColumnFreeze', ManualColumnFreeze); - -exports.default = ManualColumnFreeze; - -/***/ }), -/* 243 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _arrayMapper = __webpack_require__(150); - -var _arrayMapper2 = _interopRequireDefault(_arrayMapper); - -var _array = __webpack_require__(2); - -var _object = __webpack_require__(1); - -var _number = __webpack_require__(6); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class ColumnsMapper - * @plugin ManualColumnMove - */ -var ColumnsMapper = function () { - function ColumnsMapper(manualColumnMove) { - _classCallCheck(this, ColumnsMapper); - - /** - * Instance of ManualColumnMove plugin. - * - * @type {ManualColumnMove} - */ - this.manualColumnMove = manualColumnMove; - } - - /** - * Reset current map array and create new one. - * - * @param {Number} [length] Custom generated map length. - */ - - - _createClass(ColumnsMapper, [{ - key: 'createMap', - value: function createMap(length) { - var _this = this; - - var originLength = length === void 0 ? this._arrayMap.length : length; - - this._arrayMap.length = 0; - - (0, _number.rangeEach)(originLength - 1, function (itemIndex) { - _this._arrayMap[itemIndex] = itemIndex; - }); - } - - /** - * Destroy class. - */ - - }, { - key: 'destroy', - value: function destroy() { - this._arrayMap = null; - } - - /** - * Moving elements in columnsMapper. - * - * @param {Number} from Column index to move. - * @param {Number} to Target index. - */ - - }, { - key: 'moveColumn', - value: function moveColumn(from, to) { - var indexToMove = this._arrayMap[from]; - this._arrayMap[from] = null; - this._arrayMap.splice(to, 0, indexToMove); - } - - /** - * Clearing arrayMap from `null` entries. - */ - - }, { - key: 'clearNull', - value: function clearNull() { - this._arrayMap = (0, _array.arrayFilter)(this._arrayMap, function (i) { - return i !== null; - }); - } - }]); - - return ColumnsMapper; -}(); - -(0, _object.mixin)(ColumnsMapper, _arrayMapper2.default); - -exports.default = ColumnsMapper; - -/***/ }), -/* 244 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _array = __webpack_require__(2); - -var _element = __webpack_require__(0); - -var _number = __webpack_require__(6); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _plugins = __webpack_require__(5); - -var _columnsMapper = __webpack_require__(243); - -var _columnsMapper2 = _interopRequireDefault(_columnsMapper); - -var _backlight = __webpack_require__(245); - -var _backlight2 = _interopRequireDefault(_backlight); - -var _guideline = __webpack_require__(246); - -var _guideline2 = _interopRequireDefault(_guideline); - -var _src = __webpack_require__(11); - -__webpack_require__(300); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -_pluginHooks2.default.getSingleton().register('beforeColumnMove'); -_pluginHooks2.default.getSingleton().register('afterColumnMove'); -_pluginHooks2.default.getSingleton().register('unmodifyCol'); - -var privatePool = new WeakMap(); -var CSS_PLUGIN = 'ht__manualColumnMove'; -var CSS_SHOW_UI = 'show-ui'; -var CSS_ON_MOVING = 'on-moving--columns'; -var CSS_AFTER_SELECTION = 'after-selection--columns'; - -/** - * @plugin ManualColumnMove - * - * @description - * This plugin allows to change columns order. - * - * API: - * - moveColumn - move single column to the new position. - * - moveColumns - move many columns (as an array of indexes) to the new position. - * - * If you want apply visual changes, you have to call manually the render() method on the instance of Handsontable. - * - * UI components: - * - backlight - highlight of selected columns. - * - guideline - line which shows where rows has been moved. - * - * @class ManualColumnMove - * @plugin ManualColumnMove - */ - -var ManualColumnMove = function (_BasePlugin) { - _inherits(ManualColumnMove, _BasePlugin); - - function ManualColumnMove(hotInstance) { - _classCallCheck(this, ManualColumnMove); - - /** - * Set up WeakMap of plugin to sharing private parameters; - */ - var _this = _possibleConstructorReturn(this, (ManualColumnMove.__proto__ || Object.getPrototypeOf(ManualColumnMove)).call(this, hotInstance)); - - privatePool.set(_this, { - columnsToMove: [], - countCols: 0, - fixedColumns: 0, - pressed: void 0, - disallowMoving: void 0, - target: { - eventPageX: void 0, - coords: void 0, - TD: void 0, - col: void 0 - } - }); - - /** - * List of last removed row indexes. - * - * @type {Array} - */ - _this.removedColumns = []; - /** - * Object containing visual row indexes mapped to data source indexes. - * - * @type {RowsMapper} - */ - _this.columnsMapper = new _columnsMapper2.default(_this); - /** - * Event Manager object. - * - * @type {Object} - */ - _this.eventManager = new _eventManager2.default(_this); - /** - * Backlight UI object. - * - * @type {Object} - */ - _this.backlight = new _backlight2.default(hotInstance); - /** - * Guideline UI object. - * - * @type {Object} - */ - _this.guideline = new _guideline2.default(hotInstance); - return _this; - } - - /** - * Check if plugin is enabled. - * - * @returns {Boolean} - */ - - - _createClass(ManualColumnMove, [{ - key: 'isEnabled', - value: function isEnabled() { - return !!this.hot.getSettings().manualColumnMove; - } - - /** - * Enable the plugin. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - - this.addHook('beforeOnCellMouseDown', function (event, coords, TD, blockCalculations) { - return _this2.onBeforeOnCellMouseDown(event, coords, TD, blockCalculations); - }); - this.addHook('beforeOnCellMouseOver', function (event, coords, TD, blockCalculations) { - return _this2.onBeforeOnCellMouseOver(event, coords, TD, blockCalculations); - }); - this.addHook('afterScrollVertically', function () { - return _this2.onAfterScrollVertically(); - }); - this.addHook('modifyCol', function (row, source) { - return _this2.onModifyCol(row, source); - }); - this.addHook('beforeRemoveCol', function (index, amount) { - return _this2.onBeforeRemoveCol(index, amount); - }); - this.addHook('afterRemoveCol', function (index, amount) { - return _this2.onAfterRemoveCol(index, amount); - }); - this.addHook('afterCreateCol', function (index, amount) { - return _this2.onAfterCreateCol(index, amount); - }); - this.addHook('afterLoadData', function (firstTime) { - return _this2.onAfterLoadData(firstTime); - }); - this.addHook('unmodifyCol', function (column) { - return _this2.onUnmodifyCol(column); - }); - - this.registerEvents(); - - // TODO: move adding plugin classname to BasePlugin. - (0, _element.addClass)(this.hot.rootElement, CSS_PLUGIN); - - _get(ManualColumnMove.prototype.__proto__ || Object.getPrototypeOf(ManualColumnMove.prototype), 'enablePlugin', this).call(this); - } - - /** - * Updates the plugin to use the latest options you have specified. - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() { - this.disablePlugin(); - this.enablePlugin(); - - this.onAfterPluginsInitialized(); - - _get(ManualColumnMove.prototype.__proto__ || Object.getPrototypeOf(ManualColumnMove.prototype), 'updatePlugin', this).call(this); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - var pluginSettings = this.hot.getSettings().manualColumnMove; - - if (Array.isArray(pluginSettings)) { - this.columnsMapper.clearMap(); - } - - (0, _element.removeClass)(this.hot.rootElement, CSS_PLUGIN); - - this.unregisterEvents(); - this.backlight.destroy(); - this.guideline.destroy(); - - _get(ManualColumnMove.prototype.__proto__ || Object.getPrototypeOf(ManualColumnMove.prototype), 'disablePlugin', this).call(this); - } - - /** - * Move a single column. - * - * @param {Number} column Visual column index to be moved. - * @param {Number} target Visual column index being a target for the moved column. - */ - - }, { - key: 'moveColumn', - value: function moveColumn(column, target) { - this.moveColumns([column], target); - } - - /** - * Move multiple columns. - * - * @param {Array} columns Array of visual column indexes to be moved. - * @param {Number} target Visual column index being a target for the moved columns. - */ - - }, { - key: 'moveColumns', - value: function moveColumns(columns, target) { - var _this3 = this; - - var priv = privatePool.get(this); - var beforeColumnHook = this.hot.runHooks('beforeColumnMove', columns, target); - - priv.disallowMoving = !beforeColumnHook; - - if (beforeColumnHook !== false) { - // first we need to rewrite an visual indexes to physical for save reference after move - (0, _array.arrayEach)(columns, function (column, index, array) { - array[index] = _this3.columnsMapper.getValueByIndex(column); - }); - - // next, when we have got an physical indexes, we can move columns - (0, _array.arrayEach)(columns, function (column, index) { - var actualPosition = _this3.columnsMapper.getIndexByValue(column); - - if (actualPosition !== target) { - _this3.columnsMapper.moveColumn(actualPosition, target + index); - } - }); - - // after moving we have to clear columnsMapper from null entries - this.columnsMapper.clearNull(); - } - - this.hot.runHooks('afterColumnMove', columns, target); - } - - /** - * Correct the cell selection after the move action. Fired only when action was made with a mouse. - * That means that changing the column order using the API won't correct the selection. - * - * @private - * @param {Number} startColumn Visual column index for the start of the selection. - * @param {Number} endColumn Visual column index for the end of the selection. - */ - - }, { - key: 'changeSelection', - value: function changeSelection(startColumn, endColumn) { - var selection = this.hot.selection; - var lastRowIndex = this.hot.countRows() - 1; - - selection.setRangeStartOnly(new _src.CellCoords(0, startColumn)); - selection.setRangeEnd(new _src.CellCoords(lastRowIndex, endColumn), false); - } - - /** - * Get the sum of the widths of columns in the provided range. - * - * @private - * @param {Number} from Visual column index. - * @param {Number} to Visual column index. - * @returns {Number} - */ - - }, { - key: 'getColumnsWidth', - value: function getColumnsWidth(from, to) { - var width = 0; - - for (var i = from; i < to; i++) { - var columnWidth = 0; - - if (i < 0) { - columnWidth = this.hot.view.wt.wtTable.getColumnWidth(i) || 0; - } else { - columnWidth = this.hot.view.wt.wtTable.getStretchedColumnWidth(i) || 0; - } - - width += columnWidth; - } - - return width; - } - - /** - * Load initial settings when persistent state is saved or when plugin was initialized as an array. - * - * @private - */ - - }, { - key: 'initialSettings', - value: function initialSettings() { - var pluginSettings = this.hot.getSettings().manualColumnMove; - - if (Array.isArray(pluginSettings)) { - this.moveColumns(pluginSettings, 0); - } else if (pluginSettings !== void 0) { - this.persistentStateLoad(); - } - } - - /** - * Check if the provided column is in the fixedColumnsLeft section. - * - * @private - * @param {Number} column Visual column index to check. - * @returns {Boolean} - */ - - }, { - key: 'isFixedColumnsLeft', - value: function isFixedColumnsLeft(column) { - return column < this.hot.getSettings().fixedColumnsLeft; - } - - /** - * Save the manual column positions to the persistent state. - * - * @private - */ - - }, { - key: 'persistentStateSave', - value: function persistentStateSave() { - this.hot.runHooks('persistentStateSave', 'manualColumnMove', this.columnsMapper._arrayMap); - } - - /** - * Load the manual column positions from the persistent state. - * - * @private - */ - - }, { - key: 'persistentStateLoad', - value: function persistentStateLoad() { - var storedState = {}; - - this.hot.runHooks('persistentStateLoad', 'manualColumnMove', storedState); - - if (storedState.value) { - this.columnsMapper._arrayMap = storedState.value; - } - } - - /** - * Prepare array of indexes based on actual selection. - * - * @private - * @returns {Array} - */ - - }, { - key: 'prepareColumnsToMoving', - value: function prepareColumnsToMoving(start, end) { - var selectedColumns = []; - - (0, _number.rangeEach)(start, end, function (i) { - selectedColumns.push(i); - }); - - return selectedColumns; - } - - /** - * Update the UI visual position. - * - * @private - */ - - }, { - key: 'refreshPositions', - value: function refreshPositions() { - var priv = privatePool.get(this); - var firstVisible = this.hot.view.wt.wtTable.getFirstVisibleColumn(); - var lastVisible = this.hot.view.wt.wtTable.getLastVisibleColumn(); - var wtTable = this.hot.view.wt.wtTable; - var scrollableElement = this.hot.view.wt.wtOverlays.scrollableElement; - var scrollLeft = typeof scrollableElement.scrollX === 'number' ? scrollableElement.scrollX : scrollableElement.scrollLeft; - var tdOffsetLeft = this.hot.view.THEAD.offsetLeft + this.getColumnsWidth(0, priv.coordsColumn); - var mouseOffsetLeft = priv.target.eventPageX - (priv.rootElementOffset - (scrollableElement.scrollX === void 0 ? scrollLeft : 0)); - var hiderWidth = wtTable.hider.offsetWidth; - var tbodyOffsetLeft = wtTable.TBODY.offsetLeft; - var backlightElemMarginLeft = this.backlight.getOffset().left; - var backlightElemWidth = this.backlight.getSize().width; - var rowHeaderWidth = 0; - - if (priv.rootElementOffset + wtTable.holder.offsetWidth + scrollLeft < priv.target.eventPageX) { - if (priv.coordsColumn < priv.countCols) { - priv.coordsColumn++; - } - } - - if (priv.hasRowHeaders) { - rowHeaderWidth = this.hot.view.wt.wtOverlays.leftOverlay.clone.wtTable.getColumnHeader(-1).offsetWidth; - } - if (this.isFixedColumnsLeft(priv.coordsColumn)) { - tdOffsetLeft += scrollLeft; - } - tdOffsetLeft += rowHeaderWidth; - - if (priv.coordsColumn < 0) { - // if hover on rowHeader - if (priv.fixedColumns > 0) { - priv.target.col = 0; - } else { - priv.target.col = firstVisible > 0 ? firstVisible - 1 : firstVisible; - } - } else if (priv.target.TD.offsetWidth / 2 + tdOffsetLeft <= mouseOffsetLeft) { - var newCoordsCol = priv.coordsColumn >= priv.countCols ? priv.countCols - 1 : priv.coordsColumn; - // if hover on right part of TD - priv.target.col = newCoordsCol + 1; - // unfortunately first column is bigger than rest - tdOffsetLeft += priv.target.TD.offsetWidth; - - if (priv.target.col > lastVisible) { - this.hot.scrollViewportTo(void 0, lastVisible + 1, void 0, true); - } - } else { - // elsewhere on table - priv.target.col = priv.coordsColumn; - - if (priv.target.col <= firstVisible && priv.target.col >= priv.fixedColumns) { - this.hot.scrollViewportTo(void 0, firstVisible - 1); - } - } - - if (priv.target.col <= firstVisible && priv.target.col >= priv.fixedColumns) { - this.hot.scrollViewportTo(void 0, firstVisible - 1); - } - - var backlightLeft = mouseOffsetLeft; - var guidelineLeft = tdOffsetLeft; - - if (mouseOffsetLeft + backlightElemWidth + backlightElemMarginLeft >= hiderWidth) { - // prevent display backlight on the right side of the table - backlightLeft = hiderWidth - backlightElemWidth - backlightElemMarginLeft; - } else if (mouseOffsetLeft + backlightElemMarginLeft < tbodyOffsetLeft + rowHeaderWidth) { - // prevent display backlight on the left side of the table - backlightLeft = tbodyOffsetLeft + rowHeaderWidth + Math.abs(backlightElemMarginLeft); - } - - if (tdOffsetLeft >= hiderWidth - 1) { - // prevent display guideline outside the table - guidelineLeft = hiderWidth - 1; - } else if (guidelineLeft === 0) { - // guideline has got `margin-left: -1px` as default - guidelineLeft = 1; - } else if (scrollableElement.scrollX !== void 0 && priv.coordsColumn < priv.fixedColumns) { - guidelineLeft -= priv.rootElementOffset <= scrollableElement.scrollX ? priv.rootElementOffset : 0; - } - - this.backlight.setPosition(null, backlightLeft); - this.guideline.setPosition(null, guidelineLeft); - } - - /** - * This method checks arrayMap from columnsMapper and updates the columnsMapper if it's necessary. - * - * @private - */ - - }, { - key: 'updateColumnsMapper', - value: function updateColumnsMapper() { - var countCols = this.hot.countSourceCols(); - var columnsMapperLen = this.columnsMapper._arrayMap.length; - - if (columnsMapperLen === 0) { - this.columnsMapper.createMap(countCols || this.hot.getSettings().startCols); - } else if (columnsMapperLen < countCols) { - var diff = countCols - columnsMapperLen; - - this.columnsMapper.insertItems(columnsMapperLen, diff); - } else if (columnsMapperLen > countCols) { - var maxIndex = countCols - 1; - var columnsToRemove = []; - - (0, _array.arrayEach)(this.columnsMapper._arrayMap, function (value, index, array) { - if (value > maxIndex) { - columnsToRemove.push(index); - } - }); - - this.columnsMapper.removeItems(columnsToRemove); - } - } - - /** - * Bind the events used by the plugin. - * - * @private - */ - - }, { - key: 'registerEvents', - value: function registerEvents() { - var _this4 = this; - - this.eventManager.addEventListener(document.documentElement, 'mousemove', function (event) { - return _this4.onMouseMove(event); - }); - this.eventManager.addEventListener(document.documentElement, 'mouseup', function () { - return _this4.onMouseUp(); - }); - } - - /** - * Unbind the events used by the plugin. - * - * @private - */ - - }, { - key: 'unregisterEvents', - value: function unregisterEvents() { - this.eventManager.clear(); - } - - /** - * Change the behavior of selection / dragging. - * - * @private - * @param {MouseEvent} event `mousedown` event properties. - * @param {CellCoords} coords Visual cell coordinates where was fired event. - * @param {HTMLElement} TD Cell represented as HTMLElement. - * @param {Object} blockCalculations Object which contains information about blockCalculation for row, column or cells. - */ - - }, { - key: 'onBeforeOnCellMouseDown', - value: function onBeforeOnCellMouseDown(event, coords, TD, blockCalculations) { - var wtTable = this.hot.view.wt.wtTable; - var isHeaderSelection = this.hot.selection.selectedHeader.cols; - var selection = this.hot.getSelectedRange(); - var priv = privatePool.get(this); - var isSortingElement = event.realTarget.className.indexOf('columnSorting') > -1; - - if (!selection || !isHeaderSelection || priv.pressed || event.button !== 0 || isSortingElement) { - priv.pressed = false; - priv.columnsToMove.length = 0; - (0, _element.removeClass)(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]); - return; - } - - var guidelineIsNotReady = this.guideline.isBuilt() && !this.guideline.isAppended(); - var backlightIsNotReady = this.backlight.isBuilt() && !this.backlight.isAppended(); - - if (guidelineIsNotReady && backlightIsNotReady) { - this.guideline.appendTo(wtTable.hider); - this.backlight.appendTo(wtTable.hider); - } - - var from = selection.from, - to = selection.to; - - var start = Math.min(from.col, to.col); - var end = Math.max(from.col, to.col); - - if (coords.row < 0 && coords.col >= start && coords.col <= end) { - blockCalculations.column = true; - priv.pressed = true; - priv.target.eventPageX = event.pageX; - priv.coordsColumn = coords.col; - priv.target.TD = TD; - priv.target.col = coords.col; - priv.columnsToMove = this.prepareColumnsToMoving(start, end); - priv.hasRowHeaders = !!this.hot.getSettings().rowHeaders; - priv.countCols = this.hot.countCols(); - priv.fixedColumns = this.hot.getSettings().fixedColumnsLeft; - priv.rootElementOffset = (0, _element.offset)(this.hot.rootElement).left; - - var countColumnsFrom = priv.hasRowHeaders ? -1 : 0; - var topPos = wtTable.holder.scrollTop + wtTable.getColumnHeaderHeight(0) + 1; - var fixedColumns = coords.col < priv.fixedColumns; - var scrollableElement = this.hot.view.wt.wtOverlays.scrollableElement; - var wrapperIsWindow = scrollableElement.scrollX ? scrollableElement.scrollX - priv.rootElementOffset : 0; - - var mouseOffset = event.layerX - (fixedColumns ? wrapperIsWindow : 0); - var leftOffset = Math.abs(this.getColumnsWidth(start, coords.col) + mouseOffset); - - this.backlight.setPosition(topPos, this.getColumnsWidth(countColumnsFrom, start) + leftOffset); - this.backlight.setSize(this.getColumnsWidth(start, end + 1), wtTable.hider.offsetHeight - topPos); - this.backlight.setOffset(null, leftOffset * -1); - - (0, _element.addClass)(this.hot.rootElement, CSS_ON_MOVING); - } else { - (0, _element.removeClass)(this.hot.rootElement, CSS_AFTER_SELECTION); - priv.pressed = false; - priv.columnsToMove.length = 0; - } - } - - /** - * 'mouseMove' event callback. Fired when pointer move on document.documentElement. - * - * @private - * @param {MouseEvent} event `mousemove` event properties. - */ - - }, { - key: 'onMouseMove', - value: function onMouseMove(event) { - var priv = privatePool.get(this); - - if (!priv.pressed) { - return; - } - - // callback for browser which doesn't supports CSS pointer-event: none - if (event.realTarget === this.backlight.element) { - var width = this.backlight.getSize().width; - this.backlight.setSize(0); - - setTimeout(function () { - this.backlight.setPosition(width); - }); - } - - priv.target.eventPageX = event.pageX; - this.refreshPositions(); - } - - /** - * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell. - * - * @private - * @param {MouseEvent} event `mouseover` event properties. - * @param {CellCoords} coords Visual cell coordinates where was fired event. - * @param {HTMLElement} TD Cell represented as HTMLElement. - * @param {Object} blockCalculations Object which contains information about blockCalculation for row, column or cells. - */ - - }, { - key: 'onBeforeOnCellMouseOver', - value: function onBeforeOnCellMouseOver(event, coords, TD, blockCalculations) { - var selectedRange = this.hot.getSelectedRange(); - var priv = privatePool.get(this); - - if (!selectedRange || !priv.pressed) { - return; - } - - if (priv.columnsToMove.indexOf(coords.col) > -1) { - (0, _element.removeClass)(this.hot.rootElement, CSS_SHOW_UI); - } else { - (0, _element.addClass)(this.hot.rootElement, CSS_SHOW_UI); - } - - blockCalculations.row = true; - blockCalculations.column = true; - blockCalculations.cell = true; - priv.coordsColumn = coords.col; - priv.target.TD = TD; - } - - /** - * `onMouseUp` hook callback. - * - * @private - */ - - }, { - key: 'onMouseUp', - value: function onMouseUp() { - var priv = privatePool.get(this); - - priv.coordsColumn = void 0; - priv.pressed = false; - priv.backlightWidth = 0; - - (0, _element.removeClass)(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]); - - if (this.hot.selection.selectedHeader.cols) { - (0, _element.addClass)(this.hot.rootElement, CSS_AFTER_SELECTION); - } - if (priv.columnsToMove.length < 1 || priv.target.col === void 0 || priv.columnsToMove.indexOf(priv.target.col) > -1) { - return; - } - - this.moveColumns(priv.columnsToMove, priv.target.col); - this.persistentStateSave(); - this.hot.render(); - this.hot.view.wt.wtOverlays.adjustElementsSize(true); - - if (!priv.disallowMoving) { - var selectionStart = this.columnsMapper.getIndexByValue(priv.columnsToMove[0]); - var selectionEnd = this.columnsMapper.getIndexByValue(priv.columnsToMove[priv.columnsToMove.length - 1]); - this.changeSelection(selectionStart, selectionEnd); - } - - priv.columnsToMove.length = 0; - } - - /** - * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally. - * - * @private - */ - - }, { - key: 'onAfterScrollVertically', - value: function onAfterScrollVertically() { - var wtTable = this.hot.view.wt.wtTable; - var headerHeight = wtTable.getColumnHeaderHeight(0) + 1; - var scrollTop = wtTable.holder.scrollTop; - var posTop = headerHeight + scrollTop; - - this.backlight.setPosition(posTop); - this.backlight.setSize(null, wtTable.hider.offsetHeight - posTop); - } - - /** - * `afterCreateCol` hook callback. - * - * @private - * @param {Number} index Visual index of the created column. - * @param {Number} amount Amount of created columns. - */ - - }, { - key: 'onAfterCreateCol', - value: function onAfterCreateCol(index, amount) { - this.columnsMapper.shiftItems(index, amount); - } - - /** - * On before remove column listener. - * - * @private - * @param {Number} index Visual column index. - * @param {Number} amount Defines how many columns removed. - */ - - }, { - key: 'onBeforeRemoveCol', - value: function onBeforeRemoveCol(index, amount) { - var _this5 = this; - - this.removedColumns.length = 0; - - if (index !== false) { - // Collect physical row index. - (0, _number.rangeEach)(index, index + amount - 1, function (removedIndex) { - _this5.removedColumns.push(_this5.hot.runHooks('modifyCol', removedIndex, _this5.pluginName)); - }); - } - } - - /** - * `afterRemoveCol` hook callback. - * - * @private - * @param {Number} index Visual column index of the removed column. - * @param {Number} amount Amount of removed columns. - */ - - }, { - key: 'onAfterRemoveCol', - value: function onAfterRemoveCol(index, amount) { - this.columnsMapper.unshiftItems(this.removedColumns); - } - - /** - * `afterLoadData` hook callback. - * - * @private - * @param {Boolean} firstTime True if that was loading data during the initialization. - */ - - }, { - key: 'onAfterLoadData', - value: function onAfterLoadData(firstTime) { - this.updateColumnsMapper(); - } - - /** - * 'modifyRow' hook callback. - * - * @private - * @param {Number} column Visual column index. - * @returns {Number} Physical column index. - */ - - }, { - key: 'onModifyCol', - value: function onModifyCol(column, source) { - if (source !== this.pluginName) { - // ugly fix for try to insert new, needed columns after pasting data - var columnInMapper = this.columnsMapper.getValueByIndex(column); - column = columnInMapper === null ? column : columnInMapper; - } - - return column; - } - - /** - * 'unmodifyCol' hook callback. - * - * @private - * @param {Number} column Physical column index. - * @returns {Number} Visual column index. - */ - - }, { - key: 'onUnmodifyCol', - value: function onUnmodifyCol(column) { - var indexInMapper = this.columnsMapper.getIndexByValue(column); - - return indexInMapper === null ? column : indexInMapper; - } - - /** - * `afterPluginsInitialized` hook callback. - * - * @private - */ - - }, { - key: 'onAfterPluginsInitialized', - value: function onAfterPluginsInitialized() { - this.updateColumnsMapper(); - this.initialSettings(); - this.backlight.build(); - this.guideline.build(); - } - - /** - * Destroy plugin instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - this.backlight.destroy(); - this.guideline.destroy(); - - _get(ManualColumnMove.prototype.__proto__ || Object.getPrototypeOf(ManualColumnMove.prototype), 'destroy', this).call(this); - } - }]); - - return ManualColumnMove; -}(_base2.default); - -(0, _plugins.registerPlugin)('ManualColumnMove', ManualColumnMove); - -exports.default = ManualColumnMove; - -/***/ }), -/* 245 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(151); - -var _base2 = _interopRequireDefault(_base); - -var _element = __webpack_require__(0); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var CSS_CLASSNAME = 'ht__manualColumnMove--backlight'; - -/** - * @class BacklightUI - * @util - */ - -var BacklightUI = function (_BaseUI) { - _inherits(BacklightUI, _BaseUI); - - function BacklightUI() { - _classCallCheck(this, BacklightUI); - - return _possibleConstructorReturn(this, (BacklightUI.__proto__ || Object.getPrototypeOf(BacklightUI)).apply(this, arguments)); - } - - _createClass(BacklightUI, [{ - key: 'build', - - /** - * Custom className on build process. - */ - value: function build() { - _get(BacklightUI.prototype.__proto__ || Object.getPrototypeOf(BacklightUI.prototype), 'build', this).call(this); - - (0, _element.addClass)(this._element, CSS_CLASSNAME); - } - }]); - - return BacklightUI; -}(_base2.default); - -exports.default = BacklightUI; - -/***/ }), -/* 246 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(151); - -var _base2 = _interopRequireDefault(_base); - -var _element = __webpack_require__(0); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var CSS_CLASSNAME = 'ht__manualColumnMove--guideline'; - -/** - * @class GuidelineUI - * @util - */ - -var GuidelineUI = function (_BaseUI) { - _inherits(GuidelineUI, _BaseUI); - - function GuidelineUI() { - _classCallCheck(this, GuidelineUI); - - return _possibleConstructorReturn(this, (GuidelineUI.__proto__ || Object.getPrototypeOf(GuidelineUI)).apply(this, arguments)); - } - - _createClass(GuidelineUI, [{ - key: 'build', - - /** - * Custom className on build process. - */ - value: function build() { - _get(GuidelineUI.prototype.__proto__ || Object.getPrototypeOf(GuidelineUI.prototype), 'build', this).call(this); - - (0, _element.addClass)(this._element, CSS_CLASSNAME); - } - }]); - - return GuidelineUI; -}(_base2.default); - -exports.default = GuidelineUI; - -/***/ }), -/* 247 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _element = __webpack_require__(0); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _event = __webpack_require__(7); - -var _array = __webpack_require__(2); - -var _number = __webpack_require__(6); - -var _plugins = __webpack_require__(5); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -// Developer note! Whenever you make a change in this file, make an analogous change in manualRowResize.js - -/** - * @description - * ManualColumnResize Plugin. - * - * Has 2 UI components: - * - handle - the draggable element that sets the desired width of the column. - * - guide - the helper guide that shows the desired width as a vertical guide. - * - * @plugin ManualColumnResize - */ -var ManualColumnResize = function (_BasePlugin) { - _inherits(ManualColumnResize, _BasePlugin); - - function ManualColumnResize(hotInstance) { - _classCallCheck(this, ManualColumnResize); - - var _this = _possibleConstructorReturn(this, (ManualColumnResize.__proto__ || Object.getPrototypeOf(ManualColumnResize)).call(this, hotInstance)); - - _this.currentTH = null; - _this.currentCol = null; - _this.selectedCols = []; - _this.currentWidth = null; - _this.newSize = null; - _this.startY = null; - _this.startWidth = null; - _this.startOffset = null; - _this.handle = document.createElement('DIV'); - _this.guide = document.createElement('DIV'); - _this.eventManager = new _eventManager2.default(_this); - _this.pressed = null; - _this.dblclick = 0; - _this.autoresizeTimeout = null; - _this.manualColumnWidths = []; - - (0, _element.addClass)(_this.handle, 'manualColumnResizer'); - (0, _element.addClass)(_this.guide, 'manualColumnResizerGuide'); - return _this; - } - - /** - * Check if the plugin is enabled in the handsontable settings. - * - * @returns {Boolean} - */ - - - _createClass(ManualColumnResize, [{ - key: 'isEnabled', - value: function isEnabled() { - return this.hot.getSettings().manualColumnResize; - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - - this.manualColumnWidths = []; - var initialColumnWidth = this.hot.getSettings().manualColumnResize; - var loadedManualColumnWidths = this.loadManualColumnWidths(); - - this.addHook('modifyColWidth', function (width, col) { - return _this2.onModifyColWidth(width, col); - }); - this.addHook('beforeStretchingColumnWidth', function (stretchedWidth, column) { - return _this2.onBeforeStretchingColumnWidth(stretchedWidth, column); - }); - this.addHook('beforeColumnResize', function (currentColumn, newSize, isDoubleClick) { - return _this2.onBeforeColumnResize(currentColumn, newSize, isDoubleClick); - }); - - if (typeof loadedManualColumnWidths != 'undefined') { - this.manualColumnWidths = loadedManualColumnWidths; - } else if (Array.isArray(initialColumnWidth)) { - this.manualColumnWidths = initialColumnWidth; - } else { - this.manualColumnWidths = []; - } - - // Handsontable.hooks.register('beforeColumnResize'); - // Handsontable.hooks.register('afterColumnResize'); - - this.bindEvents(); - - _get(ManualColumnResize.prototype.__proto__ || Object.getPrototypeOf(ManualColumnResize.prototype), 'enablePlugin', this).call(this); - } - - /** - * Updates the plugin to use the latest options you have specified. - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() { - var initialColumnWidth = this.hot.getSettings().manualColumnResize; - - if (Array.isArray(initialColumnWidth)) { - this.manualColumnWidths = initialColumnWidth; - } else if (!initialColumnWidth) { - this.manualColumnWidths = []; - } - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - _get(ManualColumnResize.prototype.__proto__ || Object.getPrototypeOf(ManualColumnResize.prototype), 'disablePlugin', this).call(this); - } - - /** - * Save the current sizes using the persistentState plugin. - */ - - }, { - key: 'saveManualColumnWidths', - value: function saveManualColumnWidths() { - this.hot.runHooks('persistentStateSave', 'manualColumnWidths', this.manualColumnWidths); - } - - /** - * Load the previously saved sizes using the persistentState plugin. - * - * @returns {Array} - */ - - }, { - key: 'loadManualColumnWidths', - value: function loadManualColumnWidths() { - var storedState = {}; - - this.hot.runHooks('persistentStateLoad', 'manualColumnWidths', storedState); - - return storedState.value; - } - - /** - * Set the resize handle position. - * - * @param {HTMLCellElement} TH TH HTML element. - */ - - }, { - key: 'setupHandlePosition', - value: function setupHandlePosition(TH) { - var _this3 = this; - - if (!TH.parentNode) { - return false; - } - - this.currentTH = TH; - - var col = this.hot.view.wt.wtTable.getCoords(TH).col; // getCoords returns CellCoords - var headerHeight = (0, _element.outerHeight)(this.currentTH); - - if (col >= 0) { - // if not col header - var box = this.currentTH.getBoundingClientRect(); - - this.currentCol = col; - this.selectedCols = []; - - if (this.hot.selection.isSelected() && this.hot.selection.selectedHeader.cols) { - var _hot$getSelectedRange = this.hot.getSelectedRange(), - from = _hot$getSelectedRange.from, - to = _hot$getSelectedRange.to; - - var start = from.col; - var end = to.col; - - if (start >= end) { - start = to.col; - end = from.col; - } - - if (this.currentCol >= start && this.currentCol <= end) { - (0, _number.rangeEach)(start, end, function (i) { - return _this3.selectedCols.push(i); - }); - } else { - this.selectedCols.push(this.currentCol); - } - } else { - this.selectedCols.push(this.currentCol); - } - - this.startOffset = box.left - 6; - this.startWidth = parseInt(box.width, 10); - this.handle.style.top = box.top + 'px'; - this.handle.style.left = this.startOffset + this.startWidth + 'px'; - this.handle.style.height = headerHeight + 'px'; - this.hot.rootElement.appendChild(this.handle); - } - } - - /** - * Refresh the resize handle position. - */ - - }, { - key: 'refreshHandlePosition', - value: function refreshHandlePosition() { - this.handle.style.left = this.startOffset + this.currentWidth + 'px'; - } - - /** - * Set the resize guide position. - */ - - }, { - key: 'setupGuidePosition', - value: function setupGuidePosition() { - var handleHeight = parseInt((0, _element.outerHeight)(this.handle), 10); - var handleBottomPosition = parseInt(this.handle.style.top, 10) + handleHeight; - var maximumVisibleElementHeight = parseInt(this.hot.view.maximumVisibleElementHeight(0), 10); - - (0, _element.addClass)(this.handle, 'active'); - (0, _element.addClass)(this.guide, 'active'); - - this.guide.style.top = handleBottomPosition + 'px'; - this.guide.style.left = this.handle.style.left; - this.guide.style.height = maximumVisibleElementHeight - handleHeight + 'px'; - this.hot.rootElement.appendChild(this.guide); - } - - /** - * Refresh the resize guide position. - */ - - }, { - key: 'refreshGuidePosition', - value: function refreshGuidePosition() { - this.guide.style.left = this.handle.style.left; - } - - /** - * Hide both the resize handle and resize guide. - */ - - }, { - key: 'hideHandleAndGuide', - value: function hideHandleAndGuide() { - (0, _element.removeClass)(this.handle, 'active'); - (0, _element.removeClass)(this.guide, 'active'); - } - - /** - * Check if provided element is considered a column header. - * - * @param {HTMLElement} element HTML element. - * @returns {Boolean} - */ - - }, { - key: 'checkIfColumnHeader', - value: function checkIfColumnHeader(element) { - if (element != this.hot.rootElement) { - var parent = element.parentNode; - - if (parent.tagName === 'THEAD') { - return true; - } - - return this.checkIfColumnHeader(parent); - } - - return false; - } - - /** - * Get the TH element from the provided element. - * - * @param {HTMLElement} element HTML element. - * @returns {HTMLElement} - */ - - }, { - key: 'getTHFromTargetElement', - value: function getTHFromTargetElement(element) { - if (element.tagName != 'TABLE') { - if (element.tagName == 'TH') { - return element; - } - return this.getTHFromTargetElement(element.parentNode); - } - - return null; - } - - /** - * 'mouseover' event callback - set the handle position. - * - * @private - * @param {MouseEvent} event - */ - - }, { - key: 'onMouseOver', - value: function onMouseOver(event) { - if (this.checkIfColumnHeader(event.target)) { - var th = this.getTHFromTargetElement(event.target); - - if (!th) { - return; - } - - var colspan = th.getAttribute('colspan'); - - if (th && (colspan === null || colspan === 1)) { - if (!this.pressed) { - this.setupHandlePosition(th); - } - } - } - } - - /** - * Auto-size row after doubleclick - callback. - * - * @private - */ - - }, { - key: 'afterMouseDownTimeout', - value: function afterMouseDownTimeout() { - var _this4 = this; - - var render = function render() { - _this4.hot.forceFullRender = true; - _this4.hot.view.render(); // updates all - _this4.hot.view.wt.wtOverlays.adjustElementsSize(true); - }; - var resize = function resize(selectedCol, forceRender) { - var hookNewSize = _this4.hot.runHooks('beforeColumnResize', selectedCol, _this4.newSize, true); - - if (hookNewSize !== void 0) { - _this4.newSize = hookNewSize; - } - - if (_this4.hot.getSettings().stretchH === 'all') { - _this4.clearManualSize(selectedCol); - } else { - _this4.setManualSize(selectedCol, _this4.newSize); // double click sets by auto row size plugin - } - - if (forceRender) { - render(); - } - - _this4.saveManualColumnWidths(); - - _this4.hot.runHooks('afterColumnResize', selectedCol, _this4.newSize, true); - }; - - if (this.dblclick >= 2) { - var selectedColsLength = this.selectedCols.length; - - if (selectedColsLength > 1) { - (0, _array.arrayEach)(this.selectedCols, function (selectedCol) { - resize(selectedCol); - }); - render(); - } else { - (0, _array.arrayEach)(this.selectedCols, function (selectedCol) { - resize(selectedCol, true); - }); - } - } - this.dblclick = 0; - this.autoresizeTimeout = null; - } - - /** - * 'mousedown' event callback. - * - * @private - * @param {MouseEvent} e - */ - - }, { - key: 'onMouseDown', - value: function onMouseDown(event) { - var _this5 = this; - - if ((0, _element.hasClass)(event.target, 'manualColumnResizer')) { - this.setupGuidePosition(); - this.pressed = this.hot; - - if (this.autoresizeTimeout === null) { - this.autoresizeTimeout = setTimeout(function () { - return _this5.afterMouseDownTimeout(); - }, 500); - - this.hot._registerTimeout(this.autoresizeTimeout); - } - this.dblclick++; - - this.startX = (0, _event.pageX)(event); - this.newSize = this.startWidth; - } - } - - /** - * 'mousemove' event callback - refresh the handle and guide positions, cache the new column width. - * - * @private - * @param {MouseEvent} e - */ - - }, { - key: 'onMouseMove', - value: function onMouseMove(event) { - var _this6 = this; - - if (this.pressed) { - this.currentWidth = this.startWidth + ((0, _event.pageX)(event) - this.startX); - - (0, _array.arrayEach)(this.selectedCols, function (selectedCol) { - _this6.newSize = _this6.setManualSize(selectedCol, _this6.currentWidth); - }); - - this.refreshHandlePosition(); - this.refreshGuidePosition(); - } - } - - /** - * 'mouseup' event callback - apply the column resizing. - * - * @private - * @param {MouseEvent} e - */ - - }, { - key: 'onMouseUp', - value: function onMouseUp(event) { - var _this7 = this; - - var render = function render() { - _this7.hot.forceFullRender = true; - _this7.hot.view.render(); // updates all - _this7.hot.view.wt.wtOverlays.adjustElementsSize(true); - }; - var resize = function resize(selectedCol, forceRender) { - _this7.hot.runHooks('beforeColumnResize', selectedCol, _this7.newSize); - - if (forceRender) { - render(); - } - - _this7.saveManualColumnWidths(); - - _this7.hot.runHooks('afterColumnResize', selectedCol, _this7.newSize); - }; - - if (this.pressed) { - this.hideHandleAndGuide(); - this.pressed = false; - - if (this.newSize != this.startWidth) { - var selectedColsLength = this.selectedCols.length; - - if (selectedColsLength > 1) { - (0, _array.arrayEach)(this.selectedCols, function (selectedCol) { - resize(selectedCol); - }); - render(); - } else { - (0, _array.arrayEach)(this.selectedCols, function (selectedCol) { - resize(selectedCol, true); - }); - } - } - - this.setupHandlePosition(this.currentTH); - } - } - - /** - * Bind the mouse events. - * - * @private - */ - - }, { - key: 'bindEvents', - value: function bindEvents() { - var _this8 = this; - - this.eventManager.addEventListener(this.hot.rootElement, 'mouseover', function (e) { - return _this8.onMouseOver(e); - }); - this.eventManager.addEventListener(this.hot.rootElement, 'mousedown', function (e) { - return _this8.onMouseDown(e); - }); - this.eventManager.addEventListener(window, 'mousemove', function (e) { - return _this8.onMouseMove(e); - }); - this.eventManager.addEventListener(window, 'mouseup', function (e) { - return _this8.onMouseUp(e); - }); - } - - /** - * Cache the current column width. - * - * @param {Number} column Visual column index. - * @param {Number} width Column width. - * @returns {Number} - */ - - }, { - key: 'setManualSize', - value: function setManualSize(column, width) { - width = Math.max(width, 20); - - /** - * We need to run col through modifyCol hook, in case the order of displayed columns is different than the order - * in data source. For instance, this order can be modified by manualColumnMove plugin. - */ - column = this.hot.runHooks('modifyCol', column); - - this.manualColumnWidths[column] = width; - - return width; - } - - /** - * Clear cache for the current column index. - * - * @param {Number} column Visual column index. - */ - - }, { - key: 'clearManualSize', - value: function clearManualSize(column) { - column = this.hot.runHooks('modifyCol', column); - - this.manualColumnWidths[column] = void 0; - } - - /** - * Modify the provided column width, based on the plugin settings - * - * @private - * @param {Number} width Column width. - * @param {Number} column Visual column index. - * @returns {Number} - */ - - }, { - key: 'onModifyColWidth', - value: function onModifyColWidth(width, column) { - if (this.enabled) { - column = this.hot.runHooks('modifyCol', column); - - if (this.hot.getSettings().manualColumnResize && this.manualColumnWidths[column]) { - return this.manualColumnWidths[column]; - } - } - - return width; - } - - /** - * Modify the provided column stretched width. This hook decides if specified column should be stretched or not. - * - * @private - * @param {Number} stretchedWidth Stretched width. - * @param {Number} column Physical column index. - * @returns {Number} - */ - - }, { - key: 'onBeforeStretchingColumnWidth', - value: function onBeforeStretchingColumnWidth(stretchedWidth, column) { - var width = this.manualColumnWidths[column]; - - if (width === void 0) { - width = stretchedWidth; - } - - return width; - } - - /** - * `beforeColumnResize` hook callback. - * - * @private - * @param {Number} currentColumn Index of the resized column. - * @param {Number} newSize Calculated new column width. - * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click. - */ - - }, { - key: 'onBeforeColumnResize', - value: function onBeforeColumnResize() { - // clear the header height cache information - this.hot.view.wt.wtViewport.hasOversizedColumnHeadersMarked = {}; - } - }]); - - return ManualColumnResize; -}(_base2.default); - -(0, _plugins.registerPlugin)('manualColumnResize', ManualColumnResize); - -exports.default = ManualColumnResize; - -/***/ }), -/* 248 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _array = __webpack_require__(2); - -var _element = __webpack_require__(0); - -var _number = __webpack_require__(6); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _plugins = __webpack_require__(5); - -var _rowsMapper = __webpack_require__(249); - -var _rowsMapper2 = _interopRequireDefault(_rowsMapper); - -var _backlight = __webpack_require__(250); - -var _backlight2 = _interopRequireDefault(_backlight); - -var _guideline = __webpack_require__(251); - -var _guideline2 = _interopRequireDefault(_guideline); - -var _src = __webpack_require__(11); - -__webpack_require__(301); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -_pluginHooks2.default.getSingleton().register('beforeRowMove'); -_pluginHooks2.default.getSingleton().register('afterRowMove'); -_pluginHooks2.default.getSingleton().register('unmodifyRow'); - -var privatePool = new WeakMap(); -var CSS_PLUGIN = 'ht__manualRowMove'; -var CSS_SHOW_UI = 'show-ui'; -var CSS_ON_MOVING = 'on-moving--rows'; -var CSS_AFTER_SELECTION = 'after-selection--rows'; - -/** - * @plugin ManualRowMove - * - * @description - * This plugin allows to change rows order. - * - * API: - * - moveRow - move single row to the new position. - * - moveRows - move many rows (as an array of indexes) to the new position. - * - * If you want apply visual changes, you have to call manually the render() method on the instance of handsontable. - * - * UI components: - * - backlight - highlight of selected rows. - * - guideline - line which shows where rows has been moved. - * - * @class ManualRowMove - * @plugin ManualRowMove - */ - -var ManualRowMove = function (_BasePlugin) { - _inherits(ManualRowMove, _BasePlugin); - - function ManualRowMove(hotInstance) { - _classCallCheck(this, ManualRowMove); - - /** - * Set up WeakMap of plugin to sharing private parameters; - */ - var _this = _possibleConstructorReturn(this, (ManualRowMove.__proto__ || Object.getPrototypeOf(ManualRowMove)).call(this, hotInstance)); - - privatePool.set(_this, { - rowsToMove: [], - pressed: void 0, - disallowMoving: void 0, - target: { - eventPageY: void 0, - coords: void 0, - TD: void 0, - row: void 0 - } - }); - - /** - * List of last removed row indexes. - * - * @type {Array} - */ - _this.removedRows = []; - /** - * Object containing visual row indexes mapped to data source indexes. - * - * @type {RowsMapper} - */ - _this.rowsMapper = new _rowsMapper2.default(_this); - /** - * Event Manager object. - * - * @type {Object} - */ - _this.eventManager = new _eventManager2.default(_this); - /** - * Backlight UI object. - * - * @type {Object} - */ - _this.backlight = new _backlight2.default(hotInstance); - /** - * Guideline UI object. - * - * @type {Object} - */ - _this.guideline = new _guideline2.default(hotInstance); - return _this; - } - - /** - * Check if plugin is enabled. - * - * @returns {Boolean} - */ - - - _createClass(ManualRowMove, [{ - key: 'isEnabled', - value: function isEnabled() { - return !!this.hot.getSettings().manualRowMove; - } - - /** - * Enable the plugin. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - - this.addHook('beforeOnCellMouseDown', function (event, coords, TD, blockCalculations) { - return _this2.onBeforeOnCellMouseDown(event, coords, TD, blockCalculations); - }); - this.addHook('beforeOnCellMouseOver', function (event, coords, TD, blockCalculations) { - return _this2.onBeforeOnCellMouseOver(event, coords, TD, blockCalculations); - }); - this.addHook('afterScrollHorizontally', function () { - return _this2.onAfterScrollHorizontally(); - }); - this.addHook('modifyRow', function (row, source) { - return _this2.onModifyRow(row, source); - }); - this.addHook('beforeRemoveRow', function (index, amount) { - return _this2.onBeforeRemoveRow(index, amount); - }); - this.addHook('afterRemoveRow', function (index, amount) { - return _this2.onAfterRemoveRow(index, amount); - }); - this.addHook('afterCreateRow', function (index, amount) { - return _this2.onAfterCreateRow(index, amount); - }); - this.addHook('afterLoadData', function (firstTime) { - return _this2.onAfterLoadData(firstTime); - }); - this.addHook('beforeColumnSort', function (column, order) { - return _this2.onBeforeColumnSort(column, order); - }); - this.addHook('unmodifyRow', function (row) { - return _this2.onUnmodifyRow(row); - }); - - this.registerEvents(); - - // TODO: move adding plugin classname to BasePlugin. - (0, _element.addClass)(this.hot.rootElement, CSS_PLUGIN); - - _get(ManualRowMove.prototype.__proto__ || Object.getPrototypeOf(ManualRowMove.prototype), 'enablePlugin', this).call(this); - } - - /** - * Updates the plugin to use the latest options you have specified. - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() { - this.disablePlugin(); - this.enablePlugin(); - - this.onAfterPluginsInitialized(); - - _get(ManualRowMove.prototype.__proto__ || Object.getPrototypeOf(ManualRowMove.prototype), 'updatePlugin', this).call(this); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - var pluginSettings = this.hot.getSettings().manualRowMove; - - if (Array.isArray(pluginSettings)) { - this.rowsMapper.clearMap(); - } - - (0, _element.removeClass)(this.hot.rootElement, CSS_PLUGIN); - - this.unregisterEvents(); - this.backlight.destroy(); - this.guideline.destroy(); - - _get(ManualRowMove.prototype.__proto__ || Object.getPrototypeOf(ManualRowMove.prototype), 'disablePlugin', this).call(this); - } - - /** - * Move a single row. - * - * @param {Number} row Visual row index to be moved. - * @param {Number} target Visual row index being a target for the moved row. - */ - - }, { - key: 'moveRow', - value: function moveRow(row, target) { - this.moveRows([row], target); - } - - /** - * Move multiple rows. - * - * @param {Array} rows Array of visual row indexes to be moved. - * @param {Number} target Visual row index being a target for the moved rows. - */ - - }, { - key: 'moveRows', - value: function moveRows(rows, target) { - var _this3 = this; - - var priv = privatePool.get(this); - var beforeMoveHook = this.hot.runHooks('beforeRowMove', rows, target); - - priv.disallowMoving = beforeMoveHook === false; - - if (!priv.disallowMoving) { - // first we need to rewrite an visual indexes to physical for save reference after move - (0, _array.arrayEach)(rows, function (row, index, array) { - array[index] = _this3.rowsMapper.getValueByIndex(row); - }); - - // next, when we have got an physical indexes, we can move rows - (0, _array.arrayEach)(rows, function (row, index) { - var actualPosition = _this3.rowsMapper.getIndexByValue(row); - - if (actualPosition !== target) { - _this3.rowsMapper.moveRow(actualPosition, target + index); - } - }); - - // after moving we have to clear rowsMapper from null entries - this.rowsMapper.clearNull(); - } - - this.hot.runHooks('afterRowMove', rows, target); - } - - /** - * Correct the cell selection after the move action. Fired only when action was made with a mouse. - * That means that changing the row order using the API won't correct the selection. - * - * @private - * @param {Number} startRow Visual row index for the start of the selection. - * @param {Number} endRow Visual row index for the end of the selection. - */ - - }, { - key: 'changeSelection', - value: function changeSelection(startRow, endRow) { - var selection = this.hot.selection; - var lastColIndex = this.hot.countCols() - 1; - - selection.setRangeStartOnly(new _src.CellCoords(startRow, 0)); - selection.setRangeEnd(new _src.CellCoords(endRow, lastColIndex), false); - } - - /** - * Get the sum of the heights of rows in the provided range. - * - * @private - * @param {Number} from Visual row index. - * @param {Number} to Visual row index. - * @returns {Number} - */ - - }, { - key: 'getRowsHeight', - value: function getRowsHeight(from, to) { - var height = 0; - - for (var i = from; i < to; i++) { - var rowHeight = this.hot.view.wt.wtTable.getRowHeight(i) || 23; - - height += rowHeight; - } - - return height; - } - - /** - * Load initial settings when persistent state is saved or when plugin was initialized as an array. - * - * @private - */ - - }, { - key: 'initialSettings', - value: function initialSettings() { - var pluginSettings = this.hot.getSettings().manualRowMove; - - if (Array.isArray(pluginSettings)) { - this.moveRows(pluginSettings, 0); - } else if (pluginSettings !== void 0) { - var persistentState = this.persistentStateLoad(); - - if (persistentState.length) { - this.moveRows(persistentState, 0); - } - } - } - - /** - * Check if the provided row is in the fixedRowsTop section. - * - * @private - * @param {Number} row Visual row index to check. - * @returns {Boolean} - */ - - }, { - key: 'isFixedRowTop', - value: function isFixedRowTop(row) { - return row < this.hot.getSettings().fixedRowsTop; - } - - /** - * Check if the provided row is in the fixedRowsBottom section. - * - * @private - * @param {Number} row Visual row index to check. - * @returns {Boolean} - */ - - }, { - key: 'isFixedRowBottom', - value: function isFixedRowBottom(row) { - return row > this.hot.getSettings().fixedRowsBottom; - } - - /** - * Save the manual row positions to the persistent state. - * - * @private - */ - - }, { - key: 'persistentStateSave', - value: function persistentStateSave() { - this.hot.runHooks('persistentStateSave', 'manualRowMove', this.rowsMapper._arrayMap); - } - - /** - * Load the manual row positions from the persistent state. - * - * @private - * @returns {Array} Stored state. - */ - - }, { - key: 'persistentStateLoad', - value: function persistentStateLoad() { - var storedState = {}; - - this.hot.runHooks('persistentStateLoad', 'manualRowMove', storedState); - - return storedState.value ? storedState.value : []; - } - - /** - * Prepare array of indexes based on actual selection. - * - * @private - * @returns {Array} - */ - - }, { - key: 'prepareRowsToMoving', - value: function prepareRowsToMoving() { - var selection = this.hot.getSelectedRange(); - var selectedRows = []; - - if (!selection) { - return selectedRows; - } - - var from = selection.from, - to = selection.to; - - var start = Math.min(from.row, to.row); - var end = Math.max(from.row, to.row); - - (0, _number.rangeEach)(start, end, function (i) { - selectedRows.push(i); - }); - - return selectedRows; - } - - /** - * Update the UI visual position. - * - * @private - */ - - }, { - key: 'refreshPositions', - value: function refreshPositions() { - var priv = privatePool.get(this); - var coords = priv.target.coords; - var firstVisible = this.hot.view.wt.wtTable.getFirstVisibleRow(); - var lastVisible = this.hot.view.wt.wtTable.getLastVisibleRow(); - var fixedRows = this.hot.getSettings().fixedRowsTop; - var countRows = this.hot.countRows(); - - if (coords.row < fixedRows && firstVisible > 0) { - this.hot.scrollViewportTo(firstVisible - 1); - } - if (coords.row >= lastVisible && lastVisible < countRows) { - this.hot.scrollViewportTo(lastVisible + 1, undefined, true); - } - - var wtTable = this.hot.view.wt.wtTable; - var TD = priv.target.TD; - var rootElementOffset = (0, _element.offset)(this.hot.rootElement); - var tdOffsetTop = this.hot.view.THEAD.offsetHeight + this.getRowsHeight(0, coords.row); - var mouseOffsetTop = priv.target.eventPageY - rootElementOffset.top + wtTable.holder.scrollTop; - var hiderHeight = wtTable.hider.offsetHeight; - var tbodyOffsetTop = wtTable.TBODY.offsetTop; - var backlightElemMarginTop = this.backlight.getOffset().top; - var backlightElemHeight = this.backlight.getSize().height; - - if (rootElementOffset.top + wtTable.holder.offsetHeight < priv.target.eventPageY) { - priv.target.coords.row++; - } - - if (this.isFixedRowTop(coords.row)) { - tdOffsetTop += wtTable.holder.scrollTop; - } - - // todo: fixedRowsBottom - // if (this.isFixedRowBottom(coords.row)) { - // - // } - - if (coords.row < 0) { - // if hover on colHeader - priv.target.row = firstVisible > 0 ? firstVisible - 1 : firstVisible; - } else if (TD.offsetHeight / 2 + tdOffsetTop <= mouseOffsetTop) { - // if hover on lower part of TD - priv.target.row = coords.row + 1; - // unfortunately first row is bigger than rest - tdOffsetTop += coords.row === 0 ? TD.offsetHeight - 1 : TD.offsetHeight; - } else { - // elsewhere on table - priv.target.row = coords.row; - } - - var backlightTop = mouseOffsetTop; - var guidelineTop = tdOffsetTop; - - if (mouseOffsetTop + backlightElemHeight + backlightElemMarginTop >= hiderHeight) { - // prevent display backlight below table - backlightTop = hiderHeight - backlightElemHeight - backlightElemMarginTop; - } else if (mouseOffsetTop + backlightElemMarginTop < tbodyOffsetTop) { - // prevent display above below table - backlightTop = tbodyOffsetTop + Math.abs(backlightElemMarginTop); - } - - if (tdOffsetTop >= hiderHeight - 1) { - // prevent display guideline below table - guidelineTop = hiderHeight - 1; - } - - var topOverlayHeight = 0; - if (this.hot.view.wt.wtOverlays.topOverlay) { - topOverlayHeight = this.hot.view.wt.wtOverlays.topOverlay.clone.wtTable.TABLE.offsetHeight; - } - - if (coords.row >= fixedRows && guidelineTop - wtTable.holder.scrollTop < topOverlayHeight) { - this.hot.scrollViewportTo(coords.row); - } - - this.backlight.setPosition(backlightTop); - this.guideline.setPosition(guidelineTop); - } - - /** - * This method checks arrayMap from rowsMapper and updates the rowsMapper if it's necessary. - * - * @private - */ - - }, { - key: 'updateRowsMapper', - value: function updateRowsMapper() { - var countRows = this.hot.countSourceRows(); - var rowsMapperLen = this.rowsMapper._arrayMap.length; - - if (rowsMapperLen === 0) { - this.rowsMapper.createMap(countRows || this.hot.getSettings().startRows); - } else if (rowsMapperLen < countRows) { - var diff = countRows - rowsMapperLen; - - this.rowsMapper.insertItems(rowsMapperLen, diff); - } else if (rowsMapperLen > countRows) { - var maxIndex = countRows - 1; - var rowsToRemove = []; - - (0, _array.arrayEach)(this.rowsMapper._arrayMap, function (value, index, array) { - if (value > maxIndex) { - rowsToRemove.push(index); - } - }); - - this.rowsMapper.removeItems(rowsToRemove); - } - } - - /** - * Bind the events used by the plugin. - * - * @private - */ - - }, { - key: 'registerEvents', - value: function registerEvents() { - var _this4 = this; - - this.eventManager.addEventListener(document.documentElement, 'mousemove', function (event) { - return _this4.onMouseMove(event); - }); - this.eventManager.addEventListener(document.documentElement, 'mouseup', function () { - return _this4.onMouseUp(); - }); - } - - /** - * Unbind the events used by the plugin. - * - * @private - */ - - }, { - key: 'unregisterEvents', - value: function unregisterEvents() { - this.eventManager.clear(); - } - - /** - * `beforeColumnSort` hook callback. If user uses the sorting, manual row moving is disabled. - * - * @private - * @param {Number} column Column index where soring is present - * @param {*} order State of sorting. ASC/DESC/None - */ - - }, { - key: 'onBeforeColumnSort', - value: function onBeforeColumnSort(column, order) { - var priv = privatePool.get(this); - - priv.disallowMoving = order !== void 0; - } - - /** - * Change the behavior of selection / dragging. - * - * @private - * @param {MouseEvent} event - * @param {CellCoords} coords Visual coordinates. - * @param {HTMLElement} TD - * @param {Object} blockCalculations - */ - - }, { - key: 'onBeforeOnCellMouseDown', - value: function onBeforeOnCellMouseDown(event, coords, TD, blockCalculations) { - var wtTable = this.hot.view.wt.wtTable; - var isHeaderSelection = this.hot.selection.selectedHeader.rows; - var selection = this.hot.getSelectedRange(); - var priv = privatePool.get(this); - - if (!selection || !isHeaderSelection || priv.pressed || event.button !== 0) { - priv.pressed = false; - priv.rowsToMove.length = 0; - (0, _element.removeClass)(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]); - return; - } - - var guidelineIsNotReady = this.guideline.isBuilt() && !this.guideline.isAppended(); - var backlightIsNotReady = this.backlight.isBuilt() && !this.backlight.isAppended(); - - if (guidelineIsNotReady && backlightIsNotReady) { - this.guideline.appendTo(wtTable.hider); - this.backlight.appendTo(wtTable.hider); - } - - var from = selection.from, - to = selection.to; - - var start = Math.min(from.row, to.row); - var end = Math.max(from.row, to.row); - - if (coords.col < 0 && coords.row >= start && coords.row <= end) { - blockCalculations.row = true; - priv.pressed = true; - priv.target.eventPageY = event.pageY; - priv.target.coords = coords; - priv.target.TD = TD; - priv.rowsToMove = this.prepareRowsToMoving(); - - var leftPos = wtTable.holder.scrollLeft + wtTable.getColumnWidth(-1); - - this.backlight.setPosition(null, leftPos); - this.backlight.setSize(wtTable.hider.offsetWidth - leftPos, this.getRowsHeight(start, end + 1)); - this.backlight.setOffset((this.getRowsHeight(start, coords.row) + event.layerY) * -1, null); - - (0, _element.addClass)(this.hot.rootElement, CSS_ON_MOVING); - - this.refreshPositions(); - } else { - (0, _element.removeClass)(this.hot.rootElement, CSS_AFTER_SELECTION); - priv.pressed = false; - priv.rowsToMove.length = 0; - } - } - - /** - * 'mouseMove' event callback. Fired when pointer move on document.documentElement. - * - * @private - * @param {MouseEvent} event `mousemove` event properties. - */ - - }, { - key: 'onMouseMove', - value: function onMouseMove(event) { - var priv = privatePool.get(this); - - if (!priv.pressed) { - return; - } - - // callback for browser which doesn't supports CSS pointer-event: none - if (event.realTarget === this.backlight.element) { - var height = this.backlight.getSize().height; - this.backlight.setSize(null, 0); - - setTimeout(function () { - this.backlight.setPosition(null, height); - }); - } - - priv.target.eventPageY = event.pageY; - this.refreshPositions(); - } - - /** - * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell. - * - * @private - * @param {MouseEvent} event `mouseover` event properties. - * @param {CellCoords} coords Visual cell coordinates where was fired event. - * @param {HTMLElement} TD Cell represented as HTMLElement. - * @param {Object} blockCalculations Object which contains information about blockCalculation for row, column or cells. - */ - - }, { - key: 'onBeforeOnCellMouseOver', - value: function onBeforeOnCellMouseOver(event, coords, TD, blockCalculations) { - var selectedRange = this.hot.getSelectedRange(); - var priv = privatePool.get(this); - - if (!selectedRange || !priv.pressed) { - return; - } - - if (priv.rowsToMove.indexOf(coords.row) > -1) { - (0, _element.removeClass)(this.hot.rootElement, CSS_SHOW_UI); - } else { - (0, _element.addClass)(this.hot.rootElement, CSS_SHOW_UI); - } - - blockCalculations.row = true; - blockCalculations.column = true; - blockCalculations.cell = true; - priv.target.coords = coords; - priv.target.TD = TD; - } - - /** - * `onMouseUp` hook callback. - * - * @private - */ - - }, { - key: 'onMouseUp', - value: function onMouseUp() { - var priv = privatePool.get(this); - var target = priv.target.row; - var rowsLen = priv.rowsToMove.length; - - priv.pressed = false; - priv.backlightHeight = 0; - - (0, _element.removeClass)(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]); - - if (this.hot.selection.selectedHeader.rows) { - (0, _element.addClass)(this.hot.rootElement, CSS_AFTER_SELECTION); - } - - if (rowsLen < 1 || target === void 0 || priv.rowsToMove.indexOf(target) > -1 || priv.rowsToMove[rowsLen - 1] === target - 1) { - return; - } - - this.moveRows(priv.rowsToMove, target); - - this.persistentStateSave(); - this.hot.render(); - - if (!priv.disallowMoving) { - var selectionStart = this.rowsMapper.getIndexByValue(priv.rowsToMove[0]); - var selectionEnd = this.rowsMapper.getIndexByValue(priv.rowsToMove[rowsLen - 1]); - this.changeSelection(selectionStart, selectionEnd); - } - - priv.rowsToMove.length = 0; - } - - /** - * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally. - * - * @private - */ - - }, { - key: 'onAfterScrollHorizontally', - value: function onAfterScrollHorizontally() { - var wtTable = this.hot.view.wt.wtTable; - var headerWidth = wtTable.getColumnWidth(-1); - var scrollLeft = wtTable.holder.scrollLeft; - var posLeft = headerWidth + scrollLeft; - - this.backlight.setPosition(null, posLeft); - this.backlight.setSize(wtTable.hider.offsetWidth - posLeft); - } - - /** - * `afterCreateRow` hook callback. - * - * @private - * @param {Number} index Visual index of the created row. - * @param {Number} amount Amount of created rows. - */ - - }, { - key: 'onAfterCreateRow', - value: function onAfterCreateRow(index, amount) { - this.rowsMapper.shiftItems(index, amount); - } - - /** - * On before remove row listener. - * - * @private - * @param {Number} index Visual row index. - * @param {Number} amount Defines how many rows removed. - */ - - }, { - key: 'onBeforeRemoveRow', - value: function onBeforeRemoveRow(index, amount) { - var _this5 = this; - - this.removedRows.length = 0; - - if (index !== false) { - // Collect physical row index. - (0, _number.rangeEach)(index, index + amount - 1, function (removedIndex) { - _this5.removedRows.push(_this5.hot.runHooks('modifyRow', removedIndex, _this5.pluginName)); - }); - } - } - - /** - * `afterRemoveRow` hook callback. - * - * @private - * @param {Number} index Visual index of the removed row. - * @param {Number} amount Amount of removed rows. - */ - - }, { - key: 'onAfterRemoveRow', - value: function onAfterRemoveRow(index, amount) { - this.rowsMapper.unshiftItems(this.removedRows); - } - - /** - * `afterLoadData` hook callback. - * - * @private - * @param {Boolean} firstTime True if that was loading data during the initialization. - */ - - }, { - key: 'onAfterLoadData', - value: function onAfterLoadData(firstTime) { - this.updateRowsMapper(); - } - - /** - * 'modifyRow' hook callback. - * - * @private - * @param {Number} row Visual Row index. - * @returns {Number} Physical row index. - */ - - }, { - key: 'onModifyRow', - value: function onModifyRow(row, source) { - if (source !== this.pluginName) { - var rowInMapper = this.rowsMapper.getValueByIndex(row); - row = rowInMapper === null ? row : rowInMapper; - } - - return row; - } - - /** - * 'unmodifyRow' hook callback. - * - * @private - * @param {Number} row Physical row index. - * @returns {Number} Visual row index. - */ - - }, { - key: 'onUnmodifyRow', - value: function onUnmodifyRow(row) { - var indexInMapper = this.rowsMapper.getIndexByValue(row); - - return indexInMapper === null ? row : indexInMapper; - } - - /** - * `afterPluginsInitialized` hook callback. - * - * @private - */ - - }, { - key: 'onAfterPluginsInitialized', - value: function onAfterPluginsInitialized() { - this.updateRowsMapper(); - this.initialSettings(); - this.backlight.build(); - this.guideline.build(); - } - - /** - * Destroy plugin instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - this.backlight.destroy(); - this.guideline.destroy(); - - _get(ManualRowMove.prototype.__proto__ || Object.getPrototypeOf(ManualRowMove.prototype), 'destroy', this).call(this); - } - }]); - - return ManualRowMove; -}(_base2.default); - -(0, _plugins.registerPlugin)('ManualRowMove', ManualRowMove); - -exports.default = ManualRowMove; - -/***/ }), -/* 249 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _arrayMapper = __webpack_require__(150); - -var _arrayMapper2 = _interopRequireDefault(_arrayMapper); - -var _array = __webpack_require__(2); - -var _object = __webpack_require__(1); - -var _number = __webpack_require__(6); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class RowsMapper - * @plugin ManualRowMove - */ -var RowsMapper = function () { - function RowsMapper(manualRowMove) { - _classCallCheck(this, RowsMapper); - - /** - * Instance of ManualRowMove plugin. - * - * @type {ManualRowMove} - */ - this.manualRowMove = manualRowMove; - } - - /** - * Reset current map array and create new one. - * - * @param {Number} [length] Custom generated map length. - */ - - - _createClass(RowsMapper, [{ - key: 'createMap', - value: function createMap(length) { - var _this = this; - - var originLength = length === void 0 ? this._arrayMap.length : length; - - this._arrayMap.length = 0; - - (0, _number.rangeEach)(originLength - 1, function (itemIndex) { - _this._arrayMap[itemIndex] = itemIndex; - }); - } - - /** - * Destroy class. - */ - - }, { - key: 'destroy', - value: function destroy() { - this._arrayMap = null; - } - - /** - * Moving elements in rowsMapper. - * - * @param {Number} from Row index to move. - * @param {Number} to Target index. - */ - - }, { - key: 'moveRow', - value: function moveRow(from, to) { - var indexToMove = this._arrayMap[from]; - this._arrayMap[from] = null; - this._arrayMap.splice(to, 0, indexToMove); - } - - /** - * Clearing arrayMap from `null` entries. - */ - - }, { - key: 'clearNull', - value: function clearNull() { - this._arrayMap = (0, _array.arrayFilter)(this._arrayMap, function (i) { - return i !== null; - }); - } - }]); - - return RowsMapper; -}(); - -(0, _object.mixin)(RowsMapper, _arrayMapper2.default); - -exports.default = RowsMapper; - -/***/ }), -/* 250 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(152); - -var _base2 = _interopRequireDefault(_base); - -var _element = __webpack_require__(0); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var CSS_CLASSNAME = 'ht__manualRowMove--backlight'; - -/** - * @class BacklightUI - * @util - */ - -var BacklightUI = function (_BaseUI) { - _inherits(BacklightUI, _BaseUI); - - function BacklightUI() { - _classCallCheck(this, BacklightUI); - - return _possibleConstructorReturn(this, (BacklightUI.__proto__ || Object.getPrototypeOf(BacklightUI)).apply(this, arguments)); - } - - _createClass(BacklightUI, [{ - key: 'build', - - /** - * Custom className on build process. - */ - value: function build() { - _get(BacklightUI.prototype.__proto__ || Object.getPrototypeOf(BacklightUI.prototype), 'build', this).call(this); - - (0, _element.addClass)(this._element, CSS_CLASSNAME); - } - }]); - - return BacklightUI; -}(_base2.default); - -exports.default = BacklightUI; - -/***/ }), -/* 251 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(152); - -var _base2 = _interopRequireDefault(_base); - -var _element = __webpack_require__(0); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var CSS_CLASSNAME = 'ht__manualRowMove--guideline'; - -/** - * @class GuidelineUI - * @util - */ - -var GuidelineUI = function (_BaseUI) { - _inherits(GuidelineUI, _BaseUI); - - function GuidelineUI() { - _classCallCheck(this, GuidelineUI); - - return _possibleConstructorReturn(this, (GuidelineUI.__proto__ || Object.getPrototypeOf(GuidelineUI)).apply(this, arguments)); - } - - _createClass(GuidelineUI, [{ - key: 'build', - - /** - * Custom className on build process. - */ - value: function build() { - _get(GuidelineUI.prototype.__proto__ || Object.getPrototypeOf(GuidelineUI.prototype), 'build', this).call(this); - - (0, _element.addClass)(this._element, CSS_CLASSNAME); - } - }]); - - return GuidelineUI; -}(_base2.default); - -exports.default = GuidelineUI; - -/***/ }), -/* 252 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _element = __webpack_require__(0); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _event = __webpack_require__(7); - -var _array = __webpack_require__(2); - -var _number = __webpack_require__(6); - -var _plugins = __webpack_require__(5); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -// Developer note! Whenever you make a change in this file, make an analogous change in manualRowResize.js - -/** - * @description - * ManualRowResize Plugin. - * - * Has 2 UI components: - * - handle - the draggable element that sets the desired height of the row. - * - guide - the helper guide that shows the desired height as a horizontal guide. - * - * @plugin ManualRowResize - */ -var ManualRowResize = function (_BasePlugin) { - _inherits(ManualRowResize, _BasePlugin); - - function ManualRowResize(hotInstance) { - _classCallCheck(this, ManualRowResize); - - var _this = _possibleConstructorReturn(this, (ManualRowResize.__proto__ || Object.getPrototypeOf(ManualRowResize)).call(this, hotInstance)); - - _this.currentTH = null; - _this.currentRow = null; - _this.selectedRows = []; - _this.currentHeight = null; - _this.newSize = null; - _this.startY = null; - _this.startHeight = null; - _this.startOffset = null; - _this.handle = document.createElement('DIV'); - _this.guide = document.createElement('DIV'); - _this.eventManager = new _eventManager2.default(_this); - _this.pressed = null; - _this.dblclick = 0; - _this.autoresizeTimeout = null; - _this.manualRowHeights = []; - - (0, _element.addClass)(_this.handle, 'manualRowResizer'); - (0, _element.addClass)(_this.guide, 'manualRowResizerGuide'); - return _this; - } - - /** - * Check if the plugin is enabled in the handsontable settings. - * - * @returns {Boolean} - */ - - - _createClass(ManualRowResize, [{ - key: 'isEnabled', - value: function isEnabled() { - return this.hot.getSettings().manualRowResize; - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - - this.manualRowHeights = []; - - var initialRowHeights = this.hot.getSettings().manualRowResize; - var loadedManualRowHeights = this.loadManualRowHeights(); - - if (typeof loadedManualRowHeights != 'undefined') { - this.manualRowHeights = loadedManualRowHeights; - } else if (Array.isArray(initialRowHeights)) { - this.manualRowHeights = initialRowHeights; - } else { - this.manualRowHeights = []; - } - - this.addHook('modifyRowHeight', function (height, row) { - return _this2.onModifyRowHeight(height, row); - }); - - // Handsontable.hooks.register('beforeRowResize'); - // Handsontable.hooks.register('afterRowResize'); - - this.bindEvents(); - - _get(ManualRowResize.prototype.__proto__ || Object.getPrototypeOf(ManualRowResize.prototype), 'enablePlugin', this).call(this); - } - - /** - * Updates the plugin to use the latest options you have specified. - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() { - var initialRowHeights = this.hot.getSettings().manualRowResize; - - if (Array.isArray(initialRowHeights)) { - this.manualRowHeights = initialRowHeights; - } else if (!initialRowHeights) { - this.manualRowHeights = []; - } - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - _get(ManualRowResize.prototype.__proto__ || Object.getPrototypeOf(ManualRowResize.prototype), 'disablePlugin', this).call(this); - } - - /** - * Save the current sizes using the persistentState plugin. - */ - - }, { - key: 'saveManualRowHeights', - value: function saveManualRowHeights() { - this.hot.runHooks('persistentStateSave', 'manualRowHeights', this.manualRowHeights); - } - - /** - * Load the previously saved sizes using the persistentState plugin. - * - * @returns {Array} - */ - - }, { - key: 'loadManualRowHeights', - value: function loadManualRowHeights() { - var storedState = {}; - - this.hot.runHooks('persistentStateLoad', 'manualRowHeights', storedState); - - return storedState.value; - } - - /** - * Set the resize handle position. - * - * @param {HTMLCellElement} TH TH HTML element. - */ - - }, { - key: 'setupHandlePosition', - value: function setupHandlePosition(TH) { - var _this3 = this; - - this.currentTH = TH; - var row = this.hot.view.wt.wtTable.getCoords(TH).row; // getCoords returns CellCoords - var headerWidth = (0, _element.outerWidth)(this.currentTH); - - if (row >= 0) { - // if not col header - var box = this.currentTH.getBoundingClientRect(); - - this.currentRow = row; - this.selectedRows = []; - - if (this.hot.selection.isSelected() && this.hot.selection.selectedHeader.rows) { - var _hot$getSelectedRange = this.hot.getSelectedRange(), - from = _hot$getSelectedRange.from, - to = _hot$getSelectedRange.to; - - var start = from.row; - var end = to.row; - - if (start >= end) { - start = to.row; - end = from.row; - } - - if (this.currentRow >= start && this.currentRow <= end) { - (0, _number.rangeEach)(start, end, function (i) { - return _this3.selectedRows.push(i); - }); - } else { - this.selectedRows.push(this.currentRow); - } - } else { - this.selectedRows.push(this.currentRow); - } - - this.startOffset = box.top - 6; - this.startHeight = parseInt(box.height, 10); - this.handle.style.left = box.left + 'px'; - this.handle.style.top = this.startOffset + this.startHeight + 'px'; - this.handle.style.width = headerWidth + 'px'; - this.hot.rootElement.appendChild(this.handle); - } - } - - /** - * Refresh the resize handle position. - */ - - }, { - key: 'refreshHandlePosition', - value: function refreshHandlePosition() { - this.handle.style.top = this.startOffset + this.currentHeight + 'px'; - } - - /** - * Set the resize guide position. - */ - - }, { - key: 'setupGuidePosition', - value: function setupGuidePosition() { - var handleWidth = parseInt((0, _element.outerWidth)(this.handle), 10); - var handleRightPosition = parseInt(this.handle.style.left, 10) + handleWidth; - var maximumVisibleElementWidth = parseInt(this.hot.view.maximumVisibleElementWidth(0), 10); - (0, _element.addClass)(this.handle, 'active'); - (0, _element.addClass)(this.guide, 'active'); - - this.guide.style.top = this.handle.style.top; - this.guide.style.left = handleRightPosition + 'px'; - this.guide.style.width = maximumVisibleElementWidth - handleWidth + 'px'; - this.hot.rootElement.appendChild(this.guide); - } - - /** - * Refresh the resize guide position. - */ - - }, { - key: 'refreshGuidePosition', - value: function refreshGuidePosition() { - this.guide.style.top = this.handle.style.top; - } - - /** - * Hide both the resize handle and resize guide. - */ - - }, { - key: 'hideHandleAndGuide', - value: function hideHandleAndGuide() { - (0, _element.removeClass)(this.handle, 'active'); - (0, _element.removeClass)(this.guide, 'active'); - } - - /** - * Check if provided element is considered as a row header. - * - * @param {HTMLElement} element HTML element. - * @returns {Boolean} - */ - - }, { - key: 'checkIfRowHeader', - value: function checkIfRowHeader(element) { - if (element != this.hot.rootElement) { - var parent = element.parentNode; - - if (parent.tagName === 'TBODY') { - return true; - } - - return this.checkIfRowHeader(parent); - } - - return false; - } - - /** - * Get the TH element from the provided element. - * - * @param {HTMLElement} element HTML element. - * @returns {HTMLElement} - */ - - }, { - key: 'getTHFromTargetElement', - value: function getTHFromTargetElement(element) { - if (element.tagName != 'TABLE') { - if (element.tagName == 'TH') { - return element; - } - return this.getTHFromTargetElement(element.parentNode); - } - - return null; - } - - /** - * 'mouseover' event callback - set the handle position. - * - * @private - * @param {MouseEvent} event - */ - - }, { - key: 'onMouseOver', - value: function onMouseOver(event) { - if (this.checkIfRowHeader(event.target)) { - var th = this.getTHFromTargetElement(event.target); - - if (th) { - if (!this.pressed) { - this.setupHandlePosition(th); - } - } - } - } - - /** - * Auto-size row after doubleclick - callback. - * - * @private - */ - - }, { - key: 'afterMouseDownTimeout', - value: function afterMouseDownTimeout() { - var _this4 = this; - - var render = function render() { - _this4.hot.forceFullRender = true; - _this4.hot.view.render(); // updates all - _this4.hot.view.wt.wtOverlays.adjustElementsSize(true); - }; - var resize = function resize(selectedRow, forceRender) { - var hookNewSize = _this4.hot.runHooks('beforeRowResize', selectedRow, _this4.newSize, true); - - if (hookNewSize !== void 0) { - _this4.newSize = hookNewSize; - } - - _this4.setManualSize(selectedRow, _this4.newSize); // double click sets auto row size - - if (forceRender) { - render(); - } - - _this4.hot.runHooks('afterRowResize', selectedRow, _this4.newSize, true); - }; - - if (this.dblclick >= 2) { - var selectedRowsLength = this.selectedRows.length; - - if (selectedRowsLength > 1) { - (0, _array.arrayEach)(this.selectedRows, function (selectedRow) { - resize(selectedRow); - }); - render(); - } else { - (0, _array.arrayEach)(this.selectedRows, function (selectedRow) { - resize(selectedRow, true); - }); - } - } - this.dblclick = 0; - this.autoresizeTimeout = null; - } - - /** - * 'mousedown' event callback. - * - * @private - * @param {MouseEvent} event - */ - - }, { - key: 'onMouseDown', - value: function onMouseDown(event) { - var _this5 = this; - - if ((0, _element.hasClass)(event.target, 'manualRowResizer')) { - this.setupGuidePosition(); - this.pressed = this.hot; - - if (this.autoresizeTimeout == null) { - this.autoresizeTimeout = setTimeout(function () { - return _this5.afterMouseDownTimeout(); - }, 500); - - this.hot._registerTimeout(this.autoresizeTimeout); - } - this.dblclick++; - - this.startY = (0, _event.pageY)(event); - this.newSize = this.startHeight; - } - } - - /** - * 'mousemove' event callback - refresh the handle and guide positions, cache the new row height. - * - * @private - * @param {MouseEvent} event - */ - - }, { - key: 'onMouseMove', - value: function onMouseMove(event) { - var _this6 = this; - - if (this.pressed) { - this.currentHeight = this.startHeight + ((0, _event.pageY)(event) - this.startY); - - (0, _array.arrayEach)(this.selectedRows, function (selectedRow) { - _this6.newSize = _this6.setManualSize(selectedRow, _this6.currentHeight); - }); - - this.refreshHandlePosition(); - this.refreshGuidePosition(); - } - } - - /** - * 'mouseup' event callback - apply the row resizing. - * - * @private - * @param {MouseEvent} event - */ - - }, { - key: 'onMouseUp', - value: function onMouseUp(event) { - var _this7 = this; - - var render = function render() { - _this7.hot.forceFullRender = true; - _this7.hot.view.render(); // updates all - _this7.hot.view.wt.wtOverlays.adjustElementsSize(true); - }; - var runHooks = function runHooks(selectedRow, forceRender) { - _this7.hot.runHooks('beforeRowResize', selectedRow, _this7.newSize); - - if (forceRender) { - render(); - } - - _this7.saveManualRowHeights(); - - _this7.hot.runHooks('afterRowResize', selectedRow, _this7.newSize); - }; - if (this.pressed) { - this.hideHandleAndGuide(); - this.pressed = false; - - if (this.newSize != this.startHeight) { - var selectedRowsLength = this.selectedRows.length; - - if (selectedRowsLength > 1) { - (0, _array.arrayEach)(this.selectedRows, function (selectedRow) { - runHooks(selectedRow); - }); - render(); - } else { - (0, _array.arrayEach)(this.selectedRows, function (selectedRow) { - runHooks(selectedRow, true); - }); - } - } - - this.setupHandlePosition(this.currentTH); - } - } - - /** - * Bind the mouse events. - * - * @private - */ - - }, { - key: 'bindEvents', - value: function bindEvents() { - var _this8 = this; - - this.eventManager.addEventListener(this.hot.rootElement, 'mouseover', function (e) { - return _this8.onMouseOver(e); - }); - this.eventManager.addEventListener(this.hot.rootElement, 'mousedown', function (e) { - return _this8.onMouseDown(e); - }); - this.eventManager.addEventListener(window, 'mousemove', function (e) { - return _this8.onMouseMove(e); - }); - this.eventManager.addEventListener(window, 'mouseup', function (e) { - return _this8.onMouseUp(e); - }); - } - - /** - * Cache the current row height. - * - * @param {Number} row Visual row index. - * @param {Number} height Row height. - * @returns {Number} - */ - - }, { - key: 'setManualSize', - value: function setManualSize(row, height) { - row = this.hot.runHooks('modifyRow', row); - this.manualRowHeights[row] = height; - - return height; - } - - /** - * Modify the provided row height, based on the plugin settings. - * - * @private - * @param {Number} height Row height. - * @param {Number} row Visual row index. - * @returns {Number} - */ - - }, { - key: 'onModifyRowHeight', - value: function onModifyRowHeight(height, row) { - if (this.enabled) { - var autoRowSizePlugin = this.hot.getPlugin('autoRowSize'); - var autoRowHeightResult = autoRowSizePlugin ? autoRowSizePlugin.heights[row] : null; - - row = this.hot.runHooks('modifyRow', row); - - var manualRowHeight = this.manualRowHeights[row]; - - if (manualRowHeight !== void 0 && (manualRowHeight === autoRowHeightResult || manualRowHeight > (height || 0))) { - return manualRowHeight; - } - } - - return height; - } - }]); - - return ManualRowResize; -}(_base2.default); - -(0, _plugins.registerPlugin)('manualRowResize', ManualRowResize); - -exports.default = ManualRowResize; - -/***/ }), -/* 253 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _plugins = __webpack_require__(5); - -var _event = __webpack_require__(7); - -var _src = __webpack_require__(11); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function CellInfoCollection() { - var collection = []; - - collection.getInfo = function (row, col) { - for (var i = 0, ilen = this.length; i < ilen; i++) { - if (this[i].row <= row && this[i].row + this[i].rowspan - 1 >= row && this[i].col <= col && this[i].col + this[i].colspan - 1 >= col) { - return this[i]; - } - } - }; - - collection.setInfo = function (info) { - for (var i = 0, ilen = this.length; i < ilen; i++) { - if (this[i].row === info.row && this[i].col === info.col) { - this[i] = info; - return; - } - } - this.push(info); - }; - - collection.removeInfo = function (row, col) { - for (var i = 0, ilen = this.length; i < ilen; i++) { - if (this[i].row === row && this[i].col === col) { - this.splice(i, 1); - break; - } - } - }; - - return collection; -} - -/** - * Plugin used to merge cells in Handsontable. - * - * @private - * @plugin MergeCells - * @class MergeCells - */ -function MergeCells(mergeCellsSetting) { - this.mergedCellInfoCollection = new CellInfoCollection(); - - if (Array.isArray(mergeCellsSetting)) { - for (var i = 0, ilen = mergeCellsSetting.length; i < ilen; i++) { - this.mergedCellInfoCollection.setInfo(mergeCellsSetting[i]); - } - } -} - -/** - * @param cellRange (CellRange) - */ -MergeCells.prototype.canMergeRange = function (cellRange) { - // is more than one cell selected - return !cellRange.isSingle(); -}; - -MergeCells.prototype.mergeRange = function (cellRange) { - if (!this.canMergeRange(cellRange)) { - return; - } - - // normalize top left corner - var topLeft = cellRange.getTopLeftCorner(); - var bottomRight = cellRange.getBottomRightCorner(); - - var mergeParent = {}; - mergeParent.row = topLeft.row; - mergeParent.col = topLeft.col; - // TD has rowspan == 1 by default. rowspan == 2 means spread over 2 cells - mergeParent.rowspan = bottomRight.row - topLeft.row + 1; - mergeParent.colspan = bottomRight.col - topLeft.col + 1; - this.mergedCellInfoCollection.setInfo(mergeParent); -}; - -MergeCells.prototype.mergeOrUnmergeSelection = function (cellRange) { - var info = this.mergedCellInfoCollection.getInfo(cellRange.from.row, cellRange.from.col); - if (info) { - // unmerge - this.unmergeSelection(cellRange.from); - } else { - // merge - this.mergeSelection(cellRange); - } -}; - -MergeCells.prototype.mergeSelection = function (cellRange) { - this.mergeRange(cellRange); -}; - -MergeCells.prototype.unmergeSelection = function (cellRange) { - var info = this.mergedCellInfoCollection.getInfo(cellRange.row, cellRange.col); - this.mergedCellInfoCollection.removeInfo(info.row, info.col); -}; - -MergeCells.prototype.applySpanProperties = function (TD, row, col) { - var info = this.mergedCellInfoCollection.getInfo(row, col); - - if (info) { - if (info.row === row && info.col === col) { - TD.setAttribute('rowspan', info.rowspan); - TD.setAttribute('colspan', info.colspan); - } else { - TD.removeAttribute('rowspan'); - TD.removeAttribute('colspan'); - - TD.style.display = 'none'; - } - } else { - TD.removeAttribute('rowspan'); - TD.removeAttribute('colspan'); - } -}; - -MergeCells.prototype.modifyTransform = function (hook, currentSelectedRange, delta) { - var sameRowspan = function sameRowspan(merged, coords) { - if (coords.row >= merged.row && coords.row <= merged.row + merged.rowspan - 1) { - return true; - } - return false; - }, - sameColspan = function sameColspan(merged, coords) { - if (coords.col >= merged.col && coords.col <= merged.col + merged.colspan - 1) { - return true; - } - return false; - }, - getNextPosition = function getNextPosition(newDelta) { - return new _src.CellCoords(currentSelectedRange.to.row + newDelta.row, currentSelectedRange.to.col + newDelta.col); - }; - - var newDelta = { - row: delta.row, - col: delta.col - }; - - if (hook == 'modifyTransformStart') { - /* eslint-disable block-scoped-var */ - var nextPosition; - - if (!this.lastDesiredCoords) { - this.lastDesiredCoords = new _src.CellCoords(null, null); - } - var currentPosition = new _src.CellCoords(currentSelectedRange.highlight.row, currentSelectedRange.highlight.col), - - // if current position's parent is a merged range, returns it - mergedParent = this.mergedCellInfoCollection.getInfo(currentPosition.row, currentPosition.col), - currentRangeContainsMerge; // if current range contains a merged range - - for (var i = 0, mergesLength = this.mergedCellInfoCollection.length; i < mergesLength; i++) { - var range = this.mergedCellInfoCollection[i]; - range = new _src.CellCoords(range.row + range.rowspan - 1, range.col + range.colspan - 1); - if (currentSelectedRange.includes(range)) { - currentRangeContainsMerge = true; - break; - } - } - - if (mergedParent) { - // only merge selected - var mergeTopLeft = new _src.CellCoords(mergedParent.row, mergedParent.col); - var mergeBottomRight = new _src.CellCoords(mergedParent.row + mergedParent.rowspan - 1, mergedParent.col + mergedParent.colspan - 1); - var mergeRange = new _src.CellRange(mergeTopLeft, mergeTopLeft, mergeBottomRight); - - if (!mergeRange.includes(this.lastDesiredCoords)) { - this.lastDesiredCoords = new _src.CellCoords(null, null); // reset outdated version of lastDesiredCoords - } - - newDelta.row = this.lastDesiredCoords.row ? this.lastDesiredCoords.row - currentPosition.row : newDelta.row; - newDelta.col = this.lastDesiredCoords.col ? this.lastDesiredCoords.col - currentPosition.col : newDelta.col; - - if (delta.row > 0) { - // moving down - newDelta.row = mergedParent.row + mergedParent.rowspan - 1 - currentPosition.row + delta.row; - } else if (delta.row < 0) { - // moving up - newDelta.row = currentPosition.row - mergedParent.row + delta.row; - } - if (delta.col > 0) { - // moving right - newDelta.col = mergedParent.col + mergedParent.colspan - 1 - currentPosition.col + delta.col; - } else if (delta.col < 0) { - // moving left - newDelta.col = currentPosition.col - mergedParent.col + delta.col; - } - } - - nextPosition = new _src.CellCoords(currentSelectedRange.highlight.row + newDelta.row, currentSelectedRange.highlight.col + newDelta.col); - - var nextParentIsMerged = this.mergedCellInfoCollection.getInfo(nextPosition.row, nextPosition.col); - - if (nextParentIsMerged) { - // skipping the invisible cells in the merge range - this.lastDesiredCoords = nextPosition; - newDelta = { - row: nextParentIsMerged.row - currentPosition.row, - col: nextParentIsMerged.col - currentPosition.col - }; - } - } else if (hook == 'modifyTransformEnd') { - for (var _i = 0, _mergesLength = this.mergedCellInfoCollection.length; _i < _mergesLength; _i++) { - var currentMerge = this.mergedCellInfoCollection[_i]; - var _mergeTopLeft = new _src.CellCoords(currentMerge.row, currentMerge.col); - var _mergeBottomRight = new _src.CellCoords(currentMerge.row + currentMerge.rowspan - 1, currentMerge.col + currentMerge.colspan - 1); - var mergedRange = new _src.CellRange(_mergeTopLeft, _mergeTopLeft, _mergeBottomRight); - var sharedBorders = currentSelectedRange.getBordersSharedWith(mergedRange); - - if (mergedRange.isEqual(currentSelectedRange)) { - // only the merged range is selected - currentSelectedRange.setDirection('NW-SE'); - } else if (sharedBorders.length > 0) { - var mergeHighlighted = currentSelectedRange.highlight.isEqual(mergedRange.from); - - if (sharedBorders.indexOf('top') > -1) { - // if range shares a border with the merged section, change range direction accordingly - if (currentSelectedRange.to.isSouthEastOf(mergedRange.from) && mergeHighlighted) { - currentSelectedRange.setDirection('NW-SE'); - } else if (currentSelectedRange.to.isSouthWestOf(mergedRange.from) && mergeHighlighted) { - currentSelectedRange.setDirection('NE-SW'); - } - } else if (sharedBorders.indexOf('bottom') > -1) { - if (currentSelectedRange.to.isNorthEastOf(mergedRange.from) && mergeHighlighted) { - currentSelectedRange.setDirection('SW-NE'); - } else if (currentSelectedRange.to.isNorthWestOf(mergedRange.from) && mergeHighlighted) { - currentSelectedRange.setDirection('SE-NW'); - } - } - } - - nextPosition = getNextPosition(newDelta); - var withinRowspan = sameRowspan(currentMerge, nextPosition), - withinColspan = sameColspan(currentMerge, nextPosition); - - if (currentSelectedRange.includesRange(mergedRange) && (mergedRange.includes(nextPosition) || withinRowspan || withinColspan)) { - // if next step overlaps a merged range, jump past it - if (withinRowspan) { - if (newDelta.row < 0) { - newDelta.row -= currentMerge.rowspan - 1; - } else if (newDelta.row > 0) { - newDelta.row += currentMerge.rowspan - 1; - } - } - if (withinColspan) { - if (newDelta.col < 0) { - newDelta.col -= currentMerge.colspan - 1; - } else if (newDelta.col > 0) { - newDelta.col += currentMerge.colspan - 1; - } - } - } - } - } - - if (newDelta.row !== 0) { - delta.row = newDelta.row; - } - if (newDelta.col !== 0) { - delta.col = newDelta.col; - } -}; - -MergeCells.prototype.shiftCollection = function (direction, index, count) { - var shiftVector = [0, 0]; - - switch (direction) { - case 'right': - shiftVector[0] += 1; - - break; - case 'left': - shiftVector[0] -= 1; - - break; - case 'down': - shiftVector[1] += 1; - - break; - case 'up': - shiftVector[1] -= 1; - - break; - default: - break; - } - - for (var i = 0; i < this.mergedCellInfoCollection.length; i++) { - var currentMerge = this.mergedCellInfoCollection[i]; - - if (direction === 'right' || direction === 'left') { - if (index <= currentMerge.col) { - currentMerge.col += shiftVector[0]; - } - } else if (index <= currentMerge.row) { - currentMerge.row += shiftVector[1]; - } - } -}; - -var beforeInit = function beforeInit() { - var instance = this; - var mergeCellsSetting = instance.getSettings().mergeCells; - - if (mergeCellsSetting) { - if (!instance.mergeCells) { - instance.mergeCells = new MergeCells(mergeCellsSetting); - } - } -}; - -var afterInit = function afterInit() { - var instance = this; - if (instance.mergeCells) { - /** - * Monkey patch Table.prototype.getCell to return TD for merged cell parent if asked for TD of a cell that is - * invisible due to the merge. This is not the cleanest solution but there is a test case for it (merged cells scroll) so feel free to refactor it! - */ - instance.view.wt.wtTable.getCell = function (coords) { - if (instance.getSettings().mergeCells) { - var mergeParent = instance.mergeCells.mergedCellInfoCollection.getInfo(coords.row, coords.col); - if (mergeParent) { - coords = mergeParent; - } - } - return _src.Table.prototype.getCell.call(this, coords); - }; - } -}; - -var afterUpdateSettings = function afterUpdateSettings() { - var instance = this; - var mergeCellsSetting = instance.getSettings().mergeCells; - - if (mergeCellsSetting) { - if (instance.mergeCells) { - instance.mergeCells.mergedCellInfoCollection = new CellInfoCollection(); - - if (Array.isArray(mergeCellsSetting)) { - for (var i = 0, ilen = mergeCellsSetting.length; i < ilen; i++) { - instance.mergeCells.mergedCellInfoCollection.setInfo(mergeCellsSetting[i]); - } - } - } else { - instance.mergeCells = new MergeCells(mergeCellsSetting); - } - } else if (instance.mergeCells) { - // it doesn't actually turn off the plugin, just resets the settings. Need to refactor. - instance.mergeCells.mergedCellInfoCollection = new CellInfoCollection(); - } -}; - -var onBeforeKeyDown = function onBeforeKeyDown(event) { - if (!this.mergeCells) { - return; - } - - var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey; - - if (ctrlDown) { - if (event.keyCode === 77) { - // CTRL + M - this.mergeCells.mergeOrUnmergeSelection(this.getSelectedRange()); - this.render(); - (0, _event.stopImmediatePropagation)(event); - } - } -}; - -var addMergeActionsToContextMenu = function addMergeActionsToContextMenu(defaultOptions) { - if (!this.getSettings().mergeCells) { - return; - } - - defaultOptions.items.push({ name: '---------' }); - defaultOptions.items.push({ - key: 'mergeCells', - name: function name() { - var sel = this.getSelected(); - var info = this.mergeCells.mergedCellInfoCollection.getInfo(sel[0], sel[1]); - if (info) { - return 'Unmerge cells'; - } - return 'Merge cells'; - }, - callback: function callback() { - this.mergeCells.mergeOrUnmergeSelection(this.getSelectedRange()); - this.render(); - }, - disabled: function disabled() { - return this.selection.selectedHeader.corner; - } - }); -}; - -var afterRenderer = function afterRenderer(TD, row, col, prop, value, cellProperties) { - if (this.mergeCells) { - this.mergeCells.applySpanProperties(TD, row, col); - } -}; - -var modifyTransformFactory = function modifyTransformFactory(hook) { - return function (delta) { - var mergeCellsSetting = this.getSettings().mergeCells; - if (mergeCellsSetting) { - var currentSelectedRange = this.getSelectedRange(); - this.mergeCells.modifyTransform(hook, currentSelectedRange, delta); - - if (hook === 'modifyTransformEnd') { - // sanitize "from" (core.js will sanitize to) - var totalRows = this.countRows(); - var totalCols = this.countCols(); - if (currentSelectedRange.from.row < 0) { - currentSelectedRange.from.row = 0; - } else if (currentSelectedRange.from.row > 0 && currentSelectedRange.from.row >= totalRows) { - currentSelectedRange.from.row = currentSelectedRange.from - 1; - } - - if (currentSelectedRange.from.col < 0) { - currentSelectedRange.from.col = 0; - } else if (currentSelectedRange.from.col > 0 && currentSelectedRange.from.col >= totalCols) { - currentSelectedRange.from.col = totalCols - 1; - } - } - } - }; -}; - -/** - * While selecting cells with keyboard or mouse, make sure that rectangular area is expanded to the extent of the merged cell - * @param coords - */ -var beforeSetRangeEnd = function beforeSetRangeEnd(coords) { - - this.lastDesiredCoords = null; // unset lastDesiredCoords when selection is changed with mouse - var mergeCellsSetting = this.getSettings().mergeCells; - if (mergeCellsSetting) { - var selRange = this.getSelectedRange(); - selRange.highlight = new _src.CellCoords(selRange.highlight.row, selRange.highlight.col); // clone in case we will modify its reference - selRange.to = coords; - - var rangeExpanded = false; - do { - rangeExpanded = false; - - for (var i = 0, ilen = this.mergeCells.mergedCellInfoCollection.length; i < ilen; i++) { - var cellInfo = this.mergeCells.mergedCellInfoCollection[i]; - var mergedCellTopLeft = new _src.CellCoords(cellInfo.row, cellInfo.col); - var mergedCellBottomRight = new _src.CellCoords(cellInfo.row + cellInfo.rowspan - 1, cellInfo.col + cellInfo.colspan - 1); - - var mergedCellRange = new _src.CellRange(mergedCellTopLeft, mergedCellTopLeft, mergedCellBottomRight); - if (selRange.expandByRange(mergedCellRange)) { - coords.row = selRange.to.row; - coords.col = selRange.to.col; - - rangeExpanded = true; - } - } - } while (rangeExpanded); - } -}; - -/** - * Returns correct coordinates for merged start / end cells in selection for area borders - * @param corners - * @param className - */ -var beforeDrawAreaBorders = function beforeDrawAreaBorders(corners, className) { - if (className && className == 'area') { - var mergeCellsSetting = this.getSettings().mergeCells; - if (mergeCellsSetting) { - var selRange = this.getSelectedRange(); - var startRange = new _src.CellRange(selRange.from, selRange.from, selRange.from); - var stopRange = new _src.CellRange(selRange.to, selRange.to, selRange.to); - - for (var i = 0, ilen = this.mergeCells.mergedCellInfoCollection.length; i < ilen; i++) { - var cellInfo = this.mergeCells.mergedCellInfoCollection[i]; - var mergedCellTopLeft = new _src.CellCoords(cellInfo.row, cellInfo.col); - var mergedCellBottomRight = new _src.CellCoords(cellInfo.row + cellInfo.rowspan - 1, cellInfo.col + cellInfo.colspan - 1); - var mergedCellRange = new _src.CellRange(mergedCellTopLeft, mergedCellTopLeft, mergedCellBottomRight); - - if (startRange.expandByRange(mergedCellRange)) { - corners[0] = startRange.from.row; - corners[1] = startRange.from.col; - } - - if (stopRange.expandByRange(mergedCellRange)) { - corners[2] = stopRange.from.row; - corners[3] = stopRange.from.col; - } - } - } - } -}; - -var afterGetCellMeta = function afterGetCellMeta(row, col, cellProperties) { - var mergeCellsSetting = this.getSettings().mergeCells; - if (mergeCellsSetting) { - var mergeParent = this.mergeCells.mergedCellInfoCollection.getInfo(row, col); - if (mergeParent && (mergeParent.row != row || mergeParent.col != col)) { - cellProperties.copyable = false; - } - } -}; - -var afterViewportRowCalculatorOverride = function afterViewportRowCalculatorOverride(calc) { - var mergeCellsSetting = this.getSettings().mergeCells; - if (mergeCellsSetting) { - var colCount = this.countCols(); - var mergeParent; - for (var c = 0; c < colCount; c++) { - mergeParent = this.mergeCells.mergedCellInfoCollection.getInfo(calc.startRow, c); - if (mergeParent) { - if (mergeParent.row < calc.startRow) { - calc.startRow = mergeParent.row; - return afterViewportRowCalculatorOverride.call(this, calc); // recursively search upwards - } - } - mergeParent = this.mergeCells.mergedCellInfoCollection.getInfo(calc.endRow, c); - if (mergeParent) { - var mergeEnd = mergeParent.row + mergeParent.rowspan - 1; - if (mergeEnd > calc.endRow) { - calc.endRow = mergeEnd; - return afterViewportRowCalculatorOverride.call(this, calc); // recursively search upwards - } - } - } - } -}; - -var afterViewportColumnCalculatorOverride = function afterViewportColumnCalculatorOverride(calc) { - var mergeCellsSetting = this.getSettings().mergeCells; - if (mergeCellsSetting) { - var rowCount = this.countRows(); - var mergeParent; - for (var r = 0; r < rowCount; r++) { - mergeParent = this.mergeCells.mergedCellInfoCollection.getInfo(r, calc.startColumn); - - if (mergeParent) { - if (mergeParent.col < calc.startColumn) { - calc.startColumn = mergeParent.col; - return afterViewportColumnCalculatorOverride.call(this, calc); // recursively search upwards - } - } - mergeParent = this.mergeCells.mergedCellInfoCollection.getInfo(r, calc.endColumn); - if (mergeParent) { - var mergeEnd = mergeParent.col + mergeParent.colspan - 1; - if (mergeEnd > calc.endColumn) { - calc.endColumn = mergeEnd; - return afterViewportColumnCalculatorOverride.call(this, calc); // recursively search upwards - } - } - } - } -}; - -var isMultipleSelection = function isMultipleSelection(isMultiple) { - if (isMultiple && this.mergeCells) { - var mergedCells = this.mergeCells.mergedCellInfoCollection, - selectionRange = this.getSelectedRange(); - - for (var group in mergedCells) { - if (selectionRange.highlight.row == mergedCells[group].row && selectionRange.highlight.col == mergedCells[group].col && selectionRange.to.row == mergedCells[group].row + mergedCells[group].rowspan - 1 && selectionRange.to.col == mergedCells[group].col + mergedCells[group].colspan - 1) { - return false; - } - } - } - return isMultiple; -}; - -function modifyAutofillRange(select, drag) { - var mergeCellsSetting = this.getSettings().mergeCells; - - if (!mergeCellsSetting || this.selection.isMultiple()) { - return; - } - var info = this.mergeCells.mergedCellInfoCollection.getInfo(select[0], select[1]); - - if (info) { - select[0] = info.row; - select[1] = info.col; - select[2] = info.row + info.rowspan - 1; - select[3] = info.col + info.colspan - 1; - } -} - -function onAfterCreateCol(col, count) { - if (this.mergeCells) { - this.mergeCells.shiftCollection('right', col, count); - } -} - -function onAfterRemoveCol(col, count) { - if (this.mergeCells) { - this.mergeCells.shiftCollection('left', col, count); - } -} - -function onAfterCreateRow(row, count) { - if (this.mergeCells) { - this.mergeCells.shiftCollection('down', row, count); - } -} - -function onAfterRemoveRow(row, count) { - if (this.mergeCells) { - this.mergeCells.shiftCollection('up', row, count); - } -} - -var hook = _pluginHooks2.default.getSingleton(); - -hook.add('beforeInit', beforeInit); -hook.add('afterInit', afterInit); -hook.add('afterUpdateSettings', afterUpdateSettings); -hook.add('beforeKeyDown', onBeforeKeyDown); -hook.add('modifyTransformStart', modifyTransformFactory('modifyTransformStart')); -hook.add('modifyTransformEnd', modifyTransformFactory('modifyTransformEnd')); -hook.add('beforeSetRangeEnd', beforeSetRangeEnd); -hook.add('beforeDrawBorders', beforeDrawAreaBorders); -hook.add('afterIsMultipleSelection', isMultipleSelection); -hook.add('afterRenderer', afterRenderer); -hook.add('afterContextMenuDefaultOptions', addMergeActionsToContextMenu); -hook.add('afterGetCellMeta', afterGetCellMeta); -hook.add('afterViewportRowCalculatorOverride', afterViewportRowCalculatorOverride); -hook.add('afterViewportColumnCalculatorOverride', afterViewportColumnCalculatorOverride); -hook.add('modifyAutofillRange', modifyAutofillRange); -hook.add('afterCreateCol', onAfterCreateCol); -hook.add('afterRemoveCol', onAfterRemoveCol); -hook.add('afterCreateRow', onAfterCreateRow); -hook.add('afterRemoveRow', onAfterRemoveRow); - -exports.default = MergeCells; - -/***/ }), -/* 254 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _element = __webpack_require__(0); - -var _browser = __webpack_require__(25); - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _plugins = __webpack_require__(5); - -var _src = __webpack_require__(11); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * @private - * @plugin MultipleSelectionHandles - */ -var MultipleSelectionHandles = function (_BasePlugin) { - _inherits(MultipleSelectionHandles, _BasePlugin); - - /** - * @param {Object} hotInstance - */ - function MultipleSelectionHandles(hotInstance) { - _classCallCheck(this, MultipleSelectionHandles); - - /** - * @type {Array} - */ - var _this2 = _possibleConstructorReturn(this, (MultipleSelectionHandles.__proto__ || Object.getPrototypeOf(MultipleSelectionHandles)).call(this, hotInstance)); - - _this2.dragged = []; - /** - * Instance of EventManager. - * - * @type {EventManager} - */ - _this2.eventManager = null; - /** - * @type {null} - */ - _this2.lastSetCell = null; - return _this2; - } - - /** - * Check if the plugin is enabled in the handsontable settings. - * - * @returns {Boolean} - */ - - - _createClass(MultipleSelectionHandles, [{ - key: 'isEnabled', - value: function isEnabled() { - return (0, _browser.isMobileBrowser)(); - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - if (this.enabled) { - return; - } - if (!this.eventManager) { - this.eventManager = new _eventManager2.default(this); - } - this.registerListeners(); - _get(MultipleSelectionHandles.prototype.__proto__ || Object.getPrototypeOf(MultipleSelectionHandles.prototype), 'enablePlugin', this).call(this); - } - - /** - * Bind the touch events - * @private - */ - - }, { - key: 'registerListeners', - value: function registerListeners() { - var _this = this; - - function removeFromDragged(query) { - - if (_this.dragged.length === 1) { - // clear array - _this.dragged.splice(0, _this.dragged.length); - - return true; - } - - var entryPosition = _this.dragged.indexOf(query); - - if (entryPosition == -1) { - return false; - } else if (entryPosition === 0) { - _this.dragged = _this.dragged.slice(0, 1); - } else if (entryPosition == 1) { - _this.dragged = _this.dragged.slice(-1); - } - } - - this.eventManager.addEventListener(this.hot.rootElement, 'touchstart', function (event) { - var selectedRange = void 0; - - if ((0, _element.hasClass)(event.target, 'topLeftSelectionHandle-HitArea')) { - selectedRange = _this.hot.getSelectedRange(); - - _this.dragged.push('topLeft'); - - _this.touchStartRange = { - width: selectedRange.getWidth(), - height: selectedRange.getHeight(), - direction: selectedRange.getDirection() - }; - - event.preventDefault(); - return false; - } else if ((0, _element.hasClass)(event.target, 'bottomRightSelectionHandle-HitArea')) { - selectedRange = _this.hot.getSelectedRange(); - - _this.dragged.push('bottomRight'); - - _this.touchStartRange = { - width: selectedRange.getWidth(), - height: selectedRange.getHeight(), - direction: selectedRange.getDirection() - }; - - event.preventDefault(); - return false; - } - }); - - this.eventManager.addEventListener(this.hot.rootElement, 'touchend', function (event) { - if ((0, _element.hasClass)(event.target, 'topLeftSelectionHandle-HitArea')) { - removeFromDragged.call(_this, 'topLeft'); - - _this.touchStartRange = void 0; - - event.preventDefault(); - return false; - } else if ((0, _element.hasClass)(event.target, 'bottomRightSelectionHandle-HitArea')) { - removeFromDragged.call(_this, 'bottomRight'); - - _this.touchStartRange = void 0; - - event.preventDefault(); - return false; - } - }); - - this.eventManager.addEventListener(this.hot.rootElement, 'touchmove', function (event) { - var scrollTop = (0, _element.getWindowScrollTop)(), - scrollLeft = (0, _element.getWindowScrollLeft)(), - endTarget = void 0, - targetCoords = void 0, - selectedRange = void 0, - rangeWidth = void 0, - rangeHeight = void 0, - rangeDirection = void 0, - newRangeCoords = void 0; - - if (_this.dragged.length === 0) { - return; - } - - endTarget = document.elementFromPoint(event.touches[0].screenX - scrollLeft, event.touches[0].screenY - scrollTop); - - if (!endTarget || endTarget === _this.lastSetCell) { - return; - } - - if (endTarget.nodeName == 'TD' || endTarget.nodeName == 'TH') { - targetCoords = _this.hot.getCoords(endTarget); - - if (targetCoords.col == -1) { - targetCoords.col = 0; - } - - selectedRange = _this.hot.getSelectedRange(); - rangeWidth = selectedRange.getWidth(); - rangeHeight = selectedRange.getHeight(); - rangeDirection = selectedRange.getDirection(); - - if (rangeWidth == 1 && rangeHeight == 1) { - _this.hot.selection.setRangeEnd(targetCoords); - } - - newRangeCoords = _this.getCurrentRangeCoords(selectedRange, targetCoords, _this.touchStartRange.direction, rangeDirection, _this.dragged[0]); - - if (newRangeCoords.start !== null) { - _this.hot.selection.setRangeStart(newRangeCoords.start); - } - - _this.hot.selection.setRangeEnd(newRangeCoords.end); - - _this.lastSetCell = endTarget; - } - - event.preventDefault(); - }); - } - }, { - key: 'getCurrentRangeCoords', - value: function getCurrentRangeCoords(selectedRange, currentTouch, touchStartDirection, currentDirection, draggedHandle) { - var topLeftCorner = selectedRange.getTopLeftCorner(), - bottomRightCorner = selectedRange.getBottomRightCorner(), - bottomLeftCorner = selectedRange.getBottomLeftCorner(), - topRightCorner = selectedRange.getTopRightCorner(); - - var newCoords = { - start: null, - end: null - }; - - switch (touchStartDirection) { - case 'NE-SW': - switch (currentDirection) { - case 'NE-SW': - case 'NW-SE': - if (draggedHandle == 'topLeft') { - newCoords = { - start: new _src.CellCoords(currentTouch.row, selectedRange.highlight.col), - end: new _src.CellCoords(bottomLeftCorner.row, currentTouch.col) - }; - } else { - newCoords = { - start: new _src.CellCoords(selectedRange.highlight.row, currentTouch.col), - end: new _src.CellCoords(currentTouch.row, topLeftCorner.col) - }; - } - break; - case 'SE-NW': - if (draggedHandle == 'bottomRight') { - newCoords = { - start: new _src.CellCoords(bottomRightCorner.row, currentTouch.col), - end: new _src.CellCoords(currentTouch.row, topLeftCorner.col) - }; - } - break; - default: - break; - } - break; - case 'NW-SE': - switch (currentDirection) { - case 'NE-SW': - if (draggedHandle == 'topLeft') { - newCoords = { - start: currentTouch, - end: bottomLeftCorner - }; - } else { - newCoords.end = currentTouch; - } - break; - case 'NW-SE': - if (draggedHandle == 'topLeft') { - newCoords = { - start: currentTouch, - end: bottomRightCorner - }; - } else { - newCoords.end = currentTouch; - } - break; - case 'SE-NW': - if (draggedHandle == 'topLeft') { - newCoords = { - start: currentTouch, - end: topLeftCorner - }; - } else { - newCoords.end = currentTouch; - } - break; - case 'SW-NE': - if (draggedHandle == 'topLeft') { - newCoords = { - start: currentTouch, - end: topRightCorner - }; - } else { - newCoords.end = currentTouch; - } - break; - default: - break; - } - break; - case 'SW-NE': - switch (currentDirection) { - case 'NW-SE': - if (draggedHandle == 'bottomRight') { - newCoords = { - start: new _src.CellCoords(currentTouch.row, topLeftCorner.col), - end: new _src.CellCoords(bottomLeftCorner.row, currentTouch.col) - }; - } else { - newCoords = { - start: new _src.CellCoords(topLeftCorner.row, currentTouch.col), - end: new _src.CellCoords(currentTouch.row, bottomRightCorner.col) - }; - } - break; - // case 'NE-SW': - // - // break; - case 'SW-NE': - if (draggedHandle == 'topLeft') { - newCoords = { - start: new _src.CellCoords(selectedRange.highlight.row, currentTouch.col), - end: new _src.CellCoords(currentTouch.row, bottomRightCorner.col) - }; - } else { - newCoords = { - start: new _src.CellCoords(currentTouch.row, topLeftCorner.col), - end: new _src.CellCoords(topLeftCorner.row, currentTouch.col) - }; - } - break; - case 'SE-NW': - if (draggedHandle == 'bottomRight') { - newCoords = { - start: new _src.CellCoords(currentTouch.row, topRightCorner.col), - end: new _src.CellCoords(topLeftCorner.row, currentTouch.col) - }; - } else if (draggedHandle == 'topLeft') { - newCoords = { - start: bottomLeftCorner, - end: currentTouch - }; - } - break; - default: - break; - } - break; - case 'SE-NW': - switch (currentDirection) { - case 'NW-SE': - case 'NE-SW': - case 'SW-NE': - if (draggedHandle == 'topLeft') { - newCoords.end = currentTouch; - } - break; - case 'SE-NW': - if (draggedHandle == 'topLeft') { - newCoords.end = currentTouch; - } else { - newCoords = { - start: currentTouch, - end: topLeftCorner - }; - } - break; - default: - break; - } - break; - default: - break; - } - - return newCoords; - } - - /** - * Check if user is currently dragging the handle. - * - * @returns {boolean} Dragging state - */ - - }, { - key: 'isDragged', - value: function isDragged() { - return this.dragged.length > 0; - } - }]); - - return MultipleSelectionHandles; -}(_base2.default); - -(0, _plugins.registerPlugin)('multipleSelectionHandles', MultipleSelectionHandles); - -exports.default = MultipleSelectionHandles; - -/***/ }), -/* 255 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _jsonPatchDuplex = __webpack_require__(134); - -var _jsonPatchDuplex2 = _interopRequireDefault(_jsonPatchDuplex); - -var _localHooks = __webpack_require__(69); - -var _localHooks2 = _interopRequireDefault(_localHooks); - -var _object = __webpack_require__(1); - -var _utils = __webpack_require__(257); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class DataObserver - * @plugin ObserveChanges - */ -var DataObserver = function () { - function DataObserver(observedData) { - _classCallCheck(this, DataObserver); - - /** - * Observed source data. - * - * @type {Array} - */ - this.observedData = null; - /** - * JsonPatch observer. - * - * @type {Object} - */ - this.observer = null; - /** - * Flag which determines if observer is paused or not. Paused observer doesn't emit `change` hooks. - * - * @type {Boolean} - * @default false - */ - this.paused = false; - - this.setObservedData(observedData); - } - - /** - * Set data to observe. - * - * @param {*} observedData - */ - - - _createClass(DataObserver, [{ - key: 'setObservedData', - value: function setObservedData(observedData) { - var _this = this; - - if (this.observer) { - _jsonPatchDuplex2.default.unobserve(this.observedData, this.observer); - } - this.observedData = observedData; - this.observer = _jsonPatchDuplex2.default.observe(this.observedData, function (patches) { - return _this.onChange(patches); - }); - } - - /** - * Check if observer was paused. - * - * @returns {Boolean} - */ - - }, { - key: 'isPaused', - value: function isPaused() { - return this.paused; - } - - /** - * Pause observer (stop emitting all detected changes). - */ - - }, { - key: 'pause', - value: function pause() { - this.paused = true; - } - - /** - * Resume observer (emit all detected changes). - */ - - }, { - key: 'resume', - value: function resume() { - this.paused = false; - } - - /** - * JsonPatch on change listener. - * - * @private - * @param {Array} patches An array of object passed from jsonpatch. - */ - - }, { - key: 'onChange', - value: function onChange(patches) { - this.runLocalHooks('change', (0, _utils.cleanPatches)(patches)); - } - - /** - * Destroy observer instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - _jsonPatchDuplex2.default.unobserve(this.observedData, this.observer); - this.observedData = null; - this.observer = null; - } - }]); - - return DataObserver; -}(); - -(0, _object.mixin)(DataObserver, _localHooks2.default); - -exports.default = DataObserver; - -/***/ }), -/* 256 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _jsonPatchDuplex = __webpack_require__(134); - -var _jsonPatchDuplex2 = _interopRequireDefault(_jsonPatchDuplex); - -var _dataObserver = __webpack_require__(255); - -var _dataObserver2 = _interopRequireDefault(_dataObserver); - -var _array = __webpack_require__(2); - -var _plugins = __webpack_require__(5); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -// Handsontable.hooks.register('afterChangesObserved'); - -/** - * @plugin ObserveChanges - * - * @description - * This plugin allows to observe data source changes. - * - * By default, the plugin is declared as `undefined`, which makes it disabled. - * Enabling this plugin switches the table into one-way data binding where changes are applied into the data source (outside from the table) - * will be automatically reflected in the table. - * - * ```js - * ... - * // as a boolean - * observeChanges: true, - * ... - * ``` - * - * To configure this plugin see {@link Options#observeChanges}. - */ -var ObserveChanges = function (_BasePlugin) { - _inherits(ObserveChanges, _BasePlugin); - - function ObserveChanges(hotInstance) { - _classCallCheck(this, ObserveChanges); - - /** - * Instance of {@link DataObserver}. - * - * @type {DataObserver} - */ - var _this = _possibleConstructorReturn(this, (ObserveChanges.__proto__ || Object.getPrototypeOf(ObserveChanges)).call(this, hotInstance)); - - _this.observer = null; - return _this; - } - - /** - * Check if the plugin is enabled in the handsontable settings. - * - * @returns {Boolean} - */ - - - _createClass(ObserveChanges, [{ - key: 'isEnabled', - value: function isEnabled() { - return this.hot.getSettings().observeChanges; - } - - /** - * Enable plugin for this Handsontable instance. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - if (!this.observer) { - this.observer = new _dataObserver2.default(this.hot.getSourceData()); - this._exposePublicApi(); - } - - this.observer.addLocalHook('change', function (patches) { - return _this2.onDataChange(patches); - }); - this.addHook('afterCreateRow', function () { - return _this2.onAfterTableAlter(); - }); - this.addHook('afterRemoveRow', function () { - return _this2.onAfterTableAlter(); - }); - this.addHook('afterCreateCol', function () { - return _this2.onAfterTableAlter(); - }); - this.addHook('afterRemoveCol', function () { - return _this2.onAfterTableAlter(); - }); - this.addHook('afterChange', function (changes, source) { - return _this2.onAfterTableAlter(source); - }); - this.addHook('afterLoadData', function (firstRun) { - return _this2.onAfterLoadData(firstRun); - }); - - _get(ObserveChanges.prototype.__proto__ || Object.getPrototypeOf(ObserveChanges.prototype), 'enablePlugin', this).call(this); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - if (this.observer) { - this.observer.destroy(); - this.observer = null; - this._deletePublicApi(); - } - - _get(ObserveChanges.prototype.__proto__ || Object.getPrototypeOf(ObserveChanges.prototype), 'disablePlugin', this).call(this); - } - - /** - * Data change observer. - * - * @private - * @param {Array} patches An array of objects which every item defines coordinates where data was changed. - */ - - }, { - key: 'onDataChange', - value: function onDataChange(patches) { - var _this3 = this; - - if (!this.observer.isPaused()) { - var sourceName = this.pluginName + '.change'; - var actions = { - add: function add(patch) { - if (isNaN(patch.col)) { - _this3.hot.runHooks('afterCreateRow', patch.row, 1, sourceName); - } else { - _this3.hot.runHooks('afterCreateCol', patch.col, 1, sourceName); - } - }, - remove: function remove(patch) { - if (isNaN(patch.col)) { - _this3.hot.runHooks('afterRemoveRow', patch.row, 1, sourceName); - } else { - _this3.hot.runHooks('afterRemoveCol', patch.col, 1, sourceName); - } - }, - replace: function replace(patch) { - _this3.hot.runHooks('afterChange', [patch.row, patch.col, null, patch.value], sourceName); - } - }; - - (0, _array.arrayEach)(patches, function (patch) { - if (actions[patch.op]) { - actions[patch.op](patch); - } - }); - this.hot.render(); - } - - this.hot.runHooks('afterChangesObserved'); - } - - /** - * On after table alter listener. Prevents infinity loop between internal and external data changing. - * - * @private - * @param source - */ - - }, { - key: 'onAfterTableAlter', - value: function onAfterTableAlter(source) { - var _this4 = this; - - if (source !== 'loadData') { - this.observer.pause(); - this.hot.addHookOnce('afterChangesObserved', function () { - return _this4.observer.resume(); - }); - } - } - - /** - * On after load data listener. - * - * @private - * @param {Boolean} firstRun `true` if event was fired first time. - */ - - }, { - key: 'onAfterLoadData', - value: function onAfterLoadData(firstRun) { - if (!firstRun) { - this.observer.setObservedData(this.hot.getSourceData()); - } - } - - /** - * Destroy plugin instance. - */ - - }, { - key: 'destroy', - value: function destroy() { - if (this.observer) { - this.observer.destroy(); - this._deletePublicApi(); - } - _get(ObserveChanges.prototype.__proto__ || Object.getPrototypeOf(ObserveChanges.prototype), 'destroy', this).call(this); - } - - /** - * Expose plugins methods to the core. - * - * @private - */ - - }, { - key: '_exposePublicApi', - value: function _exposePublicApi() { - var _this5 = this; - - var hot = this.hot; - - hot.pauseObservingChanges = function () { - return _this5.observer.pause(); - }; - hot.resumeObservingChanges = function () { - return _this5.observer.resume(); - }; - hot.isPausedObservingChanges = function () { - return _this5.observer.isPaused(); - }; - } - - /** - * Delete all previously exposed methods. - * - * @private - */ - - }, { - key: '_deletePublicApi', - value: function _deletePublicApi() { - var hot = this.hot; - - delete hot.pauseObservingChanges; - delete hot.resumeObservingChanges; - delete hot.isPausedObservingChanges; - } - }]); - - return ObserveChanges; -}(_base2.default); - -exports.default = ObserveChanges; - - -(0, _plugins.registerPlugin)('observeChanges', ObserveChanges); - -/***/ }), -/* 257 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -exports.cleanPatches = cleanPatches; -exports.parsePath = parsePath; - -var _array = __webpack_require__(2); - -/** - * Clean and extend patches from jsonpatch observer. - * - * @param {Array} patches - * @returns {Array} - */ -function cleanPatches(patches) { - var newOrRemovedColumns = []; - - /** - * If observeChanges uses native Object.observe method, then it produces patches for length property. Filter them. - * If path can't be parsed. Filter it. - */ - patches = (0, _array.arrayFilter)(patches, function (patch) { - if (/[/]length/ig.test(patch.path)) { - return false; - } - if (!parsePath(patch.path)) { - return false; - } - - return true; - }); - /** - * Extend patches with changed cells coords - */ - patches = (0, _array.arrayMap)(patches, function (patch) { - var coords = parsePath(patch.path); - - patch.row = coords.row; - patch.col = coords.col; - - return patch; - }); - /** - * Removing or adding column will produce one patch for each table row. - * Leaves only one patch for each column add/remove operation. - */ - patches = (0, _array.arrayFilter)(patches, function (patch) { - if (['add', 'remove'].indexOf(patch.op) !== -1 && !isNaN(patch.col)) { - if (newOrRemovedColumns.indexOf(patch.col) !== -1) { - return false; - } - newOrRemovedColumns.push(patch.col); - } - - return true; - }); - newOrRemovedColumns.length = 0; - - return patches; -} - -/** - * Extract coordinates from path where data was changed. - * - * @param {String} path Path describing where data was changed. - * @returns {Object|null} Returns an object with `row` and `col` properties or `null` if path doesn't have necessary information. - */ -function parsePath(path) { - var match = path.match(/^\/(\d+)\/?(.*)?$/); - - if (!match) { - return null; - } - - var _match = _slicedToArray(match, 3), - row = _match[1], - column = _match[2]; - - return { - row: parseInt(row, 10), - col: /^\d*$/.test(column) ? parseInt(column, 10) : column - }; -} - -/***/ }), -/* 258 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _plugins = __webpack_require__(5); - -var _object = __webpack_require__(1); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function Storage(prefix) { - var savedKeys; - - var saveSavedKeys = function saveSavedKeys() { - window.localStorage[prefix + '__persistentStateKeys'] = JSON.stringify(savedKeys); - }; - - var loadSavedKeys = function loadSavedKeys() { - var keysJSON = window.localStorage[prefix + '__persistentStateKeys']; - var keys = typeof keysJSON == 'string' ? JSON.parse(keysJSON) : void 0; - savedKeys = keys ? keys : []; - }; - - var clearSavedKeys = function clearSavedKeys() { - savedKeys = []; - saveSavedKeys(); - }; - - loadSavedKeys(); - - this.saveValue = function (key, value) { - window.localStorage[prefix + '_' + key] = JSON.stringify(value); - if (savedKeys.indexOf(key) == -1) { - savedKeys.push(key); - saveSavedKeys(); - } - }; - - this.loadValue = function (key, defaultValue) { - - key = typeof key === 'undefined' ? defaultValue : key; - - var value = window.localStorage[prefix + '_' + key]; - - return typeof value == 'undefined' ? void 0 : JSON.parse(value); - }; - - this.reset = function (key) { - window.localStorage.removeItem(prefix + '_' + key); - }; - - this.resetAll = function () { - for (var index = 0; index < savedKeys.length; index++) { - window.localStorage.removeItem(prefix + '_' + savedKeys[index]); - } - - clearSavedKeys(); - }; -} - -/** - * @private - * @class PersistentState - * @plugin PersistentState - */ -function HandsontablePersistentState() { - var plugin = this; - - this.init = function () { - var instance = this, - pluginSettings = instance.getSettings().persistentState; - - plugin.enabled = !!pluginSettings; - - if (!plugin.enabled) { - removeHooks.call(instance); - return; - } - - if (!instance.storage) { - instance.storage = new Storage(instance.rootElement.id); - } - - instance.resetState = plugin.resetValue; - - addHooks.call(instance); - }; - - this.saveValue = function (key, value) { - var instance = this; - - instance.storage.saveValue(key, value); - }; - - this.loadValue = function (key, saveTo) { - var instance = this; - - saveTo.value = instance.storage.loadValue(key); - }; - - this.resetValue = function (key) { - var instance = this; - - if (typeof key === 'undefined') { - instance.storage.resetAll(); - } else { - instance.storage.reset(key); - } - }; - - var hooks = { - persistentStateSave: plugin.saveValue, - persistentStateLoad: plugin.loadValue, - persistentStateReset: plugin.resetValue - }; - - for (var hookName in hooks) { - if ((0, _object.hasOwnProperty)(hooks, hookName)) { - _pluginHooks2.default.getSingleton().register(hookName); - } - } - - function addHooks() { - var instance = this; - - for (var hookName in hooks) { - if ((0, _object.hasOwnProperty)(hooks, hookName)) { - instance.addHook(hookName, hooks[hookName]); - } - } - } - - function removeHooks() { - var instance = this; - - for (var hookName in hooks) { - if ((0, _object.hasOwnProperty)(hooks, hookName)) { - instance.removeHook(hookName, hooks[hookName]); - } - } - } -} - -var htPersistentState = new HandsontablePersistentState(); - -_pluginHooks2.default.getSingleton().add('beforeInit', htPersistentState.init); -_pluginHooks2.default.getSingleton().add('afterUpdateSettings', htPersistentState.init); - -exports.default = HandsontablePersistentState; - -/***/ }), -/* 259 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _element = __webpack_require__(0); - -var _renderers = __webpack_require__(9); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @private - * @plugin Search - */ -function Search(instance) { - this.query = function (queryStr, callback, queryMethod) { - var rowCount = instance.countRows(); - var colCount = instance.countCols(); - var queryResult = []; - - if (!callback) { - callback = Search.global.getDefaultCallback(); - } - - if (!queryMethod) { - queryMethod = Search.global.getDefaultQueryMethod(); - } - - for (var rowIndex = 0; rowIndex < rowCount; rowIndex++) { - for (var colIndex = 0; colIndex < colCount; colIndex++) { - var cellData = instance.getDataAtCell(rowIndex, colIndex); - var cellProperties = instance.getCellMeta(rowIndex, colIndex); - var cellCallback = cellProperties.search.callback || callback; - var cellQueryMethod = cellProperties.search.queryMethod || queryMethod; - var testResult = cellQueryMethod(queryStr, cellData); - - if (testResult) { - var singleResult = { - row: rowIndex, - col: colIndex, - data: cellData - }; - - queryResult.push(singleResult); - } - - if (cellCallback) { - cellCallback(instance, rowIndex, colIndex, cellData, testResult); - } - } - } - - return queryResult; - }; -}; - -Search.DEFAULT_CALLBACK = function (instance, row, col, data, testResult) { - instance.getCellMeta(row, col).isSearchResult = testResult; -}; - -Search.DEFAULT_QUERY_METHOD = function (query, value) { - if (typeof query == 'undefined' || query == null || !query.toLowerCase || query.length === 0) { - return false; - } - if (typeof value == 'undefined' || value == null) { - return false; - } - - return value.toString().toLowerCase().indexOf(query.toLowerCase()) != -1; -}; - -Search.DEFAULT_SEARCH_RESULT_CLASS = 'htSearchResult'; - -Search.global = function () { - - var defaultCallback = Search.DEFAULT_CALLBACK; - var defaultQueryMethod = Search.DEFAULT_QUERY_METHOD; - var defaultSearchResultClass = Search.DEFAULT_SEARCH_RESULT_CLASS; - - return { - getDefaultCallback: function getDefaultCallback() { - return defaultCallback; - }, - setDefaultCallback: function setDefaultCallback(newDefaultCallback) { - defaultCallback = newDefaultCallback; - }, - getDefaultQueryMethod: function getDefaultQueryMethod() { - return defaultQueryMethod; - }, - setDefaultQueryMethod: function setDefaultQueryMethod(newDefaultQueryMethod) { - defaultQueryMethod = newDefaultQueryMethod; - }, - getDefaultSearchResultClass: function getDefaultSearchResultClass() { - return defaultSearchResultClass; - }, - setDefaultSearchResultClass: function setDefaultSearchResultClass(newSearchResultClass) { - defaultSearchResultClass = newSearchResultClass; - } - }; -}(); - -function SearchCellDecorator(instance, TD, row, col, prop, value, cellProperties) { - var searchResultClass = cellProperties.search !== null && _typeof(cellProperties.search) == 'object' && cellProperties.search.searchResultClass || Search.global.getDefaultSearchResultClass(); - - if (cellProperties.isSearchResult) { - (0, _element.addClass)(TD, searchResultClass); - } else { - (0, _element.removeClass)(TD, searchResultClass); - } -}; - -var originalBaseRenderer = (0, _renderers.getRenderer)('base'); - -(0, _renderers.registerRenderer)('base', function (instance, TD, row, col, prop, value, cellProperties) { - originalBaseRenderer.apply(this, arguments); - SearchCellDecorator.apply(this, arguments); -}); - -function init() { - var instance = this; - - var pluginEnabled = !!instance.getSettings().search; - - if (pluginEnabled) { - instance.search = new Search(instance); - } else { - delete instance.search; - } -} - -_pluginHooks2.default.getSingleton().add('afterInit', init); -_pluginHooks2.default.getSingleton().add('afterUpdateSettings', init); - -exports.default = Search; - -/***/ }), -/* 260 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _element = __webpack_require__(0); - -var _array = __webpack_require__(2); - -var _base = __webpack_require__(12); - -var _base2 = _interopRequireDefault(_base); - -var _plugins = __webpack_require__(5); - -var _feature = __webpack_require__(34); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/** - * @private - * @plugin TouchScroll - * @class TouchScroll - */ -var TouchScroll = function (_BasePlugin) { - _inherits(TouchScroll, _BasePlugin); - - function TouchScroll(hotInstance) { - _classCallCheck(this, TouchScroll); - - /** - * Collection of scrollbars to update. - * - * @type {Array} - */ - var _this = _possibleConstructorReturn(this, (TouchScroll.__proto__ || Object.getPrototypeOf(TouchScroll)).call(this, hotInstance)); - - _this.scrollbars = []; - /** - * Collection of overlays to update. - * - * @type {Array} - */ - _this.clones = []; - /** - * Flag which determines if collection of overlays should be refilled on every table render. - * - * @type {Boolean} - * @default false - */ - _this.lockedCollection = false; - /** - * Flag which determines if walkontable should freeze overlays while scrolling. - * - * @type {Boolean} - * @default false - */ - _this.freezeOverlays = false; - return _this; - } - - /** - * Check if plugin is enabled. - * - * @returns {Boolean} - */ - - - _createClass(TouchScroll, [{ - key: 'isEnabled', - value: function isEnabled() { - return (0, _feature.isTouchSupported)(); - } - - /** - * Enable the plugin. - */ - - }, { - key: 'enablePlugin', - value: function enablePlugin() { - var _this2 = this; - - if (this.enabled) { - return; - } - - this.addHook('afterRender', function () { - return _this2.onAfterRender(); - }); - this.registerEvents(); - - _get(TouchScroll.prototype.__proto__ || Object.getPrototypeOf(TouchScroll.prototype), 'enablePlugin', this).call(this); - } - - /** - * Updates the plugin to use the latest options you have specified. - */ - - }, { - key: 'updatePlugin', - value: function updatePlugin() { - this.lockedCollection = false; - - _get(TouchScroll.prototype.__proto__ || Object.getPrototypeOf(TouchScroll.prototype), 'updatePlugin', this).call(this); - } - - /** - * Disable plugin for this Handsontable instance. - */ - - }, { - key: 'disablePlugin', - value: function disablePlugin() { - _get(TouchScroll.prototype.__proto__ || Object.getPrototypeOf(TouchScroll.prototype), 'disablePlugin', this).call(this); - } - - /** - * Register all necessary events. - * - * @private - */ - - }, { - key: 'registerEvents', - value: function registerEvents() { - var _this3 = this; - - this.addHook('beforeTouchScroll', function () { - return _this3.onBeforeTouchScroll(); - }); - this.addHook('afterMomentumScroll', function () { - return _this3.onAfterMomentumScroll(); - }); - } - - /** - * After render listener. - * - * @private - */ - - }, { - key: 'onAfterRender', - value: function onAfterRender() { - if (this.lockedCollection) { - return; - } - - var _hot$view$wt$wtOverla = this.hot.view.wt.wtOverlays, - topOverlay = _hot$view$wt$wtOverla.topOverlay, - bottomOverlay = _hot$view$wt$wtOverla.bottomOverlay, - leftOverlay = _hot$view$wt$wtOverla.leftOverlay, - topLeftCornerOverlay = _hot$view$wt$wtOverla.topLeftCornerOverlay, - bottomLeftCornerOverlay = _hot$view$wt$wtOverla.bottomLeftCornerOverlay; - - - this.lockedCollection = true; - this.scrollbars.length = 0; - this.scrollbars.push(topOverlay); - - if (bottomOverlay.clone) { - this.scrollbars.push(bottomOverlay); - } - this.scrollbars.push(leftOverlay); - - if (topLeftCornerOverlay) { - this.scrollbars.push(topLeftCornerOverlay); - } - if (bottomLeftCornerOverlay && bottomLeftCornerOverlay.clone) { - this.scrollbars.push(bottomLeftCornerOverlay); - } - - this.clones.length = 0; - - if (topOverlay.needFullRender) { - this.clones.push(topOverlay.clone.wtTable.holder.parentNode); - } - if (bottomOverlay.needFullRender) { - this.clones.push(bottomOverlay.clone.wtTable.holder.parentNode); - } - if (leftOverlay.needFullRender) { - this.clones.push(leftOverlay.clone.wtTable.holder.parentNode); - } - if (topLeftCornerOverlay) { - this.clones.push(topLeftCornerOverlay.clone.wtTable.holder.parentNode); - } - if (bottomLeftCornerOverlay && bottomLeftCornerOverlay.clone) { - this.clones.push(bottomLeftCornerOverlay.clone.wtTable.holder.parentNode); - } - } - - /** - * Touch scroll listener. - * - * @private - */ - - }, { - key: 'onBeforeTouchScroll', - value: function onBeforeTouchScroll() { - this.freezeOverlays = true; - - (0, _array.arrayEach)(this.clones, function (clone) { - (0, _element.addClass)(clone, 'hide-tween'); - }); - } - - /** - * After momentum scroll listener. - * - * @private - */ - - }, { - key: 'onAfterMomentumScroll', - value: function onAfterMomentumScroll() { - var _this4 = this; - - this.freezeOverlays = false; - - (0, _array.arrayEach)(this.clones, function (clone) { - (0, _element.removeClass)(clone, 'hide-tween'); - (0, _element.addClass)(clone, 'show-tween'); - }); - - setTimeout(function () { - (0, _array.arrayEach)(_this4.clones, function (clone) { - (0, _element.removeClass)(clone, 'show-tween'); - }); - }, 400); - - (0, _array.arrayEach)(this.scrollbars, function (scrollbar) { - scrollbar.refresh(); - scrollbar.resetFixedPosition(); - }); - - this.hot.view.wt.wtOverlays.syncScrollWithMaster(); - } - }]); - - return TouchScroll; -}(_base2.default); - -(0, _plugins.registerPlugin)('touchScroll', TouchScroll); - -exports.default = TouchScroll; - -/***/ }), -/* 261 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _pluginHooks = __webpack_require__(8); - -var _pluginHooks2 = _interopRequireDefault(_pluginHooks); - -var _array = __webpack_require__(2); - -var _number = __webpack_require__(6); - -var _object = __webpack_require__(1); - -var _event = __webpack_require__(7); - -var _src = __webpack_require__(11); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * @description - * Handsontable UndoRedo plugin. It allows to undo and redo certain actions done in the table. - * Please note, that not all actions are currently undo-able. - * - * @example - * ```js - * ... - * undo: true - * ... - * ``` - * @class UndoRedo - * @plugin UndoRedo - */ -/** - * Handsontable UndoRedo class - */ -function UndoRedo(instance) { - var plugin = this; - this.instance = instance; - this.doneActions = []; - this.undoneActions = []; - this.ignoreNewActions = false; - - instance.addHook('afterChange', function (changes, source) { - if (changes && source !== 'UndoRedo.undo' && source !== 'UndoRedo.redo') { - plugin.done(new UndoRedo.ChangeAction(changes)); - } - }); - - instance.addHook('afterCreateRow', function (index, amount, source) { - if (source === 'UndoRedo.undo' || source === 'UndoRedo.undo' || source === 'auto') { - return; - } - - var action = new UndoRedo.CreateRowAction(index, amount); - plugin.done(action); - }); - - instance.addHook('beforeRemoveRow', function (index, amount, logicRows, source) { - if (source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto') { - return; - } - - var originalData = plugin.instance.getSourceDataArray(); - - index = (originalData.length + index) % originalData.length; - - var removedData = (0, _object.deepClone)(originalData.slice(index, index + amount)); - - plugin.done(new UndoRedo.RemoveRowAction(index, removedData)); - }); - - instance.addHook('afterCreateCol', function (index, amount, source) { - if (source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto') { - return; - } - - plugin.done(new UndoRedo.CreateColumnAction(index, amount)); - }); - - instance.addHook('beforeRemoveCol', function (index, amount, logicColumns, source) { - if (source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto') { - return; - } - - var originalData = plugin.instance.getSourceDataArray(); - - index = (plugin.instance.countCols() + index) % plugin.instance.countCols(); - - var removedData = []; - var headers = []; - var indexes = []; - - (0, _number.rangeEach)(originalData.length - 1, function (i) { - var column = []; - var origRow = originalData[i]; - - (0, _number.rangeEach)(index, index + (amount - 1), function (j) { - column.push(origRow[instance.runHooks('modifyCol', j)]); - }); - removedData.push(column); - }); - - (0, _number.rangeEach)(amount - 1, function (i) { - indexes.push(instance.runHooks('modifyCol', index + i)); - }); - - if (Array.isArray(instance.getSettings().colHeaders)) { - (0, _number.rangeEach)(amount - 1, function (i) { - headers.push(instance.getSettings().colHeaders[instance.runHooks('modifyCol', index + i)] || null); - }); - } - - var manualColumnMovePlugin = plugin.instance.getPlugin('manualColumnMove'); - - var columnsMap = manualColumnMovePlugin.isEnabled() ? manualColumnMovePlugin.columnsMapper.__arrayMap : []; - var action = new UndoRedo.RemoveColumnAction(index, indexes, removedData, headers, columnsMap); - - plugin.done(action); - }); - - instance.addHook('beforeCellAlignment', function (stateBefore, range, type, alignment) { - var action = new UndoRedo.CellAlignmentAction(stateBefore, range, type, alignment); - plugin.done(action); - }); - - instance.addHook('beforeFilter', function (conditionsStack) { - plugin.done(new UndoRedo.FiltersAction(conditionsStack)); - }); - - instance.addHook('beforeRowMove', function (movedRows, target) { - if (movedRows === false) { - return; - } - - plugin.done(new UndoRedo.RowMoveAction(movedRows, target)); - }); -}; - -UndoRedo.prototype.done = function (action) { - if (!this.ignoreNewActions) { - this.doneActions.push(action); - this.undoneActions.length = 0; - } -}; - -/** - * Undo last edit. - * - * @function undo - * @memberof UndoRedo# - */ -UndoRedo.prototype.undo = function () { - if (this.isUndoAvailable()) { - var action = this.doneActions.pop(); - var actionClone = (0, _object.deepClone)(action); - var instance = this.instance; - - var continueAction = instance.runHooks('beforeUndo', actionClone); - - if (continueAction === false) { - return; - } - - this.ignoreNewActions = true; - var that = this; - action.undo(this.instance, function () { - that.ignoreNewActions = false; - that.undoneActions.push(action); - }); - - instance.runHooks('afterUndo', actionClone); - } -}; - -/** - * Redo edit (used to reverse an undo). - * - * @function redo - * @memberof UndoRedo# - */ -UndoRedo.prototype.redo = function () { - if (this.isRedoAvailable()) { - var action = this.undoneActions.pop(); - var actionClone = (0, _object.deepClone)(action); - var instance = this.instance; - - var continueAction = instance.runHooks('beforeRedo', actionClone); - - if (continueAction === false) { - return; - } - - this.ignoreNewActions = true; - var that = this; - action.redo(this.instance, function () { - that.ignoreNewActions = false; - that.doneActions.push(action); - }); - - instance.runHooks('afterRedo', actionClone); - } -}; - -/** - * Check if undo action is available. - * - * @function isUndoAvailable - * @memberof UndoRedo# - * @return {Boolean} Return `true` if undo can be performed, `false` otherwise - */ -UndoRedo.prototype.isUndoAvailable = function () { - return this.doneActions.length > 0; -}; - -/** - * Check if redo action is available. - * - * @function isRedoAvailable - * @memberof UndoRedo# - * @return {Boolean} Return `true` if redo can be performed, `false` otherwise. - */ -UndoRedo.prototype.isRedoAvailable = function () { - return this.undoneActions.length > 0; -}; - -/** - * Clears undo history. - * - * @function clear - * @memberof UndoRedo# - */ -UndoRedo.prototype.clear = function () { - this.doneActions.length = 0; - this.undoneActions.length = 0; -}; - -UndoRedo.Action = function () {}; -UndoRedo.Action.prototype.undo = function () {}; -UndoRedo.Action.prototype.redo = function () {}; - -/** - * Change action. - */ -UndoRedo.ChangeAction = function (changes) { - this.changes = changes; - this.actionType = 'change'; -}; -(0, _object.inherit)(UndoRedo.ChangeAction, UndoRedo.Action); - -UndoRedo.ChangeAction.prototype.undo = function (instance, undoneCallback) { - var data = (0, _object.deepClone)(this.changes), - emptyRowsAtTheEnd = instance.countEmptyRows(true), - emptyColsAtTheEnd = instance.countEmptyCols(true); - - for (var i = 0, len = data.length; i < len; i++) { - data[i].splice(3, 1); - } - - instance.addHookOnce('afterChange', undoneCallback); - - instance.setDataAtRowProp(data, null, null, 'UndoRedo.undo'); - - for (var _i = 0, _len = data.length; _i < _len; _i++) { - if (instance.getSettings().minSpareRows && data[_i][0] + 1 + instance.getSettings().minSpareRows === instance.countRows() && emptyRowsAtTheEnd == instance.getSettings().minSpareRows) { - - instance.alter('remove_row', parseInt(data[_i][0] + 1, 10), instance.getSettings().minSpareRows); - instance.undoRedo.doneActions.pop(); - } - - if (instance.getSettings().minSpareCols && data[_i][1] + 1 + instance.getSettings().minSpareCols === instance.countCols() && emptyColsAtTheEnd == instance.getSettings().minSpareCols) { - - instance.alter('remove_col', parseInt(data[_i][1] + 1, 10), instance.getSettings().minSpareCols); - instance.undoRedo.doneActions.pop(); - } - } -}; -UndoRedo.ChangeAction.prototype.redo = function (instance, onFinishCallback) { - var data = (0, _object.deepClone)(this.changes); - - for (var i = 0, len = data.length; i < len; i++) { - data[i].splice(2, 1); - } - - instance.addHookOnce('afterChange', onFinishCallback); - instance.setDataAtRowProp(data, null, null, 'UndoRedo.redo'); -}; - -/** - * Create row action. - */ -UndoRedo.CreateRowAction = function (index, amount) { - this.index = index; - this.amount = amount; - this.actionType = 'insert_row'; -}; -(0, _object.inherit)(UndoRedo.CreateRowAction, UndoRedo.Action); - -UndoRedo.CreateRowAction.prototype.undo = function (instance, undoneCallback) { - var rowCount = instance.countRows(), - minSpareRows = instance.getSettings().minSpareRows; - - if (this.index >= rowCount && this.index - minSpareRows < rowCount) { - this.index -= minSpareRows; // work around the situation where the needed row was removed due to an 'undo' of a made change - } - - instance.addHookOnce('afterRemoveRow', undoneCallback); - instance.alter('remove_row', this.index, this.amount, 'UndoRedo.undo'); -}; -UndoRedo.CreateRowAction.prototype.redo = function (instance, redoneCallback) { - instance.addHookOnce('afterCreateRow', redoneCallback); - instance.alter('insert_row', this.index, this.amount, 'UndoRedo.redo'); -}; - -/** - * Remove row action. - */ -UndoRedo.RemoveRowAction = function (index, data) { - this.index = index; - this.data = data; - this.actionType = 'remove_row'; -}; -(0, _object.inherit)(UndoRedo.RemoveRowAction, UndoRedo.Action); - -UndoRedo.RemoveRowAction.prototype.undo = function (instance, undoneCallback) { - instance.alter('insert_row', this.index, this.data.length, 'UndoRedo.undo'); - instance.addHookOnce('afterRender', undoneCallback); - instance.populateFromArray(this.index, 0, this.data, void 0, void 0, 'UndoRedo.undo'); -}; -UndoRedo.RemoveRowAction.prototype.redo = function (instance, redoneCallback) { - instance.addHookOnce('afterRemoveRow', redoneCallback); - instance.alter('remove_row', this.index, this.data.length, 'UndoRedo.redo'); -}; - -/** - * Create column action. - */ -UndoRedo.CreateColumnAction = function (index, amount) { - this.index = index; - this.amount = amount; - this.actionType = 'insert_col'; -}; -(0, _object.inherit)(UndoRedo.CreateColumnAction, UndoRedo.Action); - -UndoRedo.CreateColumnAction.prototype.undo = function (instance, undoneCallback) { - instance.addHookOnce('afterRemoveCol', undoneCallback); - instance.alter('remove_col', this.index, this.amount, 'UndoRedo.undo'); -}; -UndoRedo.CreateColumnAction.prototype.redo = function (instance, redoneCallback) { - instance.addHookOnce('afterCreateCol', redoneCallback); - instance.alter('insert_col', this.index, this.amount, 'UndoRedo.redo'); -}; - -/** - * Remove column action. - */ -UndoRedo.RemoveColumnAction = function (index, indexes, data, headers, columnPositions) { - this.index = index; - this.indexes = indexes; - this.data = data; - this.amount = this.data[0].length; - this.headers = headers; - this.columnPositions = columnPositions.slice(0); - this.actionType = 'remove_col'; -}; -(0, _object.inherit)(UndoRedo.RemoveColumnAction, UndoRedo.Action); - -UndoRedo.RemoveColumnAction.prototype.undo = function (instance, undoneCallback) { - var _this = this; - - var row = void 0; - var ascendingIndexes = this.indexes.slice(0).sort(); - var sortByIndexes = function sortByIndexes(elem, j, arr) { - return arr[_this.indexes.indexOf(ascendingIndexes[j])]; - }; - - var sortedData = []; - (0, _number.rangeEach)(this.data.length - 1, function (i) { - sortedData[i] = (0, _array.arrayMap)(_this.data[i], sortByIndexes); - }); - - var sortedHeaders = []; - sortedHeaders = (0, _array.arrayMap)(this.headers, sortByIndexes); - - var changes = []; - - // TODO: Temporary hook for undo/redo mess - instance.runHooks('beforeCreateCol', this.indexes[0], this.indexes[this.indexes.length - 1], 'UndoRedo.undo'); - - (0, _number.rangeEach)(this.data.length - 1, function (i) { - row = instance.getSourceDataAtRow(i); - - (0, _number.rangeEach)(ascendingIndexes.length - 1, function (j) { - row.splice(ascendingIndexes[j], 0, sortedData[i][j]); - changes.push([i, ascendingIndexes[j], null, sortedData[i][j]]); - }); - }); - - // TODO: Temporary hook for undo/redo mess - if (instance.getPlugin('formulas')) { - instance.getPlugin('formulas').onAfterSetDataAtCell(changes); - } - - if (typeof this.headers !== 'undefined') { - (0, _number.rangeEach)(sortedHeaders.length - 1, function (j) { - instance.getSettings().colHeaders.splice(ascendingIndexes[j], 0, sortedHeaders[j]); - }); - } - - if (instance.getPlugin('manualColumnMove')) { - instance.getPlugin('manualColumnMove').columnsMapper.__arrayMap = this.columnPositions; - } - - instance.addHookOnce('afterRender', undoneCallback); - - // TODO: Temporary hook for undo/redo mess - instance.runHooks('afterCreateCol', this.indexes[0], this.indexes[this.indexes.length - 1], 'UndoRedo.undo'); - - if (instance.getPlugin('formulas')) { - instance.getPlugin('formulas').recalculateFull(); - } - - instance.render(); -}; - -UndoRedo.RemoveColumnAction.prototype.redo = function (instance, redoneCallback) { - instance.addHookOnce('afterRemoveCol', redoneCallback); - instance.alter('remove_col', this.index, this.amount, 'UndoRedo.redo'); -}; - -/** - * Cell alignment action. - */ -UndoRedo.CellAlignmentAction = function (stateBefore, range, type, alignment) { - this.stateBefore = stateBefore; - this.range = range; - this.type = type; - this.alignment = alignment; -}; -UndoRedo.CellAlignmentAction.prototype.undo = function (instance, undoneCallback) { - if (!instance.getPlugin('contextMenu').isEnabled()) { - return; - } - for (var row = this.range.from.row; row <= this.range.to.row; row++) { - for (var col = this.range.from.col; col <= this.range.to.col; col++) { - instance.setCellMeta(row, col, 'className', this.stateBefore[row][col] || ' htLeft'); - } - } - - instance.addHookOnce('afterRender', undoneCallback); - instance.render(); -}; -UndoRedo.CellAlignmentAction.prototype.redo = function (instance, undoneCallback) { - if (!instance.getPlugin('contextMenu').isEnabled()) { - return; - } - instance.selectCell(this.range.from.row, this.range.from.col, this.range.to.row, this.range.to.col); - instance.getPlugin('contextMenu').executeCommand('alignment:' + this.alignment.replace('ht', '').toLowerCase()); - - instance.addHookOnce('afterRender', undoneCallback); - instance.render(); -}; - -/** - * Filters action. - */ -UndoRedo.FiltersAction = function (conditionsStack) { - this.conditionsStack = conditionsStack; - this.actionType = 'filter'; -}; -(0, _object.inherit)(UndoRedo.FiltersAction, UndoRedo.Action); - -UndoRedo.FiltersAction.prototype.undo = function (instance, undoneCallback) { - var filters = instance.getPlugin('filters'); - - instance.addHookOnce('afterRender', undoneCallback); - - filters.conditionCollection.importAllConditions(this.conditionsStack.slice(0, this.conditionsStack.length - 1)); - filters.filter(); -}; -UndoRedo.FiltersAction.prototype.redo = function (instance, redoneCallback) { - var filters = instance.getPlugin('filters'); - - instance.addHookOnce('afterRender', redoneCallback); - - filters.conditionCollection.importAllConditions(this.conditionsStack); - filters.filter(); -}; - -/** - * ManualRowMove action. - * @TODO: removeRow undo should works on logical index - */ -UndoRedo.RowMoveAction = function (movedRows, target) { - this.rows = movedRows.slice(); - this.target = target; -}; -(0, _object.inherit)(UndoRedo.RowMoveAction, UndoRedo.Action); - -UndoRedo.RowMoveAction.prototype.undo = function (instance, undoneCallback) { - var manualRowMove = instance.getPlugin('manualRowMove'); - - instance.addHookOnce('afterRender', undoneCallback); - var mod = this.rows[0] < this.target ? -1 * this.rows.length : 0; - var newTarget = this.rows[0] > this.target ? this.rows[0] + this.rows.length : this.rows[0]; - var newRows = []; - var rowsLen = this.rows.length + mod; - - for (var i = mod; i < rowsLen; i++) { - newRows.push(this.target + i); - } - manualRowMove.moveRows(newRows.slice(), newTarget); - instance.render(); - - instance.selection.setRangeStartOnly(new _src.CellCoords(this.rows[0], 0)); - instance.selection.setRangeEnd(new _src.CellCoords(this.rows[this.rows.length - 1], instance.countCols() - 1)); -}; -UndoRedo.RowMoveAction.prototype.redo = function (instance, redoneCallback) { - var manualRowMove = instance.getPlugin('manualRowMove'); - - instance.addHookOnce('afterRender', redoneCallback); - manualRowMove.moveRows(this.rows.slice(), this.target); - instance.render(); - var startSelection = this.rows[0] < this.target ? this.target - this.rows.length : this.target; - instance.selection.setRangeStartOnly(new _src.CellCoords(startSelection, 0)); - instance.selection.setRangeEnd(new _src.CellCoords(startSelection + this.rows.length - 1, instance.countCols() - 1)); -}; - -function init() { - var instance = this; - var pluginEnabled = typeof instance.getSettings().undo == 'undefined' || instance.getSettings().undo; - - if (pluginEnabled) { - if (!instance.undoRedo) { - /** - * Instance of Handsontable.UndoRedo Plugin {@link Handsontable.UndoRedo} - * - * @alias undoRedo - * @memberof! Handsontable.Core# - * @type {UndoRedo} - */ - instance.undoRedo = new UndoRedo(instance); - - exposeUndoRedoMethods(instance); - - instance.addHook('beforeKeyDown', onBeforeKeyDown); - instance.addHook('afterChange', onAfterChange); - } - } else if (instance.undoRedo) { - delete instance.undoRedo; - - removeExposedUndoRedoMethods(instance); - - instance.removeHook('beforeKeyDown', onBeforeKeyDown); - instance.removeHook('afterChange', onAfterChange); - } -} - -function onBeforeKeyDown(event) { - var instance = this; - - var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey; - - if (ctrlDown) { - if (event.keyCode === 89 || event.shiftKey && event.keyCode === 90) { - // CTRL + Y or CTRL + SHIFT + Z - instance.undoRedo.redo(); - (0, _event.stopImmediatePropagation)(event); - } else if (event.keyCode === 90) { - // CTRL + Z - instance.undoRedo.undo(); - (0, _event.stopImmediatePropagation)(event); - } - } -} - -function onAfterChange(changes, source) { - var instance = this; - if (source === 'loadData') { - return instance.undoRedo.clear(); - } -} - -function exposeUndoRedoMethods(instance) { - /** - * {@link UndoRedo#undo} - * @alias undo - * @memberof! Handsontable.Core# - */ - instance.undo = function () { - return instance.undoRedo.undo(); - }; - - /** - * {@link UndoRedo#redo} - * @alias redo - * @memberof! Handsontable.Core# - */ - instance.redo = function () { - return instance.undoRedo.redo(); - }; - - /** - * {@link UndoRedo#isUndoAvailable} - * @alias isUndoAvailable - * @memberof! Handsontable.Core# - */ - instance.isUndoAvailable = function () { - return instance.undoRedo.isUndoAvailable(); - }; - - /** - * {@link UndoRedo#isRedoAvailable} - * @alias isRedoAvailable - * @memberof! Handsontable.Core# - */ - instance.isRedoAvailable = function () { - return instance.undoRedo.isRedoAvailable(); - }; - - /** - * {@link UndoRedo#clear} - * @alias clearUndo - * @memberof! Handsontable.Core# - */ - instance.clearUndo = function () { - return instance.undoRedo.clear(); - }; -} - -function removeExposedUndoRedoMethods(instance) { - delete instance.undo; - delete instance.redo; - delete instance.isUndoAvailable; - delete instance.isRedoAvailable; - delete instance.clearUndo; -} - -var hook = _pluginHooks2.default.getSingleton(); - -hook.add('afterInit', init); -hook.add('afterUpdateSettings', init); - -hook.register('beforeUndo'); -hook.register('afterUndo'); -hook.register('beforeRedo'); -hook.register('afterRedo'); - -/***/ }), -/* 262 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _element = __webpack_require__(0); - -function cellDecorator(instance, TD, row, col, prop, value, cellProperties) { - if (cellProperties.className) { - if (TD.className) { - TD.className = TD.className + ' ' + cellProperties.className; - } else { - TD.className = cellProperties.className; - } - } - - if (cellProperties.readOnly) { - (0, _element.addClass)(TD, cellProperties.readOnlyCellClassName); - } - - if (cellProperties.valid === false && cellProperties.invalidCellClassName) { - (0, _element.addClass)(TD, cellProperties.invalidCellClassName); - } else { - (0, _element.removeClass)(TD, cellProperties.invalidCellClassName); - } - - if (cellProperties.wordWrap === false && cellProperties.noWordWrapClassName) { - (0, _element.addClass)(TD, cellProperties.noWordWrapClassName); - } - - if (!value && cellProperties.placeholder) { - (0, _element.addClass)(TD, cellProperties.placeholderCellClassName); - } -} /** - * Adds appropriate CSS class to table cell, based on cellProperties - */ -exports.default = cellDecorator; - -/***/ }), -/* 263 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _element = __webpack_require__(0); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _src = __webpack_require__(11); - -var _index = __webpack_require__(9); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var clonableWRAPPER = document.createElement('DIV'); -clonableWRAPPER.className = 'htAutocompleteWrapper'; - -var clonableARROW = document.createElement('DIV'); -clonableARROW.className = 'htAutocompleteArrow'; -// workaround for https://github.com/handsontable/handsontable/issues/1946 -// this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips -clonableARROW.appendChild(document.createTextNode(String.fromCharCode(9660))); - -var wrapTdContentWithWrapper = function wrapTdContentWithWrapper(TD, WRAPPER) { - WRAPPER.innerHTML = TD.innerHTML; - (0, _element.empty)(TD); - TD.appendChild(WRAPPER); -}; - -/** - * Autocomplete renderer - * - * @private - * @renderer AutocompleteRenderer - * @param {Object} instance Handsontable instance - * @param {Element} TD Table cell where to render - * @param {Number} row - * @param {Number} col - * @param {String|Number} prop Row object property name - * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!) - * @param {Object} cellProperties Cell properites (shared by cell renderer and editor) - */ -function autocompleteRenderer(instance, TD, row, col, prop, value, cellProperties) { - var WRAPPER = clonableWRAPPER.cloneNode(true); // this is faster than createElement - var ARROW = clonableARROW.cloneNode(true); // this is faster than createElement - - if (cellProperties.allowHtml) { - (0, _index.getRenderer)('html').apply(this, arguments); - } else { - (0, _index.getRenderer)('text').apply(this, arguments); - } - - TD.appendChild(ARROW); - (0, _element.addClass)(TD, 'htAutocomplete'); - - if (!TD.firstChild) { - // http://jsperf.com/empty-node-if-needed - // otherwise empty fields appear borderless in demo/renderers.html (IE) - TD.appendChild(document.createTextNode(String.fromCharCode(160))); // workaround for https://github.com/handsontable/handsontable/issues/1946 - // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips - } - - if (!instance.acArrowListener) { - var eventManager = new _eventManager2.default(instance); - - // not very elegant but easy and fast - instance.acArrowListener = function (event) { - if ((0, _element.hasClass)(event.target, 'htAutocompleteArrow')) { - instance.view.wt.getSetting('onCellDblClick', null, new _src.CellCoords(row, col), TD); - } - }; - - eventManager.addEventListener(instance.rootElement, 'mousedown', instance.acArrowListener); - - // We need to unbind the listener after the table has been destroyed - instance.addHookOnce('afterDestroy', function () { - eventManager.destroy(); - }); - } -} - -exports.default = autocompleteRenderer; - -/***/ }), -/* 264 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _element = __webpack_require__(0); - -var _string = __webpack_require__(27); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _unicode = __webpack_require__(16); - -var _function = __webpack_require__(35); - -var _event = __webpack_require__(7); - -var _index = __webpack_require__(9); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var isListeningKeyDownEvent = new WeakMap(); -var isCheckboxListenerAdded = new WeakMap(); -var BAD_VALUE_CLASS = 'htBadValue'; - -/** - * Checkbox renderer - * - * @private - * @param {Object} instance Handsontable instance - * @param {Element} TD Table cell where to render - * @param {Number} row - * @param {Number} col - * @param {String|Number} prop Row object property name - * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!) - * @param {Object} cellProperties Cell properties (shared by cell renderer and editor) - */ -function checkboxRenderer(instance, TD, row, col, prop, value, cellProperties) { - (0, _index.getRenderer)('base').apply(this, arguments); - - var eventManager = registerEvents(instance); - var input = createInput(); - var labelOptions = cellProperties.label; - var badValue = false; - - if (typeof cellProperties.checkedTemplate === 'undefined') { - cellProperties.checkedTemplate = true; - } - if (typeof cellProperties.uncheckedTemplate === 'undefined') { - cellProperties.uncheckedTemplate = false; - } - - (0, _element.empty)(TD); // TODO identify under what circumstances this line can be removed - - if (value === cellProperties.checkedTemplate || (0, _string.equalsIgnoreCase)(value, cellProperties.checkedTemplate)) { - input.checked = true; - } else if (value === cellProperties.uncheckedTemplate || (0, _string.equalsIgnoreCase)(value, cellProperties.uncheckedTemplate)) { - input.checked = false; - } else if (value === null) { - // default value - (0, _element.addClass)(input, 'noValue'); - } else { - input.style.display = 'none'; - (0, _element.addClass)(input, BAD_VALUE_CLASS); - badValue = true; - } - - input.setAttribute('data-row', row); - input.setAttribute('data-col', col); - - if (!badValue && labelOptions) { - var labelText = ''; - - if (labelOptions.value) { - labelText = typeof labelOptions.value === 'function' ? labelOptions.value.call(this, row, col, prop, value) : labelOptions.value; - } else if (labelOptions.property) { - labelText = instance.getDataAtRowProp(row, labelOptions.property); - } - var label = createLabel(labelText); - - if (labelOptions.position === 'before') { - label.appendChild(input); - } else { - label.insertBefore(input, label.firstChild); - } - input = label; - } - - TD.appendChild(input); - - if (badValue) { - TD.appendChild(document.createTextNode('#bad-value#')); - } - - if (!isListeningKeyDownEvent.has(instance)) { - isListeningKeyDownEvent.set(instance, true); - instance.addHook('beforeKeyDown', onBeforeKeyDown); - } - - /** - * On before key down DOM listener. - * - * @private - * @param {Event} event - */ - function onBeforeKeyDown(event) { - var toggleKeys = 'SPACE|ENTER'; - var switchOffKeys = 'DELETE|BACKSPACE'; - var isKeyCode = (0, _function.partial)(_unicode.isKey, event.keyCode); - - if (isKeyCode(toggleKeys + '|' + switchOffKeys) && !(0, _event.isImmediatePropagationStopped)(event)) { - eachSelectedCheckboxCell(function () { - (0, _event.stopImmediatePropagation)(event); - event.preventDefault(); - }); - } - if (isKeyCode(toggleKeys)) { - changeSelectedCheckboxesState(); - } - if (isKeyCode(switchOffKeys)) { - changeSelectedCheckboxesState(true); - } - } - - /** - * Change checkbox checked property - * - * @private - * @param {Boolean} [uncheckCheckbox=false] - */ - function changeSelectedCheckboxesState() { - var uncheckCheckbox = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - var selRange = instance.getSelectedRange(); - - if (!selRange) { - return; - } - - var topLeft = selRange.getTopLeftCorner(); - var bottomRight = selRange.getBottomRightCorner(); - var changes = []; - - for (var _row = topLeft.row; _row <= bottomRight.row; _row += 1) { - for (var _col = topLeft.col; _col <= bottomRight.col; _col += 1) { - var _cellProperties = instance.getCellMeta(_row, _col); - - if (_cellProperties.type !== 'checkbox') { - return; - } - - /* eslint-disable no-continue */ - if (_cellProperties.readOnly === true) { - continue; - } - - if (typeof _cellProperties.checkedTemplate === 'undefined') { - _cellProperties.checkedTemplate = true; - } - if (typeof _cellProperties.uncheckedTemplate === 'undefined') { - _cellProperties.uncheckedTemplate = false; - } - - var dataAtCell = instance.getDataAtCell(_row, _col); - - if (uncheckCheckbox === false) { - if (dataAtCell === _cellProperties.checkedTemplate) { - changes.push([_row, _col, _cellProperties.uncheckedTemplate]); - } else if ([_cellProperties.uncheckedTemplate, null, void 0].indexOf(dataAtCell) !== -1) { - changes.push([_row, _col, _cellProperties.checkedTemplate]); - } - } else { - changes.push([_row, _col, _cellProperties.uncheckedTemplate]); - } - } - } - - if (changes.length > 0) { - instance.setDataAtCell(changes); - } - } - - /** - * Call callback for each found selected cell with checkbox type. - * - * @private - * @param {Function} callback - */ - function eachSelectedCheckboxCell(callback) { - var selRange = instance.getSelectedRange(); - - if (!selRange) { - return; - } - var topLeft = selRange.getTopLeftCorner(); - var bottomRight = selRange.getBottomRightCorner(); - - for (var _row2 = topLeft.row; _row2 <= bottomRight.row; _row2++) { - for (var _col2 = topLeft.col; _col2 <= bottomRight.col; _col2++) { - var _cellProperties2 = instance.getCellMeta(_row2, _col2); - - if (_cellProperties2.type !== 'checkbox') { - return; - } - - var cell = instance.getCell(_row2, _col2); - - if (cell == null) { - - callback(_row2, _col2, _cellProperties2); - } else { - var checkboxes = cell.querySelectorAll('input[type=checkbox]'); - - if (checkboxes.length > 0 && !_cellProperties2.readOnly) { - callback(checkboxes); - } - } - } - } - } -} - -/** - * Register checkbox listeners. - * - * @param {Handsontable} instance Handsontable instance. - * @returns {EventManager} - */ -function registerEvents(instance) { - var eventManager = isCheckboxListenerAdded.get(instance); - - if (!eventManager) { - eventManager = new _eventManager2.default(instance); - eventManager.addEventListener(instance.rootElement, 'click', function (event) { - return onClick(event, instance); - }); - eventManager.addEventListener(instance.rootElement, 'mouseup', function (event) { - return onMouseUp(event, instance); - }); - eventManager.addEventListener(instance.rootElement, 'change', function (event) { - return onChange(event, instance); - }); - - isCheckboxListenerAdded.set(instance, eventManager); - } - - return eventManager; -} - -/** - * Create input element. - * - * @returns {Node} - */ -function createInput() { - var input = document.createElement('input'); - - input.className = 'htCheckboxRendererInput'; - input.type = 'checkbox'; - input.setAttribute('autocomplete', 'off'); - input.setAttribute('tabindex', '-1'); - - return input.cloneNode(false); -} - -/** - * Create label element. - * - * @returns {Node} - */ -function createLabel(text) { - var label = document.createElement('label'); - - label.className = 'htCheckboxRendererLabel'; - label.appendChild(document.createTextNode(text)); - - return label.cloneNode(true); -} - -/** - * `mouseup` callback. - * - * @private - * @param {Event} event `mouseup` event. - * @param {Object} instance Handsontable instance. - */ -function onMouseUp(event, instance) { - if (!isCheckboxInput(event.target)) { - return; - } - setTimeout(instance.listen, 10); -} - -/** - * `click` callback. - * - * @private - * @param {Event} event `click` event. - * @param {Object} instance Handsontable instance. - */ -function onClick(event, instance) { - if (!isCheckboxInput(event.target)) { - return false; - } - - var row = parseInt(event.target.getAttribute('data-row'), 10); - var col = parseInt(event.target.getAttribute('data-col'), 10); - var cellProperties = instance.getCellMeta(row, col); - - if (cellProperties.readOnly) { - event.preventDefault(); - } -} - -/** - * `change` callback. - * - * @param {Event} event `change` event. - * @param {Object} instance Handsontable instance. - * @param {Object} cellProperties Reference to cell properties. - * @returns {Boolean} - */ -function onChange(event, instance) { - if (!isCheckboxInput(event.target)) { - return false; - } - - var row = parseInt(event.target.getAttribute('data-row'), 10); - var col = parseInt(event.target.getAttribute('data-col'), 10); - var cellProperties = instance.getCellMeta(row, col); - - if (!cellProperties.readOnly) { - var newCheckboxValue = null; - - if (event.target.checked) { - newCheckboxValue = cellProperties.uncheckedTemplate === void 0 ? true : cellProperties.checkedTemplate; - } else { - newCheckboxValue = cellProperties.uncheckedTemplate === void 0 ? false : cellProperties.uncheckedTemplate; - } - - instance.setDataAtCell(row, col, newCheckboxValue); - } -} - -/** - * Check if the provided element is the checkbox input. - * - * @private - * @param {HTMLElement} element The element in question. - * @returns {Boolean} - */ -function isCheckboxInput(element) { - return element.tagName === 'INPUT' && element.getAttribute('type') === 'checkbox'; -} - -exports.default = checkboxRenderer; - -/***/ }), -/* 265 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _element = __webpack_require__(0); - -var _index = __webpack_require__(9); - -/** - * @private - * @renderer HtmlRenderer - * @param instance - * @param TD - * @param row - * @param col - * @param prop - * @param value - * @param cellProperties - */ -function htmlRenderer(instance, TD, row, col, prop, value, cellProperties) { - (0, _index.getRenderer)('base').apply(this, arguments); - - if (value === null || value === void 0) { - value = ''; - } - - (0, _element.fastInnerHTML)(TD, value); -} - -exports.default = htmlRenderer; - -/***/ }), -/* 266 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _numbro = __webpack_require__(87); - -var _numbro2 = _interopRequireDefault(_numbro); - -var _index = __webpack_require__(9); - -var _number = __webpack_require__(6); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Numeric cell renderer - * - * @private - * @renderer NumericRenderer - * @dependencies numbro - * @param {Object} instance Handsontable instance - * @param {Element} TD Table cell where to render - * @param {Number} row - * @param {Number} col - * @param {String|Number} prop Row object property name - * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!) - * @param {Object} cellProperties Cell properties (shared by cell renderer and editor) - */ -function numericRenderer(instance, TD, row, col, prop, value, cellProperties) { - if ((0, _number.isNumeric)(value)) { - if (typeof cellProperties.language !== 'undefined') { - _numbro2.default.culture(cellProperties.language); - } - - value = (0, _numbro2.default)(value).format(cellProperties.format || '0'); - - var className = cellProperties.className || ''; - - var classArr = className.length ? className.split(' ') : []; - - if (classArr.indexOf('htLeft') < 0 && classArr.indexOf('htCenter') < 0 && classArr.indexOf('htRight') < 0 && classArr.indexOf('htJustify') < 0) { - classArr.push('htRight'); - } - - if (classArr.indexOf('htNumeric') < 0) { - classArr.push('htNumeric'); - } - - cellProperties.className = classArr.join(' '); - } - - (0, _index.getRenderer)('text')(instance, TD, row, col, prop, value, cellProperties); -} - -exports.default = numericRenderer; - -/***/ }), -/* 267 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _element = __webpack_require__(0); - -var _index = __webpack_require__(9); - -var _number = __webpack_require__(6); - -/** - * @private - * @renderer PasswordRenderer - * @param instance - * @param TD - * @param row - * @param col - * @param prop - * @param value - * @param cellProperties - */ -function passwordRenderer(instance, TD, row, col, prop, value, cellProperties) { - (0, _index.getRenderer)('text').apply(this, arguments); - - value = TD.innerHTML; - - var hashLength = cellProperties.hashLength || value.length; - var hashSymbol = cellProperties.hashSymbol || '*'; - - var hash = ''; - - (0, _number.rangeEach)(hashLength - 1, function () { - hash += hashSymbol; - }); - (0, _element.fastInnerHTML)(TD, hash); -} - -exports.default = passwordRenderer; - -/***/ }), -/* 268 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _element = __webpack_require__(0); - -var _mixed = __webpack_require__(20); - -var _index = __webpack_require__(9); - -/** - * Default text renderer - * - * @private - * @renderer TextRenderer - * @param {Object} instance Handsontable instance - * @param {Element} TD Table cell where to render - * @param {Number} row - * @param {Number} col - * @param {String|Number} prop Row object property name - * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!) - * @param {Object} cellProperties Cell properties (shared by cell renderer and editor) - */ -function textRenderer(instance, TD, row, col, prop, value, cellProperties) { - (0, _index.getRenderer)('base').apply(this, arguments); - - if (!value && cellProperties.placeholder) { - value = cellProperties.placeholder; - } - - var escaped = (0, _mixed.stringify)(value); - - if (!instance.getSettings().trimWhitespace) { - escaped = escaped.replace(/ /g, String.fromCharCode(160)); - } - - if (cellProperties.rendererTemplate) { - (0, _element.empty)(TD); - var TEMPLATE = document.createElement('TEMPLATE'); - TEMPLATE.setAttribute('bind', '{{}}'); - TEMPLATE.innerHTML = cellProperties.rendererTemplate; - HTMLTemplateElement.decorate(TEMPLATE); - TEMPLATE.model = instance.getSourceDataAtRow(row); - TD.appendChild(TEMPLATE); - } else { - // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips - (0, _element.fastInnerText)(TD, escaped); - } -} - -exports.default = textRenderer; - -/***/ }), -/* 269 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var _element = __webpack_require__(0); - -var _browser = __webpack_require__(25); - -var _eventManager = __webpack_require__(4); - -var _eventManager2 = _interopRequireDefault(_eventManager); - -var _event = __webpack_require__(7); - -var _src = __webpack_require__(11); - -var _src2 = _interopRequireDefault(_src); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Handsontable TableView constructor - * @param {Object} instance - */ -function TableView(instance) { - var _this = this; - - var that = this; - - this.eventManager = new _eventManager2.default(instance); - this.instance = instance; - this.settings = instance.getSettings(); - this.selectionMouseDown = false; - - var originalStyle = instance.rootElement.getAttribute('style'); - - if (originalStyle) { - instance.rootElement.setAttribute('data-originalstyle', originalStyle); // needed to retrieve original style in jsFiddle link generator in HT examples. may be removed in future versions - } - - (0, _element.addClass)(instance.rootElement, 'handsontable'); - - var table = document.createElement('TABLE'); - (0, _element.addClass)(table, 'htCore'); - - if (instance.getSettings().tableClassName) { - (0, _element.addClass)(table, instance.getSettings().tableClassName); - } - this.THEAD = document.createElement('THEAD'); - table.appendChild(this.THEAD); - this.TBODY = document.createElement('TBODY'); - table.appendChild(this.TBODY); - - instance.table = table; - - instance.container.insertBefore(table, instance.container.firstChild); - - this.eventManager.addEventListener(instance.rootElement, 'mousedown', function (event) { - this.selectionMouseDown = true; - - if (!that.isTextSelectionAllowed(event.target)) { - clearTextSelection(); - event.preventDefault(); - window.focus(); // make sure that window that contains HOT is active. Important when HOT is in iframe. - } - }); - this.eventManager.addEventListener(instance.rootElement, 'mouseup', function (event) { - this.selectionMouseDown = false; - }); - this.eventManager.addEventListener(instance.rootElement, 'mousemove', function (event) { - if (this.selectionMouseDown && !that.isTextSelectionAllowed(event.target)) { - clearTextSelection(); - event.preventDefault(); - } - }); - - this.eventManager.addEventListener(document.documentElement, 'keyup', function (event) { - if (instance.selection.isInProgress() && !event.shiftKey) { - instance.selection.finish(); - } - }); - - var isMouseDown; - this.isMouseDown = function () { - return isMouseDown; - }; - - this.eventManager.addEventListener(document.documentElement, 'mouseup', function (event) { - if (instance.selection.isInProgress() && event.which === 1) { - // is left mouse button - instance.selection.finish(); - } - - isMouseDown = false; - - if ((0, _element.isOutsideInput)(document.activeElement) || !instance.selection.isSelected()) { - instance.unlisten(); - } - }); - - this.eventManager.addEventListener(document.documentElement, 'mousedown', function (event) { - var originalTarget = event.target; - var next = event.target; - var eventX = event.x || event.clientX; - var eventY = event.y || event.clientY; - - if (isMouseDown || !instance.rootElement) { - return; // it must have been started in a cell - } - - // immediate click on "holder" means click on the right side of vertical scrollbar - if (next === instance.view.wt.wtTable.holder) { - var scrollbarWidth = (0, _element.getScrollbarWidth)(); - - if (document.elementFromPoint(eventX + scrollbarWidth, eventY) !== instance.view.wt.wtTable.holder || document.elementFromPoint(eventX, eventY + scrollbarWidth) !== instance.view.wt.wtTable.holder) { - return; - } - } else { - while (next !== document.documentElement) { - if (next === null) { - if (event.isTargetWebComponent) { - break; - } - // click on something that was a row but now is detached (possibly because your click triggered a rerender) - return; - } - if (next === instance.rootElement) { - // click inside container - return; - } - next = next.parentNode; - } - } - - // function did not return until here, we have an outside click! - - var outsideClickDeselects = typeof that.settings.outsideClickDeselects === 'function' ? that.settings.outsideClickDeselects(originalTarget) : that.settings.outsideClickDeselects; - - if (outsideClickDeselects) { - instance.deselectCell(); - } else { - instance.destroyEditor(); - } - }); - - this.eventManager.addEventListener(table, 'selectstart', function (event) { - if (that.settings.fragmentSelection || (0, _element.isInput)(event.target)) { - return; - } - // https://github.com/handsontable/handsontable/issues/160 - // Prevent text from being selected when performing drag down. - event.preventDefault(); - }); - - var clearTextSelection = function clearTextSelection() { - // http://stackoverflow.com/questions/3169786/clear-text-selection-with-javascript - if (window.getSelection) { - if (window.getSelection().empty) { - // Chrome - window.getSelection().empty(); - } else if (window.getSelection().removeAllRanges) { - // Firefox - window.getSelection().removeAllRanges(); - } - } else if (document.selection) { - // IE? - document.selection.empty(); - } - }; - - var selections = [new _src.Selection({ - className: 'current', - border: { - width: 2, - color: '#5292F7', - // style: 'solid', // not used - cornerVisible: function cornerVisible() { - return that.settings.fillHandle && !that.isCellEdited() && !instance.selection.isMultiple(); - }, - multipleSelectionHandlesVisible: function multipleSelectionHandlesVisible() { - return !that.isCellEdited() && !instance.selection.isMultiple(); - } - } - }), new _src.Selection({ - className: 'area', - border: { - width: 1, - color: '#89AFF9', - // style: 'solid', // not used - cornerVisible: function cornerVisible() { - return that.settings.fillHandle && !that.isCellEdited() && instance.selection.isMultiple(); - }, - multipleSelectionHandlesVisible: function multipleSelectionHandlesVisible() { - return !that.isCellEdited() && instance.selection.isMultiple(); - } - } - }), new _src.Selection({ - className: 'highlight', - highlightHeaderClassName: that.settings.currentHeaderClassName, - highlightRowClassName: that.settings.currentRowClassName, - highlightColumnClassName: that.settings.currentColClassName - }), new _src.Selection({ - className: 'fill', - border: { - width: 1, - color: 'red' - // style: 'solid' // not used - } - })]; - selections.current = selections[0]; - selections.area = selections[1]; - selections.highlight = selections[2]; - selections.fill = selections[3]; - - var walkontableConfig = { - debug: function debug() { - return that.settings.debug; - }, - externalRowCalculator: this.instance.getPlugin('autoRowSize') && this.instance.getPlugin('autoRowSize').isEnabled(), - table: table, - preventOverflow: function preventOverflow() { - return _this.settings.preventOverflow; - }, - stretchH: function stretchH() { - return that.settings.stretchH; - }, - data: instance.getDataAtCell, - totalRows: function totalRows() { - return instance.countRows(); - }, - totalColumns: function totalColumns() { - return instance.countCols(); - }, - fixedColumnsLeft: function fixedColumnsLeft() { - return that.settings.fixedColumnsLeft; - }, - fixedRowsTop: function fixedRowsTop() { - return that.settings.fixedRowsTop; - }, - fixedRowsBottom: function fixedRowsBottom() { - return that.settings.fixedRowsBottom; - }, - minSpareRows: function minSpareRows() { - return that.settings.minSpareRows; - }, - renderAllRows: that.settings.renderAllRows, - rowHeaders: function rowHeaders() { - var headerRenderers = []; - - if (instance.hasRowHeaders()) { - headerRenderers.push(function (row, TH) { - that.appendRowHeader(row, TH); - }); - } - instance.runHooks('afterGetRowHeaderRenderers', headerRenderers); - - return headerRenderers; - }, - columnHeaders: function columnHeaders() { - var headerRenderers = []; - - if (instance.hasColHeaders()) { - headerRenderers.push(function (column, TH) { - that.appendColHeader(column, TH); - }); - } - instance.runHooks('afterGetColumnHeaderRenderers', headerRenderers); - - return headerRenderers; - }, - columnWidth: instance.getColWidth, - rowHeight: instance.getRowHeight, - cellRenderer: function cellRenderer(row, col, TD) { - var cellProperties = that.instance.getCellMeta(row, col); - var prop = that.instance.colToProp(col); - var value = that.instance.getDataAtRowProp(row, prop); - - if (that.instance.hasHook('beforeValueRender')) { - value = that.instance.runHooks('beforeValueRender', value); - } - - that.instance.runHooks('beforeRenderer', TD, row, col, prop, value, cellProperties); - that.instance.getCellRenderer(cellProperties)(that.instance, TD, row, col, prop, value, cellProperties); - that.instance.runHooks('afterRenderer', TD, row, col, prop, value, cellProperties); - }, - selections: selections, - hideBorderOnMouseDownOver: function hideBorderOnMouseDownOver() { - return that.settings.fragmentSelection; - }, - onCellMouseDown: function onCellMouseDown(event, coords, TD, wt) { - var blockCalculations = { - row: false, - column: false, - cells: false - }; - - instance.listen(); - - that.activeWt = wt; - isMouseDown = true; - - instance.runHooks('beforeOnCellMouseDown', event, coords, TD, blockCalculations); - - if ((0, _event.isImmediatePropagationStopped)(event)) { - return; - } - - var actualSelection = instance.getSelectedRange(); - var selection = instance.selection; - var selectedHeader = selection.selectedHeader; - - if (event.shiftKey && actualSelection) { - if (coords.row >= 0 && coords.col >= 0 && !blockCalculations.cells) { - selection.setSelectedHeaders(false, false); - selection.setRangeEnd(coords); - } else if ((selectedHeader.cols || selectedHeader.rows) && coords.row >= 0 && coords.col >= 0 && !blockCalculations.cells) { - selection.setSelectedHeaders(false, false); - selection.setRangeEnd(new _src.CellCoords(coords.row, coords.col)); - } else if (selectedHeader.cols && coords.row < 0 && !blockCalculations.column) { - selection.setRangeEnd(new _src.CellCoords(actualSelection.to.row, coords.col)); - } else if (selectedHeader.rows && coords.col < 0 && !blockCalculations.row) { - selection.setRangeEnd(new _src.CellCoords(coords.row, actualSelection.to.col)); - } else if ((!selectedHeader.cols && !selectedHeader.rows && coords.col < 0 || selectedHeader.cols && coords.col < 0) && !blockCalculations.row) { - selection.setSelectedHeaders(true, false); - selection.setRangeStartOnly(new _src.CellCoords(actualSelection.from.row, 0)); - selection.setRangeEnd(new _src.CellCoords(coords.row, instance.countCols() - 1)); - } else if ((!selectedHeader.cols && !selectedHeader.rows && coords.row < 0 || selectedHeader.rows && coords.row < 0) && !blockCalculations.column) { - selection.setSelectedHeaders(false, true); - selection.setRangeStartOnly(new _src.CellCoords(0, actualSelection.from.col)); - selection.setRangeEnd(new _src.CellCoords(instance.countRows() - 1, coords.col)); - } - } else { - var doNewSelection = true; - - if (actualSelection) { - var from = actualSelection.from, - to = actualSelection.to; - - var coordsNotInSelection = !selection.inInSelection(coords); - - if (coords.row < 0 && selectedHeader.cols) { - var start = Math.min(from.col, to.col); - var end = Math.max(from.col, to.col); - - doNewSelection = coords.col < start || coords.col > end; - } else if (coords.col < 0 && selectedHeader.rows) { - var _start = Math.min(from.row, to.row); - var _end = Math.max(from.row, to.row); - - doNewSelection = coords.row < _start || coords.row > _end; - } else { - doNewSelection = coordsNotInSelection; - } - } - - var rightClick = (0, _event.isRightClick)(event); - var leftClick = (0, _event.isLeftClick)(event) || event.type === 'touchstart'; - - // clicked row header and when some column was selected - if (coords.row < 0 && coords.col >= 0 && !blockCalculations.column) { - selection.setSelectedHeaders(false, true); - - if (leftClick || rightClick && doNewSelection) { - selection.setRangeStartOnly(new _src.CellCoords(0, coords.col)); - selection.setRangeEnd(new _src.CellCoords(Math.max(instance.countRows() - 1, 0), coords.col), false); - } - - // clicked column header and when some row was selected - } else if (coords.col < 0 && coords.row >= 0 && !blockCalculations.row) { - selection.setSelectedHeaders(true, false); - - if (leftClick || rightClick && doNewSelection) { - selection.setRangeStartOnly(new _src.CellCoords(coords.row, 0)); - selection.setRangeEnd(new _src.CellCoords(coords.row, Math.max(instance.countCols() - 1, 0)), false); - } - } else if (coords.col >= 0 && coords.row >= 0 && !blockCalculations.cells) { - if (leftClick || rightClick && doNewSelection) { - selection.setSelectedHeaders(false, false); - selection.setRangeStart(coords); - } - } else if (coords.col < 0 && coords.row < 0) { - coords.row = 0; - coords.col = 0; - - selection.setSelectedHeaders(false, false, true); - selection.setRangeStart(coords); - } - } - - instance.runHooks('afterOnCellMouseDown', event, coords, TD); - that.activeWt = that.wt; - }, - onCellMouseOut: function onCellMouseOut(event, coords, TD, wt) { - that.activeWt = wt; - instance.runHooks('beforeOnCellMouseOut', event, coords, TD); - - if ((0, _event.isImmediatePropagationStopped)(event)) { - return; - } - - instance.runHooks('afterOnCellMouseOut', event, coords, TD); - that.activeWt = that.wt; - }, - onCellMouseOver: function onCellMouseOver(event, coords, TD, wt) { - var blockCalculations = { - row: false, - column: false, - cell: false - }; - - that.activeWt = wt; - instance.runHooks('beforeOnCellMouseOver', event, coords, TD, blockCalculations); - - if ((0, _event.isImmediatePropagationStopped)(event)) { - return; - } - - if (event.button === 0 && isMouseDown) { - if (coords.row >= 0 && coords.col >= 0) { - // is not a header - if (instance.selection.selectedHeader.cols && !blockCalculations.column) { - instance.selection.setRangeEnd(new _src.CellCoords(instance.countRows() - 1, coords.col), false); - } else if (instance.selection.selectedHeader.rows && !blockCalculations.row) { - instance.selection.setRangeEnd(new _src.CellCoords(coords.row, instance.countCols() - 1), false); - } else if (!blockCalculations.cell) { - instance.selection.setRangeEnd(coords); - } - } else { - /* eslint-disable no-lonely-if */ - if (instance.selection.selectedHeader.cols && !blockCalculations.column) { - instance.selection.setRangeEnd(new _src.CellCoords(instance.countRows() - 1, coords.col), false); - } else if (instance.selection.selectedHeader.rows && !blockCalculations.row) { - instance.selection.setRangeEnd(new _src.CellCoords(coords.row, instance.countCols() - 1), false); - } else if (!blockCalculations.cell) { - instance.selection.setRangeEnd(coords); - } - } - } - - instance.runHooks('afterOnCellMouseOver', event, coords, TD); - that.activeWt = that.wt; - }, - onCellMouseUp: function onCellMouseUp(event, coords, TD, wt) { - that.activeWt = wt; - instance.runHooks('beforeOnCellMouseUp', event, coords, TD); - - instance.runHooks('afterOnCellMouseUp', event, coords, TD); - that.activeWt = that.wt; - }, - onCellCornerMouseDown: function onCellCornerMouseDown(event) { - event.preventDefault(); - instance.runHooks('afterOnCellCornerMouseDown', event); - }, - onCellCornerDblClick: function onCellCornerDblClick(event) { - event.preventDefault(); - instance.runHooks('afterOnCellCornerDblClick', event); - }, - beforeDraw: function beforeDraw(force, skipRender) { - that.beforeRender(force, skipRender); - }, - onDraw: function onDraw(force) { - that.onDraw(force); - }, - onScrollVertically: function onScrollVertically() { - instance.runHooks('afterScrollVertically'); - }, - onScrollHorizontally: function onScrollHorizontally() { - instance.runHooks('afterScrollHorizontally'); - }, - onBeforeDrawBorders: function onBeforeDrawBorders(corners, borderClassName) { - instance.runHooks('beforeDrawBorders', corners, borderClassName); - }, - onBeforeTouchScroll: function onBeforeTouchScroll() { - instance.runHooks('beforeTouchScroll'); - }, - onAfterMomentumScroll: function onAfterMomentumScroll() { - instance.runHooks('afterMomentumScroll'); - }, - onBeforeStretchingColumnWidth: function onBeforeStretchingColumnWidth(stretchedWidth, column) { - return instance.runHooks('beforeStretchingColumnWidth', stretchedWidth, column); - }, - onModifyRowHeaderWidth: function onModifyRowHeaderWidth(rowHeaderWidth) { - return instance.runHooks('modifyRowHeaderWidth', rowHeaderWidth); - }, - viewportRowCalculatorOverride: function viewportRowCalculatorOverride(calc) { - var rows = instance.countRows(); - var viewportOffset = that.settings.viewportRowRenderingOffset; - - if (viewportOffset === 'auto' && that.settings.fixedRowsTop) { - viewportOffset = 10; - } - if (typeof viewportOffset === 'number') { - calc.startRow = Math.max(calc.startRow - viewportOffset, 0); - calc.endRow = Math.min(calc.endRow + viewportOffset, rows - 1); - } - if (viewportOffset === 'auto') { - var center = calc.startRow + calc.endRow - calc.startRow; - var offset = Math.ceil(center / rows * 12); - - calc.startRow = Math.max(calc.startRow - offset, 0); - calc.endRow = Math.min(calc.endRow + offset, rows - 1); - } - instance.runHooks('afterViewportRowCalculatorOverride', calc); - }, - viewportColumnCalculatorOverride: function viewportColumnCalculatorOverride(calc) { - var cols = instance.countCols(); - var viewportOffset = that.settings.viewportColumnRenderingOffset; - - if (viewportOffset === 'auto' && that.settings.fixedColumnsLeft) { - viewportOffset = 10; - } - if (typeof viewportOffset === 'number') { - calc.startColumn = Math.max(calc.startColumn - viewportOffset, 0); - calc.endColumn = Math.min(calc.endColumn + viewportOffset, cols - 1); - } - if (viewportOffset === 'auto') { - var center = calc.startColumn + calc.endColumn - calc.startColumn; - var offset = Math.ceil(center / cols * 12); - - calc.startRow = Math.max(calc.startColumn - offset, 0); - calc.endColumn = Math.min(calc.endColumn + offset, cols - 1); - } - instance.runHooks('afterViewportColumnCalculatorOverride', calc); - }, - rowHeaderWidth: function rowHeaderWidth() { - return that.settings.rowHeaderWidth; - }, - columnHeaderHeight: function columnHeaderHeight() { - var columnHeaderHeight = instance.runHooks('modifyColumnHeaderHeight'); - return that.settings.columnHeaderHeight || columnHeaderHeight; - } - }; - - instance.runHooks('beforeInitWalkontable', walkontableConfig); - - this.wt = new _src2.default(walkontableConfig); - this.activeWt = this.wt; - - if (!(0, _browser.isChrome)() && !(0, _browser.isSafari)()) { - this.eventManager.addEventListener(instance.rootElement, 'wheel', function (event) { - event.preventDefault(); - - var lineHeight = parseInt((0, _element.getComputedStyle)(document.body)['font-size'], 10); - var holder = that.wt.wtOverlays.scrollableElement; - - var deltaY = event.wheelDeltaY || event.deltaY; - var deltaX = event.wheelDeltaX || event.deltaX; - - switch (event.deltaMode) { - case 0: - holder.scrollLeft += deltaX; - holder.scrollTop += deltaY; - break; - - case 1: - holder.scrollLeft += deltaX * lineHeight; - holder.scrollTop += deltaY * lineHeight; - break; - - default: - break; - } - }); - } - - this.eventManager.addEventListener(that.wt.wtTable.spreader, 'mousedown', function (event) { - // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar - if (event.target === that.wt.wtTable.spreader && event.which === 3) { - (0, _event.stopPropagation)(event); - } - }); - - this.eventManager.addEventListener(that.wt.wtTable.spreader, 'contextmenu', function (event) { - // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar - if (event.target === that.wt.wtTable.spreader && event.which === 3) { - (0, _event.stopPropagation)(event); - } - }); - - this.eventManager.addEventListener(document.documentElement, 'click', function () { - if (that.settings.observeDOMVisibility) { - if (that.wt.drawInterrupted) { - that.instance.forceFullRender = true; - that.render(); - } - } - }); -} - -TableView.prototype.isTextSelectionAllowed = function (el) { - if ((0, _element.isInput)(el)) { - return true; - } - var isChildOfTableBody = (0, _element.isChildOf)(el, this.instance.view.wt.wtTable.spreader); - - if (this.settings.fragmentSelection === true && isChildOfTableBody) { - return true; - } - if (this.settings.fragmentSelection === 'cell' && this.isSelectedOnlyCell() && isChildOfTableBody) { - return true; - } - if (!this.settings.fragmentSelection && this.isCellEdited() && this.isSelectedOnlyCell()) { - return true; - } - - return false; -}; - -/** - * Check if selected only one cell. - * - * @returns {Boolean} - */ -TableView.prototype.isSelectedOnlyCell = function () { - var _ref = this.instance.getSelected() || [], - _ref2 = _slicedToArray(_ref, 4), - row = _ref2[0], - col = _ref2[1], - rowEnd = _ref2[2], - colEnd = _ref2[3]; - - return row !== void 0 && row === rowEnd && col === colEnd; -}; - -TableView.prototype.isCellEdited = function () { - var activeEditor = this.instance.getActiveEditor(); - - return activeEditor && activeEditor.isOpened(); -}; - -TableView.prototype.beforeRender = function (force, skipRender) { - if (force) { - // this.instance.forceFullRender = did Handsontable request full render? - this.instance.runHooks('beforeRender', this.instance.forceFullRender, skipRender); - } -}; - -TableView.prototype.onDraw = function (force) { - if (force) { - // this.instance.forceFullRender = did Handsontable request full render? - this.instance.runHooks('afterRender', this.instance.forceFullRender); - } -}; - -TableView.prototype.render = function () { - this.wt.draw(!this.instance.forceFullRender); - this.instance.forceFullRender = false; - this.instance.renderCall = false; -}; - -/** - * Returns td object given coordinates - * - * @param {CellCoords} coords - * @param {Boolean} topmost - */ -TableView.prototype.getCellAtCoords = function (coords, topmost) { - var td = this.wt.getCell(coords, topmost); - - if (td < 0) { - // there was an exit code (cell is out of bounds) - return null; - } - - return td; -}; - -/** - * Scroll viewport to selection. - * - * @param {CellCoords} coords - */ -TableView.prototype.scrollViewport = function (coords) { - this.wt.scrollViewport(coords); -}; - -/** - * Append row header to a TH element - * @param row - * @param TH - */ -TableView.prototype.appendRowHeader = function (row, TH) { - if (TH.firstChild) { - var container = TH.firstChild; - - if (!(0, _element.hasClass)(container, 'relative')) { - (0, _element.empty)(TH); - this.appendRowHeader(row, TH); - - return; - } - this.updateCellHeader(container.querySelector('.rowHeader'), row, this.instance.getRowHeader); - } else { - var div = document.createElement('div'); - var span = document.createElement('span'); - - div.className = 'relative'; - span.className = 'rowHeader'; - this.updateCellHeader(span, row, this.instance.getRowHeader); - - div.appendChild(span); - TH.appendChild(div); - } - - this.instance.runHooks('afterGetRowHeader', row, TH); -}; - -/** - * Append column header to a TH element - * @param col - * @param TH - */ -TableView.prototype.appendColHeader = function (col, TH) { - if (TH.firstChild) { - var container = TH.firstChild; - - if ((0, _element.hasClass)(container, 'relative')) { - this.updateCellHeader(container.querySelector('.colHeader'), col, this.instance.getColHeader); - } else { - (0, _element.empty)(TH); - this.appendColHeader(col, TH); - } - } else { - var div = document.createElement('div'); - var span = document.createElement('span'); - - div.className = 'relative'; - span.className = 'colHeader'; - this.updateCellHeader(span, col, this.instance.getColHeader); - - div.appendChild(span); - TH.appendChild(div); - } - - this.instance.runHooks('afterGetColHeader', col, TH); -}; - -/** - * Update header cell content - * - * @since 0.15.0-beta4 - * @param {HTMLElement} element Element to update - * @param {Number} index Row index or column index - * @param {Function} content Function which should be returns content for this cell - */ -TableView.prototype.updateCellHeader = function (element, index, content) { - var renderedIndex = index; - var parentOverlay = this.wt.wtOverlays.getParentOverlay(element) || this.wt; - - // prevent wrong calculations from SampleGenerator - if (element.parentNode) { - if ((0, _element.hasClass)(element, 'colHeader')) { - renderedIndex = parentOverlay.wtTable.columnFilter.sourceToRendered(index); - } else if ((0, _element.hasClass)(element, 'rowHeader')) { - renderedIndex = parentOverlay.wtTable.rowFilter.sourceToRendered(index); - } - } - - if (renderedIndex > -1) { - (0, _element.fastInnerHTML)(element, content(index)); - } else { - // workaround for https://github.com/handsontable/handsontable/issues/1946 - (0, _element.fastInnerText)(element, String.fromCharCode(160)); - (0, _element.addClass)(element, 'cornerHeader'); - } -}; - -/** - * Given a element's left position relative to the viewport, returns maximum element width until the right - * edge of the viewport (before scrollbar) - * - * @param {Number} leftOffset - * @return {Number} - */ -TableView.prototype.maximumVisibleElementWidth = function (leftOffset) { - var workspaceWidth = this.wt.wtViewport.getWorkspaceWidth(); - var maxWidth = workspaceWidth - leftOffset; - return maxWidth > 0 ? maxWidth : 0; -}; - -/** - * Given a element's top position relative to the viewport, returns maximum element height until the bottom - * edge of the viewport (before scrollbar) - * - * @param {Number} topOffset - * @return {Number} - */ -TableView.prototype.maximumVisibleElementHeight = function (topOffset) { - var workspaceHeight = this.wt.wtViewport.getWorkspaceHeight(); - var maxHeight = workspaceHeight - topOffset; - return maxHeight > 0 ? maxHeight : 0; -}; - -TableView.prototype.mainViewIsActive = function () { - return this.wt === this.activeWt; -}; - -TableView.prototype.destroy = function () { - this.wt.destroy(); - this.eventManager.destroy(); -}; - -exports.default = TableView; - -/***/ }), -/* 270 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * Refactored implementation of LinkedList (part of javascript-algorithms project) by Github users: - * mgechev, AndriiHeonia, Microfed and Jakeh (part of javascript-algorithms project - all project contributors - * at repository website) - * - * Link to repository: https://github.com/mgechev/javascript-algorithms - */ - -/** - * Linked list node. - * - * @class NodeStructure - * @util - */ -var NodeStructure = function NodeStructure(data) { - _classCallCheck(this, NodeStructure); - - /** - * Data of the node. - * @member {Object} - */ - this.data = data; - /** - * Next node. - * @member {NodeStructure} - */ - this.next = null; - /** - * Previous node. - * @member {NodeStructure} - */ - this.prev = null; -}; - -/** - * Linked list. - * - * @class LinkedList - * @util - */ - - -var LinkedList = function () { - function LinkedList() { - _classCallCheck(this, LinkedList); - - this.first = null; - this.last = null; - } - - /** - * Add data to the end of linked list. - * - * @param {Object} data Data which should be added. - */ - - - _createClass(LinkedList, [{ - key: "push", - value: function push(data) { - var node = new NodeStructure(data); - - if (this.first === null) { - this.first = node; - this.last = node; - } else { - var temp = this.last; - - this.last = node; - node.prev = temp; - temp.next = node; - } - } - - /** - * Add data to the beginning of linked list. - * - * @param {Object} data Data which should be added. - */ - - }, { - key: "unshift", - value: function unshift(data) { - var node = new NodeStructure(data); - - if (this.first === null) { - this.first = node; - this.last = node; - } else { - var temp = this.first; - - this.first = node; - node.next = temp; - temp.prev = node; - } - } - - /** - * In order traversal of the linked list. - * - * @param {Function} callback Callback which should be executed on each node. - */ - - }, { - key: "inorder", - value: function inorder(callback) { - var temp = this.first; - - while (temp) { - callback(temp); - temp = temp.next; - } - } - - /** - * Remove data from the linked list. - * - * @param {Object} data Data which should be removed. - * @returns {Boolean} Returns true if data has been removed. - */ - - }, { - key: "remove", - value: function remove(data) { - if (this.first === null) { - return false; - } - - var temp = this.first; - var next = void 0; - var prev = void 0; - - while (temp) { - if (temp.data === data) { - next = temp.next; - prev = temp.prev; - - if (next) { - next.prev = prev; - } - - if (prev) { - prev.next = next; - } - - if (temp === this.first) { - this.first = next; - } - - if (temp === this.last) { - this.last = prev; - } - - return true; - } - - temp = temp.next; - } - - return false; - } - - /** - * Check if linked list contains cycle. - * - * @returns {Boolean} Returns true if linked list contains cycle. - */ - - }, { - key: "hasCycle", - value: function hasCycle() { - var fast = this.first; - var slow = this.first; - - while (true) { - if (fast === null) { - return false; - } - - fast = fast.next; - - if (fast === null) { - return false; - } - - fast = fast.next; - slow = slow.next; - - if (fast === slow) { - return true; - } - } - } - }, { - key: "pop", - - - /** - * Return last node from the linked list. - * - * @returns {NodeStructure} Last node. - */ - value: function pop() { - if (this.last === null) { - return null; - } - - var temp = this.last; - this.last = this.last.prev; - - return temp; - } - }, { - key: "shift", - - - /** - * Return first node from the linked list. - * - * @returns {NodeStructure} First node. - */ - value: function shift() { - if (this.first === null) { - return null; - } - - var temp = this.first; - this.first = this.first.next; - - return temp; - } - }, { - key: "recursiveReverse", - - - /** - * Reverses the linked list recursively - */ - value: function recursiveReverse() { - function inverse(current, next) { - if (!next) { - return; - } - inverse(next, next.next); - next.next = current; - } - - if (!this.first) { - return; - } - - inverse(this.first, this.first.next); - - this.first.next = null; - var temp = this.first; - this.first = this.last; - this.last = temp; - } - }, { - key: "reverse", - - - /** - * Reverses the linked list iteratively - */ - value: function reverse() { - if (!this.first || !this.first.next) { - return; - } - - var current = this.first.next; - var prev = this.first; - var temp = void 0; - - while (current) { - temp = current.next; - current.next = prev; - prev.prev = current; - prev = current; - current = temp; - } - - this.first.next = null; - this.last.prev = null; - temp = this.first; - this.first = prev; - this.last = temp; - } - }]); - - return LinkedList; -}(); - -; - -exports.NodeStructure = NodeStructure; -exports.default = LinkedList; - -/***/ }), -/* 271 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -exports.parseDelay = parseDelay; - -var _feature = __webpack_require__(34); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * @class Interval - * @util - */ -var Interval = function () { - _createClass(Interval, null, [{ - key: 'create', - value: function create(func, delay) { - return new Interval(func, delay); - } - }]); - - function Interval(func, delay) { - var _this = this; - - _classCallCheck(this, Interval); - - /** - * Animation frame request id. - * - * @type {Number} - */ - this.timer = null; - /** - * Function to invoke repeatedly. - * - * @type {Function} - */ - this.func = func; - /** - * Number of milliseconds that function should wait before next call. - */ - this.delay = parseDelay(delay); - /** - * Flag which indicates if interval object was stopped. - * - * @type {Boolean} - * @default true - */ - this.stopped = true; - /** - * Interval time (in milliseconds) of the last callback call. - * - * @private - * @type {Number} - */ - this._then = null; - /** - * Bounded function `func`. - * - * @private - * @type {Function} - */ - this._callback = function () { - return _this.__callback(); - }; - } - - /** - * Start loop. - * - * @returns {Interval} - */ - - - _createClass(Interval, [{ - key: 'start', - value: function start() { - if (this.stopped) { - this._then = Date.now(); - this.stopped = false; - this.timer = (0, _feature.requestAnimationFrame)(this._callback); - } - - return this; - } - - /** - * Stop looping. - * - * @returns {Interval} - */ - - }, { - key: 'stop', - value: function stop() { - if (!this.stopped) { - this.stopped = true; - (0, _feature.cancelAnimationFrame)(this.timer); - this.timer = null; - } - - return this; - } - - /** - * Loop callback, fired on every animation frame. - * - * @private - */ - - }, { - key: '__callback', - value: function __callback() { - this.timer = (0, _feature.requestAnimationFrame)(this._callback); - - if (this.delay) { - var now = Date.now(); - var elapsed = now - this._then; - - if (elapsed > this.delay) { - this._then = now - elapsed % this.delay; - this.func(); - } - } else { - this.func(); - } - } - }]); - - return Interval; -}(); - -exports.default = Interval; -function parseDelay(delay) { - if (typeof delay === 'string' && /fps$/.test(delay)) { - delay = 1000 / parseInt(delay.replace('fps', '') || 0, 10); - } - - return delay; -} - -/***/ }), -/* 272 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = mergeSort; -exports.merge = merge; - -var _linkedList = __webpack_require__(270); - -var _linkedList2 = _interopRequireDefault(_linkedList); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Refactored implementation of mergeSort (part of javascript-algorithms project) by Github users: - * mgechev, AndriiHeonia and lekkas (part of javascript-algorithms project - all project contributors - * at repository website) - * - * Link to repository: https://github.com/mgechev/javascript-algorithms - */ - -/** - * Specifies a function that defines the sort order. The array is sorted according to each - * character's Unicode code point value, according to the string conversion of each element. - * - * @param a {*} first compared element. - * @param b {*} second compared element. - * @returns {Number} - */ -var defaultCompareFunction = function defaultCompareFunction(a, b) { - // sort lexically - - var firstValue = a.toString(); - var secondValue = b.toString(); - - if (firstValue === secondValue) { - return 0; - } else if (firstValue < secondValue) { - return -1; - } - return 1; -}; - -/** - * Mergesort method which is recursively called for sorting the input array. - * - * @param {Array} array The array which should be sorted. - * @param {Function} compareFunction Compares two items in an array. If compareFunction is not supplied, - * elements are sorted by converting them to strings and comparing strings in Unicode code point order. - * @param {Number} startIndex Left side of the subarray. - * @param {Number} endIndex Right side of the subarray. - * @returns {Array} Array with sorted subarray. - */ -function mergeSort(array) { - var compareFunction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultCompareFunction; - var startIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var endIndex = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : array.length; - - if (Math.abs(endIndex - startIndex) <= 1) { - return []; - } - - var middleIndex = Math.ceil((startIndex + endIndex) / 2); - - mergeSort(array, compareFunction, startIndex, middleIndex); - mergeSort(array, compareFunction, middleIndex, endIndex); - - return merge(array, compareFunction, startIndex, middleIndex, endIndex); -} - -/** - * Devides and sort merges two subarrays of given array - * - * @param {Array} array The array which subarrays should be sorted. - * @param {Number} startIndex The start of the first subarray. - * This subarray is with end middle - 1. - * @param {Number} middleIndex The start of the second array. - * @param {Number} endIndex end - 1 is the end of the second array. - * @returns {Array} The array with sorted subarray. - */ -function merge(array, compareFunction, startIndex, middleIndex, endIndex) { - var leftElements = new _linkedList2.default(); - var rightElements = new _linkedList2.default(); - var leftSize = middleIndex - startIndex; - var rightSize = endIndex - middleIndex; - var maxSize = Math.max(leftSize, rightSize); - var size = endIndex - startIndex; - - for (var _i = 0; _i < maxSize; _i += 1) { - if (_i < leftSize) { - leftElements.push(array[startIndex + _i]); - } - - if (_i < rightSize) { - rightElements.push(array[middleIndex + _i]); - } - } - - var i = 0; - - while (i < size) { - if (leftElements.first && rightElements.first) { - if (compareFunction(leftElements.first.data, rightElements.first.data) > 0) { - array[startIndex + i] = rightElements.shift().data; - } else { - array[startIndex + i] = leftElements.shift().data; - } - } else if (leftElements.first) { - - array[startIndex + i] = leftElements.shift().data; - } else { - - array[startIndex + i] = rightElements.shift().data; - } - - i += 1; - } - - return array; -}; - -/***/ }), -/* 273 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = autocompleteValidator; -/** - * Autocomplete cell validator. - * - * @private - * @validator AutocompleteValidator - * @param {*} value - Value of edited cell - * @param {Function} callback - Callback called with validation result - */ -function autocompleteValidator(value, callback) { - if (value == null) { - value = ''; - } - - if (this.allowEmpty && value === '') { - callback(true); - - return; - } - - if (this.strict && this.source) { - if (typeof this.source === 'function') { - this.source(value, process(value, callback)); - } else { - process(value, callback)(this.source); - } - } else { - callback(true); - } -}; - -/** - * Function responsible for validation of autocomplete value. - * - * @param {*} value - Value of edited cell - * @param {Function} callback - Callback called with validation result - */ -function process(value, callback) { - var originalVal = value; - - return function (source) { - var found = false; - - for (var s = 0, slen = source.length; s < slen; s++) { - if (originalVal === source[s]) { - found = true; // perfect match - break; - } - } - - callback(found); - }; -} - -/***/ }), -/* 274 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = dateValidator; -exports.correctFormat = correctFormat; - -var _moment = __webpack_require__(61); - -var _moment2 = _interopRequireDefault(_moment); - -var _date = __webpack_require__(89); - -var _editors = __webpack_require__(14); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Date cell validator - * - * @private - * @validator DateValidator - * @dependencies moment - * @param {*} value - Value of edited cell - * @param {Function} callback - Callback called with validation result - */ -function dateValidator(value, callback) { - var valid = true; - var dateEditor = (0, _editors.getEditorInstance)('date', this.instance); - - if (value == null) { - value = ''; - } - var isValidDate = (0, _moment2.default)(new Date(value)).isValid() || (0, _moment2.default)(value, dateEditor.defaultDateFormat).isValid(); - // is it in the specified format - var isValidFormat = (0, _moment2.default)(value, this.dateFormat || dateEditor.defaultDateFormat, true).isValid(); - - if (this.allowEmpty && value === '') { - isValidDate = true; - isValidFormat = true; - } - if (!isValidDate) { - valid = false; - } - if (!isValidDate && isValidFormat) { - valid = true; - } - - if (isValidDate && !isValidFormat) { - if (this.correctFormat === true) { - // if format correction is enabled - var correctedValue = correctFormat(value, this.dateFormat); - var row = this.instance.runHooks('unmodifyRow', this.row); - var column = this.instance.runHooks('unmodifyCol', this.col); - - this.instance.setDataAtCell(row, column, correctedValue, 'dateValidator'); - valid = true; - } else { - valid = false; - } - } - - callback(valid); -}; - -/** - * Format the given string using moment.js' format feature - * - * @param {String} value - * @param {String} dateFormat - * @returns {String} - */ -function correctFormat(value, dateFormat) { - var dateFromDate = (0, _moment2.default)((0, _date.getNormalizedDate)(value)); - var dateFromMoment = (0, _moment2.default)(value, dateFormat); - var isAlphanumeric = value.search(/[A-z]/g) > -1; - var date = void 0; - - if (dateFromDate.isValid() && dateFromDate.format('x') === dateFromMoment.format('x') || !dateFromMoment.isValid() || isAlphanumeric) { - date = dateFromDate; - } else { - date = dateFromMoment; - } - - return date.format(dateFormat); -}; - -/***/ }), -/* 275 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = numericValidator; -/** - * Numeric cell validator - * - * @private - * @validator NumericValidator - * @param {*} value - Value of edited cell - * @param {*} callback - Callback called with validation result - */ -function numericValidator(value, callback) { - if (value == null) { - value = ''; - } - if (this.allowEmpty && value === '') { - callback(true); - } else if (value === '') { - callback(false); - } else { - callback(/^-?\d*(\.|,)?\d*$/.test(value)); - } -}; - -/***/ }), -/* 276 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.__esModule = true; -exports.default = timeValidator; - -var _moment = __webpack_require__(61); - -var _moment2 = _interopRequireDefault(_moment); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// Formats which are correctly parsed to time (supported by momentjs) -var STRICT_FORMATS = ['YYYY-MM-DDTHH:mm:ss.SSSZ', 'X', // Unix timestamp -'x' // Unix ms timestamp -]; - -/** - * Time cell validator - * - * @private - * @validator TimeValidator - * @dependencies moment - * @param {*} value - Value of edited cell - * @param {Function} callback - Callback called with validation result - */ -function timeValidator(value, callback) { - var valid = true; - var timeFormat = this.timeFormat || 'h:mm:ss a'; - - if (value === null) { - value = ''; - } - - value = /^\d{3,}$/.test(value) ? parseInt(value, 10) : value; - - var twoDigitValue = /^\d{1,2}$/.test(value); - - if (twoDigitValue) { - value += ':00'; - } - - var date = (0, _moment2.default)(value, STRICT_FORMATS, true).isValid() ? (0, _moment2.default)(value) : (0, _moment2.default)(value, timeFormat); - var isValidTime = date.isValid(); - - // is it in the specified format - var isValidFormat = (0, _moment2.default)(value, timeFormat, true).isValid() && !twoDigitValue; - - if (this.allowEmpty && value === '') { - isValidTime = true; - isValidFormat = true; - } - if (!isValidTime) { - valid = false; - } - if (!isValidTime && isValidFormat) { - valid = true; - } - if (isValidTime && !isValidFormat) { - if (this.correctFormat === true) { - // if format correction is enabled - var correctedValue = date.format(timeFormat); - var row = this.instance.runHooks('unmodifyRow', this.row); - var column = this.instance.runHooks('unmodifyCol', this.col); - - this.instance.setDataAtCell(row, column, correctedValue, 'timeValidator'); - valid = true; - } else { - valid = false; - } - } - - callback(valid); -}; - -/***/ }), -/* 277 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) - -var toObject = __webpack_require__(41) - , toIndex = __webpack_require__(59) - , toLength = __webpack_require__(24); - -module.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){ - var O = toObject(this) - , len = toLength(O.length) - , to = toIndex(target, len) - , from = toIndex(start, len) - , end = arguments.length > 2 ? arguments[2] : undefined - , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to) - , inc = 1; - if(from < to && to < from + count){ - inc = -1; - from += count - 1; - to += count - 1; - } - while(count-- > 0){ - if(from in O)O[to] = O[from]; - else delete O[to]; - to += inc; - from += inc; - } return O; -}; - -/***/ }), -/* 278 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) - -var toObject = __webpack_require__(41) - , toIndex = __webpack_require__(59) - , toLength = __webpack_require__(24); -module.exports = function fill(value /*, start = 0, end = @length */){ - var O = toObject(this) - , length = toLength(O.length) - , aLen = arguments.length - , index = toIndex(aLen > 1 ? arguments[1] : undefined, length) - , end = aLen > 2 ? arguments[2] : undefined - , endPos = end === undefined ? length : toIndex(end, length); - while(endPos > index)O[index++] = value; - return O; -}; - -/***/ }), -/* 279 */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(15) - , isArray = __webpack_require__(162) - , SPECIES = __webpack_require__(10)('species'); - -module.exports = function(original){ - var C; - if(isArray(original)){ - C = original.constructor; - // cross-realm fallback - if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined; - if(isObject(C)){ - C = C[SPECIES]; - if(C === null)C = undefined; - } - } return C === undefined ? Array : C; -}; - -/***/ }), -/* 280 */ -/***/ (function(module, exports, __webpack_require__) { - -// 9.4.2.3 ArraySpeciesCreate(originalArray, length) -var speciesConstructor = __webpack_require__(279); - -module.exports = function(original, length){ - return new (speciesConstructor(original))(length); -}; - -/***/ }), -/* 281 */ -/***/ (function(module, exports, __webpack_require__) { - -// all enumerable object keys, includes symbols -var getKeys = __webpack_require__(39) - , gOPS = __webpack_require__(57) - , pIE = __webpack_require__(47); -module.exports = function(it){ - var result = getKeys(it) - , getSymbols = gOPS.f; - if(getSymbols){ - var symbols = getSymbols(it) - , isEnum = pIE.f - , i = 0 - , key; - while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key); - } return result; -}; - -/***/ }), -/* 282 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// 21.2.5.3 get RegExp.prototype.flags -var anObject = __webpack_require__(18); -module.exports = function(){ - var that = anObject(this) - , result = ''; - if(that.global) result += 'g'; - if(that.ignoreCase) result += 'i'; - if(that.multiline) result += 'm'; - if(that.unicode) result += 'u'; - if(that.sticky) result += 'y'; - return result; -}; - -/***/ }), -/* 283 */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(15) - , setPrototypeOf = __webpack_require__(171).set; -module.exports = function(that, target, C){ - var P, S = target.constructor; - if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){ - setPrototypeOf(that, P); - } return that; -}; - -/***/ }), -/* 284 */ -/***/ (function(module, exports) { - -// fast apply, http://jsperf.lnkit.com/fast-apply/5 -module.exports = function(fn, args, that){ - var un = that === undefined; - switch(args.length){ - case 0: return un ? fn() - : fn.call(that); - case 1: return un ? fn(args[0]) - : fn.call(that, args[0]); - case 2: return un ? fn(args[0], args[1]) - : fn.call(that, args[0], args[1]); - case 3: return un ? fn(args[0], args[1], args[2]) - : fn.call(that, args[0], args[1], args[2]); - case 4: return un ? fn(args[0], args[1], args[2], args[3]) - : fn.call(that, args[0], args[1], args[2], args[3]); - } return fn.apply(that, args); -}; - -/***/ }), -/* 285 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var create = __webpack_require__(79) - , descriptor = __webpack_require__(40) - , setToStringTag = __webpack_require__(48) - , IteratorPrototype = {}; - -// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -__webpack_require__(32)(IteratorPrototype, __webpack_require__(10)('iterator'), function(){ return this; }); - -module.exports = function(Constructor, NAME, next){ - Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)}); - setToStringTag(Constructor, NAME + ' Iterator'); -}; - -/***/ }), -/* 286 */ -/***/ (function(module, exports, __webpack_require__) { - -var getKeys = __webpack_require__(39) - , toIObject = __webpack_require__(23); -module.exports = function(object, el){ - var O = toIObject(object) - , keys = getKeys(O) - , length = keys.length - , index = 0 - , key; - while(length > index)if(O[key = keys[index++]] === el)return key; -}; - -/***/ }), -/* 287 */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(13) - , macrotask = __webpack_require__(85).set - , Observer = global.MutationObserver || global.WebKitMutationObserver - , process = global.process - , Promise = global.Promise - , isNode = __webpack_require__(38)(process) == 'process'; - -module.exports = function(){ - var head, last, notify; - - var flush = function(){ - var parent, fn; - if(isNode && (parent = process.domain))parent.exit(); - while(head){ - fn = head.fn; - head = head.next; - try { - fn(); - } catch(e){ - if(head)notify(); - else last = undefined; - throw e; - } - } last = undefined; - if(parent)parent.enter(); - }; - - // Node.js - if(isNode){ - notify = function(){ - process.nextTick(flush); - }; - // browsers with MutationObserver - } else if(Observer){ - var toggle = true - , node = document.createTextNode(''); - new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new - notify = function(){ - node.data = toggle = !toggle; - }; - // environments with maybe non-completely correct, but existent Promise - } else if(Promise && Promise.resolve){ - var promise = Promise.resolve(); - notify = function(){ - promise.then(flush); - }; - // for other environments - macrotask based on: - // - setImmediate - // - MessageChannel - // - window.postMessag - // - onreadystatechange - // - setTimeout - } else { - notify = function(){ - // strange IE + webpack dev server bug - use .call(global) - macrotask.call(global, flush); - }; - } - - return function(fn){ - var task = {fn: fn, next: undefined}; - if(last)last.next = task; - if(!head){ - head = task; - notify(); - } last = task; - }; -}; - -/***/ }), -/* 288 */ -/***/ (function(module, exports, __webpack_require__) { - -var dP = __webpack_require__(19) - , anObject = __webpack_require__(18) - , getKeys = __webpack_require__(39); - -module.exports = __webpack_require__(21) ? Object.defineProperties : function defineProperties(O, Properties){ - anObject(O); - var keys = getKeys(Properties) - , length = keys.length - , i = 0 - , P; - while(length > i)dP.f(O, P = keys[i++], Properties[P]); - return O; -}; - -/***/ }), -/* 289 */ -/***/ (function(module, exports, __webpack_require__) { - -// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window -var toIObject = __webpack_require__(23) - , gOPN = __webpack_require__(81).f - , toString = {}.toString; - -var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames - ? Object.getOwnPropertyNames(window) : []; - -var getWindowNames = function(it){ - try { - return gOPN(it); - } catch(e){ - return windowNames.slice(); - } -}; - -module.exports.f = function getOwnPropertyNames(it){ - return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); -}; - - -/***/ }), -/* 290 */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) -var has = __webpack_require__(22) - , toObject = __webpack_require__(41) - , IE_PROTO = __webpack_require__(82)('IE_PROTO') - , ObjectProto = Object.prototype; - -module.exports = Object.getPrototypeOf || function(O){ - O = toObject(O); - if(has(O, IE_PROTO))return O[IE_PROTO]; - if(typeof O.constructor == 'function' && O instanceof O.constructor){ - return O.constructor.prototype; - } return O instanceof Object ? ObjectProto : null; -}; - -/***/ }), -/* 291 */ -/***/ (function(module, exports, __webpack_require__) { - -// all object keys, includes non-enumerable and symbols -var gOPN = __webpack_require__(81) - , gOPS = __webpack_require__(57) - , anObject = __webpack_require__(18) - , Reflect = __webpack_require__(13).Reflect; -module.exports = Reflect && Reflect.ownKeys || function ownKeys(it){ - var keys = gOPN.f(anObject(it)) - , getSymbols = gOPS.f; - return getSymbols ? keys.concat(getSymbols(it)) : keys; -}; - -/***/ }), -/* 292 */ -/***/ (function(module, exports) { - -// 7.2.9 SameValue(x, y) -module.exports = Object.is || function is(x, y){ - return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; -}; - -/***/ }), -/* 293 */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.3.20 SpeciesConstructor(O, defaultConstructor) -var anObject = __webpack_require__(18) - , aFunction = __webpack_require__(72) - , SPECIES = __webpack_require__(10)('species'); -module.exports = function(O, D){ - var C = anObject(O).constructor, S; - return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); -}; - -/***/ }), -/* 294 */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(60) - , defined = __webpack_require__(30); -// true -> String#at -// false -> String#codePointAt -module.exports = function(TO_STRING){ - return function(that, pos){ - var s = String(defined(that)) - , i = toInteger(pos) - , l = s.length - , a, b; - if(i < 0 || i >= l)return TO_STRING ? '' : undefined; - a = s.charCodeAt(i); - return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff - ? TO_STRING ? s.charAt(i) : a - : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; - }; -}; - -/***/ }), -/* 295 */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(13) - , core = __webpack_require__(44) - , LIBRARY = __webpack_require__(56) - , wksExt = __webpack_require__(175) - , defineProperty = __webpack_require__(19).f; -module.exports = function(name){ - var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); - if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)}); -}; - -/***/ }), -/* 296 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 297 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 298 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 299 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 300 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 301 */ -/***/ (function(module, exports) { - -// removed by extract-text-webpack-plugin - -/***/ }), -/* 302 */ -/***/ (function(module, exports) { - -module.exports = __WEBPACK_EXTERNAL_MODULE_302__; - -/***/ }) -/******/ ]); -}); -//# sourceMappingURL=handsontable.js.map \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/jQueryBinaryTransport/jquery-binarytransport.js b/muk_web_preview_msoffice/static/lib/jQueryBinaryTransport/jquery-binarytransport.js deleted file mode 100644 index 35a3336..0000000 --- a/muk_web_preview_msoffice/static/lib/jQueryBinaryTransport/jquery-binarytransport.js +++ /dev/null @@ -1,52 +0,0 @@ - /** - * - * jquery.binarytransport.js - * - * @description. jQuery ajax transport for making binary data type requests. - * @version 1.0 - * @author Henry Algus - * - */ - -// use this transport for "binary" data type -$.ajaxTransport("+binary", function(options, originalOptions, jqXHR){ - // check for conditions and support for blob / arraybuffer response type - if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob))))) - { - return { - // create new XMLHttpRequest - send: function(headers, callback){ - // setup all variables - var xhr = new XMLHttpRequest(), - url = options.url, - type = options.type, - async = options.async || true, - // blob or arraybuffer. Default is blob - dataType = options.responseType || "blob", - data = options.data || null, - username = options.username || null, - password = options.password || null; - - xhr.addEventListener('load', function(){ - var data = {}; - data[options.dataType] = xhr.response; - // make callback and send data - callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders()); - }); - - xhr.open(type, url, async, username, password); - - // setup custom headers - for (var i in headers ) { - xhr.setRequestHeader(i, headers[i] ); - } - - xhr.responseType = dataType; - xhr.send(data); - }, - abort: function(){ - jqXHR.abort(); - } - }; - } -}); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/LICENSE b/muk_web_preview_msoffice/static/lib/numbro/LICENSE deleted file mode 100644 index e8709e8..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2015 Företagsplatsen - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages.js b/muk_web_preview_msoffice/static/lib/numbro/languages.js deleted file mode 100644 index a4d6644..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages.js +++ /dev/null @@ -1,2937 +0,0 @@ -/*! - * numbro.js language configuration - * language : Bulgarian - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'bg', - cultureCode: 'bg', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'И', - million: 'А', - billion: 'M', - trillion: 'T' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: 'лв.' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - this.numbro.culture('bg', language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Czech - * locale: Czech Republic - * author : Jan Pesa : https://github.com/smajl (based on work from Anatoli Papirovski : https://github.com/apapirovski) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'cs-CZ', - cultureCode: 'cs-CZ', - delimiters: { - thousands: '\u00a0', - decimal: ',' - }, - abbreviations: { - thousand: 'tis.', - million: 'mil.', - billion: 'mld.', - trillion: 'bil.' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: 'Kč', - position: 'postfix', - spaceSeparated: true - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Danish - * locale: Denmark - * author : Michael Storgaard : https://github.com/mstorgaard - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'da-DK', - cultureCode: 'da-DK', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'mio', - billion: 'mia', - trillion: 'b' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: 'kr', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : German - * locale: Austria - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'de-AT', - cultureCode: 'de-AT', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '€' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : German - * locale: Switzerland - * author : Michael Piefel : https://github.com/piefel (based on work from Marco Krage : https://github.com/sinky) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'de-CH', - cultureCode: 'de-CH', - delimiters: { - thousands: '\'', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: 'CHF', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : German - * locale: Germany - * author : Marco Krage : https://github.com/sinky - * - * Generally useful in Germany, Austria, Luxembourg, Belgium - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'de-DE', - cultureCode: 'de-DE', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '€', - position: 'postfix', - spaceSeparated: true - }, - defaults: { - currencyFormat: ',4' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : German - * locale: Liechtenstein - * author : Michael Piefel : https://github.com/piefel (based on work from Marco Krage : https://github.com/sinky) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'de-LI', - cultureCode: 'de-LI', - delimiters: { - thousands: '\'', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: 'CHF', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Greek (el) - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'el', - cultureCode: 'el', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'χ', - million: 'ε', - billion: 'δ', - trillion: 'τ' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '€' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture('el', language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : English - * locale: Australia - * author : Benedikt Huss : https://github.com/ben305 - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'en-AU', - cultureCode: 'en-AU', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '$', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: '$ ,0.00', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: '$ ,0' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : English - * locale: United Kingdom of Great Britain and Northern Ireland - * author : Dan Ristic : https://github.com/dristic - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'en-GB', - cultureCode: 'en-GB', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '£', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: '$ ,0.00', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: '$ ,0' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! -+ * numbro.js language configuration - * language : English - * locale: Ireland - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'en-IE', - cultureCode: 'en-IE', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '€' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture('en-gb', language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : English - * locale: New Zealand - * author : Benedikt Huss : https://github.com/ben305 - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'en-NZ', - cultureCode: 'en-NZ', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '$', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: '$ ,0.00', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: '$ ,0' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : English - * locale: South Africa - * author : Stewart Scott https://github.com/stewart42 - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'en-ZA', - cultureCode: 'en-ZA', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: 'R', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: '$ ,0.00', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: '$ ,0' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Spanish - * locale: Argentina - * author : Hernan Garcia : https://github.com/hgarcia - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'es-AR', - cultureCode: 'es-AR', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'mm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (b === 1 || b === 3) ? 'er' : - (b === 2) ? 'do' : - (b === 7 || b === 0) ? 'mo' : - (b === 8) ? 'vo' : - (b === 9) ? 'no' : 'to'; - }, - currency: { - symbol: '$', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Spanish - * locale: Chile - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'es-CL', - cultureCode: 'es-CL', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'mm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (b === 1 || b === 3) ? 'er' : - (b === 2) ? 'do' : - (b === 7 || b === 0) ? 'mo' : - (b === 8) ? 'vo' : - (b === 9) ? 'no' : 'to'; - }, - currency: { - symbol: '$', - position: 'prefix' - }, - defaults: { - currencyFormat: '$0,0' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Spanish - * locale: Colombia - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'es-CO', - cultureCode: 'es-CO', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'mm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (b === 1 || b === 3) ? 'er' : - (b === 2) ? 'do' : - (b === 7 || b === 0) ? 'mo' : - (b === 8) ? 'vo' : - (b === 9) ? 'no' : 'to'; - }, - currency: { - symbol: '€', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Spanish - * locale: Costa Rica - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'es-CR', - cultureCode: 'es-CR', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'mm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (b === 1 || b === 3) ? 'er' : - (b === 2) ? 'do' : - (b === 7 || b === 0) ? 'mo' : - (b === 8) ? 'vo' : - (b === 9) ? 'no' : 'to'; - }, - currency: { - symbol: '₡', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Spanish - * locale: Spain - * author : Hernan Garcia : https://github.com/hgarcia - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'es-ES', - cultureCode: 'es-ES', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'mm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (b === 1 || b === 3) ? 'er' : - (b === 2) ? 'do' : - (b === 7 || b === 0) ? 'mo' : - (b === 8) ? 'vo' : - (b === 9) ? 'no' : 'to'; - }, - currency: { - symbol: '€', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Spanish - * locale: Nicaragua - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'es-NI', - cultureCode: 'es-NI', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'mm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (b === 1 || b === 3) ? 'er' : - (b === 2) ? 'do' : - (b === 7 || b === 0) ? 'mo' : - (b === 8) ? 'vo' : - (b === 9) ? 'no' : 'to'; - }, - currency: { - symbol: 'C$', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Spanish - * locale: Peru - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'es-PE', - cultureCode: 'es-PE', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'mm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (b === 1 || b === 3) ? 'er' : - (b === 2) ? 'do' : - (b === 7 || b === 0) ? 'mo' : - (b === 8) ? 'vo' : - (b === 9) ? 'no' : 'to'; - }, - currency: { - symbol: 'S/.', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Spanish - * locale: Puerto Rico - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'es-PR', - cultureCode: 'es-PR', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'mm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (b === 1 || b === 3) ? 'er' : - (b === 2) ? 'do' : - (b === 7 || b === 0) ? 'mo' : - (b === 8) ? 'vo' : - (b === 9) ? 'no' : 'to'; - }, - currency: { - symbol: '$', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Spanish - * locale: El Salvador - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'es-SV', - cultureCode: 'es-SV', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'mm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (b === 1 || b === 3) ? 'er' : - (b === 2) ? 'do' : - (b === 7 || b === 0) ? 'mo' : - (b === 8) ? 'vo' : - (b === 9) ? 'no' : 'to'; - }, - currency: { - symbol: '$', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Estonian - * locale: Estonia - * author : Illimar Tambek : https://github.com/ragulka - * - * Note: in Estonian, abbreviations are always separated - * from numbers with a space - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'et-EE', - cultureCode: 'et-EE', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: ' tuh', - million: ' mln', - billion: ' mld', - trillion: ' trl' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '€', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Farsi - * locale: Iran - * author : neo13 : https://github.com/neo13 - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'fa-IR', - cultureCode: 'fa-IR', - delimiters: { - thousands: '،', - decimal: '.' - }, - abbreviations: { - thousand: 'هزار', - million: 'میلیون', - billion: 'میلیارد', - trillion: 'تریلیون' - }, - ordinal: function () { - return 'ام'; - }, - currency: { - symbol: '﷼' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Finnish - * locale: Finland - * author : Sami Saada : https://github.com/samitheberber - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'fi-FI', - cultureCode: 'fi-FI', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'M', - billion: 'G', - trillion: 'T' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '€', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Filipino (Pilipino) - * locale: Philippines - * author : Michael Abadilla : https://github.com/mjmaix - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'fil-PH', - cultureCode: 'fil-PH', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '₱' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : French - * locale: Canada - * author : Léo Renaud-Allaire : https://github.com/renaudleo - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'fr-CA', - cultureCode: 'fr-CA', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'M', - billion: 'G', - trillion: 'T' - }, - ordinal : function (number) { - return number === 1 ? 'er' : 'ème'; - }, - currency: { - symbol: '$', - position: 'postfix', - spaceSeparated : true - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: '$ ,0.00', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: '$ ,0' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : French - * locale: Switzerland - * author : Adam Draper : https://github.com/adamwdraper - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'fr-CH', - cultureCode: 'fr-CH', - delimiters: { - thousands: ' ', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal : function (number) { - return number === 1 ? 'er' : 'ème'; - }, - currency: { - symbol: 'CHF', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : French - * locale: France - * author : Adam Draper : https://github.com/adamwdraper - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'fr-FR', - cultureCode: 'fr-FR', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal : function (number) { - return number === 1 ? 'er' : 'ème'; - }, - currency: { - symbol: '€', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Hebrew - * locale : IL - * author : Eli Zehavi : https://github.com/eli-zehavi - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'he-IL', - cultureCode: 'he-IL', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'אלף', - million: 'מליון', - billion: 'בליון', - trillion: 'טריליון' - }, - currency: { - symbol: '₪', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: '₪ ,0.00', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: '₪ ,0' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - - -/*! - * numbro.js language configuration - * language : Hungarian - * locale: Hungary - * author : Peter Bakondy : https://github.com/pbakondy - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'hu-HU', - cultureCode: 'hu-HU', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'E', // ezer - million: 'M', // millió - billion: 'Mrd', // milliárd - trillion: 'T' // trillió - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: ' Ft', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Indonesian - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'id', - cultureCode: 'id', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'r', - million: 'j', - billion: 'm', - trillion: 't' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: 'Rp' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture('id', language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Italian - * locale: Switzerland - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'it-CH', - cultureCode: 'it-CH', - delimiters: { - thousands: '\'', - decimal: '.' - }, - abbreviations: { - thousand: 'mila', - million: 'mil', - billion: 'b', - trillion: 't' - }, - ordinal: function () { - return '°'; - }, - currency: { - symbol: 'CHF' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture('it-CH', language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Italian - * locale: Italy - * author : Giacomo Trombi : http://cinquepunti.it - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'it-IT', - cultureCode: 'it-IT', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'mila', - million: 'mil', - billion: 'b', - trillion: 't' - }, - ordinal: function () { - return 'º'; - }, - currency: { - symbol: '€', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Japanese - * locale: Japan - * author : teppeis : https://github.com/teppeis - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'ja-JP', - cultureCode: 'ja-JP', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: '千', - million: '百万', - billion: '十億', - trillion: '兆' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '¥', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: '$ ,0.00', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: '$ ,0' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Korean - * author (numbro.js Version): Randy Wilander : https://github.com/rocketedaway - * author (numeral.js Version) : Rich Daley : https://github.com/pedantic-git - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'ko-KR', - cultureCode: 'ko-KR', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: '천', - million: '백만', - billion: '십억', - trillion: '일조' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '₩' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Latvian - * locale: Latvia - * author : Lauris Bukšis-Haberkorns : https://github.com/Lafriks - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'lv-LV', - cultureCode: 'lv-LV', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: ' tūkst.', - million: ' milj.', - billion: ' mljrd.', - trillion: ' trilj.' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '€', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language: Norwegian Bokmål - * locale: Norway - * author : Benjamin Van Ryseghem - */ -(function() { - 'use strict'; - - var language = { - langLocaleCode: 'nb-NO', - cultureCode: 'nb-NO', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 't', - million: 'M', - billion: 'md', - trillion: 't' - }, - currency: { - symbol: 'kr', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Norwegian Bokmål (nb) - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'nb', - cultureCode: 'nb', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 't', - million: 'mil', - billion: 'mia', - trillion: 'b' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: 'kr' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture('nb', language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Dutch - * locale: Belgium - * author : Dieter Luypaert : https://github.com/moeriki - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'nl-BE', - cultureCode: 'nl-BE', - delimiters: { - thousands: ' ', - decimal : ',' - }, - abbreviations: { - thousand : 'k', - million : 'mln', - billion : 'mld', - trillion : 'bln' - }, - ordinal : function (number) { - var remainder = number % 100; - return (number !== 0 && remainder <= 1 || remainder === 8 || remainder >= 20) ? 'ste' : 'de'; - }, - currency: { - symbol: '€', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Dutch - * locale: Netherlands - * author : Dave Clayton : https://github.com/davedx - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'nl-NL', - cultureCode: 'nl-NL', - delimiters: { - thousands: '.', - decimal : ',' - }, - abbreviations: { - thousand : 'k', - million : 'mln', - billion : 'mrd', - trillion : 'bln' - }, - ordinal : function (number) { - var remainder = number % 100; - return (number !== 0 && remainder <= 1 || remainder === 8 || remainder >= 20) ? 'ste' : 'de'; - }, - currency: { - symbol: '€', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Norwegian Nynorsk (nn) - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'nn', - cultureCode: 'nn', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 't', - million: 'mil', - billion: 'mia', - trillion: 'b' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: 'kr' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.language) { - window.numbro.language('nn', language); - } -}()); - -/*! - * numbro.js language configuration - * language : Polish - * locale : Poland - * author : Dominik Bulaj : https://github.com/dominikbulaj - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'pl-PL', - cultureCode: 'pl-PL', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'tys.', - million: 'mln', - billion: 'mld', - trillion: 'bln' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: ' zł', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Portuguese - * locale : Brazil - * author : Ramiro Varandas Jr : https://github.com/ramirovjr - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'pt-BR', - cultureCode: 'pt-BR', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'mil', - million: 'milhões', - billion: 'b', - trillion: 't' - }, - ordinal: function () { - return 'º'; - }, - currency: { - symbol: 'R$', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Portuguese - * locale : Portugal - * author : Diogo Resende : https://github.com/dresende - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'pt-PT', - cultureCode: 'pt-PT', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal : function () { - return 'º'; - }, - currency: { - symbol: '€', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numeral.js language configuration - * language : Romanian - * author : Andrei Alecu https://github.com/andreialecu - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'ro-RO', - cultureCode: 'ro-RO', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'mii', - million: 'mil', - billion: 'mld', - trillion: 'bln' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: ' lei', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Romanian (ro) - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'ro', - cultureCode: 'ro', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'mie', - million: 'mln', - billion: 'mld', - trillion: 't' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: 'RON' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture('ro', language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Russian - * locale : Russsia - * author : Anatoli Papirovski : https://github.com/apapirovski - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'ru-RU', - cultureCode: 'ru-RU', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'тыс.', - million: 'млн', - billion: 'b', - trillion: 't' - }, - ordinal: function () { - // not ideal, but since in Russian it can taken on - // different forms (masculine, feminine, neuter) - // this is all we can do - return '.'; - }, - currency: { - symbol: 'руб.', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Russian - * locale : Ukraine - * author : Anatoli Papirovski : https://github.com/apapirovski - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'ru-UA', - cultureCode: 'ru-UA', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'тыс.', - million: 'млн', - billion: 'b', - trillion: 't' - }, - ordinal: function () { - // not ideal, but since in Russian it can taken on - // different forms (masculine, feminine, neuter) - // this is all we can do - return '.'; - }, - currency: { - symbol: '\u20B4', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Slovak - * locale : Slovakia - * author : Jan Pesa : https://github.com/smajl (based on work from Ahmed Al Hafoudh : http://www.freevision.sk) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'sk-SK', - cultureCode: 'sk-SK', - delimiters: { - thousands: '\u00a0', - decimal: ',' - }, - abbreviations: { - thousand: 'tis.', - million: 'mil.', - billion: 'mld.', - trillion: 'bil.' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '€', - position: 'postfix', - spaceSeparated: true - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Slovene - * locale: Slovenia - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'sl', - cultureCode: 'sl', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'tis.', - million: 'mil.', - billion: 'b', - trillion: 't' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '€' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture('sl', language); - } -}()); - -/*! - * numbro.js language configuration - * language : Serbian (sr) - * country : Serbia (Cyrillic) - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'sr-Cyrl-RS', - cultureCode: 'sr-Cyrl-RS', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'тыс.', - million: 'млн', - billion: 'b', - trillion: 't' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: 'RSD' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture('sr-Cyrl-RS', language); - } -}()); - -/*! - * numbro.js language configuration - * language : Swedish - * locale : Sweden - * author : Benjamin Van Ryseghem (benjamin.vanryseghem.com) - */ -(function() { - 'use strict'; - - var language = { - langLocaleCode: 'sv-SE', - cultureCode: 'sv-SE', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 't', - million: 'M', - billion: 'md', - trillion: 'tmd' - }, - currency: { - symbol: 'kr', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Thai - * locale : Thailand - * author : Sathit Jittanupat : https://github.com/jojosati - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'th-TH', - cultureCode: 'th-TH', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'พัน', - million: 'ล้าน', - billion: 'พันล้าน', - trillion: 'ล้านล้าน' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '฿', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Turkish - * locale : Turkey - * author : Ecmel Ercan : https://github.com/ecmel, - * Erhan Gundogan : https://github.com/erhangundogan, - * Burak Yiğit Kaya: https://github.com/BYK - */ -(function() { - 'use strict'; - - var suffixes = { - 1: '\'inci', - 5: '\'inci', - 8: '\'inci', - 70: '\'inci', - 80: '\'inci', - - 2: '\'nci', - 7: '\'nci', - 20: '\'nci', - 50: '\'nci', - - 3: '\'üncü', - 4: '\'üncü', - 100: '\'üncü', - - 6: '\'ncı', - - 9: '\'uncu', - 10: '\'uncu', - 30: '\'uncu', - - 60: '\'ıncı', - 90: '\'ıncı' - }, - language = { - langLocaleCode: 'tr-TR', - cultureCode: 'tr-TR', - delimiters: { - thousands: '.', - decimal: ',' - }, - abbreviations: { - thousand: 'bin', - million: 'milyon', - billion: 'milyar', - trillion: 'trilyon' - }, - ordinal: function(number) { - if (number === 0) { // special case for zero - return '\'ıncı'; - } - - var a = number % 10, - b = number % 100 - a, - c = number >= 100 ? 100 : null; - - return suffixes[a] || suffixes[b] || suffixes[c]; - }, - currency: { - symbol: '\u20BA', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Ukrainian - * locale : Ukraine - * author : Michael Piefel : https://github.com/piefel (with help from Tetyana Kuzmenko) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'uk-UA', - cultureCode: 'uk-UA', - delimiters: { - thousands: ' ', - decimal: ',' - }, - abbreviations: { - thousand: 'тис.', - million: 'млн', - billion: 'млрд', - trillion: 'блн' - }, - ordinal: function () { - // not ideal, but since in Ukrainian it can taken on - // different forms (masculine, feminine, neuter) - // this is all we can do - return ''; - }, - currency: { - symbol: '\u20B4', - position: 'postfix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: ',0.00 $', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: ',0 $' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : simplified chinese - * locale : China - * author : badplum : https://github.com/badplum - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'zh-CN', - cultureCode: 'zh-CN', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: '千', - million: '百万', - billion: '十亿', - trillion: '兆' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '¥', - position: 'prefix' - }, - defaults: { - currencyFormat: ',4 a' - }, - formats: { - fourDigits: '4 a', - fullWithTwoDecimals: '$ ,0.00', - fullWithTwoDecimalsNoCurrency: ',0.00', - fullWithNoDecimals: '$ ,0' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Chinese traditional - * locale: Macau - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'zh-MO', - cultureCode: 'zh-MO', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: '千', - million: '百萬', - billion: '十億', - trillion: '兆' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: 'MOP' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture('zh-MO', language); - } -}()); - -/*! - * numbro.js language configuration - * language : Chinese simplified - * locale: Singapore - * author : Tim McIntosh (StayinFront NZ) - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'zh-SG', - cultureCode: 'zh-SG', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: '千', - million: '百万', - billion: '十亿', - trillion: '兆' - }, - ordinal: function () { - return '.'; - }, - currency: { - symbol: '$' - } - }; - - // Node - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture('zh-SG', language); - } -}.call(typeof window === 'undefined' ? this : window)); - -/*! - * numbro.js language configuration - * language : Chinese (Taiwan) - * author (numbro.js Version): Randy Wilander : https://github.com/rocketedaway - * author (numeral.js Version) : Rich Daley : https://github.com/pedantic-git - */ -(function () { - 'use strict'; - - var language = { - langLocaleCode: 'zh-TW', - cultureCode: 'zh-TW', - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: '千', - million: '百萬', - billion: '十億', - trillion: '兆' - }, - ordinal: function () { - return '第'; - }, - currency: { - symbol: 'NT$' - } - }; - - // CommonJS - if (typeof module !== 'undefined' && module.exports) { - module.exports = language; - } - // Browser - if (typeof window !== 'undefined' && window.numbro && window.numbro.culture) { - window.numbro.culture(language.cultureCode, language); - } -}.call(typeof window === 'undefined' ? this : window)); diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/bg.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/bg.min.js deleted file mode 100644 index 47f8e8a..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/bg.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * numbro.js language configuration - * language : Bulgarian - * author : Tim McIntosh (StayinFront NZ) - */ -(function(){"use strict";var a={langLocaleCode:"bg",cultureCode:"bg",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"И",million:"А",billion:"M",trillion:"T"},ordinal:function(){return"."},currency:{symbol:"лв."}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&this.numbro.culture("bg",a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/cs-CZ.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/cs-CZ.min.js deleted file mode 100644 index f055dc9..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/cs-CZ.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Czech - * locale: Czech Republic - * author : Jan Pesa : https://github.com/smajl (based on work from Anatoli Papirovski : https://github.com/apapirovski) - */ -(function(){"use strict";var a={langLocaleCode:"cs-CZ",cultureCode:"cs-CZ",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"tis.",million:"mil.",billion:"mld.",trillion:"bil."},ordinal:function(){return"."},currency:{symbol:"Kč",position:"postfix",spaceSeparated:!0},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/da-DK.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/da-DK.min.js deleted file mode 100644 index dc40944..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/da-DK.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Danish - * locale: Denmark - * author : Michael Storgaard : https://github.com/mstorgaard - */ -(function(){"use strict";var a={langLocaleCode:"da-DK",cultureCode:"da-DK",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"k",million:"mio",billion:"mia",trillion:"b"},ordinal:function(){return"."},currency:{symbol:"kr",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/de-AT.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/de-AT.min.js deleted file mode 100644 index 3d00891..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/de-AT.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : German - * locale: Austria - * author : Tim McIntosh (StayinFront NZ) - */ -(function(){"use strict";var a={langLocaleCode:"de-AT",cultureCode:"de-AT",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(){return"."},currency:{symbol:"€"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/de-CH.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/de-CH.min.js deleted file mode 100644 index 2d22cc4..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/de-CH.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : German - * locale: Switzerland - * author : Michael Piefel : https://github.com/piefel (based on work from Marco Krage : https://github.com/sinky) - */ -(function(){"use strict";var a={langLocaleCode:"de-CH",cultureCode:"de-CH",delimiters:{thousands:"'",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(){return"."},currency:{symbol:"CHF",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/de-DE.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/de-DE.min.js deleted file mode 100644 index 6738d38..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/de-DE.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/*! - * numbro.js language configuration - * language : German - * locale: Germany - * author : Marco Krage : https://github.com/sinky - * - * Generally useful in Germany, Austria, Luxembourg, Belgium - */ -(function(){"use strict";var a={langLocaleCode:"de-DE",cultureCode:"de-DE",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(){return"."},currency:{symbol:"€",position:"postfix",spaceSeparated:!0},defaults:{currencyFormat:",4"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/de-LI.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/de-LI.min.js deleted file mode 100644 index aed5771..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/de-LI.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : German - * locale: Liechtenstein - * author : Michael Piefel : https://github.com/piefel (based on work from Marco Krage : https://github.com/sinky) - */ -(function(){"use strict";var a={langLocaleCode:"de-LI",cultureCode:"de-LI",delimiters:{thousands:"'",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(){return"."},currency:{symbol:"CHF",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/el.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/el.min.js deleted file mode 100644 index d676116..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/el.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * numbro.js language configuration - * language : Greek (el) - * author : Tim McIntosh (StayinFront NZ) - */ -(function(){"use strict";var a={langLocaleCode:"el",cultureCode:"el",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"χ",million:"ε",billion:"δ",trillion:"τ"},ordinal:function(){return"."},currency:{symbol:"€"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture("el",a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/en-AU.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/en-AU.min.js deleted file mode 100644 index 02a048b..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/en-AU.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : English - * locale: Australia - * author : Benedikt Huss : https://github.com/ben305 - */ -(function(){"use strict";var a={langLocaleCode:"en-AU",cultureCode:"en-AU",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:"$ ,0.00",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:"$ ,0"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/en-GB.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/en-GB.min.js deleted file mode 100644 index aed39b4..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/en-GB.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : English - * locale: United Kingdom of Great Britain and Northern Ireland - * author : Dan Ristic : https://github.com/dristic - */ -(function(){"use strict";var a={langLocaleCode:"en-GB",cultureCode:"en-GB",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"£",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:"$ ,0.00",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:"$ ,0"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/en-IE.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/en-IE.min.js deleted file mode 100644 index 2d00665..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/en-IE.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! -+ * numbro.js language configuration - * language : English - * locale: Ireland - * author : Tim McIntosh (StayinFront NZ) - */ -(function(){"use strict";var a={langLocaleCode:"en-IE",cultureCode:"en-IE",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"€"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture("en-gb",a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/en-NZ.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/en-NZ.min.js deleted file mode 100644 index b3520b9..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/en-NZ.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : English - * locale: New Zealand - * author : Benedikt Huss : https://github.com/ben305 - */ -(function(){"use strict";var a={langLocaleCode:"en-NZ",cultureCode:"en-NZ",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:"$ ,0.00",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:"$ ,0"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/en-ZA.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/en-ZA.min.js deleted file mode 100644 index 12a3eb8..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/en-ZA.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : English - * locale: South Africa - * author : Stewart Scott https://github.com/stewart42 - */ -(function(){"use strict";var a={langLocaleCode:"en-ZA",cultureCode:"en-ZA",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"R",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:"$ ,0.00",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:"$ ,0"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/es-AR.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/es-AR.min.js deleted file mode 100644 index 3132863..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/es-AR.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Spanish - * locale: Argentina - * author : Hernan Garcia : https://github.com/hgarcia - */ -(function(){"use strict";var a={langLocaleCode:"es-AR",cultureCode:"es-AR",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"k",million:"mm",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===b||3===b?"er":2===b?"do":7===b||0===b?"mo":8===b?"vo":9===b?"no":"to"},currency:{symbol:"$",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/es-CL.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/es-CL.min.js deleted file mode 100644 index 9dcb1f5..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/es-CL.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Spanish - * locale: Chile - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function(){"use strict";var a={langLocaleCode:"es-CL",cultureCode:"es-CL",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"k",million:"mm",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===b||3===b?"er":2===b?"do":7===b||0===b?"mo":8===b?"vo":9===b?"no":"to"},currency:{symbol:"$",position:"prefix"},defaults:{currencyFormat:"$0,0"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/es-CO.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/es-CO.min.js deleted file mode 100644 index e818b88..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/es-CO.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Spanish - * locale: Colombia - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function(){"use strict";var a={langLocaleCode:"es-CO",cultureCode:"es-CO",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"k",million:"mm",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===b||3===b?"er":2===b?"do":7===b||0===b?"mo":8===b?"vo":9===b?"no":"to"},currency:{symbol:"€",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/es-CR.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/es-CR.min.js deleted file mode 100644 index 3188afb..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/es-CR.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Spanish - * locale: Costa Rica - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function(){"use strict";var a={langLocaleCode:"es-CR",cultureCode:"es-CR",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"k",million:"mm",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===b||3===b?"er":2===b?"do":7===b||0===b?"mo":8===b?"vo":9===b?"no":"to"},currency:{symbol:"₡",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/es-ES.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/es-ES.min.js deleted file mode 100644 index 8609a4b..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/es-ES.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Spanish - * locale: Spain - * author : Hernan Garcia : https://github.com/hgarcia - */ -(function(){"use strict";var a={langLocaleCode:"es-ES",cultureCode:"es-ES",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"k",million:"mm",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===b||3===b?"er":2===b?"do":7===b||0===b?"mo":8===b?"vo":9===b?"no":"to"},currency:{symbol:"€",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/es-NI.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/es-NI.min.js deleted file mode 100644 index a8b59e3..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/es-NI.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Spanish - * locale: Nicaragua - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function(){"use strict";var a={langLocaleCode:"es-NI",cultureCode:"es-NI",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"mm",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===b||3===b?"er":2===b?"do":7===b||0===b?"mo":8===b?"vo":9===b?"no":"to"},currency:{symbol:"C$",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/es-PE.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/es-PE.min.js deleted file mode 100644 index 422423e..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/es-PE.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Spanish - * locale: Peru - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function(){"use strict";var a={langLocaleCode:"es-PE",cultureCode:"es-PE",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"mm",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===b||3===b?"er":2===b?"do":7===b||0===b?"mo":8===b?"vo":9===b?"no":"to"},currency:{symbol:"S/.",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/es-PR.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/es-PR.min.js deleted file mode 100644 index a0118a9..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/es-PR.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Spanish - * locale: Puerto Rico - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function(){"use strict";var a={langLocaleCode:"es-PR",cultureCode:"es-PR",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"mm",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===b||3===b?"er":2===b?"do":7===b||0===b?"mo":8===b?"vo":9===b?"no":"to"},currency:{symbol:"$",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/es-SV.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/es-SV.min.js deleted file mode 100644 index fe4de43..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/es-SV.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Spanish - * locale: El Salvador - * author : Gwyn Judd : https://github.com/gwynjudd - */ -(function(){"use strict";var a={langLocaleCode:"es-SV",cultureCode:"es-SV",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"mm",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===b||3===b?"er":2===b?"do":7===b||0===b?"mo":8===b?"vo":9===b?"no":"to"},currency:{symbol:"$",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/et-EE.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/et-EE.min.js deleted file mode 100644 index bcfcc13..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/et-EE.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * numbro.js language configuration - * language : Estonian - * locale: Estonia - * author : Illimar Tambek : https://github.com/ragulka - * - * Note: in Estonian, abbreviations are always separated - * from numbers with a space - */ -(function(){"use strict";var a={langLocaleCode:"et-EE",cultureCode:"et-EE",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:" tuh",million:" mln",billion:" mld",trillion:" trl"},ordinal:function(){return"."},currency:{symbol:"€",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/fa-IR.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/fa-IR.min.js deleted file mode 100644 index 03835e9..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/fa-IR.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Farsi - * locale: Iran - * author : neo13 : https://github.com/neo13 - */ -(function(){"use strict";var a={langLocaleCode:"fa-IR",cultureCode:"fa-IR",delimiters:{thousands:"،",decimal:"."},abbreviations:{thousand:"هزار",million:"میلیون",billion:"میلیارد",trillion:"تریلیون"},ordinal:function(){return"ام"},currency:{symbol:"﷼"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/fi-FI.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/fi-FI.min.js deleted file mode 100644 index 231f629..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/fi-FI.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Finnish - * locale: Finland - * author : Sami Saada : https://github.com/samitheberber - */ -(function(){"use strict";var a={langLocaleCode:"fi-FI",cultureCode:"fi-FI",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"k",million:"M",billion:"G",trillion:"T"},ordinal:function(){return"."},currency:{symbol:"€",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/fil-PH.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/fil-PH.min.js deleted file mode 100644 index f40d61c..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/fil-PH.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Filipino (Pilipino) - * locale: Philippines - * author : Michael Abadilla : https://github.com/mjmaix - */ -(function(){"use strict";var a={langLocaleCode:"fil-PH",cultureCode:"fil-PH",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"₱"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/fr-CA.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/fr-CA.min.js deleted file mode 100644 index 99496ca..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/fr-CA.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : French - * locale: Canada - * author : Léo Renaud-Allaire : https://github.com/renaudleo - */ -(function(){"use strict";var a={langLocaleCode:"fr-CA",cultureCode:"fr-CA",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"k",million:"M",billion:"G",trillion:"T"},ordinal:function(a){return 1===a?"er":"ème"},currency:{symbol:"$",position:"postfix",spaceSeparated:!0},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:"$ ,0.00",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:"$ ,0"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/fr-CH.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/fr-CH.min.js deleted file mode 100644 index 16c21c8..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/fr-CH.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : French - * locale: Switzerland - * author : Adam Draper : https://github.com/adamwdraper - */ -(function(){"use strict";var a={langLocaleCode:"fr-CH",cultureCode:"fr-CH",delimiters:{thousands:" ",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){return 1===a?"er":"ème"},currency:{symbol:"CHF",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/fr-FR.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/fr-FR.min.js deleted file mode 100644 index a0e649e..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/fr-FR.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : French - * locale: France - * author : Adam Draper : https://github.com/adamwdraper - */ -(function(){"use strict";var a={langLocaleCode:"fr-FR",cultureCode:"fr-FR",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){return 1===a?"er":"ème"},currency:{symbol:"€",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/he-IL.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/he-IL.min.js deleted file mode 100644 index 013e0d9..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/he-IL.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Hebrew - * locale : IL - * author : Eli Zehavi : https://github.com/eli-zehavi - */ -(function(){"use strict";var a={langLocaleCode:"he-IL",cultureCode:"he-IL",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"אלף",million:"מליון",billion:"בליון",trillion:"טריליון"},currency:{symbol:"₪",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:"₪ ,0.00",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:"₪ ,0"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/hu-HU.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/hu-HU.min.js deleted file mode 100644 index b45b8bc..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/hu-HU.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * numbro.js language configuration - * language : Hungarian - * locale: Hungary - * author : Peter Bakondy : https://github.com/pbakondy - */ -(function(){"use strict";var a={langLocaleCode:"hu-HU",cultureCode:"hu-HU",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"E",// ezer -million:"M",// millió -billion:"Mrd",// milliárd -trillion:"T"},ordinal:function(){return"."},currency:{symbol:" Ft",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/id.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/id.min.js deleted file mode 100644 index 8787a15..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/id.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * numbro.js language configuration - * language : Indonesian - * author : Tim McIntosh (StayinFront NZ) - */ -(function(){"use strict";var a={langLocaleCode:"id",cultureCode:"id",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"r",million:"j",billion:"m",trillion:"t"},ordinal:function(){return"."},currency:{symbol:"Rp"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture("id",a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/index.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/index.min.js deleted file mode 100644 index a81d542..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/index.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* jshint sub: true */ -exports.bg=require("./bg.js"),exports["cs-CZ"]=require("./cs-CZ.js"),exports["da-DK"]=require("./da-DK.js"),exports["de-AT"]=require("./de-AT.js"),exports["de-CH"]=require("./de-CH.js"),exports["de-DE"]=require("./de-DE.js"),exports["de-LI"]=require("./de-LI.js"),exports.el=require("./el.js"),exports["en-AU"]=require("./en-AU.js"),exports["en-GB"]=require("./en-GB.js"),exports["en-IE"]=require("./en-IE.js"),exports["en-NZ"]=require("./en-NZ.js"),exports["en-ZA"]=require("./en-ZA.js"),exports["es-AR"]=require("./es-AR.js"),exports["es-CL"]=require("./es-CL.js"),exports["es-CO"]=require("./es-CO.js"),exports["es-CR"]=require("./es-CR.js"),exports["es-ES"]=require("./es-ES.js"),exports["es-NI"]=require("./es-NI.js"),exports["es-PE"]=require("./es-PE.js"),exports["es-PR"]=require("./es-PR.js"),exports["es-SV"]=require("./es-SV.js"),exports["et-EE"]=require("./et-EE.js"),exports["fa-IR"]=require("./fa-IR.js"),exports["fi-FI"]=require("./fi-FI.js"),exports["fil-PH"]=require("./fil-PH.js"),exports["fr-CA"]=require("./fr-CA.js"),exports["fr-CH"]=require("./fr-CH.js"),exports["fr-FR"]=require("./fr-FR.js"),exports["he-IL"]=require("./he-IL.js"),exports["hu-HU"]=require("./hu-HU.js"),exports.id=require("./id.js"),exports["it-CH"]=require("./it-CH.js"),exports["it-IT"]=require("./it-IT.js"),exports["ja-JP"]=require("./ja-JP.js"),exports["ko-KR"]=require("./ko-KR.js"),exports["lv-LV"]=require("./lv-LV.js"),exports["nb-NO"]=require("./nb-NO.js"),exports.nb=require("./nb.js"),exports["nl-BE"]=require("./nl-BE.js"),exports["nl-NL"]=require("./nl-NL.js"),exports.nn=require("./nn.js"),exports["pl-PL"]=require("./pl-PL.js"),exports["pt-BR"]=require("./pt-BR.js"),exports["pt-PT"]=require("./pt-PT.js"),exports["ro-RO"]=require("./ro-RO.js"),exports.ro=require("./ro.js"),exports["ru-RU"]=require("./ru-RU.js"),exports["ru-UA"]=require("./ru-UA.js"),exports["sk-SK"]=require("./sk-SK.js"),exports.sl=require("./sl.js"),exports["sr-Cyrl-RS"]=require("./sr-Cyrl-RS.js"),exports["sv-SE"]=require("./sv-SE.js"),exports["th-TH"]=require("./th-TH.js"),exports["tr-TR"]=require("./tr-TR.js"),exports["uk-UA"]=require("./uk-UA.js"),exports["zh-CN"]=require("./zh-CN.js"),exports["zh-MO"]=require("./zh-MO.js"),exports["zh-SG"]=require("./zh-SG.js"),exports["zh-TW"]=require("./zh-TW.js"); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/it-CH.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/it-CH.min.js deleted file mode 100644 index bdfa28e..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/it-CH.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Italian - * locale: Switzerland - * author : Tim McIntosh (StayinFront NZ) - */ -(function(){"use strict";var a={langLocaleCode:"it-CH",cultureCode:"it-CH",delimiters:{thousands:"'",decimal:"."},abbreviations:{thousand:"mila",million:"mil",billion:"b",trillion:"t"},ordinal:function(){return"°"},currency:{symbol:"CHF"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture("it-CH",a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/it-IT.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/it-IT.min.js deleted file mode 100644 index 2ac7c25..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/it-IT.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Italian - * locale: Italy - * author : Giacomo Trombi : http://cinquepunti.it - */ -(function(){"use strict";var a={langLocaleCode:"it-IT",cultureCode:"it-IT",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"mila",million:"mil",billion:"b",trillion:"t"},ordinal:function(){return"º"},currency:{symbol:"€",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/ja-JP.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/ja-JP.min.js deleted file mode 100644 index d1afce9..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/ja-JP.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Japanese - * locale: Japan - * author : teppeis : https://github.com/teppeis - */ -(function(){"use strict";var a={langLocaleCode:"ja-JP",cultureCode:"ja-JP",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"千",million:"百万",billion:"十億",trillion:"兆"},ordinal:function(){return"."},currency:{symbol:"¥",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:"$ ,0.00",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:"$ ,0"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/ko-KR.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/ko-KR.min.js deleted file mode 100644 index a46c231..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/ko-KR.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Korean - * author (numbro.js Version): Randy Wilander : https://github.com/rocketedaway - * author (numeral.js Version) : Rich Daley : https://github.com/pedantic-git - */ -(function(){"use strict";var a={langLocaleCode:"ko-KR",cultureCode:"ko-KR",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"천",million:"백만",billion:"십억",trillion:"일조"},ordinal:function(){return"."},currency:{symbol:"₩"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/lv-LV.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/lv-LV.min.js deleted file mode 100644 index c060b4b..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/lv-LV.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Latvian - * locale: Latvia - * author : Lauris Bukšis-Haberkorns : https://github.com/Lafriks - */ -(function(){"use strict";var a={langLocaleCode:"lv-LV",cultureCode:"lv-LV",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:" tūkst.",million:" milj.",billion:" mljrd.",trillion:" trilj."},ordinal:function(){return"."},currency:{symbol:"€",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/nb-NO.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/nb-NO.min.js deleted file mode 100644 index d2da9b2..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/nb-NO.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language: Norwegian Bokmål - * locale: Norway - * author : Benjamin Van Ryseghem - */ -(function(){"use strict";var a={langLocaleCode:"nb-NO",cultureCode:"nb-NO",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"t",million:"M",billion:"md",trillion:"t"},currency:{symbol:"kr",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/nb.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/nb.min.js deleted file mode 100644 index 0702859..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/nb.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * numbro.js language configuration - * language : Norwegian Bokmål (nb) - * author : Tim McIntosh (StayinFront NZ) - */ -(function(){"use strict";var a={langLocaleCode:"nb",cultureCode:"nb",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"t",million:"mil",billion:"mia",trillion:"b"},ordinal:function(){return"."},currency:{symbol:"kr"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture("nb",a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/nl-BE.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/nl-BE.min.js deleted file mode 100644 index 6d9f235..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/nl-BE.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Dutch - * locale: Belgium - * author : Dieter Luypaert : https://github.com/moeriki - */ -(function(){"use strict";var a={langLocaleCode:"nl-BE",cultureCode:"nl-BE",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"k",million:"mln",billion:"mld",trillion:"bln"},ordinal:function(a){var b=a%100;return 0!==a&&1>=b||8===b||b>=20?"ste":"de"},currency:{symbol:"€",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/nl-NL.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/nl-NL.min.js deleted file mode 100644 index df7178c..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/nl-NL.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Dutch - * locale: Netherlands - * author : Dave Clayton : https://github.com/davedx - */ -(function(){"use strict";var a={langLocaleCode:"nl-NL",cultureCode:"nl-NL",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"k",million:"mln",billion:"mrd",trillion:"bln"},ordinal:function(a){var b=a%100;return 0!==a&&1>=b||8===b||b>=20?"ste":"de"},currency:{symbol:"€",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/nn.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/nn.min.js deleted file mode 100644 index 40a7427..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/nn.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * numbro.js language configuration - * language : Norwegian Nynorsk (nn) - * author : Tim McIntosh (StayinFront NZ) - */ -!function(){"use strict";var a={langLocaleCode:"nn",cultureCode:"nn",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"t",million:"mil",billion:"mia",trillion:"b"},ordinal:function(){return"."},currency:{symbol:"kr"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.language&&window.numbro.language("nn",a)}(); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/pl-PL.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/pl-PL.min.js deleted file mode 100644 index 0c1e909..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/pl-PL.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Polish - * locale : Poland - * author : Dominik Bulaj : https://github.com/dominikbulaj - */ -(function(){"use strict";var a={langLocaleCode:"pl-PL",cultureCode:"pl-PL",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"tys.",million:"mln",billion:"mld",trillion:"bln"},ordinal:function(){return"."},currency:{symbol:" zł",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/pt-BR.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/pt-BR.min.js deleted file mode 100644 index 6a69860..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/pt-BR.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Portuguese - * locale : Brazil - * author : Ramiro Varandas Jr : https://github.com/ramirovjr - */ -(function(){"use strict";var a={langLocaleCode:"pt-BR",cultureCode:"pt-BR",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"mil",million:"milhões",billion:"b",trillion:"t"},ordinal:function(){return"º"},currency:{symbol:"R$",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/pt-PT.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/pt-PT.min.js deleted file mode 100644 index 878b0d4..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/pt-PT.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Portuguese - * locale : Portugal - * author : Diogo Resende : https://github.com/dresende - */ -(function(){"use strict";var a={langLocaleCode:"pt-PT",cultureCode:"pt-PT",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(){return"º"},currency:{symbol:"€",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/ro-RO.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/ro-RO.min.js deleted file mode 100644 index 943136a..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/ro-RO.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * numeral.js language configuration - * language : Romanian - * author : Andrei Alecu https://github.com/andreialecu - */ -(function(){"use strict";var a={langLocaleCode:"ro-RO",cultureCode:"ro-RO",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"mii",million:"mil",billion:"mld",trillion:"bln"},ordinal:function(){return"."},currency:{symbol:" lei",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/ro.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/ro.min.js deleted file mode 100644 index cd14251..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/ro.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * numbro.js language configuration - * language : Romanian (ro) - * author : Tim McIntosh (StayinFront NZ) - */ -(function(){"use strict";var a={langLocaleCode:"ro",cultureCode:"ro",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"mie",million:"mln",billion:"mld",trillion:"t"},ordinal:function(){return"."},currency:{symbol:"RON"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture("ro",a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/ru-RU.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/ru-RU.min.js deleted file mode 100644 index bb5bf1f..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/ru-RU.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/*! - * numbro.js language configuration - * language : Russian - * locale : Russsia - * author : Anatoli Papirovski : https://github.com/apapirovski - */ -(function(){"use strict";var a={langLocaleCode:"ru-RU",cultureCode:"ru-RU",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"тыс.",million:"млн",billion:"b",trillion:"t"},ordinal:function(){ -// not ideal, but since in Russian it can taken on -// different forms (masculine, feminine, neuter) -// this is all we can do -return"."},currency:{symbol:"руб.",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/ru-UA.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/ru-UA.min.js deleted file mode 100644 index c2997eb..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/ru-UA.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/*! - * numbro.js language configuration - * language : Russian - * locale : Ukraine - * author : Anatoli Papirovski : https://github.com/apapirovski - */ -(function(){"use strict";var a={langLocaleCode:"ru-UA",cultureCode:"ru-UA",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"тыс.",million:"млн",billion:"b",trillion:"t"},ordinal:function(){ -// not ideal, but since in Russian it can taken on -// different forms (masculine, feminine, neuter) -// this is all we can do -return"."},currency:{symbol:"₴",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/sk-SK.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/sk-SK.min.js deleted file mode 100644 index 802627e..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/sk-SK.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Slovak - * locale : Slovakia - * author : Jan Pesa : https://github.com/smajl (based on work from Ahmed Al Hafoudh : http://www.freevision.sk) - */ -(function(){"use strict";var a={langLocaleCode:"sk-SK",cultureCode:"sk-SK",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"tis.",million:"mil.",billion:"mld.",trillion:"bil."},ordinal:function(){return"."},currency:{symbol:"€",position:"postfix",spaceSeparated:!0},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/sl.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/sl.min.js deleted file mode 100644 index 209015e..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/sl.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Slovene - * locale: Slovenia - * author : Tim McIntosh (StayinFront NZ) - */ -!function(){"use strict";var a={langLocaleCode:"sl",cultureCode:"sl",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"tis.",million:"mil.",billion:"b",trillion:"t"},ordinal:function(){return"."},currency:{symbol:"€"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture("sl",a)}(); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/sr-Cyrl-RS.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/sr-Cyrl-RS.min.js deleted file mode 100644 index 55e7a65..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/sr-Cyrl-RS.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Serbian (sr) - * country : Serbia (Cyrillic) - * author : Tim McIntosh (StayinFront NZ) - */ -!function(){"use strict";var a={langLocaleCode:"sr-Cyrl-RS",cultureCode:"sr-Cyrl-RS",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"тыс.",million:"млн",billion:"b",trillion:"t"},ordinal:function(){return"."},currency:{symbol:"RSD"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture("sr-Cyrl-RS",a)}(); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/sv-SE.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/sv-SE.min.js deleted file mode 100644 index 5b34a9f..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/sv-SE.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Swedish - * locale : Sweden - * author : Benjamin Van Ryseghem (benjamin.vanryseghem.com) - */ -(function(){"use strict";var a={langLocaleCode:"sv-SE",cultureCode:"sv-SE",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"t",million:"M",billion:"md",trillion:"tmd"},currency:{symbol:"kr",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/th-TH.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/th-TH.min.js deleted file mode 100644 index 2f4e107..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/th-TH.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Thai - * locale : Thailand - * author : Sathit Jittanupat : https://github.com/jojosati - */ -(function(){"use strict";var a={langLocaleCode:"th-TH",cultureCode:"th-TH",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"พัน",million:"ล้าน",billion:"พันล้าน",trillion:"ล้านล้าน"},ordinal:function(){return"."},currency:{symbol:"฿",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/tr-TR.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/tr-TR.min.js deleted file mode 100644 index 99f4100..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/tr-TR.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * numbro.js language configuration - * language : Turkish - * locale : Turkey - * author : Ecmel Ercan : https://github.com/ecmel, - * Erhan Gundogan : https://github.com/erhangundogan, - * Burak Yiğit Kaya: https://github.com/BYK - */ -(function(){"use strict";var a={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"},b={langLocaleCode:"tr-TR",cultureCode:"tr-TR",delimiters:{thousands:".",decimal:","},abbreviations:{thousand:"bin",million:"milyon",billion:"milyar",trillion:"trilyon"},ordinal:function(b){if(0===b)// special case for zero -return"'ıncı";var c=b%10,d=b%100-c,e=b>=100?100:null;return a[c]||a[d]||a[e]},currency:{symbol:"₺",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=b), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(b.cultureCode,b)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/uk-UA.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/uk-UA.min.js deleted file mode 100644 index f170e7e..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/uk-UA.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/*! - * numbro.js language configuration - * language : Ukrainian - * locale : Ukraine - * author : Michael Piefel : https://github.com/piefel (with help from Tetyana Kuzmenko) - */ -(function(){"use strict";var a={langLocaleCode:"uk-UA",cultureCode:"uk-UA",delimiters:{thousands:" ",decimal:","},abbreviations:{thousand:"тис.",million:"млн",billion:"млрд",trillion:"блн"},ordinal:function(){ -// not ideal, but since in Ukrainian it can taken on -// different forms (masculine, feminine, neuter) -// this is all we can do -return""},currency:{symbol:"₴",position:"postfix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:",0.00 $",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:",0 $"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-CN.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/zh-CN.min.js deleted file mode 100644 index 29da0b3..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-CN.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : simplified chinese - * locale : China - * author : badplum : https://github.com/badplum - */ -(function(){"use strict";var a={langLocaleCode:"zh-CN",cultureCode:"zh-CN",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"千",million:"百万",billion:"十亿",trillion:"兆"},ordinal:function(){return"."},currency:{symbol:"¥",position:"prefix"},defaults:{currencyFormat:",4 a"},formats:{fourDigits:"4 a",fullWithTwoDecimals:"$ ,0.00",fullWithTwoDecimalsNoCurrency:",0.00",fullWithNoDecimals:"$ ,0"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-HANS.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/zh-HANS.min.js deleted file mode 100644 index 58b19db..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-HANS.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * numbro.js language configuration - * language : Chinese simplified (zh-HANS) - * author : Tim McIntosh (StayinFront NZ) - */ -!function(){"use strict";var a={langLocaleCode:"zh-HANS",cultureCode:"zh-HANS",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"千",million:"百万",billion:"十亿",trillion:"兆"},ordinal:function(){return"."},currency:{symbol:"¥"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&this.numbro&&this.numbro.culture&&this.numbro.culture("zh-HANS",a)}(); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-HANT.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/zh-HANT.min.js deleted file mode 100644 index dcee592..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-HANT.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * numbro.js language configuration - * language : Chinese traditional (zh-HANT) - * author : Tim McIntosh (StayinFront NZ) - */ -!function(){"use strict";var a={langLocaleCode:"zh-HANT",cultureCode:"zh-HANT",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"千",million:"百萬",billion:"十億",trillion:"兆"},ordinal:function(){return"."},currency:{symbol:"$"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture("zh-HANT",a)}(); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-MO.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/zh-MO.min.js deleted file mode 100644 index a047199..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-MO.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Chinese traditional - * locale: Macau - * author : Tim McIntosh (StayinFront NZ) - */ -!function(){"use strict";var a={langLocaleCode:"zh-MO",cultureCode:"zh-MO",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"千",million:"百萬",billion:"十億",trillion:"兆"},ordinal:function(){return"."},currency:{symbol:"MOP"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture("zh-MO",a)}(); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-SG.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/zh-SG.min.js deleted file mode 100644 index de7e9f5..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-SG.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Chinese simplified - * locale: Singapore - * author : Tim McIntosh (StayinFront NZ) - */ -(function(){"use strict";var a={langLocaleCode:"zh-SG",cultureCode:"zh-SG",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"千",million:"百万",billion:"十亿",trillion:"兆"},ordinal:function(){return"."},currency:{symbol:"$"}}; -// Node -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture("zh-SG",a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-TW.min.js b/muk_web_preview_msoffice/static/lib/numbro/languages/zh-TW.min.js deleted file mode 100644 index d823d2e..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/languages/zh-TW.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * numbro.js language configuration - * language : Chinese (Taiwan) - * author (numbro.js Version): Randy Wilander : https://github.com/rocketedaway - * author (numeral.js Version) : Rich Daley : https://github.com/pedantic-git - */ -(function(){"use strict";var a={langLocaleCode:"zh-TW",cultureCode:"zh-TW",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"千",million:"百萬",billion:"十億",trillion:"兆"},ordinal:function(){return"第"},currency:{symbol:"NT$"}}; -// CommonJS -"undefined"!=typeof module&&module.exports&&(module.exports=a), -// Browser -"undefined"!=typeof window&&window.numbro&&window.numbro.culture&&window.numbro.culture(a.cultureCode,a)}).call("undefined"==typeof window?this:window); \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/numbro/numbro.js b/muk_web_preview_msoffice/static/lib/numbro/numbro.js deleted file mode 100644 index b670d73..0000000 --- a/muk_web_preview_msoffice/static/lib/numbro/numbro.js +++ /dev/null @@ -1,1293 +0,0 @@ -/*! - * numbro.js - * version : 1.11.0 - * author : Företagsplatsen AB - * license : MIT - * http://www.foretagsplatsen.se - */ - -(function () { - 'use strict'; - - /************************************ - Constants - ************************************/ - - var numbro, - VERSION = '1.11.0', - binarySuffixes = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'], - decimalSuffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], - bytes = { - general: { scale: 1024, suffixes: decimalSuffixes, marker: 'bd' }, - binary: { scale: 1024, suffixes: binarySuffixes, marker: 'b' }, - decimal: { scale: 1000, suffixes: decimalSuffixes, marker: 'd' } - }, - // general must be before the others because it reuses their characters! - byteFormatOrder = [ bytes.general, bytes.binary, bytes.decimal ], - // internal storage for culture config files - cultures = {}, - // Todo: Remove in 2.0.0 - languages = cultures, - currentCulture = 'en-US', - zeroFormat = null, - defaultFormat = '0,0', - defaultCurrencyFormat = '0$', - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports), - // default culture - enUS = { - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function(number) { - var b = number % 10; - return (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '$', - position: 'prefix' - }, - defaults: { - currencyFormat: ',0000 a' - }, - formats: { - fourDigits: '0000 a', - fullWithTwoDecimals: '$ ,0.00', - fullWithTwoDecimalsNoCurrency: ',0.00' - } - }; - - /************************************ - Constructors - ************************************/ - - - // Numbro prototype object - function Numbro(number) { - this._value = number; - } - - function numberLength(number) { - if (number === 0) { return 1; } - return Math.floor(Math.log(Math.abs(number)) / Math.LN10) + 1; - } - - function zeroes(count) { - var i, ret = ''; - - for (i = 0; i < count; i++) { - ret += '0'; - } - - return ret; - } - /** - * Implementation of toFixed() for numbers with exponents - * This function may return negative representations for zero values e.g. "-0.0" - */ - function toFixedLargeSmall(value, precision) { - var mantissa, - beforeDec, - afterDec, - exponent, - prefix, - endStr, - zerosStr, - str; - - str = value.toString(); - - mantissa = str.split('e')[0]; - exponent = str.split('e')[1]; - - beforeDec = mantissa.split('.')[0]; - afterDec = mantissa.split('.')[1] || ''; - - if (+exponent > 0) { - // exponent is positive - add zeros after the numbers - str = beforeDec + afterDec + zeroes(exponent - afterDec.length); - } else { - // exponent is negative - - if (+beforeDec < 0) { - prefix = '-0'; - } else { - prefix = '0'; - } - - // tack on the decimal point if needed - if (precision > 0) { - prefix += '.'; - } - - zerosStr = zeroes((-1 * exponent) - 1); - // substring off the end to satisfy the precision - endStr = (zerosStr + Math.abs(beforeDec) + afterDec).substr(0, precision); - str = prefix + endStr; - } - - // only add percision 0's if the exponent is positive - if (+exponent > 0 && precision > 0) { - str += '.' + zeroes(precision); - } - - return str; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present - * problems for accounting- and finance-related software. - * - * Also removes negative signs for zero-formatted numbers. e.g. -0.01 w/ precision 1 -> 0.0 - */ - function toFixed(value, precision, roundingFunction, optionals) { - var power = Math.pow(10, precision), - optionalsRegExp, - output; - - if (value.toString().indexOf('e') > -1) { - // toFixed returns scientific notation for numbers above 1e21 and below 1e-7 - output = toFixedLargeSmall(value, precision); - // remove the leading negative sign if it exists and should not be present (e.g. -0.00) - if (output.charAt(0) === '-' && +output >= 0) { - output = output.substr(1); // chop off the '-' - } - } - else { - // Multiply up by precision, round accurately, then divide and use native toFixed(): - output = (roundingFunction(value + 'e+' + precision) / power).toFixed(precision); - } - - if (optionals) { - optionalsRegExp = new RegExp('0{1,' + optionals + '}$'); - output = output.replace(optionalsRegExp, ''); - } - - return output; - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumbro(n, format, roundingFunction) { - var output, - escapedFormat = format.replace(/\{[^\{\}]*\}/g, ''); - - // figure out what kind of format we are dealing with - if (escapedFormat.indexOf('$') > -1) { // currency!!!!! - output = formatCurrency(n, cultures[currentCulture].currency.symbol, format, roundingFunction); - } else if (escapedFormat.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format, roundingFunction); - } else if (escapedFormat.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' numbers or bytes - output = formatNumber(n._value, format, roundingFunction); - } - - // return string - return output; - } - - // revert to number - function unformatNumbro(n, string) { - var stringOriginal = string, - thousandRegExp, - millionRegExp, - billionRegExp, - trillionRegExp, - bytesMultiplier = false, - power; - - if (string.indexOf(':') > -1) { - n._value = unformatTime(string); - } else { - if (string === zeroFormat) { - n._value = 0; - } else { - if (cultures[currentCulture].delimiters.decimal !== '.') { - string = string.replace(/\./g, '').replace(cultures[currentCulture].delimiters.decimal, '.'); - } - - // see if abbreviations are there so that we can multiply to the correct number - thousandRegExp = new RegExp('[^a-zA-Z]' + cultures[currentCulture].abbreviations.thousand + - '(?:\\)|(\\' + cultures[currentCulture].currency.symbol + ')?(?:\\))?)?$'); - millionRegExp = new RegExp('[^a-zA-Z]' + cultures[currentCulture].abbreviations.million + - '(?:\\)|(\\' + cultures[currentCulture].currency.symbol + ')?(?:\\))?)?$'); - billionRegExp = new RegExp('[^a-zA-Z]' + cultures[currentCulture].abbreviations.billion + - '(?:\\)|(\\' + cultures[currentCulture].currency.symbol + ')?(?:\\))?)?$'); - trillionRegExp = new RegExp('[^a-zA-Z]' + cultures[currentCulture].abbreviations.trillion + - '(?:\\)|(\\' + cultures[currentCulture].currency.symbol + ')?(?:\\))?)?$'); - - // see if bytes are there so that we can multiply to the correct number - for (power = 1; power < binarySuffixes.length && !bytesMultiplier; ++power) { - if (string.indexOf(binarySuffixes[power]) > -1) { - bytesMultiplier = Math.pow(1024, power); - } else if (string.indexOf(decimalSuffixes[power]) > -1) { - bytesMultiplier = Math.pow(1000, power); - } - } - - var str = string.replace(/[^0-9\.]+/g, ''); - if (str === '') { - // An empty string is not a number. - n._value = NaN; - - } else { - // do some math to create our number - n._value = ((bytesMultiplier) ? bytesMultiplier : 1) * - ((stringOriginal.match(thousandRegExp)) ? Math.pow(10, 3) : 1) * - ((stringOriginal.match(millionRegExp)) ? Math.pow(10, 6) : 1) * - ((stringOriginal.match(billionRegExp)) ? Math.pow(10, 9) : 1) * - ((stringOriginal.match(trillionRegExp)) ? Math.pow(10, 12) : 1) * - ((string.indexOf('%') > -1) ? 0.01 : 1) * - (((string.split('-').length + - Math.min(string.split('(').length - 1, string.split(')').length - 1)) % 2) ? 1 : -1) * - Number(str); - - // round if we are talking about bytes - n._value = (bytesMultiplier) ? Math.ceil(n._value) : n._value; - } - } - } - return n._value; - } - - function formatCurrency(n, currencySymbol, originalFormat, roundingFunction) { - var format = originalFormat, - symbolIndex = format.indexOf('$'), - openParenIndex = format.indexOf('('), - plusSignIndex = format.indexOf('+'), - minusSignIndex = format.indexOf('-'), - space = '', - decimalSeparator = '', - spliceIndex, - output; - - if(format.indexOf('$') === -1){ - // Use defaults instead of the format provided - if (cultures[currentCulture].currency.position === 'infix') { - decimalSeparator = currencySymbol; - if (cultures[currentCulture].currency.spaceSeparated) { - decimalSeparator = ' ' + decimalSeparator + ' '; - } - } else if (cultures[currentCulture].currency.spaceSeparated) { - space = ' '; - } - } else { - // check for space before or after currency - if (format.indexOf(' $') > -1) { - space = ' '; - format = format.replace(' $', ''); - } else if (format.indexOf('$ ') > -1) { - space = ' '; - format = format.replace('$ ', ''); - } else { - format = format.replace('$', ''); - } - } - - // Format The Number - output = formatNumber(n._value, format, roundingFunction, decimalSeparator); - - if (originalFormat.indexOf('$') === -1) { - // Use defaults instead of the format provided - switch (cultures[currentCulture].currency.position) { - case 'postfix': - if (output.indexOf(')') > -1) { - output = output.split(''); - output.splice(-1, 0, space + currencySymbol); - output = output.join(''); - } else { - output = output + space + currencySymbol; - } - break; - case 'infix': - break; - case 'prefix': - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - spliceIndex = Math.max(openParenIndex, minusSignIndex) + 1; - - output.splice(spliceIndex, 0, currencySymbol + space); - output = output.join(''); - } else { - output = currencySymbol + space + output; - } - break; - default: - throw Error('Currency position should be among ["prefix", "infix", "postfix"]'); - } - } else { - // position the symbol - if (symbolIndex <= 1) { - if (output.indexOf('(') > -1 || output.indexOf('+') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - spliceIndex = 1; - if (symbolIndex < openParenIndex || symbolIndex < plusSignIndex || symbolIndex < minusSignIndex) { - // the symbol appears before the "(", "+" or "-" - spliceIndex = 0; - } - output.splice(spliceIndex, 0, currencySymbol + space); - output = output.join(''); - } else { - output = currencySymbol + space + output; - } - } else { - if (output.indexOf(')') > -1) { - output = output.split(''); - output.splice(-1, 0, space + currencySymbol); - output = output.join(''); - } else { - output = output + space + currencySymbol; - } - } - } - - return output; - } - - function formatForeignCurrency(n, foreignCurrencySymbol, originalFormat, roundingFunction) { - return formatCurrency(n, foreignCurrencySymbol, originalFormat, roundingFunction); - } - - function formatPercentage(n, format, roundingFunction) { - var space = '', - output, - value = n._value * 100; - - // check for space before % - if (format.indexOf(' %') > -1) { - space = ' '; - format = format.replace(' %', ''); - } else { - format = format.replace('%', ''); - } - - output = formatNumber(value, format, roundingFunction); - - if (output.indexOf(')') > -1) { - output = output.split(''); - output.splice(-1, 0, space + '%'); - output = output.join(''); - } else { - output = output + space + '%'; - } - - return output; - } - - function formatTime(n) { - var hours = Math.floor(n._value / 60 / 60), - minutes = Math.floor((n._value - (hours * 60 * 60)) / 60), - seconds = Math.round(n._value - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + - ((minutes < 10) ? '0' + minutes : minutes) + ':' + - ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime(string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.length === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatByteUnits (value, suffixes, scale) { - var suffix = suffixes[0], - power, - min, - max, - abs = Math.abs(value); - - if (abs >= scale) { - for (power = 1; power < suffixes.length; ++power) { - min = Math.pow(scale, power); - max = Math.pow(scale, power + 1); - - if (abs >= min && abs < max) { - suffix = suffixes[power]; - value = value / min; - break; - } - } - - // values greater than or equal to [scale] YB never set the suffix - if (suffix === suffixes[0]) { - value = value / Math.pow(scale, suffixes.length - 1); - suffix = suffixes[suffixes.length - 1]; - } - } - - return { value: value, suffix: suffix }; - } - - function formatNumber (value, format, roundingFunction, sep) { - var negP = false, - signed = false, - optDec = false, - abbr = '', - abbrK = false, // force abbreviation to thousands - abbrM = false, // force abbreviation to millions - abbrB = false, // force abbreviation to billions - abbrT = false, // force abbreviation to trillions - abbrForce = false, // force abbreviation - bytes = '', - byteFormat, - units, - ord = '', - abs = Math.abs(value), - totalLength, - length, - minimumPrecision, - pow, - w, - intPrecision, - precision, - prefix, - postfix, - thousands, - d = '', - forcedNeg = false, - neg = false, - indexOpenP, - indexMinus, - paren = '', - minlen, - i; - - // check if number is zero and a custom zero format has been set - if (value === 0 && zeroFormat !== null) { - return zeroFormat; - } - - if (!isFinite(value)) { - return '' + value; - } - - if (format.indexOf('{') === 0) { - var end = format.indexOf('}'); - if (end === -1) { - throw Error('Format should also contain a "}"'); - } - prefix = format.slice(1, end); - format = format.slice(end + 1); - } else { - prefix = ''; - } - - if (format.indexOf('}') === format.length - 1 && format.length) { - var start = format.indexOf('{'); - if (start === -1) { - throw Error('Format should also contain a "{"'); - } - postfix = format.slice(start + 1, -1); - format = format.slice(0, start + 1); - } else { - postfix = ''; - } - - // check for min length - var info; - if (format.indexOf('.') === -1) { - info = format.match(/([0-9]+).*/); - } else { - info = format.match(/([0-9]+)\..*/); - } - minlen = info === null ? -1 : info[1].length; - - // see if we should use parentheses for negative number or if we should prefix with a sign - // if both are present we default to parentheses - if (format.indexOf('-') !== -1) { - forcedNeg = true; - } - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } else if (format.indexOf('+') > -1) { - signed = true; - format = format.replace(/\+/g, ''); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - intPrecision = format.split('.')[0].match(/[0-9]+/g) || ['0']; - intPrecision = parseInt(intPrecision[0], 10); - - // check if abbreviation is specified - abbrK = format.indexOf('aK') >= 0; - abbrM = format.indexOf('aM') >= 0; - abbrB = format.indexOf('aB') >= 0; - abbrT = format.indexOf('aT') >= 0; - abbrForce = abbrK || abbrM || abbrB || abbrT; - - // check for space before abbreviation - if (format.indexOf(' a') > -1) { - abbr = ' '; - format = format.replace(' a', ''); - } else { - format = format.replace('a', ''); - } - - totalLength = numberLength(value); - minimumPrecision = totalLength % 3; - minimumPrecision = minimumPrecision === 0 ? 3 : minimumPrecision; - - if (intPrecision && abs !== 0) { - pow = 3 * ~~((Math.min(intPrecision, totalLength) - minimumPrecision) / 3); - abs = abs / Math.pow(10, pow); - } - - if (totalLength !== intPrecision) { - if (abs >= Math.pow(10, 12) && !abbrForce || abbrT) { - // trillion - abbr = abbr + cultures[currentCulture].abbreviations.trillion; - value = value / Math.pow(10, 12); - } else if (abs < Math.pow(10, 12) && abs >= Math.pow(10, 9) && !abbrForce || abbrB) { - // billion - abbr = abbr + cultures[currentCulture].abbreviations.billion; - value = value / Math.pow(10, 9); - } else if (abs < Math.pow(10, 9) && abs >= Math.pow(10, 6) && !abbrForce || abbrM) { - // million - abbr = abbr + cultures[currentCulture].abbreviations.million; - value = value / Math.pow(10, 6); - } else if (abs < Math.pow(10, 6) && abs >= Math.pow(10, 3) && !abbrForce || abbrK) { - // thousand - abbr = abbr + cultures[currentCulture].abbreviations.thousand; - value = value / Math.pow(10, 3); - } - } - - length = numberLength(value); - if (intPrecision && length < intPrecision && format.indexOf('.') === -1) { - format += '[.]'; - format += zeroes(intPrecision - length); - } - } - - // see if we are formatting - // binary-decimal bytes (1024 MB), binary bytes (1024 MiB), or decimal bytes (1000 MB) - for (i = 0; i < byteFormatOrder.length; ++i) { - byteFormat = byteFormatOrder[i]; - - if (format.indexOf(byteFormat.marker) > -1) { - // check for space before - if (format.indexOf(' ' + byteFormat.marker) >-1) { - bytes = ' '; - } - - // remove the marker (with the space if it had one) - format = format.replace(bytes + byteFormat.marker, ''); - - units = formatByteUnits(value, byteFormat.suffixes, byteFormat.scale); - - value = units.value; - bytes = bytes + units.suffix; - - break; - } - } - - // see if ordinal is wanted - if (format.indexOf('o') > -1) { - // check for space before - if (format.indexOf(' o') > -1) { - ord = ' '; - format = format.replace(' o', ''); - } else { - format = format.replace('o', ''); - } - - if (cultures[currentCulture].ordinal) { - ord = ord + cultures[currentCulture].ordinal(value); - } - } - - if (format.indexOf('[.]') > -1) { - optDec = true; - format = format.replace('[.]', '.'); - } - - precision = format.split('.')[1]; - thousands = format.indexOf(','); - - if (precision) { - var dSplit = []; - - if (precision.indexOf('*') !== -1) { - d = value.toString(); - dSplit = d.split('.'); - if (dSplit.length > 1) { - d = toFixed(value, dSplit[1].length, roundingFunction); - } - } else { - if (precision.indexOf('[') > -1) { - precision = precision.replace(']', ''); - precision = precision.split('['); - d = toFixed(value, (precision[0].length + precision[1].length), roundingFunction, - precision[1].length); - } else { - d = toFixed(value, precision.length, roundingFunction); - } - } - - dSplit = d.split('.'); - w = dSplit[0]; - - if (dSplit.length > 1 && dSplit[1].length) { - var p = sep ? abbr + sep : cultures[currentCulture].delimiters.decimal; - d = p + dSplit[1]; - } else { - d = ''; - } - - if (optDec && Number(d.slice(1)) === 0) { - d = ''; - } - } else { - w = toFixed(value, 0, roundingFunction); - } - - // format number - if (w.indexOf('-') > -1) { - w = w.slice(1); - neg = true; - } - - if (w.length < minlen) { - w = zeroes(minlen - w.length) + w; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + - cultures[currentCulture].delimiters.thousands); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - indexOpenP = format.indexOf('('); - indexMinus = format.indexOf('-'); - - if (indexOpenP < indexMinus) { - paren = ((negP && neg) ? '(' : '') + (((forcedNeg && neg) || (!negP && neg)) ? '-' : ''); - } else { - paren = (((forcedNeg && neg) || (!negP && neg)) ? '-' : '') + ((negP && neg) ? '(' : ''); - } - - return prefix + - paren + ((!neg && signed && value !== 0) ? '+' : '') + - w + d + - ((ord) ? ord : '') + - ((abbr && !sep) ? abbr : '') + - ((bytes) ? bytes : '') + - ((negP && neg) ? ')' : '') + - postfix; - } - - /************************************ - Top Level Functions - ************************************/ - - numbro = function(input) { - if (numbro.isNumbro(input)) { - input = input.value(); - } else if (typeof input === 'string' || typeof input === 'number') { - input = numbro.fn.unformat(input); - } else { - input = NaN; - } - - return new Numbro(Number(input)); - }; - - // version number - numbro.version = VERSION; - - // compare numbro object - numbro.isNumbro = function(obj) { - return obj instanceof Numbro; - }; - - /** - * This function allow the user to set a new language with a fallback if - * the language does not exist. If no fallback language is provided, - * it fallbacks to english. - * - * @deprecated Since in version 1.6.0. It will be deleted in version 2.0 - * `setCulture` should be used instead. - */ - numbro.setLanguage = function(newLanguage, fallbackLanguage) { - console.warn('`setLanguage` is deprecated since version 1.6.0. Use `setCulture` instead'); - var key = newLanguage, - prefix = newLanguage.split('-')[0], - matchingLanguage = null; - if (!languages[key]) { - Object.keys(languages).forEach(function(language) { - if (!matchingLanguage && language.split('-')[0] === prefix) { - matchingLanguage = language; - } - }); - key = matchingLanguage || fallbackLanguage || 'en-US'; - } - chooseCulture(key); - }; - - /** - * This function allow the user to set a new culture with a fallback if - * the culture does not exist. If no fallback culture is provided, - * it falls back to "en-US". - */ - numbro.setCulture = function(newCulture, fallbackCulture) { - var key = newCulture, - suffix = newCulture.split('-')[1], - matchingCulture = null; - if (!cultures[key]) { - if (suffix) { - Object.keys(cultures).forEach(function(language) { - if (!matchingCulture && language.split('-')[1] === suffix) { - matchingCulture = language; - } - }); - } - - key = matchingCulture || fallbackCulture || 'en-US'; - } - chooseCulture(key); - }; - - /** - * This function will load languages and then set the global language. If - * no arguments are passed in, it will simply return the current global - * language key. - * - * @deprecated Since in version 1.6.0. It will be deleted in version 2.0 - * `culture` should be used instead. - */ - numbro.language = function(key, values) { - console.warn('`language` is deprecated since version 1.6.0. Use `culture` instead'); - - if (!key) { - return currentCulture; - } - - if (key && !values) { - if (!languages[key]) { - throw new Error('Unknown language : ' + key); - } - chooseCulture(key); - } - - if (values || !languages[key]) { - setCulture(key, values); - } - - return numbro; - }; - - /** - * This function will load cultures and then set the global culture. If - * no arguments are passed in, it will simply return the current global - * culture code. - */ - numbro.culture = function(code, values) { - if (!code) { - return currentCulture; - } - - if (code && !values) { - if (!cultures[code]) { - throw new Error('Unknown culture : ' + code); - } - chooseCulture(code); - } - - if (values || !cultures[code]) { - setCulture(code, values); - } - - return numbro; - }; - - /** - * This function provides access to the loaded language data. If - * no arguments are passed in, it will simply return the current - * global language object. - * - * @deprecated Since in version 1.6.0. It will be deleted in version 2.0 - * `culture` should be used instead. - */ - numbro.languageData = function(key) { - console.warn('`languageData` is deprecated since version 1.6.0. Use `cultureData` instead'); - - if (!key) { - return languages[currentCulture]; - } - - if (!languages[key]) { - throw new Error('Unknown language : ' + key); - } - - return languages[key]; - }; - - /** - * This function provides access to the loaded culture data. If - * no arguments are passed in, it will simply return the current - * global culture object. - */ - numbro.cultureData = function(code) { - if (!code) { - return cultures[currentCulture]; - } - - if (!cultures[code]) { - throw new Error('Unknown culture : ' + code); - } - - return cultures[code]; - }; - - numbro.culture('en-US', enUS); - - /** - * @deprecated Since in version 1.6.0. It will be deleted in version 2.0 - * `cultures` should be used instead. - */ - numbro.languages = function() { - console.warn('`languages` is deprecated since version 1.6.0. Use `cultures` instead'); - - return languages; - }; - - numbro.cultures = function() { - return cultures; - }; - - numbro.zeroFormat = function(format) { - zeroFormat = typeof(format) === 'string' ? format : null; - }; - - numbro.defaultFormat = function(format) { - defaultFormat = typeof(format) === 'string' ? format : '0.0'; - }; - - numbro.defaultCurrencyFormat = function (format) { - defaultCurrencyFormat = typeof(format) === 'string' ? format : '0$'; - }; - - numbro.validate = function(val, culture) { - - var _decimalSep, - _thousandSep, - _currSymbol, - _valArray, - _abbrObj, - _thousandRegEx, - cultureData, - temp; - - //coerce val to string - if (typeof val !== 'string') { - val += ''; - if (console.warn) { - console.warn('Numbro.js: Value is not string. It has been co-erced to: ', val); - } - } - - //trim whitespaces from either sides - val = val.trim(); - - //replace the initial '+' or '-' sign if present - val = val.replace(/^[+-]?/, ''); - - //if val is just digits return true - if ( !! val.match(/^\d+$/)) { - return true; - } - - //if val is empty return false - if (val === '') { - return false; - } - - //get the decimal and thousands separator from numbro.cultureData - try { - //check if the culture is understood by numbro. if not, default it to current culture - cultureData = numbro.cultureData(culture); - } catch (e) { - cultureData = numbro.cultureData(numbro.culture()); - } - - //setup the delimiters and currency symbol based on culture - _currSymbol = cultureData.currency.symbol; - _abbrObj = cultureData.abbreviations; - _decimalSep = cultureData.delimiters.decimal; - if (cultureData.delimiters.thousands === '.') { - _thousandSep = '\\.'; - } else { - _thousandSep = cultureData.delimiters.thousands; - } - - // validating currency symbol - temp = val.match(/^[^\d\.\,]+/); - if (temp !== null) { - val = val.substr(1); - if (temp[0] !== _currSymbol) { - return false; - } - } - - //validating abbreviation symbol - temp = val.match(/[^\d]+$/); - if (temp !== null) { - val = val.slice(0, -1); - if (temp[0] !== _abbrObj.thousand && temp[0] !== _abbrObj.million && - temp[0] !== _abbrObj.billion && temp[0] !== _abbrObj.trillion) { - return false; - } - } - - _thousandRegEx = new RegExp(_thousandSep + '{2}'); - - if (!val.match(/[^\d.,]/g)) { - _valArray = val.split(_decimalSep); - if (_valArray.length > 2) { - return false; - } else { - if (_valArray.length < 2) { - return ( !! _valArray[0].match(/^\d+.*\d$/) && !_valArray[0].match(_thousandRegEx)); - } else { - if (_valArray[0] === '') { - // for values without leading zero eg. .984 - return (!_valArray[0].match(_thousandRegEx) && - !!_valArray[1].match(/^\d+$/)); - - } else if (_valArray[0].length === 1) { - return ( !! _valArray[0].match(/^\d+$/) && - !_valArray[0].match(_thousandRegEx) && - !! _valArray[1].match(/^\d+$/)); - } else { - return ( !! _valArray[0].match(/^\d+.*\d$/) && - !_valArray[0].match(_thousandRegEx) && - !! _valArray[1].match(/^\d+$/)); - } - } - } - } - - return false; - }; - - /** - * * @deprecated Since in version 1.6.0. It will be deleted in version 2.0 - * `loadCulturesInNode` should be used instead. - */ - numbro.loadLanguagesInNode = function() { - console.warn('`loadLanguagesInNode` is deprecated since version 1.6.0. Use `loadCulturesInNode` instead'); - - numbro.loadCulturesInNode(); - }; - - numbro.loadCulturesInNode = function() { - // TODO: Rename the folder in 2.0.0 - var cultures = require('./languages'); - - for(var langLocaleCode in cultures) { - if(langLocaleCode) { - numbro.culture(langLocaleCode, cultures[langLocaleCode]); - } - } - }; - - /************************************ - Helpers - ************************************/ - - function setCulture(code, values) { - cultures[code] = values; - } - - function chooseCulture(code) { - currentCulture = code; - var defaults = cultures[code].defaults; - if (defaults && defaults.format) { - numbro.defaultFormat(defaults.format); - } - if (defaults && defaults.currencyFormat) { - numbro.defaultCurrencyFormat(defaults.currencyFormat); - } - } - - function inNodejsRuntime() { - return (typeof process !== 'undefined') && - (process.browser === undefined) && - process.title && - ( - process.title.indexOf('node') !== -1 || - process.title.indexOf('meteor-tool') > 0 || - process.title === 'grunt' || - process.title === 'gulp' - ) && - (typeof require !== 'undefined'); - } - - /************************************ - Floating-point helpers - ************************************/ - - // The floating-point helper functions and implementation - // borrows heavily from sinful.js: http://guipn.github.io/sinful.js/ - - /** - * Array.prototype.reduce for browsers that don't support it - * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Compatibility - */ - if ('function' !== typeof Array.prototype.reduce) { - Array.prototype.reduce = function(callback, optInitialValue) { - - if (null === this || 'undefined' === typeof this) { - // At the moment all modern browsers, that support strict mode, have - // native implementation of Array.prototype.reduce. For instance, IE8 - // does not support strict mode, so this check is actually useless. - throw new TypeError('Array.prototype.reduce called on null or undefined'); - } - - if ('function' !== typeof callback) { - throw new TypeError(callback + ' is not a function'); - } - - var index, - value, - length = this.length >>> 0, - isValueSet = false; - - if (1 < arguments.length) { - value = optInitialValue; - isValueSet = true; - } - - for (index = 0; length > index; ++index) { - if (this.hasOwnProperty(index)) { - if (isValueSet) { - value = callback(value, this[index], index, this); - } else { - value = this[index]; - isValueSet = true; - } - } - } - - if (!isValueSet) { - throw new TypeError('Reduce of empty array with no initial value'); - } - - return value; - }; - } - - - /** - * Computes the multiplier necessary to make x >= 1, - * effectively eliminating miscalculations caused by - * finite precision. - */ - function multiplier(x) { - var parts = x.toString().split('.'); - if (parts.length < 2) { - return 1; - } - return Math.pow(10, parts[1].length); - } - - /** - * Given a variable number of arguments, returns the maximum - * multiplier that must be used to normalize an operation involving - * all of them. - */ - function correctionFactor() { - var args = Array.prototype.slice.call(arguments); - return args.reduce(function(prev, next) { - var mp = multiplier(prev), - mn = multiplier(next); - return mp > mn ? mp : mn; - }, -Infinity); - } - - /************************************ - Numbro Prototype - ************************************/ - - - numbro.fn = Numbro.prototype = { - - clone: function() { - return numbro(this); - }, - - format: function(inputString, roundingFunction) { - return formatNumbro(this, - inputString ? inputString : defaultFormat, - (roundingFunction !== undefined) ? roundingFunction : Math.round - ); - }, - - formatCurrency: function(inputString, roundingFunction) { - return formatCurrency(this, - cultures[currentCulture].currency.symbol, - inputString ? inputString : defaultCurrencyFormat, - (roundingFunction !== undefined) ? roundingFunction : Math.round - ); - }, - - formatForeignCurrency: function(currencySymbol, inputString, roundingFunction) { - return formatForeignCurrency(this, - currencySymbol, - inputString ? inputString : defaultCurrencyFormat, - (roundingFunction !== undefined) ? roundingFunction : Math.round - ); - }, - - unformat: function(inputString) { - if (typeof inputString === 'number') { - return inputString; - } else if (typeof inputString === 'string') { - var result = unformatNumbro(this, inputString); - - // Any unparseable string (represented as NaN in the result) is - // converted into undefined. - return isNaN(result) ? undefined : result; - } else { - return undefined; - } - }, - - binaryByteUnits: function() { - return formatByteUnits(this._value, bytes.binary.suffixes, bytes.binary.scale).suffix; - }, - - byteUnits: function() { - return formatByteUnits(this._value, bytes.general.suffixes, bytes.general.scale).suffix; - }, - - decimalByteUnits: function() { - return formatByteUnits(this._value, bytes.decimal.suffixes, bytes.decimal.scale).suffix; - }, - - value: function() { - return this._value; - }, - - valueOf: function() { - return this._value; - }, - - set: function(value) { - this._value = Number(value); - return this; - }, - - add: function(value) { - var corrFactor = correctionFactor.call(null, this._value, value); - - function cback(accum, curr) { - return accum + corrFactor * curr; - } - this._value = [this._value, value].reduce(cback, 0) / corrFactor; - return this; - }, - - subtract: function(value) { - var corrFactor = correctionFactor.call(null, this._value, value); - - function cback(accum, curr) { - return accum - corrFactor * curr; - } - this._value = [value].reduce(cback, this._value * corrFactor) / corrFactor; - return this; - }, - - multiply: function(value) { - function cback(accum, curr) { - var corrFactor = correctionFactor(accum, curr), - result = accum * corrFactor; - result *= curr * corrFactor; - result /= corrFactor * corrFactor; - return result; - } - this._value = [this._value, value].reduce(cback, 1); - return this; - }, - - divide: function(value) { - function cback(accum, curr) { - var corrFactor = correctionFactor(accum, curr); - return (accum * corrFactor) / (curr * corrFactor); - } - this._value = [this._value, value].reduce(cback); - return this; - }, - - difference: function(value) { - return Math.abs(numbro(this._value).subtract(value).value()); - } - - }; - - /************************************ - Exposing Numbro - ************************************/ - - if (inNodejsRuntime()) { - //Todo: Rename the folder in 2.0.0 - numbro.loadCulturesInNode(); - } - - // CommonJS module is defined - if (hasModule) { - module.exports = numbro; - } else { - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numbro` as a global object via a string identifier, - // for Closure Compiler 'advanced' mode - this.numbro = numbro; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function() { - return numbro; - }); - } - } - -}.call(typeof window === 'undefined' ? this : window)); diff --git a/muk_web_preview_msoffice/static/lib/pikaday/LICENSE b/muk_web_preview_msoffice/static/lib/pikaday/LICENSE deleted file mode 100644 index b2caa06..0000000 --- a/muk_web_preview_msoffice/static/lib/pikaday/LICENSE +++ /dev/null @@ -1,36 +0,0 @@ -Copyright (c) 2014 David Bushell BSD & MIT license - -The MIT License (MIT) - -Copyright (c) 2014 David Bushell - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -The BSD License - -Copyright (c) 2014 David Bushell -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/muk_web_preview_msoffice/static/lib/pikaday/pikaday.css b/muk_web_preview_msoffice/static/lib/pikaday/pikaday.css deleted file mode 100644 index 16bfb7b..0000000 --- a/muk_web_preview_msoffice/static/lib/pikaday/pikaday.css +++ /dev/null @@ -1,222 +0,0 @@ -@charset "UTF-8"; - -/*! - * Pikaday - * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ - */ - -.pika-single { - z-index: 9999; - display: block; - position: relative; - color: #333; - background: #fff; - border: 1px solid #ccc; - border-bottom-color: #bbb; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -/* -clear child float (pika-lendar), using the famous micro clearfix hack -http://nicolasgallagher.com/micro-clearfix-hack/ -*/ -.pika-single:before, -.pika-single:after { - content: " "; - display: table; -} -.pika-single:after { clear: both } -.pika-single { *zoom: 1 } - -.pika-single.is-hidden { - display: none; -} - -.pika-single.is-bound { - position: absolute; - box-shadow: 0 5px 15px -5px rgba(0,0,0,.5); -} - -.pika-lendar { - float: left; - width: 240px; - margin: 8px; -} - -.pika-title { - position: relative; - text-align: center; -} - -.pika-label { - display: inline-block; - *display: inline; - position: relative; - z-index: 9999; - overflow: hidden; - margin: 0; - padding: 5px 3px; - font-size: 14px; - line-height: 20px; - font-weight: bold; - background-color: #fff; -} -.pika-title select { - cursor: pointer; - position: absolute; - z-index: 9998; - margin: 0; - left: 0; - top: 5px; - filter: alpha(opacity=0); - opacity: 0; -} - -.pika-prev, -.pika-next { - display: block; - cursor: pointer; - position: relative; - outline: none; - border: 0; - padding: 0; - width: 20px; - height: 30px; - /* hide text using text-indent trick, using width value (it's enough) */ - text-indent: 20px; - white-space: nowrap; - overflow: hidden; - background-color: transparent; - background-position: center center; - background-repeat: no-repeat; - background-size: 75% 75%; - opacity: .5; - *position: absolute; - *top: 0; -} - -.pika-prev:hover, -.pika-next:hover { - opacity: 1; -} - -.pika-prev, -.is-rtl .pika-next { - float: left; - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg=='); - *left: 0; -} - -.pika-next, -.is-rtl .pika-prev { - float: right; - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII='); - *right: 0; -} - -.pika-prev.is-disabled, -.pika-next.is-disabled { - cursor: default; - opacity: .2; -} - -.pika-select { - display: inline-block; - *display: inline; -} - -.pika-table { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - border: 0; -} - -.pika-table th, -.pika-table td { - width: 14.285714285714286%; - padding: 0; -} - -.pika-table th { - color: #999; - font-size: 12px; - line-height: 25px; - font-weight: bold; - text-align: center; -} - -.pika-button { - cursor: pointer; - display: block; - box-sizing: border-box; - -moz-box-sizing: border-box; - outline: none; - border: 0; - margin: 0; - width: 100%; - padding: 5px; - color: #666; - font-size: 12px; - line-height: 15px; - text-align: right; - background: #f5f5f5; -} - -.pika-week { - font-size: 11px; - color: #999; -} - -.is-today .pika-button { - color: #33aaff; - font-weight: bold; -} - -.is-selected .pika-button { - color: #fff; - font-weight: bold; - background: #33aaff; - box-shadow: inset 0 1px 3px #178fe5; - border-radius: 3px; -} - -.is-inrange .pika-button { - background: #D5E9F7; -} - -.is-startrange .pika-button { - color: #fff; - background: #6CB31D; - box-shadow: none; - border-radius: 3px; -} - -.is-endrange .pika-button { - color: #fff; - background: #33aaff; - box-shadow: none; - border-radius: 3px; -} - -.is-disabled .pika-button, -.is-outside-current-month .pika-button { - pointer-events: none; - cursor: default; - color: #999; - opacity: .3; -} - -.pika-button:hover { - color: #fff; - background: #ff8000; - box-shadow: none; - border-radius: 3px; -} - -/* styling for abbr */ -.pika-table abbr { - border-bottom: none; - cursor: help; -} - diff --git a/muk_web_preview_msoffice/static/lib/pikaday/pikaday.js b/muk_web_preview_msoffice/static/lib/pikaday/pikaday.js deleted file mode 100644 index 72fb602..0000000 --- a/muk_web_preview_msoffice/static/lib/pikaday/pikaday.js +++ /dev/null @@ -1,1193 +0,0 @@ -/*! - * Pikaday - * - * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday - */ - -(function (root, factory) -{ - 'use strict'; - - var moment; - if (typeof exports === 'object') { - // CommonJS module - // Load moment.js as an optional dependency - try { moment = require('moment'); } catch (e) {} - module.exports = factory(moment); - } else if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(function (req) - { - // Load moment.js as an optional dependency - var id = 'moment'; - try { moment = req(id); } catch (e) {} - return factory(moment); - }); - } else { - root.Pikaday = factory(root.moment); - } -}(this, function (moment) -{ - 'use strict'; - - /** - * feature detection and helper functions - */ - var hasMoment = typeof moment === 'function', - - hasEventListeners = !!window.addEventListener, - - document = window.document, - - sto = window.setTimeout, - - addEvent = function(el, e, callback, capture) - { - if (hasEventListeners) { - el.addEventListener(e, callback, !!capture); - } else { - el.attachEvent('on' + e, callback); - } - }, - - removeEvent = function(el, e, callback, capture) - { - if (hasEventListeners) { - el.removeEventListener(e, callback, !!capture); - } else { - el.detachEvent('on' + e, callback); - } - }, - - fireEvent = function(el, eventName, data) - { - var ev; - - if (document.createEvent) { - ev = document.createEvent('HTMLEvents'); - ev.initEvent(eventName, true, false); - ev = extend(ev, data); - el.dispatchEvent(ev); - } else if (document.createEventObject) { - ev = document.createEventObject(); - ev = extend(ev, data); - el.fireEvent('on' + eventName, ev); - } - }, - - trim = function(str) - { - return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g,''); - }, - - hasClass = function(el, cn) - { - return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1; - }, - - addClass = function(el, cn) - { - if (!hasClass(el, cn)) { - el.className = (el.className === '') ? cn : el.className + ' ' + cn; - } - }, - - removeClass = function(el, cn) - { - el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' ')); - }, - - isArray = function(obj) - { - return (/Array/).test(Object.prototype.toString.call(obj)); - }, - - isDate = function(obj) - { - return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime()); - }, - - isWeekend = function(date) - { - var day = date.getDay(); - return day === 0 || day === 6; - }, - - isLeapYear = function(year) - { - // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951 - return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; - }, - - getDaysInMonth = function(year, month) - { - return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; - }, - - setToStartOfDay = function(date) - { - if (isDate(date)) date.setHours(0,0,0,0); - }, - - compareDates = function(a,b) - { - // weak date comparison (use setToStartOfDay(date) to ensure correct result) - return a.getTime() === b.getTime(); - }, - - extend = function(to, from, overwrite) - { - var prop, hasProp; - for (prop in from) { - hasProp = to[prop] !== undefined; - if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) { - if (isDate(from[prop])) { - if (overwrite) { - to[prop] = new Date(from[prop].getTime()); - } - } - else if (isArray(from[prop])) { - if (overwrite) { - to[prop] = from[prop].slice(0); - } - } else { - to[prop] = extend({}, from[prop], overwrite); - } - } else if (overwrite || !hasProp) { - to[prop] = from[prop]; - } - } - return to; - }, - - adjustCalendar = function(calendar) { - if (calendar.month < 0) { - calendar.year -= Math.ceil(Math.abs(calendar.month)/12); - calendar.month += 12; - } - if (calendar.month > 11) { - calendar.year += Math.floor(Math.abs(calendar.month)/12); - calendar.month -= 12; - } - return calendar; - }, - - /** - * defaults and localisation - */ - defaults = { - - // bind the picker to a form field - field: null, - - // automatically show/hide the picker on `field` focus (default `true` if `field` is set) - bound: undefined, - - // position of the datepicker, relative to the field (default to bottom & left) - // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position) - position: 'bottom left', - - // automatically fit in the viewport even if it means repositioning from the position option - reposition: true, - - // the default output format for `.toString()` and `field` value - format: 'YYYY-MM-DD', - - // the initial date to view when first opened - defaultDate: null, - - // make the `defaultDate` the initial selected value - setDefaultDate: false, - - // first day of week (0: Sunday, 1: Monday etc) - firstDay: 0, - - // the default flag for moment's strict date parsing - formatStrict: false, - - // the minimum/earliest date that can be selected - minDate: null, - // the maximum/latest date that can be selected - maxDate: null, - - // number of years either side, or array of upper/lower range - yearRange: 10, - - // show week numbers at head of row - showWeekNumber: false, - - // used internally (don't config outside) - minYear: 0, - maxYear: 9999, - minMonth: undefined, - maxMonth: undefined, - - startRange: null, - endRange: null, - - isRTL: false, - - // Additional text to append to the year in the calendar title - yearSuffix: '', - - // Render the month after year in the calendar title - showMonthAfterYear: false, - - // Render days of the calendar grid that fall in the next or previous month - showDaysInNextAndPreviousMonths: false, - - // how many months are visible - numberOfMonths: 1, - - // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`) - // only used for the first display or when a selected date is not visible - mainCalendar: 'left', - - // Specify a DOM element to render the calendar in - container: undefined, - - // internationalization - i18n: { - previousMonth : 'Previous Month', - nextMonth : 'Next Month', - months : ['January','February','March','April','May','June','July','August','September','October','November','December'], - weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], - weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] - }, - - // Theme Classname - theme: null, - - // callback function - onSelect: null, - onOpen: null, - onClose: null, - onDraw: null - }, - - - /** - * templating functions to abstract HTML rendering - */ - renderDayName = function(opts, day, abbr) - { - day += opts.firstDay; - while (day >= 7) { - day -= 7; - } - return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day]; - }, - - renderDay = function(opts) - { - var arr = []; - var ariaSelected = 'false'; - if (opts.isEmpty) { - if (opts.showDaysInNextAndPreviousMonths) { - arr.push('is-outside-current-month'); - } else { - return ''; - } - } - if (opts.isDisabled) { - arr.push('is-disabled'); - } - if (opts.isToday) { - arr.push('is-today'); - } - if (opts.isSelected) { - arr.push('is-selected'); - ariaSelected = 'true'; - } - if (opts.isInRange) { - arr.push('is-inrange'); - } - if (opts.isStartRange) { - arr.push('is-startrange'); - } - if (opts.isEndRange) { - arr.push('is-endrange'); - } - return ''; - }, - - renderWeek = function (d, m, y) { - // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified. - var onejan = new Date(y, 0, 1), - weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7); - return ''; - }, - - renderRow = function(days, isRTL) - { - return '' + (isRTL ? days.reverse() : days).join('') + ''; - }, - - renderBody = function(rows) - { - return '' + rows.join('') + ''; - }, - - renderHead = function(opts) - { - var i, arr = []; - if (opts.showWeekNumber) { - arr.push(''); - } - for (i = 0; i < 7; i++) { - arr.push(''); - } - return '' + (opts.isRTL ? arr.reverse() : arr).join('') + ''; - }, - - renderTitle = function(instance, c, year, month, refYear, randId) - { - var i, j, arr, - opts = instance._o, - isMinYear = year === opts.minYear, - isMaxYear = year === opts.maxYear, - html = '
', - monthHtml, - yearHtml, - prev = true, - next = true; - - for (arr = [], i = 0; i < 12; i++) { - arr.push(''); - } - - monthHtml = '
' + opts.i18n.months[month] + '
'; - - if (isArray(opts.yearRange)) { - i = opts.yearRange[0]; - j = opts.yearRange[1] + 1; - } else { - i = year - opts.yearRange; - j = 1 + year + opts.yearRange; - } - - for (arr = []; i < j && i <= opts.maxYear; i++) { - if (i >= opts.minYear) { - arr.push(''); - } - } - yearHtml = '
' + year + opts.yearSuffix + '
'; - - if (opts.showMonthAfterYear) { - html += yearHtml + monthHtml; - } else { - html += monthHtml + yearHtml; - } - - if (isMinYear && (month === 0 || opts.minMonth >= month)) { - prev = false; - } - - if (isMaxYear && (month === 11 || opts.maxMonth <= month)) { - next = false; - } - - if (c === 0) { - html += ''; - } - if (c === (instance._o.numberOfMonths - 1) ) { - html += ''; - } - - return html += '
'; - }, - - renderTable = function(opts, data, randId) - { - return '
' + - '' + - '' + weekNum + '
' + renderDayName(opts, i, true) + '
' + renderHead(opts) + renderBody(data) + '
'; - }, - - - /** - * Pikaday constructor - */ - Pikaday = function(options) - { - var self = this, - opts = self.config(options); - - self._onMouseDown = function(e) - { - if (!self._v) { - return; - } - e = e || window.event; - var target = e.target || e.srcElement; - if (!target) { - return; - } - - if (!hasClass(target, 'is-disabled')) { - if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) { - self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day'))); - if (opts.bound) { - sto(function() { - self.hide(); - if (opts.field) { - opts.field.blur(); - } - }, 100); - } - } - else if (hasClass(target, 'pika-prev')) { - self.prevMonth(); - } - else if (hasClass(target, 'pika-next')) { - self.nextMonth(); - } - } - if (!hasClass(target, 'pika-select')) { - // if this is touch event prevent mouse events emulation - if (e.preventDefault) { - e.preventDefault(); - } else { - e.returnValue = false; - return false; - } - } else { - self._c = true; - } - }; - - self._onChange = function(e) - { - e = e || window.event; - var target = e.target || e.srcElement; - if (!target) { - return; - } - if (hasClass(target, 'pika-select-month')) { - self.gotoMonth(target.value); - } - else if (hasClass(target, 'pika-select-year')) { - self.gotoYear(target.value); - } - }; - - self._onKeyChange = function(e) - { - e = e || window.event; - - if (self.isVisible()) { - - switch(e.keyCode){ - case 13: - case 27: - opts.field.blur(); - break; - case 37: - e.preventDefault(); - self.adjustDate('subtract', 1); - break; - case 38: - self.adjustDate('subtract', 7); - break; - case 39: - self.adjustDate('add', 1); - break; - case 40: - self.adjustDate('add', 7); - break; - } - } - }; - - self._onInputChange = function(e) - { - var date; - - if (e.firedBy === self) { - return; - } - if (hasMoment) { - date = moment(opts.field.value, opts.format, opts.formatStrict); - date = (date && date.isValid()) ? date.toDate() : null; - } - else { - date = new Date(Date.parse(opts.field.value)); - } - if (isDate(date)) { - self.setDate(date); - } - if (!self._v) { - self.show(); - } - }; - - self._onInputFocus = function() - { - self.show(); - }; - - self._onInputClick = function() - { - self.show(); - }; - - self._onInputBlur = function() - { - // IE allows pika div to gain focus; catch blur the input field - var pEl = document.activeElement; - do { - if (hasClass(pEl, 'pika-single')) { - return; - } - } - while ((pEl = pEl.parentNode)); - - if (!self._c) { - self._b = sto(function() { - self.hide(); - }, 50); - } - self._c = false; - }; - - self._onClick = function(e) - { - e = e || window.event; - var target = e.target || e.srcElement, - pEl = target; - if (!target) { - return; - } - if (!hasEventListeners && hasClass(target, 'pika-select')) { - if (!target.onchange) { - target.setAttribute('onchange', 'return;'); - addEvent(target, 'change', self._onChange); - } - } - do { - if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) { - return; - } - } - while ((pEl = pEl.parentNode)); - if (self._v && target !== opts.trigger && pEl !== opts.trigger) { - self.hide(); - } - }; - - self.el = document.createElement('div'); - self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : ''); - - addEvent(self.el, 'mousedown', self._onMouseDown, true); - addEvent(self.el, 'touchend', self._onMouseDown, true); - addEvent(self.el, 'change', self._onChange); - addEvent(document, 'keydown', self._onKeyChange); - - if (opts.field) { - if (opts.container) { - opts.container.appendChild(self.el); - } else if (opts.bound) { - document.body.appendChild(self.el); - } else { - opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling); - } - addEvent(opts.field, 'change', self._onInputChange); - - if (!opts.defaultDate) { - if (hasMoment && opts.field.value) { - opts.defaultDate = moment(opts.field.value, opts.format).toDate(); - } else { - opts.defaultDate = new Date(Date.parse(opts.field.value)); - } - opts.setDefaultDate = true; - } - } - - var defDate = opts.defaultDate; - - if (isDate(defDate)) { - if (opts.setDefaultDate) { - self.setDate(defDate, true); - } else { - self.gotoDate(defDate); - } - } else { - self.gotoDate(new Date()); - } - - if (opts.bound) { - this.hide(); - self.el.className += ' is-bound'; - addEvent(opts.trigger, 'click', self._onInputClick); - addEvent(opts.trigger, 'focus', self._onInputFocus); - addEvent(opts.trigger, 'blur', self._onInputBlur); - } else { - this.show(); - } - }; - - - /** - * public Pikaday API - */ - Pikaday.prototype = { - - - /** - * configure functionality - */ - config: function(options) - { - if (!this._o) { - this._o = extend({}, defaults, true); - } - - var opts = extend(this._o, options, true); - - opts.isRTL = !!opts.isRTL; - - opts.field = (opts.field && opts.field.nodeName) ? opts.field : null; - - opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null; - - opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field); - - opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field; - - opts.disableWeekends = !!opts.disableWeekends; - - opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null; - - var nom = parseInt(opts.numberOfMonths, 10) || 1; - opts.numberOfMonths = nom > 4 ? 4 : nom; - - if (!isDate(opts.minDate)) { - opts.minDate = false; - } - if (!isDate(opts.maxDate)) { - opts.maxDate = false; - } - if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) { - opts.maxDate = opts.minDate = false; - } - if (opts.minDate) { - this.setMinDate(opts.minDate); - } - if (opts.maxDate) { - this.setMaxDate(opts.maxDate); - } - - if (isArray(opts.yearRange)) { - var fallback = new Date().getFullYear() - 10; - opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback; - opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback; - } else { - opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange; - if (opts.yearRange > 100) { - opts.yearRange = 100; - } - } - - return opts; - }, - - /** - * return a formatted string of the current selection (using Moment.js if available) - */ - toString: function(format) - { - return !isDate(this._d) ? '' : hasMoment ? moment(this._d).format(format || this._o.format) : this._d.toDateString(); - }, - - /** - * return a Moment.js object of the current selection (if available) - */ - getMoment: function() - { - return hasMoment ? moment(this._d) : null; - }, - - /** - * set the current selection from a Moment.js object (if available) - */ - setMoment: function(date, preventOnSelect) - { - if (hasMoment && moment.isMoment(date)) { - this.setDate(date.toDate(), preventOnSelect); - } - }, - - /** - * return a Date object of the current selection with fallback for the current date - */ - getDate: function() - { - return isDate(this._d) ? new Date(this._d.getTime()) : new Date(); - }, - - /** - * set the current selection - */ - setDate: function(date, preventOnSelect) - { - if (!date) { - this._d = null; - - if (this._o.field) { - this._o.field.value = ''; - fireEvent(this._o.field, 'change', { firedBy: this }); - } - - return this.draw(); - } - if (typeof date === 'string') { - date = new Date(Date.parse(date)); - } - if (!isDate(date)) { - return; - } - - var min = this._o.minDate, - max = this._o.maxDate; - - if (isDate(min) && date < min) { - date = min; - } else if (isDate(max) && date > max) { - date = max; - } - - this._d = new Date(date.getTime()); - setToStartOfDay(this._d); - this.gotoDate(this._d); - - if (this._o.field) { - this._o.field.value = this.toString(); - fireEvent(this._o.field, 'change', { firedBy: this }); - } - if (!preventOnSelect && typeof this._o.onSelect === 'function') { - this._o.onSelect.call(this, this.getDate()); - } - }, - - /** - * change view to a specific date - */ - gotoDate: function(date) - { - var newCalendar = true; - - if (!isDate(date)) { - return; - } - - if (this.calendars) { - var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1), - lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1), - visibleDate = date.getTime(); - // get the end of the month - lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1); - lastVisibleDate.setDate(lastVisibleDate.getDate()-1); - newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate); - } - - if (newCalendar) { - this.calendars = [{ - month: date.getMonth(), - year: date.getFullYear() - }]; - if (this._o.mainCalendar === 'right') { - this.calendars[0].month += 1 - this._o.numberOfMonths; - } - } - - this.adjustCalendars(); - }, - - adjustDate: function(sign, days) { - - var day = this.getDate(); - var difference = parseInt(days)*24*60*60*1000; - - var newDay; - - if (sign === 'add') { - newDay = new Date(day.valueOf() + difference); - } else if (sign === 'subtract') { - newDay = new Date(day.valueOf() - difference); - } - - if (hasMoment) { - if (sign === 'add') { - newDay = moment(day).add(days, "days").toDate(); - } else if (sign === 'subtract') { - newDay = moment(day).subtract(days, "days").toDate(); - } - } - - this.setDate(newDay); - }, - - adjustCalendars: function() { - this.calendars[0] = adjustCalendar(this.calendars[0]); - for (var c = 1; c < this._o.numberOfMonths; c++) { - this.calendars[c] = adjustCalendar({ - month: this.calendars[0].month + c, - year: this.calendars[0].year - }); - } - this.draw(); - }, - - gotoToday: function() - { - this.gotoDate(new Date()); - }, - - /** - * change view to a specific month (zero-index, e.g. 0: January) - */ - gotoMonth: function(month) - { - if (!isNaN(month)) { - this.calendars[0].month = parseInt(month, 10); - this.adjustCalendars(); - } - }, - - nextMonth: function() - { - this.calendars[0].month++; - this.adjustCalendars(); - }, - - prevMonth: function() - { - this.calendars[0].month--; - this.adjustCalendars(); - }, - - /** - * change view to a specific full year (e.g. "2012") - */ - gotoYear: function(year) - { - if (!isNaN(year)) { - this.calendars[0].year = parseInt(year, 10); - this.adjustCalendars(); - } - }, - - /** - * change the minDate - */ - setMinDate: function(value) - { - if(value instanceof Date) { - setToStartOfDay(value); - this._o.minDate = value; - this._o.minYear = value.getFullYear(); - this._o.minMonth = value.getMonth(); - } else { - this._o.minDate = defaults.minDate; - this._o.minYear = defaults.minYear; - this._o.minMonth = defaults.minMonth; - this._o.startRange = defaults.startRange; - } - - this.draw(); - }, - - /** - * change the maxDate - */ - setMaxDate: function(value) - { - if(value instanceof Date) { - setToStartOfDay(value); - this._o.maxDate = value; - this._o.maxYear = value.getFullYear(); - this._o.maxMonth = value.getMonth(); - } else { - this._o.maxDate = defaults.maxDate; - this._o.maxYear = defaults.maxYear; - this._o.maxMonth = defaults.maxMonth; - this._o.endRange = defaults.endRange; - } - - this.draw(); - }, - - setStartRange: function(value) - { - this._o.startRange = value; - }, - - setEndRange: function(value) - { - this._o.endRange = value; - }, - - /** - * refresh the HTML - */ - draw: function(force) - { - if (!this._v && !force) { - return; - } - var opts = this._o, - minYear = opts.minYear, - maxYear = opts.maxYear, - minMonth = opts.minMonth, - maxMonth = opts.maxMonth, - html = '', - randId; - - if (this._y <= minYear) { - this._y = minYear; - if (!isNaN(minMonth) && this._m < minMonth) { - this._m = minMonth; - } - } - if (this._y >= maxYear) { - this._y = maxYear; - if (!isNaN(maxMonth) && this._m > maxMonth) { - this._m = maxMonth; - } - } - - randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2); - - for (var c = 0; c < opts.numberOfMonths; c++) { - html += '
' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '
'; - } - - this.el.innerHTML = html; - - if (opts.bound) { - if(opts.field.type !== 'hidden') { - sto(function() { - opts.trigger.focus(); - }, 1); - } - } - - if (typeof this._o.onDraw === 'function') { - this._o.onDraw(this); - } - - if (opts.bound) { - // let the screen reader user know to use arrow keys - opts.field.setAttribute('aria-label', 'Use the arrow keys to pick a date'); - } - }, - - adjustPosition: function() - { - var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect; - - if (this._o.container) return; - - this.el.style.position = 'absolute'; - - field = this._o.trigger; - pEl = field; - width = this.el.offsetWidth; - height = this.el.offsetHeight; - viewportWidth = window.innerWidth || document.documentElement.clientWidth; - viewportHeight = window.innerHeight || document.documentElement.clientHeight; - scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop; - - if (typeof field.getBoundingClientRect === 'function') { - clientRect = field.getBoundingClientRect(); - left = clientRect.left + window.pageXOffset; - top = clientRect.bottom + window.pageYOffset; - } else { - left = pEl.offsetLeft; - top = pEl.offsetTop + pEl.offsetHeight; - while((pEl = pEl.offsetParent)) { - left += pEl.offsetLeft; - top += pEl.offsetTop; - } - } - - // default position is bottom & left - if ((this._o.reposition && left + width > viewportWidth) || - ( - this._o.position.indexOf('right') > -1 && - left - width + field.offsetWidth > 0 - ) - ) { - left = left - width + field.offsetWidth; - } - if ((this._o.reposition && top + height > viewportHeight + scrollTop) || - ( - this._o.position.indexOf('top') > -1 && - top - height - field.offsetHeight > 0 - ) - ) { - top = top - height - field.offsetHeight; - } - - this.el.style.left = left + 'px'; - this.el.style.top = top + 'px'; - }, - - /** - * render HTML for a particular month - */ - render: function(year, month, randId) - { - var opts = this._o, - now = new Date(), - days = getDaysInMonth(year, month), - before = new Date(year, month, 1).getDay(), - data = [], - row = []; - setToStartOfDay(now); - if (opts.firstDay > 0) { - before -= opts.firstDay; - if (before < 0) { - before += 7; - } - } - var previousMonth = month === 0 ? 11 : month - 1, - nextMonth = month === 11 ? 0 : month + 1, - yearOfPreviousMonth = month === 0 ? year - 1 : year, - yearOfNextMonth = month === 11 ? year + 1 : year, - daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth); - var cells = days + before, - after = cells; - while(after > 7) { - after -= 7; - } - cells += 7 - after; - for (var i = 0, r = 0; i < cells; i++) - { - var day = new Date(year, month, 1 + (i - before)), - isSelected = isDate(this._d) ? compareDates(day, this._d) : false, - isToday = compareDates(day, now), - isEmpty = i < before || i >= (days + before), - dayNumber = 1 + (i - before), - monthNumber = month, - yearNumber = year, - isStartRange = opts.startRange && compareDates(opts.startRange, day), - isEndRange = opts.endRange && compareDates(opts.endRange, day), - isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange, - isDisabled = (opts.minDate && day < opts.minDate) || - (opts.maxDate && day > opts.maxDate) || - (opts.disableWeekends && isWeekend(day)) || - (opts.disableDayFn && opts.disableDayFn(day)); - - if (isEmpty) { - if (i < before) { - dayNumber = daysInPreviousMonth + dayNumber; - monthNumber = previousMonth; - yearNumber = yearOfPreviousMonth; - } else { - dayNumber = dayNumber - days; - monthNumber = nextMonth; - yearNumber = yearOfNextMonth; - } - } - - var dayConfig = { - day: dayNumber, - month: monthNumber, - year: yearNumber, - isSelected: isSelected, - isToday: isToday, - isDisabled: isDisabled, - isEmpty: isEmpty, - isStartRange: isStartRange, - isEndRange: isEndRange, - isInRange: isInRange, - showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths - }; - - row.push(renderDay(dayConfig)); - - if (++r === 7) { - if (opts.showWeekNumber) { - row.unshift(renderWeek(i - before, month, year)); - } - data.push(renderRow(row, opts.isRTL)); - row = []; - r = 0; - } - } - return renderTable(opts, data, randId); - }, - - isVisible: function() - { - return this._v; - }, - - show: function() - { - if (!this.isVisible()) { - removeClass(this.el, 'is-hidden'); - this._v = true; - this.draw(); - if (this._o.bound) { - addEvent(document, 'click', this._onClick); - this.adjustPosition(); - } - if (typeof this._o.onOpen === 'function') { - this._o.onOpen.call(this); - } - } - }, - - hide: function() - { - var v = this._v; - if (v !== false) { - if (this._o.bound) { - removeEvent(document, 'click', this._onClick); - } - this.el.style.position = 'static'; // reset - this.el.style.left = 'auto'; - this.el.style.top = 'auto'; - addClass(this.el, 'is-hidden'); - this._v = false; - if (v !== undefined && typeof this._o.onClose === 'function') { - this._o.onClose.call(this); - } - } - }, - - /** - * GAME OVER - */ - destroy: function() - { - this.hide(); - removeEvent(this.el, 'mousedown', this._onMouseDown, true); - removeEvent(this.el, 'touchend', this._onMouseDown, true); - removeEvent(this.el, 'change', this._onChange); - if (this._o.field) { - removeEvent(this._o.field, 'change', this._onInputChange); - if (this._o.bound) { - removeEvent(this._o.trigger, 'click', this._onInputClick); - removeEvent(this._o.trigger, 'focus', this._onInputFocus); - removeEvent(this._o.trigger, 'blur', this._onInputBlur); - } - } - if (this.el.parentNode) { - this.el.parentNode.removeChild(this.el); - } - } - - }; - - return Pikaday; - -})); diff --git a/muk_web_preview_msoffice/static/src/js/preview_handler.js b/muk_web_preview_msoffice/static/src/js/preview_handler.js index 0c986b2..6d4edf9 100644 --- a/muk_web_preview_msoffice/static/src/js/preview_handler.js +++ b/muk_web_preview_msoffice/static/src/js/preview_handler.js @@ -37,7 +37,7 @@ var WordHandler = PreviewHandler.PDFHandler.extend({ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'].includes(mimetype); }, createHtml: function(url, mimetype, extension, title) { - var convertUrlTempalte = _.template('/web/preview/converter/msoffice?url=<%= url %>'); + var convertUrlTempalte = _.template('/web/preview/msoffice?url=<%= url %>'); return this._super(convertUrlTempalte({url: encodeURIComponent(url)})); }, }); @@ -52,19 +52,19 @@ var PowerPointHandler = PreviewHandler.PDFHandler.extend({ 'application/vnd.ms-powerpoint.presentation.macroEnabled.12'].includes(mimetype); }, createHtml: function(url, mimetype, extension, title) { - var convertUrlTempalte = _.template('/web/preview/converter/msoffice?url=<%= url %>'); + var convertUrlTempalte = _.template('/web/preview/msoffice?url=<%= url %>'); return this._super(convertUrlTempalte({url: encodeURIComponent(url)})); }, }); var ExcelHandler = PreviewHandler.BaseHandler.extend({ cssLibs: [ - '/muk_web_preview_msoffice/static/lib/handsontable/handsontable.css', + '/muk_web_utils/static/lib/handsontable/handsontable.css', ], jsLibs: [ - '/muk_web_preview_msoffice/static/lib/jQueryBinaryTransport/jquery-binarytransport.js', - '/muk_web_preview_msoffice/static/lib/SheetJS/xlsx.js', - '/muk_web_preview_msoffice/static/lib/handsontable/handsontable.js' + '/muk_web_utils/static/lib/jQueryBinaryTransport/jquery-binarytransport.js', + '/muk_web_utils/static/lib/SheetJS/xlsx.js', + '/muk_web_utils/static/lib/handsontable/handsontable.js' ], checkExtension: function(extension) { return ['.xls', '.xlsx', '.xlsm', '.xlsb', 'xls', 'xlsx', 'xlsm', 'xlsb'].includes(extension); @@ -147,6 +147,6 @@ return { ExcelHandler: ExcelHandler, WordHandler: WordHandler, PowerPointHandler: PowerPointHandler, -} +}; }); \ No newline at end of file diff --git a/muk_web_preview_msoffice/tests/__init__.py b/muk_web_preview_msoffice/tests/__init__.py index a6164ed..1921e9e 100644 --- a/muk_web_preview_msoffice/tests/__init__.py +++ b/muk_web_preview_msoffice/tests/__init__.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - ################################################################################### # # Copyright (C) 2017 MuK IT GmbH @@ -20,4 +18,3 @@ ################################################################################### from . import test_msoffice_parse - diff --git a/muk_web_preview_msoffice/tests/test_msoffice_parse.py b/muk_web_preview_msoffice/tests/test_msoffice_parse.py index 910e1d4..3b60653 100644 --- a/muk_web_preview_msoffice/tests/test_msoffice_parse.py +++ b/muk_web_preview_msoffice/tests/test_msoffice_parse.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - ################################################################################### # # Copyright (C) 2017 MuK IT GmbH @@ -20,21 +18,15 @@ ################################################################################### import os -import base64 import logging -import unittest from urllib.parse import urlunparse from urllib.parse import urlparse from urllib.parse import parse_qsl from urllib.parse import urlencode -from contextlib import closing -from odoo import _ from odoo.tests import common -from odoo.addons.muk_web_preview_mail.controllers import main - _path = os.path.dirname(os.path.dirname(__file__)) _logger = logging.getLogger(__name__) @@ -52,13 +44,11 @@ class MSOfficeParseTestCase(common.HttpCase): def test_parse_msoffice(self): self.authenticate('admin', 'admin') - url = "/web/preview/converter/msoffice" - params = {'url': "/web/content?id={}".format( - self.sample_msoffice_attachment.id - )} + url = "/web/preview/msoffice" + params = {'url': "/web/content?id={}".format(self.sample_msoffice_attachment.id)} url_parts = list(urlparse(url)) query = dict(parse_qsl(url_parts[4])) query.update(params) url_parts[4] = urlencode(query) url = urlunparse(url_parts) - self.url_open(url) \ No newline at end of file + self.assertTrue(self.url_open(url)) \ No newline at end of file