aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--README.md30
-rw-r--r--index.html25
-rw-r--r--point.yml52
-rw-r--r--point/base.css114
-rw-r--r--point/binding/keyboard.js70
-rw-r--r--point/binding/network.js40
-rw-r--r--point/binding/speech.js89
-rw-r--r--point/binding/touch.js93
-rw-r--r--point/control/control.js83
-rw-r--r--point/control/fullscreen.js68
-rw-r--r--point/control/layout.js61
-rw-r--r--point/control/network.js58
-rw-r--r--point/control/slide.js86
-rw-r--r--point/data/html.js86
-rw-r--r--point/data/markdown.js61
-rw-r--r--point/data/pdf.js130
-rw-r--r--point/data/renderSlide.js127
-rw-r--r--point/libs/hammerjs/hammer.min.js313
-rw-r--r--point/libs/hammerjs/hammer.min.map1
-rw-r--r--point/libs/js-yaml/js-yaml.min.js880
-rw-r--r--point/libs/markdownjs/markdown.min.js538
-rw-r--r--point/libs/normalize/normalize.js140
-rw-r--r--point/libs/normalizecss/normalize.css425
-rw-r--r--point/libs/pdfjs/pdf.js8550
-rw-r--r--point/libs/pdfjs/pdf.worker.js88336
-rw-r--r--point/libs/require-css/css.min.js63
-rw-r--r--point/libs/require-css/normalize.js142
-rw-r--r--point/libs/requirejs/require.js2080
-rw-r--r--point/libs/text/text.js389
-rw-r--r--point/libs/webcastor/webcastor.js156
-rw-r--r--point/plugins/autoscale/autoscale.js70
-rw-r--r--point/plugins/doge/doge.css55
-rw-r--r--point/plugins/doge/doge.js89
-rw-r--r--point/point.js135
-rw-r--r--point/theme/clean.css60
-rw-r--r--point/theme/default.css40
-rw-r--r--point/view/notes.css34
-rw-r--r--point/view/slides.css55
-rw-r--r--point/view/view.js31
-rw-r--r--slides.pdfbin0 -> 292475 bytes
-rw-r--r--slides.xml171
-rw-r--r--slides.yml17
43 files changed, 104045 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..abe8adf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
1# IDEA project files
2.idea/
3*.iml
diff --git a/README.md b/README.md
index 185f113..48e6459 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,32 @@
1WhatsThePoint 1WhatsThePoint
2============= 2=============
3 3
4What's The Point? 4"What's The Point?" is a remote controllable, themable web slide toolkit.
5
6
7Slideshow formats
8-----------------
9
10- Markdown
11- HTML
12- PDF (Beamer)
13
14
15Features
16--------
17
18- Notes / Presenter mode
19- Remote controllable
20- Working on mobile platforms (smartphone, tablet, e-reader)
21- Uses only static files (HTML, CSS, JS), does not require a special web server
22- Fully themable
23
24
25TODO
26----
27
28- [ ] Debug and clean up everything
29- [ ] Complete existing themes (title slides, ...)
30- [ ] Add syntax highlighting plugin
31- [ ] Add more themes
32- [ ] Add optional server side rendering
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..80e23c7
--- /dev/null
+++ b/index.html
@@ -0,0 +1,25 @@
1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="UTF-8">
5 <meta
6 content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"
7 name="viewport">
8 <title>What's The Point?</title>
9 <link href="point/base.css" rel="stylesheet">
10 <script src="point/libs/requirejs/require.js" data-main="point/point"></script>
11</head>
12<body>
13<div id="loadingclock"></div>
14
15<noscript>
16 Sorry,
17 <br>
18 JavaScript is required
19 <br>
20 to view this slideshow.
21</noscript>
22
23<p-screen></p-screen>
24</body>
25</html>
diff --git a/point.yml b/point.yml
new file mode 100644
index 0000000..716528c
--- /dev/null
+++ b/point.yml
@@ -0,0 +1,52 @@
1#
2# What's The Point presentation configuration file
3#
4
5data:
6 file: "../slides.yml"
7 type:
8 #html
9 markdown
10 #pdf
11
12dimension:
13 width: 1100
14 height: 700
15
16theme:
17 #default
18 clean
19 #aperture
20
21control:
22 #local
23 remote:
24 webcastorUrl: "https://webcastor.herokuapp.com:443"
25 channelId: "fc503470-051e-11e4-8b02-cbfbda9da717"
26
27binding:
28 - keyboard
29 - touch
30 - speech
31
32plugins:
33 - autoscale
34 #- prettify
35 #- chartjs
36 #- doge
37
38
39#
40# Plug-ins and others parameters
41#
42
43speechSettings:
44 lang: "fr-FR"
45 keywords:
46 NEXT_SLIDE:
47 - "suivant"
48 PREVIOUS_SLIDE:
49 - "précédent"
50
51prettifySettings:
52 lang: javascript
diff --git a/point/base.css b/point/base.css
new file mode 100644
index 0000000..fcdc2a6
--- /dev/null
+++ b/point/base.css
@@ -0,0 +1,114 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18@import url("libs/normalizecss/normalize.css");
19
20html {
21 width: 100%;
22 height: 100%;
23}
24
25body {
26 position: absolute;
27 width: 100%;
28 height: 100%;
29 background: black;
30}
31
32noscript {
33 position: absolute;
34 width: 20em;
35 height: 5em;
36 margin: auto;
37 top: 0;
38 bottom: 0;
39 left: 0;
40 right: 0;
41 text-align: center;
42 color: white;
43 background: black;
44}
45
46/* loading animation */
47/* http://codepen.io/lixquid/pen/ybjmr */
48
49#loadingclock {
50 position: absolute;
51 margin: auto;
52 top: 0;
53 bottom: 0;
54 left: 0;
55 right: 0;
56 width: 48px;
57 height: 48px;
58 border: 2px solid #ccc;
59 border-radius: 100%;
60}
61
62#loadingclock:before {
63 display: block;
64 position: absolute;
65 left: 23px;
66 top: 2px;
67 width: 2px;
68 height: 22px;
69 background-color: #ccc;
70 animation: spin 3s linear infinite;
71 -webkit-animation: spin 3s linear infinite;
72 content: " ";
73 transform-origin: 1px 22px;
74 -webkit-transform-origin: 1px 22px;
75}
76
77#loadingclock:after {
78 display: block;
79 position: absolute;
80 left: 23px;
81 top: 3px;
82 width: 2px;
83 height: 21px;
84 background-color: #ccc;
85 animation: spin 18s linear infinite;
86 -webkit-animation: spin 18s linear infinite;
87 content: "";
88 transform-origin: 1px 21px;
89 -webkit-transform-origin: 1px 21px;
90}
91
92@-moz-keyframes spin {
93 to {
94 transform: rotate(360deg);
95 }
96}
97
98@-webkit-keyframes spin {
99 to {
100 -webkit-transform: rotate(360deg);
101 }
102}
103
104@-o-keyframes spin {
105 to {
106 transform: rotate(360deg);
107 }
108}
109
110@keyframes spin {
111 to {
112 transform: rotate(360deg);
113 }
114}
diff --git a/point/binding/keyboard.js b/point/binding/keyboard.js
new file mode 100644
index 0000000..14eabc2
--- /dev/null
+++ b/point/binding/keyboard.js
@@ -0,0 +1,70 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19define(["control/control"], function (control) {
20
21 var keyboard = {
22
23 KEYCODE: {
24 BACKSPACE: 8,
25 ENTER: 13,
26 SPACE: 32,
27 END: 35,
28 HOME: 36,
29 LEFT: 37,
30 UP: 38,
31 RIGHT: 39,
32 DOWN: 40,
33 },
34
35 init: function (settings) {
36 this.bindEvent();
37 },
38
39 translate: function (keyCode) {
40 var gotoEvent;
41 switch (keyCode) {
42 case this.KEYCODE.LEFT:
43 case this.KEYCODE.BACKSPACE:
44 return control.dispatchEvent(control.EVENT.GOTO, control.GOTO.PREVIOUS_SLIDE);
45
46 case this.KEYCODE.RIGHT:
47 case this.KEYCODE.ENTER:
48 case this.KEYCODE.SPACE:
49 return control.dispatchEvent(control.EVENT.GOTO, control.GOTO.NEXT_SLIDE);
50
51 case this.KEYCODE.HOME:
52 return control.dispatchEvent(control.EVENT.GOTO, control.GOTO.FIRST_SLIDE);
53
54 case this.KEYCODE.END:
55 return control.dispatchEvent(control.EVENT.GOTO, control.GOTO.LAST_SLIDE);
56 }
57
58 },
59
60 bindEvent: function () {
61 document.addEventListener("keydown", function (keydownEvent) {
62 // TODO: ignore if focus in form
63 keyboard.translate(keydownEvent.keyCode);
64 });
65 },
66 };
67
68 return keyboard;
69
70});
diff --git a/point/binding/network.js b/point/binding/network.js
new file mode 100644
index 0000000..11cf58a
--- /dev/null
+++ b/point/binding/network.js
@@ -0,0 +1,40 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19define(["control/control", "libs/webcastor/webcastor"], function (control, webcastor) {
20
21 var network = {
22
23 init: function (settings) {
24 webcastor.init(settings, function (socket) {
25 network.bindEvents();
26 });
27 },
28
29 /* network -> local */
30 bindEvents: function () {
31 webcastor.on("message", function (message) {
32 var event = JSON.parse(message);
33 control.dispatchEvent(event.event, event.eventDetail, false);
34 });
35 },
36 };
37
38 return network;
39
40});
diff --git a/point/binding/speech.js b/point/binding/speech.js
new file mode 100644
index 0000000..41f5914
--- /dev/null
+++ b/point/binding/speech.js
@@ -0,0 +1,89 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19define(["control/control"], function (control) {
20
21 var speech = {
22
23 init: function (settings) {
24 if ("speechRecognition" in window || "webkitSpeechRecognition" in window) {
25 var recognition = new webkitSpeechRecognition();
26
27 recognition.continuous = true;
28 recognition.interimResults = true;
29 recognition.lang = settings.speechSettings.lang;
30
31 recognition.onresult = this.onResult;
32
33 recognition.onend = function () {
34 recognition.start();
35 };
36
37 recognition.start();
38 }
39
40 this.sleepDelay = 1500;
41 this.wakeupTime = 0;
42
43 this.command = {
44 NEXT_SLIDE: settings.speechSettings.keywords.NEXT_SLIDE,
45 PREVIOUS_SLIDE: settings.speechSettings.keywords.PREVIOUS_SLIDE,
46 };
47 },
48
49 onResult: function (speechEvent) {
50 var result = event.results[event.resultIndex];
51
52 if (result.isFinal) {
53 return;
54 }
55
56 var sentence = result[0].transcript.split(" ");
57 var command = sentence[sentence.length - 1];
58 speech.processCommand(command);
59 },
60
61 processCommand: function (speechCommand) {
62 if (Date.now() < speech.wakeupTime) {
63 return;
64 }
65
66 var command = speech.translateCommand(speechCommand);
67
68 if (command === undefined) {
69 return;
70 }
71
72 speech.wakeupTime = Date.now() + speech.sleepDelay;
73 control.dispatchEvent(control.EVENT.GOTO, control.GOTO[command]);
74 },
75
76 translateCommand: function (speechCommand) {
77 for (var command in speech.command) {
78 for (var index in speech.command[command]) {
79 if (speechCommand.indexOf(speech.command[command][index]) > -1) {
80 return command;
81 }
82 }
83 }
84 },
85 };
86
87 return speech;
88
89});
diff --git a/point/binding/touch.js b/point/binding/touch.js
new file mode 100644
index 0000000..a09d5fd
--- /dev/null
+++ b/point/binding/touch.js
@@ -0,0 +1,93 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19define(["libs/hammerjs/hammer.min", "control/control"], function (hammer, control) {
20
21 var touch = {
22
23 ACTION: {
24 SWIPE: "swipe",
25 DOUBLETAP: "doubletap",
26 TOUCHMOVE: "touchmove",
27 DRAG: "drag",
28 },
29
30 DIRECTION: {
31 DOWN: "down",
32 LEFT: "left",
33 UP: "up",
34 RIGHT: "right",
35 },
36
37 init: function (settings) {
38 this.touchZone = document.body;
39
40 this.hammerElement = hammer(this.touchZone);
41
42 this.hammerElement.options.drag = true;
43 this.hammerElement.options.dragBlockHorizontal = true;
44 this.hammerElement.options.dragBlockVertical = true;
45 this.hammerElement.options.dragLockMinDistance = 20;
46
47 this.disableSelect();
48 this.bindEvent();
49 },
50
51 disableSelect: function () {
52 this.touchZone.style.WebkitTouchCallout = "none";
53 this.touchZone.style.WebkitUserSelect = "none";
54 this.touchZone.style.KhtmlUserSelect = "none";
55 this.touchZone.style.MozUserSelect = "none";
56 this.touchZone.style.msUserSelect = "none";
57 this.touchZone.style.userSelect = "none";
58 },
59
60 translateSwipe: function (swipeDirection) {
61 switch (swipeDirection) {
62 case this.DIRECTION.LEFT:
63 return control.dispatchEvent(control.EVENT.GOTO, control.GOTO.NEXT_SLIDE);
64
65 case this.DIRECTION.RIGHT:
66 return control.dispatchEvent(control.EVENT.GOTO, control.GOTO.PREVIOUS_SLIDE);
67
68 case this.DIRECTION.UP:
69 return control.dispatchEvent(control.EVENT.SHOW, control.SHOW.NOTES);
70
71 case this.DIRECTION.DOWN:
72 return control.dispatchEvent(control.EVENT.SHOW, control.SHOW.SLIDES);
73 }
74 },
75
76 handleDoubletap: function () {
77 control.dispatchEvent(control.EVENT.TOGGLE, control.TOGGLE.FULLSCREEN);
78 },
79
80 bindEvent: function () {
81 this.hammerElement.on(this.ACTION.SWIPE, function (swipeEvent) {
82 touch.translateSwipe(swipeEvent.gesture.direction);
83 });
84
85 this.hammerElement.on(this.ACTION.DOUBLETAP, function (doubletapEvent) {
86 touch.handleDoubletap();
87 });
88 },
89 };
90
91 return touch;
92
93});
diff --git a/point/control/control.js b/point/control/control.js
new file mode 100644
index 0000000..4ec21da
--- /dev/null
+++ b/point/control/control.js
@@ -0,0 +1,83 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19define(function () {
20
21 var control = {
22
23 MODE: {
24 MASTER: "master",
25 SLAVE: "slave",
26 FREE: "free",
27 },
28
29 EVENT: {
30 GOTO: "goTo",
31 SLIDE: "slide",
32 SHOW: "show",
33 TOGGLE: "toggle",
34 TRIGGER: "trigger",
35 },
36
37 SLIDE: {
38
39 },
40
41 GOTO: {
42 PREVIOUS_SLIDE: "previousSlide",
43 NEXT_SLIDE: "nextSlide",
44 FIRST_SLIDE: "firstSlide",
45 LAST_SLIDE: "lastSlide",
46 },
47
48 SHOW: {
49 SLIDES: "slides",
50 NOTES: "notes",
51 },
52
53 TOGGLE: {
54 FULLSCREEN: "fullscreen",
55 },
56
57 TRIGGER: {
58
59 },
60
61 init: function () {
62 return;
63 },
64
65 dispatchEvent: function (eventType, eventDetail, forward) {
66 return document.dispatchEvent(new CustomEvent(eventType, {
67 "detail": {
68 "detail": eventDetail,
69 "forward": forward !== undefined ? forward : true,
70 },
71 }));
72 },
73
74 bindEvent: function (eventType, eventListener) {
75 document.addEventListener(eventType, function (event) {
76 eventListener(event.detail);
77 });
78 },
79 };
80
81 return control;
82
83});
diff --git a/point/control/fullscreen.js b/point/control/fullscreen.js
new file mode 100644
index 0000000..6e53bc4
--- /dev/null
+++ b/point/control/fullscreen.js
@@ -0,0 +1,68 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19define(["control/control"], function (control) {
20
21 var fullscreen = {
22
23 init: function () {
24 this.bindEvent();
25 },
26
27 toggleFullscreen: function () {
28 // from
29 // https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Using_full_screen_mode#Toggling_fullscreenController_mode
30 if (!document.fullscreenControllerElement && // alternative
31 // standard method
32 !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) {// current
33 // working
34 // methods
35 if (document.documentElement.requestFullscreen) {
36 document.documentElement.requestFullscreen();
37 } else if (document.documentElement.msRequestFullscreen) {
38 document.documentElement.msRequestFullscreen();
39 } else if (document.documentElement.mozRequestFullScreen) {
40 document.documentElement.mozRequestFullScreen();
41 } else if (document.documentElement.webkitRequestFullscreen) {
42 document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
43 }
44 } else {
45 if (document.exitFullscreen) {
46 document.exitFullscreen();
47 } else if (document.msExitFullscreen) {
48 document.msExitFullscreen();
49 } else if (document.mozCancelFullScreen) {
50 document.mozCancelFullScreen();
51 } else if (document.webkitExitFullscreen) {
52 document.webkitExitFullscreen();
53 }
54 }
55 },
56
57 bindEvent: function () {
58 control.bindEvent(control.EVENT.TOGGLE, function (toggleEvent) {
59 if (toggleEvent.detail === control.TOGGLE.FULLSCREEN) {
60 fullscreen.toggleFullscreen();
61 }
62 });
63 },
64 };
65
66 return fullscreen;
67
68});
diff --git a/point/control/layout.js b/point/control/layout.js
new file mode 100644
index 0000000..84a55ff
--- /dev/null
+++ b/point/control/layout.js
@@ -0,0 +1,61 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19define(["control/control"], function (control) {
20
21 var layout = {
22
23 init: function () {
24 this.screen = document.getElementsByTagName("p-screen")[0];
25 this.bindEvent();
26 },
27
28 CLASS: {
29 SLIDES: "slides",
30 NODES: "notes",
31 },
32
33 reset: function () {
34 for (var className in this.CLASS) {
35 this.screen.classList.remove(this.CLASS[className]);
36 }
37 },
38
39 show: function (element) {
40 this.reset();
41 switch (element) {
42 case control.SHOW.SLIDES:
43 this.screen.classList.add("slides");
44 break;
45
46 case control.SHOW.NOTES:
47 this.screen.classList.add("notes");
48 break;
49 }
50 },
51
52 bindEvent: function () {
53 control.bindEvent(control.EVENT.SHOW, function (showEvent) {
54 layout.show(showEvent.detail);
55 });
56 },
57 };
58
59 return layout;
60
61});
diff --git a/point/control/network.js b/point/control/network.js
new file mode 100644
index 0000000..e782257
--- /dev/null
+++ b/point/control/network.js
@@ -0,0 +1,58 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19define([ "control/control", "libs/webcastor/webcastor", "control/slide" ], function (control, webcastor, slide) {
20
21 var network = {
22
23 init: function (settings) {
24 webcastor.init(settings, function () {
25 network.bindEvents();
26 });
27 },
28
29 send: function (event, eventDetail) {
30 var message = JSON.stringify({
31 "event": event,
32 "eventDetail": eventDetail,
33 });
34 webcastor.send(message);
35 },
36
37 bindEvent: function (event) {
38 control.bindEvent(event, function (eventDetail) {
39 if (!eventDetail.forward) {
40 return false;
41 }
42 network.send(event, eventDetail.detail);
43 });
44 },
45
46 /* local -> network */
47 bindEvents: function () {
48 var events = [ control.EVENT.SLIDE, control.EVENT.TRIGGER ];
49 for (var i = 0; i < events.length; i++) {
50 this.bindEvent(events[i]);
51 }
52 },
53
54 };
55
56 return network;
57
58});
diff --git a/point/control/slide.js b/point/control/slide.js
new file mode 100644
index 0000000..c539a60
--- /dev/null
+++ b/point/control/slide.js
@@ -0,0 +1,86 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19define(["control/control"], function (control) {
20
21 var slide = {
22
23 init: function () {
24 this.slideCount = document.getElementsByTagName("p-slide").length;
25 this.start();
26 this.bindEvent();
27 },
28
29 start: function () {
30 var slideIndex = location.hash.substr(1);
31 location.hash = 0;
32 location.hash = 1;
33 this.setCurrentSlide(slideIndex);
34 },
35
36 setCurrentSlide: function (slideIndex) {
37 if (isNaN(slideIndex) || slideIndex < 1 || slideIndex > this.slideCount) {
38 return false;
39 }
40 location.hash = slideIndex;
41 return true;
42 },
43
44 getCurrentSlideIndex: function () {
45 var hash = location.hash.substring(1);
46 return isNaN(hash) || hash < 1 || hash > this.slideCount ? 0 : Number(hash);
47 },
48
49 shift: function (delta) {
50 return this.getCurrentSlideIndex() + delta;
51 },
52
53 getIndex: function (target) {
54 switch (target) {
55 case control.GOTO.PREVIOUS_SLIDE:
56 return this.shift(-1);
57
58 case control.GOTO.NEXT_SLIDE:
59 return this.shift(+1);
60
61 case control.GOTO.FIRST_SLIDE:
62 return 1;
63
64 case control.GOTO.LAST_SLIDE:
65 return this.slideCount;
66 }
67 },
68
69 translate: function (target) {
70 control.dispatchEvent(control.EVENT.SLIDE, this.getIndex(target));
71 },
72
73 bindEvent: function () {
74 control.bindEvent(control.EVENT.GOTO, function (gotoEvent) {
75 slide.translate(gotoEvent.detail);
76 });
77
78 control.bindEvent(control.EVENT.SLIDE, function (slideEvent) {
79 slide.setCurrentSlide(slideEvent.detail);
80 });
81 },
82 };
83
84 return slide;
85
86});
diff --git a/point/data/html.js b/point/data/html.js
new file mode 100644
index 0000000..66448cc
--- /dev/null
+++ b/point/data/html.js
@@ -0,0 +1,86 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19define(function () {
20
21 var xml = {
22
23 init: function () {
24 return;
25 },
26
27 getProp: function (object, dom, property, method) {
28 var elements = dom.getElementsByTagName(property);
29 if (elements.length > 0) {
30 object[property] = method(elements[0]);
31 }
32 return object;
33 },
34
35 getInnerText: function (object, dom, property) {
36 return this.getProp(object, dom, property, function (element) {
37 return element.textContent;
38 });
39 },
40
41 getInnerHtml: function (object, dom, property) {
42 return this.getProp(object, dom, property, function (element) {
43 if (window.XMLSerializer !== undefined) {
44 return (new window.XMLSerializer()).serializeToString(element);
45 } else if (element.xml !== undefined) {
46 return element.xml;
47 }
48 return element.innerHTML;
49 });
50 },
51
52 parseSlide: function (domSlide) {
53 var slide = {};
54
55 ["type", "title", "subtitle"].forEach(function (tag) {
56 xml.getInnerText(slide, domSlide, tag);
57 });
58
59 ["content", "notes"].forEach(function (tag) {
60 xml.getInnerHtml(slide, domSlide, tag);
61 });
62
63 return slide;
64 },
65
66 parseSlides: function (domSlides) {
67 var slides = [];
68
69 for (var i = 0; i < domSlides.length; i++) {
70 slides.push(this.parseSlide(domSlides[i]));
71 }
72
73 return slides;
74 },
75
76 parse: function (rawData, callback) {
77 var dom = new DOMParser().parseFromString(rawData, "text/xml");
78 var domSlides = dom.getElementsByTagName("slide");
79
80 callback(this.parseSlides(domSlides));
81 },
82 };
83
84 return xml;
85
86});
diff --git a/point/data/markdown.js b/point/data/markdown.js
new file mode 100644
index 0000000..38a564d
--- /dev/null
+++ b/point/data/markdown.js
@@ -0,0 +1,61 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19requirejs.config({
20 shim: {
21 "markdownjs": {
22 exports: "markdown",
23 },
24 },
25 paths: {
26 "markdownjs": "libs/markdownjs/markdown.min",
27 },
28});
29
30define(["js-yaml", "markdownjs"], function (jsyaml, markdownjs) {
31
32 var markdown = {
33
34 init: function () {
35 return;
36 },
37
38 renderSlide: function (slide) {
39 if (slide.content !== undefined) {
40 slide.content = markdownjs.toHTML(slide.content);
41 }
42 if (slide.notes !== undefined) {
43 slide.notes = markdownjs.toHTML(slide.notes);
44 }
45 return slide;
46 },
47
48 parse: function (rawData, callback) {
49 var slides = [];
50
51 jsyaml.safeLoadAll(rawData, function (slide) {
52 slides.push(markdown.renderSlide(slide));
53 });
54
55 callback(slides);
56 },
57 };
58
59 return markdown;
60
61});
diff --git a/point/data/pdf.js b/point/data/pdf.js
new file mode 100644
index 0000000..f789bdf
--- /dev/null
+++ b/point/data/pdf.js
@@ -0,0 +1,130 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19requirejs.config({
20 shim: {
21 "pdfjs": {
22 exports: "PDFJS",
23 },
24 },
25 paths: {
26 "pdfjs": "libs/pdfjs/pdf",
27 },
28});
29
30define(["pdfjs"], function (pdfjs) {
31
32 var pdf = {
33
34 init: function (settings) {
35 this.fileUrl = settings.data.file;
36 this.width = settings.dimension.width;
37 this.height = settings.dimension.height;
38
39 this.slides = [];
40
41 pdfjs.disableRange = true;
42 pdfjs.workerSrc = "point/libs/pdfjs/pdf.worker.js";
43 },
44
45 makeCanvas: function () {
46 var canvas = document.createElement("canvas");
47 canvas.width = pdf.width;
48 canvas.height = pdf.height;
49 return canvas;
50 },
51
52 clearOutline: function (context, slideWidth, slideHeight, offsetX, offsetY) {
53 context.clearRect(0, 0, offsetX, pdf.height);
54 context.clearRect(offsetX + slideWidth, 0, offsetX, pdf.height);
55 context.clearRect(0, 0, pdf.width, offsetY);
56 context.clearRect(0, offsetY + slideHeight, pdf.width, offsetY);
57 return context;
58 },
59
60 renderSlide: function (pdfDocument, slideIndex, callback) {
61 pdfDocument.getPage(slideIndex).then(function (pdfPage) {
62
63 var viewport = pdfPage.getViewport(1);
64 var slideWidth = viewport.width / 2;
65 var slideHeight = viewport.height;
66
67 var widthRatio = pdf.width / slideWidth;
68 var heightRatio = pdf.height / slideHeight;
69 var scale = Math.min(widthRatio, heightRatio);
70 slideWidth *= scale;
71 slideHeight *= scale;
72
73 var offsetX = (pdf.width - slideWidth) / 2;
74 var offsetY = (pdf.height - slideHeight) / 2;
75
76 var contentViewport = new pdfjs.PageViewport(pdfPage.view, scale, 0, offsetX, offsetY);
77 var notesViewport = new pdfjs.PageViewport(pdfPage.view, scale, 0, -slideWidth + offsetX, offsetY);
78
79 var contentCanvas = pdf.makeCanvas();
80 var contentContext = contentCanvas.getContext("2d");
81
82 var notesCanvas = pdf.makeCanvas();
83 var notesContext = notesCanvas.getContext("2d");
84
85 var contentRenderContext = {
86 canvasContext: contentContext,
87 viewport: contentViewport,
88 };
89
90 var notesRenderContext = {
91 canvasContext: notesContext,
92 viewport: notesViewport,
93 };
94
95 pdfPage.render(contentRenderContext).then(function () {
96 pdf.clearOutline(contentContext, slideWidth, slideHeight, offsetX, offsetY);
97
98 pdfPage.render(notesRenderContext).then(function () {
99 pdf.clearOutline(notesContext, slideWidth, slideHeight, offsetX, offsetY);
100
101 pdf.registerSlide(contentCanvas, notesCanvas, pdfDocument, slideIndex, callback);
102
103 });
104 });
105 });
106 },
107
108 registerSlide: function (contentCanvas, notesCanvas, pdfDocument, slideIndex, callback) {
109 pdf.slides[slideIndex - 1] = {
110 content: contentCanvas,
111 notes: notesCanvas,
112 };
113
114 if (slideIndex < pdfDocument.pdfInfo.numPages) {
115 pdf.renderSlide(pdfDocument, slideIndex + 1, callback);
116 } else {
117 callback(pdf.slides);
118 }
119 },
120
121 parse: function (rawData, callback) {
122 pdfjs.getDocument(require.toUrl(this.fileUrl)).then(function (pdfDocument) {
123 pdf.renderSlide(pdfDocument, 1, callback);
124 });
125 },
126 };
127
128 return pdf;
129
130});
diff --git a/point/data/renderSlide.js b/point/data/renderSlide.js
new file mode 100644
index 0000000..e149f41
--- /dev/null
+++ b/point/data/renderSlide.js
@@ -0,0 +1,127 @@
1/*
2 * This file is part of "What's The Point" <https://github.com/Pacien/WhatsThePoint>
3 * Copyright (C) 2014 Pacien TRAN-GIRARD
4 *
5 * "What's The Point" is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * "What's The Point" is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19define(function () {
20
21 var renderSlide = {
22
23 init: function () {
24 this.lastTitle = undefined;
25 },
26
27 appendNode: function (parent, tag, content, appendMethod) {
28 var node = document.createElement(tag);
29 appendMethod(node, content);
30 parent.appendChild(node);
31 return parent;
32 },
33
34 appendHtmlNode: function (parent, tag, htmlContent) {
35 return this.appendNode(parent, tag, htmlContent, function (parent, htmlContent) {
36 parent.innerHTML = htmlContent;
37 });
38 },
39
40 appendObjectNode: function (parent, tag, node) {
41 return this.appendNode(parent, tag, node, function (parent, node) {
42 parent.appendChild(node);
43 });
44 },
45
46 appendTextNode: function (parent, tag, text) {
47 return this.appendObjectNode(parent, tag, document.createTextNode(text));
48 },
49
50 appendContentNode: function (parent, tag, content) {
51 if (typeof (content) === "string") {
52 this.appendHtmlNode(parent, tag, content);
53 } else {
54 this.appendObjectNode(parent, tag, content);
55 }
56 },
57
58 renderTitle: function (slideData) {
59 var title = slideData.title;
60 var subtitle = slideData.subtitle;
61
62 if (title !== undefined) {
63 this.lastTitle = title;
64 } else {
65 if (subtitle !== undefined) {
66 title = this.lastTitle;
67 } else {
68 this.lastTitle = undefined;
69 }
70 }
71
72 var titleNode;
73 if (title !== undefined || subtitle !== undefined) {
74 titleNode = document.createElement("s-title");
75 } else {
76 titleNode = document.createDocumentFragment("s-title");
77 }
78
79 if (title !== undefined) {
80 this.appendTextNode(titleNode, "h1", title);
81 }
82
83 if (subtitle !== undefined) {
84 this.appendTextNode(titleNode, "h2", subtitle);
85 }
86
87 return titleNode;
88 },
89
90 renderBody: function (slideData) {
91 var bodyNode = document.createDocumentFragment();
92 //var bodyNode = document.createElement("s-body");
93
94 if (slideData.content !== undefined) {
95 this.appendContentNode(bodyNode, "s-content", slideData.content);
96 }
97
98 var notes = slideData.notes === undefined ? "" : slideData.notes;
99 this.appendContentNode(bodyNode, "s-notes", notes);
100
101 return bodyNode;
102 },
103
104 renderSlide: function (slideData, index) {
105 var slide = document.createElement("p-slide");
106 slide.setAttribute("id", index + 1);
107 slide.appendChild(this.renderTitle(slideData));
108 slide.appendChild(this.renderBody(slideData));
109 return slide;
110 },
111
112 renderSlides: function (slidesData) {
113 var slides = document.createDocumentFragment();
114 for (var i = 0; i < slidesData.length; i++) {
115 slides.appendChild(this.renderSlide(slidesData[i], i));
116 }
117 return slides;
118 },
119
120 render: function (slidesData, callback) {
121 callback(this.renderSlides(slidesData));
122 },
123 };
124
125 return renderSlide;
126
127});
diff --git a/point/libs/hammerjs/hammer.min.js b/point/libs/hammerjs/hammer.min.js
new file mode 100644
index 0000000..d7b2e9a
--- /dev/null
+++ b/point/libs/hammerjs/hammer.min.js
@@ -0,0 +1,313 @@
1/*! Hammer.JS - v1.1.3 - 2014-05-20
2 * http://eightmedia.github.io/hammer.js
3 *
4 * Copyright (c) 2014 Jorik Tangelder <j.tangelder@gmail.com>;
5 * Licensed under the MIT license */
6
7
8!function (a, b) {
9 "use strict";
10 function c() {
11 d.READY || (s.determineEventTypes(), r.each(d.gestures, function (a) {
12 u.register(a)
13 }), s.onTouch(d.DOCUMENT, n, u.detect), s.onTouch(d.DOCUMENT, o, u.detect), d.READY = !0)
14 }
15
16 var d = function v(a, b) {
17 return new v.Instance(a, b || {})
18 };
19 d.VERSION = "1.1.3", d.defaults = {behavior: {userSelect: "none", touchAction: "pan-y", touchCallout: "none", contentZooming: "none", userDrag: "none", tapHighlightColor: "rgba(0,0,0,0)"}}, d.DOCUMENT = document, d.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled, d.HAS_TOUCHEVENTS = "ontouchstart"in a, d.IS_MOBILE = /mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent), d.NO_MOUSEEVENTS = d.HAS_TOUCHEVENTS && d.IS_MOBILE || d.HAS_POINTEREVENTS, d.CALCULATE_INTERVAL = 25;
20 var e = {}, f = d.DIRECTION_DOWN = "down", g = d.DIRECTION_LEFT = "left", h = d.DIRECTION_UP = "up", i = d.DIRECTION_RIGHT = "right", j = d.POINTER_MOUSE = "mouse", k = d.POINTER_TOUCH = "touch", l = d.POINTER_PEN = "pen", m = d.EVENT_START = "start", n = d.EVENT_MOVE = "move", o = d.EVENT_END = "end", p = d.EVENT_RELEASE = "release", q = d.EVENT_TOUCH = "touch";
21 d.READY = !1, d.plugins = d.plugins || {}, d.gestures = d.gestures || {};
22 var r = d.utils = {extend: function (a, c, d) {
23 for (var e in c)!c.hasOwnProperty(e) || a[e] !== b && d || (a[e] = c[e]);
24 return a
25 }, on: function (a, b, c) {
26 a.addEventListener(b, c, !1)
27 }, off: function (a, b, c) {
28 a.removeEventListener(b, c, !1)
29 }, each: function (a, c, d) {
30 var e, f;
31 if ("forEach"in a)a.forEach(c, d); else if (a.length !== b) {
32 for (e = 0, f = a.length; f > e; e++)if (c.call(d, a[e], e, a) === !1)return
33 } else for (e in a)if (a.hasOwnProperty(e) && c.call(d, a[e], e, a) === !1)return
34 }, inStr: function (a, b) {
35 return a.indexOf(b) > -1
36 }, inArray: function (a, b) {
37 if (a.indexOf) {
38 var c = a.indexOf(b);
39 return-1 === c ? !1 : c
40 }
41 for (var d = 0, e = a.length; e > d; d++)if (a[d] === b)return d;
42 return!1
43 }, toArray: function (a) {
44 return Array.prototype.slice.call(a, 0)
45 }, hasParent: function (a, b) {
46 for (; a;) {
47 if (a == b)return!0;
48 a = a.parentNode
49 }
50 return!1
51 }, getCenter: function (a) {
52 var b = [], c = [], d = [], e = [], f = Math.min, g = Math.max;
53 return 1 === a.length ? {pageX: a[0].pageX, pageY: a[0].pageY, clientX: a[0].clientX, clientY: a[0].clientY} : (r.each(a, function (a) {
54 b.push(a.pageX), c.push(a.pageY), d.push(a.clientX), e.push(a.clientY)
55 }), {pageX: (f.apply(Math, b) + g.apply(Math, b)) / 2, pageY: (f.apply(Math, c) + g.apply(Math, c)) / 2, clientX: (f.apply(Math, d) + g.apply(Math, d)) / 2, clientY: (f.apply(Math, e) + g.apply(Math, e)) / 2})
56 }, getVelocity: function (a, b, c) {
57 return{x: Math.abs(b / a) || 0, y: Math.abs(c / a) || 0}
58 }, getAngle: function (a, b) {
59 var c = b.clientX - a.clientX, d = b.clientY - a.clientY;
60 return 180 * Math.atan2(d, c) / Math.PI
61 }, getDirection: function (a, b) {
62 var c = Math.abs(a.clientX - b.clientX), d = Math.abs(a.clientY - b.clientY);
63 return c >= d ? a.clientX - b.clientX > 0 ? g : i : a.clientY - b.clientY > 0 ? h : f
64 }, getDistance: function (a, b) {
65 var c = b.clientX - a.clientX, d = b.clientY - a.clientY;
66 return Math.sqrt(c * c + d * d)
67 }, getScale: function (a, b) {
68 return a.length >= 2 && b.length >= 2 ? this.getDistance(b[0], b[1]) / this.getDistance(a[0], a[1]) : 1
69 }, getRotation: function (a, b) {
70 return a.length >= 2 && b.length >= 2 ? this.getAngle(b[1], b[0]) - this.getAngle(a[1], a[0]) : 0
71 }, isVertical: function (a) {
72 return a == h || a == f
73 }, setPrefixedCss: function (a, b, c, d) {
74 var e = ["", "Webkit", "Moz", "O", "ms"];
75 b = r.toCamelCase(b);
76 for (var f = 0; f < e.length; f++) {
77 var g = b;
78 if (e[f] && (g = e[f] + g.slice(0, 1).toUpperCase() + g.slice(1)), g in a.style) {
79 a.style[g] = (null == d || d) && c || "";
80 break
81 }
82 }
83 }, toggleBehavior: function (a, b, c) {
84 if (b && a && a.style) {
85 r.each(b, function (b, d) {
86 r.setPrefixedCss(a, d, b, c)
87 });
88 var d = c && function () {
89 return!1
90 };
91 "none" == b.userSelect && (a.onselectstart = d), "none" == b.userDrag && (a.ondragstart = d)
92 }
93 }, toCamelCase: function (a) {
94 return a.replace(/[_-]([a-z])/g, function (a) {
95 return a[1].toUpperCase()
96 })
97 }}, s = d.event = {preventMouseEvents: !1, started: !1, shouldDetect: !1, on: function (a, b, c, d) {
98 var e = b.split(" ");
99 r.each(e, function (b) {
100 r.on(a, b, c), d && d(b)
101 })
102 }, off: function (a, b, c, d) {
103 var e = b.split(" ");
104 r.each(e, function (b) {
105 r.off(a, b, c), d && d(b)
106 })
107 }, onTouch: function (a, b, c) {
108 var f = this, g = function (e) {
109 var g, h = e.type.toLowerCase(), i = d.HAS_POINTEREVENTS, j = r.inStr(h, "mouse");
110 j && f.preventMouseEvents || (j && b == m && 0 === e.button ? (f.preventMouseEvents = !1, f.shouldDetect = !0) : i && b == m ? f.shouldDetect = 1 === e.buttons || t.matchType(k, e) : j || b != m || (f.preventMouseEvents = !0, f.shouldDetect = !0), i && b != o && t.updatePointer(b, e), f.shouldDetect && (g = f.doDetect.call(f, e, b, a, c)), g == o && (f.preventMouseEvents = !1, f.shouldDetect = !1, t.reset()), i && b == o && t.updatePointer(b, e))
111 };
112 return this.on(a, e[b], g), g
113 }, doDetect: function (a, b, c, d) {
114 var e = this.getTouchList(a, b), f = e.length, g = b, h = e.trigger, i = f;
115 b == m ? h = q : b == o && (h = p, i = e.length - (a.changedTouches ? a.changedTouches.length : 1)), i > 0 && this.started && (g = n), this.started = !0;
116 var j = this.collectEventData(c, g, e, a);
117 return b != o && d.call(u, j), h && (j.changedLength = i, j.eventType = h, d.call(u, j), j.eventType = g, delete j.changedLength), g == o && (d.call(u, j), this.started = !1), g
118 }, determineEventTypes: function () {
119 var b;
120 return b = d.HAS_POINTEREVENTS ? a.PointerEvent ? ["pointerdown", "pointermove", "pointerup pointercancel lostpointercapture"] : ["MSPointerDown", "MSPointerMove", "MSPointerUp MSPointerCancel MSLostPointerCapture"] : d.NO_MOUSEEVENTS ? ["touchstart", "touchmove", "touchend touchcancel"] : ["touchstart mousedown", "touchmove mousemove", "touchend touchcancel mouseup"], e[m] = b[0], e[n] = b[1], e[o] = b[2], e
121 }, getTouchList: function (a, b) {
122 if (d.HAS_POINTEREVENTS)return t.getTouchList();
123 if (a.touches) {
124 if (b == n)return a.touches;
125 var c = [], e = [].concat(r.toArray(a.touches), r.toArray(a.changedTouches)), f = [];
126 return r.each(e, function (a) {
127 r.inArray(c, a.identifier) === !1 && f.push(a), c.push(a.identifier)
128 }), f
129 }
130 return a.identifier = 1, [a]
131 }, collectEventData: function (a, b, c, d) {
132 var e = k;
133 return r.inStr(d.type, "mouse") || t.matchType(j, d) ? e = j : t.matchType(l, d) && (e = l), {center: r.getCenter(c), timeStamp: Date.now(), target: d.target, touches: c, eventType: b, pointerType: e, srcEvent: d, preventDefault: function () {
134 var a = this.srcEvent;
135 a.preventManipulation && a.preventManipulation(), a.preventDefault && a.preventDefault()
136 }, stopPropagation: function () {
137 this.srcEvent.stopPropagation()
138 }, stopDetect: function () {
139 return u.stopDetect()
140 }}
141 }}, t = d.PointerEvent = {pointers: {}, getTouchList: function () {
142 var a = [];
143 return r.each(this.pointers, function (b) {
144 a.push(b)
145 }), a
146 }, updatePointer: function (a, b) {
147 a == o || a != o && 1 !== b.buttons ? delete this.pointers[b.pointerId] : (b.identifier = b.pointerId, this.pointers[b.pointerId] = b)
148 }, matchType: function (a, b) {
149 if (!b.pointerType)return!1;
150 var c = b.pointerType, d = {};
151 return d[j] = c === (b.MSPOINTER_TYPE_MOUSE || j), d[k] = c === (b.MSPOINTER_TYPE_TOUCH || k), d[l] = c === (b.MSPOINTER_TYPE_PEN || l), d[a]
152 }, reset: function () {
153 this.pointers = {}
154 }}, u = d.detection = {gestures: [], current: null, previous: null, stopped: !1, startDetect: function (a, b) {
155 this.current || (this.stopped = !1, this.current = {inst: a, startEvent: r.extend({}, b), lastEvent: !1, lastCalcEvent: !1, futureCalcEvent: !1, lastCalcData: {}, name: ""}, this.detect(b))
156 }, detect: function (a) {
157 if (this.current && !this.stopped) {
158 a = this.extendEventData(a);
159 var b = this.current.inst, c = b.options;
160 return r.each(this.gestures, function (d) {
161 !this.stopped && b.enabled && c[d.name] && d.handler.call(d, a, b)
162 }, this), this.current && (this.current.lastEvent = a), a.eventType == o && this.stopDetect(), a
163 }
164 }, stopDetect: function () {
165 this.previous = r.extend({}, this.current), this.current = null, this.stopped = !0
166 }, getCalculatedData: function (a, b, c, e, f) {
167 var g = this.current, h = !1, i = g.lastCalcEvent, j = g.lastCalcData;
168 i && a.timeStamp - i.timeStamp > d.CALCULATE_INTERVAL && (b = i.center, c = a.timeStamp - i.timeStamp, e = a.center.clientX - i.center.clientX, f = a.center.clientY - i.center.clientY, h = !0), (a.eventType == q || a.eventType == p) && (g.futureCalcEvent = a), (!g.lastCalcEvent || h) && (j.velocity = r.getVelocity(c, e, f), j.angle = r.getAngle(b, a.center), j.direction = r.getDirection(b, a.center), g.lastCalcEvent = g.futureCalcEvent || a, g.futureCalcEvent = a), a.velocityX = j.velocity.x, a.velocityY = j.velocity.y, a.interimAngle = j.angle, a.interimDirection = j.direction
169 }, extendEventData: function (a) {
170 var b = this.current, c = b.startEvent, d = b.lastEvent || c;
171 (a.eventType == q || a.eventType == p) && (c.touches = [], r.each(a.touches, function (a) {
172 c.touches.push({clientX: a.clientX, clientY: a.clientY})
173 }));
174 var e = a.timeStamp - c.timeStamp, f = a.center.clientX - c.center.clientX, g = a.center.clientY - c.center.clientY;
175 return this.getCalculatedData(a, d.center, e, f, g), r.extend(a, {startEvent: c, deltaTime: e, deltaX: f, deltaY: g, distance: r.getDistance(c.center, a.center), angle: r.getAngle(c.center, a.center), direction: r.getDirection(c.center, a.center), scale: r.getScale(c.touches, a.touches), rotation: r.getRotation(c.touches, a.touches)}), a
176 }, register: function (a) {
177 var c = a.defaults || {};
178 return c[a.name] === b && (c[a.name] = !0), r.extend(d.defaults, c, !0), a.index = a.index || 1e3, this.gestures.push(a), this.gestures.sort(function (a, b) {
179 return a.index < b.index ? -1 : a.index > b.index ? 1 : 0
180 }), this.gestures
181 }};
182 d.Instance = function (a, b) {
183 var e = this;
184 c(), this.element = a, this.enabled = !0, r.each(b, function (a, c) {
185 delete b[c], b[r.toCamelCase(c)] = a
186 }), this.options = r.extend(r.extend({}, d.defaults), b || {}), this.options.behavior && r.toggleBehavior(this.element, this.options.behavior, !0), this.eventStartHandler = s.onTouch(a, m, function (a) {
187 e.enabled && a.eventType == m ? u.startDetect(e, a) : a.eventType == q && u.detect(a)
188 }), this.eventHandlers = []
189 }, d.Instance.prototype = {on: function (a, b) {
190 var c = this;
191 return s.on(c.element, a, b, function (a) {
192 c.eventHandlers.push({gesture: a, handler: b})
193 }), c
194 }, off: function (a, b) {
195 var c = this;
196 return s.off(c.element, a, b, function (a) {
197 var d = r.inArray({gesture: a, handler: b});
198 d !== !1 && c.eventHandlers.splice(d, 1)
199 }), c
200 }, trigger: function (a, b) {
201 b || (b = {});
202 var c = d.DOCUMENT.createEvent("Event");
203 c.initEvent(a, !0, !0), c.gesture = b;
204 var e = this.element;
205 return r.hasParent(b.target, e) && (e = b.target), e.dispatchEvent(c), this
206 }, enable: function (a) {
207 return this.enabled = a, this
208 }, dispose: function () {
209 var a, b;
210 for (r.toggleBehavior(this.element, this.options.behavior, !1), a = -1; b = this.eventHandlers[++a];)r.off(this.element, b.gesture, b.handler);
211 return this.eventHandlers = [], s.off(this.element, e[m], this.eventStartHandler), null
212 }}, function (a) {
213 function b(b, d) {
214 var e = u.current;
215 if (!(d.options.dragMaxTouches > 0 && b.touches.length > d.options.dragMaxTouches))switch (b.eventType) {
216 case m:
217 c = !1;
218 break;
219 case n:
220 if (b.distance < d.options.dragMinDistance && e.name != a)return;
221 var j = e.startEvent.center;
222 if (e.name != a && (e.name = a, d.options.dragDistanceCorrection && b.distance > 0)) {
223 var k = Math.abs(d.options.dragMinDistance / b.distance);
224 j.pageX += b.deltaX * k, j.pageY += b.deltaY * k, j.clientX += b.deltaX * k, j.clientY += b.deltaY * k, b = u.extendEventData(b)
225 }
226 (e.lastEvent.dragLockToAxis || d.options.dragLockToAxis && d.options.dragLockMinDistance <= b.distance) && (b.dragLockToAxis = !0);
227 var l = e.lastEvent.direction;
228 b.dragLockToAxis && l !== b.direction && (b.direction = r.isVertical(l) ? b.deltaY < 0 ? h : f : b.deltaX < 0 ? g : i), c || (d.trigger(a + "start", b), c = !0), d.trigger(a, b), d.trigger(a + b.direction, b);
229 var q = r.isVertical(b.direction);
230 (d.options.dragBlockVertical && q || d.options.dragBlockHorizontal && !q) && b.preventDefault();
231 break;
232 case p:
233 c && b.changedLength <= d.options.dragMaxTouches && (d.trigger(a + "end", b), c = !1);
234 break;
235 case o:
236 c = !1
237 }
238 }
239
240 var c = !1;
241 d.gestures.Drag = {name: a, index: 50, handler: b, defaults: {dragMinDistance: 10, dragDistanceCorrection: !0, dragMaxTouches: 1, dragBlockHorizontal: !1, dragBlockVertical: !1, dragLockToAxis: !1, dragLockMinDistance: 25}}
242 }("drag"), d.gestures.Gesture = {name: "gesture", index: 1337, handler: function (a, b) {
243 b.trigger(this.name, a)
244 }}, function (a) {
245 function b(b, d) {
246 var e = d.options, f = u.current;
247 switch (b.eventType) {
248 case m:
249 clearTimeout(c), f.name = a, c = setTimeout(function () {
250 f && f.name == a && d.trigger(a, b)
251 }, e.holdTimeout);
252 break;
253 case n:
254 b.distance > e.holdThreshold && clearTimeout(c);
255 break;
256 case p:
257 clearTimeout(c)
258 }
259 }
260
261 var c;
262 d.gestures.Hold = {name: a, index: 10, defaults: {holdTimeout: 500, holdThreshold: 2}, handler: b}
263 }("hold"), d.gestures.Release = {name: "release", index: 1 / 0, handler: function (a, b) {
264 a.eventType == p && b.trigger(this.name, a)
265 }}, d.gestures.Swipe = {name: "swipe", index: 40, defaults: {swipeMinTouches: 1, swipeMaxTouches: 1, swipeVelocityX: .6, swipeVelocityY: .6}, handler: function (a, b) {
266 if (a.eventType == p) {
267 var c = a.touches.length, d = b.options;
268 if (c < d.swipeMinTouches || c > d.swipeMaxTouches)return;
269 (a.velocityX > d.swipeVelocityX || a.velocityY > d.swipeVelocityY) && (b.trigger(this.name, a), b.trigger(this.name + a.direction, a))
270 }
271 }}, function (a) {
272 function b(b, d) {
273 var e, f, g = d.options, h = u.current, i = u.previous;
274 switch (b.eventType) {
275 case m:
276 c = !1;
277 break;
278 case n:
279 c = c || b.distance > g.tapMaxDistance;
280 break;
281 case o:
282 !r.inStr(b.srcEvent.type, "cancel") && b.deltaTime < g.tapMaxTime && !c && (e = i && i.lastEvent && b.timeStamp - i.lastEvent.timeStamp, f = !1, i && i.name == a && e && e < g.doubleTapInterval && b.distance < g.doubleTapDistance && (d.trigger("doubletap", b), f = !0), (!f || g.tapAlways) && (h.name = a, d.trigger(h.name, b)))
283 }
284 }
285
286 var c = !1;
287 d.gestures.Tap = {name: a, index: 100, handler: b, defaults: {tapMaxTime: 250, tapMaxDistance: 10, tapAlways: !0, doubleTapDistance: 20, doubleTapInterval: 300}}
288 }("tap"), d.gestures.Touch = {name: "touch", index: -1 / 0, defaults: {preventDefault: !1, preventMouse: !1}, handler: function (a, b) {
289 return b.options.preventMouse && a.pointerType == j ? void a.stopDetect() : (b.options.preventDefault && a.preventDefault(), void(a.eventType == q && b.trigger("touch", a)))
290 }}, function (a) {
291 function b(b, d) {
292 switch (b.eventType) {
293 case m:
294 c = !1;
295 break;
296 case n:
297 if (b.touches.length < 2)return;
298 var e = Math.abs(1 - b.scale), f = Math.abs(b.rotation);
299 if (e < d.options.transformMinScale && f < d.options.transformMinRotation)return;
300 u.current.name = a, c || (d.trigger(a + "start", b), c = !0), d.trigger(a, b), f > d.options.transformMinRotation && d.trigger("rotate", b), e > d.options.transformMinScale && (d.trigger("pinch", b), d.trigger("pinch" + (b.scale < 1 ? "in" : "out"), b));
301 break;
302 case p:
303 c && b.changedLength < 2 && (d.trigger(a + "end", b), c = !1)
304 }
305 }
306
307 var c = !1;
308 d.gestures.Transform = {name: a, index: 45, defaults: {transformMinScale: .01, transformMinRotation: 1}, handler: b}
309 }("transform"), "function" == typeof define && define.amd ? define(function () {
310 return d
311 }) : "undefined" != typeof module && module.exports ? module.exports = d : a.Hammer = d
312}(window);
313//# sourceMappingURL=hammer.min.map
diff --git a/point/libs/hammerjs/hammer.min.map b/point/libs/hammerjs/hammer.min.map
new file mode 100644
index 0000000..61db733
--- /dev/null
+++ b/point/libs/hammerjs/hammer.min.map
@@ -0,0 +1 @@
{"version": 3, "file": "hammer.min.js", "sources": ["hammer.js"], "names": ["window", "undefined", "setup", "Hammer", "READY", "Event", "determineEventTypes", "Utils", "each", "gestures", "gesture", "Detection", "register", "onTouch", "DOCUMENT", "EVENT_MOVE", "detect", "EVENT_END", "element", "options", "Instance", "VERSION", "defaults", "behavior", "userSelect", "touchAction", "touchCallout", "contentZooming", "userDrag", "tapHighlightColor", "document", "HAS_POINTEREVENTS", "navigator", "pointerEnabled", "msPointerEnabled", "HAS_TOUCHEVENTS", "IS_MOBILE", "test", "userAgent", "NO_MOUSEEVENTS", "CALCULATE_INTERVAL", "EVENT_TYPES", "DIRECTION_DOWN", "DIRECTION_LEFT", "DIRECTION_UP", "DIRECTION_RIGHT", "POINTER_MOUSE", "POINTER_TOUCH", "POINTER_PEN", "EVENT_START", "EVENT_RELEASE", "EVENT_TOUCH", "plugins", "utils", "extend", "dest", "src", "merge", "key", "hasOwnProperty", "on", "type", "handler", "addEventListener", "off", "removeEventListener", "obj", "iterator", "context", "i", "len", "forEach", "length", "call", "inStr", "find", "indexOf", "inArray", "index", "toArray", "Array", "prototype", "slice", "hasParent", "node", "parent", "parentNode", "getCenter", "touches", "pageX", "pageY", "clientX", "clientY", "min", "Math", "max", "touch", "push", "apply", "getVelocity", "deltaTime", "deltaX", "deltaY", "x", "abs", "y", "getAngle", "touch1", "touch2", "atan2", "PI", "getDirection", "getDistance", "sqrt", "getScale", "start", "end", "this", "getRotation", "isVertical", "direction", "setPrefixedCss", "prop", "value", "toggle", "prefixes", "toCamelCase", "p", "toUpperCase", "style", "toggleBehavior", "props", "falseFn", "onselectstart", "ondragstart", "str", "replace", "s", "event", "preventMouseEvents", "started", "shouldDetect", "hook", "types", "split", "eventType", "self", "onTouchHandler", "ev", "triggerType", "srcType", "toLowerCase", "isPointer", "isMouse", "button", "buttons", "PointerEvent", "matchType", "updatePointer", "doDetect", "reset", "touchList", "getTouchList", "touchListLength", "triggerChange", "trigger", "changedLength", "changedTouches", "evData", "collectEventData", "identifiers", "concat", "identifier", "pointerType", "center", "timeStamp", "Date", "now", "target", "srcEvent", "preventDefault", "preventManipulation", "stopPropagation", "stopDetect", "pointers", "touchlist", "pointer", "pointerEvent", "pointerId", "pt", "MSPOINTER_TYPE_MOUSE", "MSPOINTER_TYPE_TOUCH", "MSPOINTER_TYPE_PEN", "detection", "current", "previous", "stopped", "startDetect", "inst", "eventData", "startEvent", "lastEvent", "lastCalcEvent", "futureCalcEvent", "lastCalcData", "name", "extendEventData", "instOptions", "enabled", "getCalculatedData", "cur", "recalc", "calcEv", "calcData", "velocity", "angle", "velocityX", "velocityY", "interimAngle", "interimDirection", "startEv", "lastEv", "distance", "scale", "rotation", "sort", "a", "b", "eventStartHandler", "eventHandlers", "splice", "createEvent", "initEvent", "dispatchEvent", "enable", "state", "dispose", "eh", "dragGesture", "dragMaxTouches", "triggered", "dragMinDistance", "startCenter", "dragDistanceCorrection", "factor", "dragLockToAxis", "dragLockMinDistance", "lastDirection", "dragBlockVertical", "dragBlockHorizontal", "Drag", "Gesture", "holdGesture", "clearTimeout", "timer", "setTimeout", "holdTimeout", "holdThreshold", "Hold", "Release", "Infinity", "Swipe", "swipeMinTouches", "swipeMaxTouches", "swipeVelocityX", "swipeVelocityY", "tapGesture", "sincePrev", "didDoubleTap", "prev", "hasMoved", "tapMaxDistance", "tapMaxTime", "doubleTapInterval", "doubleTapDistance", "tapAlways", "Tap", "Touch", "preventMouse", "transformGesture", "scaleThreshold", "rotationThreshold", "transformMinScale", "transformMinRotation", "Transform", "define", "amd", "module", "exports"], "mappings": "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"} \ No newline at end of file
diff --git a/point/libs/js-yaml/js-yaml.min.js b/point/libs/js-yaml/js-yaml.min.js
new file mode 100644
index 0000000..bd05e77
--- /dev/null
+++ b/point/libs/js-yaml/js-yaml.min.js
@@ -0,0 +1,880 @@
1/* js-yaml 3.0.2 https://github.com/nodeca/js-yaml */
2!function (e) {
3 "object" == typeof exports ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : "undefined" != typeof window ? window.jsyaml = e() : "undefined" != typeof global ? global.jsyaml = e() : "undefined" != typeof self && (self.jsyaml = e())
4}(function () {
5 return function e(t, r, n) {
6 function a(c, o) {
7 if (!r[c]) {
8 if (!t[c]) {
9 var s = "function" == typeof require && require;
10 if (!o && s)return s(c, !0);
11 if (i)return i(c, !0);
12 throw new Error("Cannot find module '" + c + "'")
13 }
14 var l = r[c] = {exports: {}};
15 t[c][0].call(l.exports, function (e) {
16 var r = t[c][1][e];
17 return a(r ? r : e)
18 }, l, l.exports, e, t, r, n)
19 }
20 return r[c].exports
21 }
22
23 for (var i = "function" == typeof require && require, c = 0; c < n.length; c++)a(n[c]);
24 return a
25 }({1: [function (e, t) {
26 "use strict";
27 var r = e("./lib/js-yaml.js");
28 t.exports = r
29 }, {"./lib/js-yaml.js": 2}], 2: [function (e, t) {
30 "use strict";
31 function r(e) {
32 return function () {
33 throw new Error("Function " + e + " is deprecated and cannot be used.")
34 }
35 }
36
37 var n = e("./js-yaml/loader"), a = e("./js-yaml/dumper");
38 t.exports.Type = e("./js-yaml/type"), t.exports.Schema = e("./js-yaml/schema"), t.exports.FAILSAFE_SCHEMA = e("./js-yaml/schema/failsafe"), t.exports.JSON_SCHEMA = e("./js-yaml/schema/json"), t.exports.CORE_SCHEMA = e("./js-yaml/schema/core"), t.exports.DEFAULT_SAFE_SCHEMA = e("./js-yaml/schema/default_safe"), t.exports.DEFAULT_FULL_SCHEMA = e("./js-yaml/schema/default_full"), t.exports.load = n.load, t.exports.loadAll = n.loadAll, t.exports.safeLoad = n.safeLoad, t.exports.safeLoadAll = n.safeLoadAll, t.exports.dump = a.dump, t.exports.safeDump = a.safeDump, t.exports.YAMLException = e("./js-yaml/exception"), t.exports.MINIMAL_SCHEMA = e("./js-yaml/schema/failsafe"), t.exports.SAFE_SCHEMA = e("./js-yaml/schema/default_safe"), t.exports.DEFAULT_SCHEMA = e("./js-yaml/schema/default_full"), t.exports.scan = r("scan"), t.exports.parse = r("parse"), t.exports.compose = r("compose"), t.exports.addConstructor = r("addConstructor")
39 }, {"./js-yaml/dumper": 4, "./js-yaml/exception": 5, "./js-yaml/loader": 6, "./js-yaml/schema": 8, "./js-yaml/schema/core": 9, "./js-yaml/schema/default_full": 10, "./js-yaml/schema/default_safe": 11, "./js-yaml/schema/failsafe": 12, "./js-yaml/schema/json": 13, "./js-yaml/type": 14}], 3: [function (e, t) {
40 "use strict";
41 function r(e) {
42 return void 0 === e || null === e
43 }
44
45 function n(e) {
46 return"object" == typeof e && null !== e
47 }
48
49 function a(e) {
50 return Array.isArray(e) ? e : r(e) ? [] : [e]
51 }
52
53 function i(e, t) {
54 var r, n, a, i;
55 if (t)for (i = Object.keys(t), r = 0, n = i.length; n > r; r += 1)a = i[r], e[a] = t[a];
56 return e
57 }
58
59 function c(e, t) {
60 var r, n = "";
61 for (r = 0; t > r; r += 1)n += e;
62 return n
63 }
64
65 t.exports.isNothing = r, t.exports.isObject = n, t.exports.toArray = a, t.exports.repeat = c, t.exports.extend = i
66 }, {}], 4: [function (e, t) {
67 "use strict";
68 function r(e, t) {
69 var r, n, a, i, c, o, s;
70 if (null === t)return{};
71 for (r = {}, n = Object.keys(t), a = 0, i = n.length; i > a; a += 1)c = n[a], o = String(t[c]), "!!" === c.slice(0, 2) && (c = "tag:yaml.org,2002:" + c.slice(2)), s = e.compiledTypeMap[c], s && b.call(s.dumpStyleAliases, o) && (o = s.dumpStyleAliases[o]), r[c] = o;
72 return r
73 }
74
75 function n(e) {
76 var t, r, n;
77 if (t = e.toString(16).toUpperCase(), 255 >= e)r = "x", n = 2; else if (65535 >= e)r = "u", n = 4; else {
78 if (!(4294967295 >= e))throw new y("code point within a string may not be greater than 0xFFFFFFFF");
79 r = "U", n = 8
80 }
81 return"\\" + r + g.repeat("0", n - t.length) + t
82 }
83
84 function a(e) {
85 this.schema = e.schema || x, this.indent = Math.max(1, e.indent || 2), this.skipInvalid = e.skipInvalid || !1, this.flowLevel = g.isNothing(e.flowLevel) ? -1 : e.flowLevel, this.styleMap = r(this.schema, e.styles || null), this.implicitTypes = this.schema.compiledImplicit, this.explicitTypes = this.schema.compiledExplicit, this.tag = null, this.result = ""
86 }
87
88 function i(e, t) {
89 return"\n" + g.repeat(" ", e.indent * t)
90 }
91
92 function c(e, t) {
93 var r, n, a;
94 for (r = 0, n = e.implicitTypes.length; n > r; r += 1)if (a = e.implicitTypes[r], a.loadResolver && a.loadResolver({result: t}))return!0;
95 return!1
96 }
97
98 function o(e, t) {
99 var r, a, i, o, s, l;
100 for (e.dump = "", r = !1, a = 0, l = t.charCodeAt(0) || 0, -1 !== G.indexOf(t) ? r = !0 : 0 === t.length ? r = !0 : S === l || S === t.charCodeAt(t.length - 1) ? r = !0 : (N === l || K === l) && (r = !0), i = 0, o = t.length; o > i; i += 1)s = t.charCodeAt(i), r || (w === s || C === s || j === s || M === s || D === s || Y === s || U === s || B === s || O === s || F === s || L === s || I === s || H === s || _ === s || R === s || k === s || E === s || P === s || T === s || q === s) && (r = !0), ($[s] || !(s >= 32 && 126 >= s || 133 === s || s >= 160 && 55295 >= s || s >= 57344 && 65533 >= s || s >= 65536 && 1114111 >= s)) && (e.dump += t.slice(a, i), e.dump += $[s] || n(s), a = i + 1, r = !0);
101 i > a && (e.dump += t.slice(a, i)), !r && c(e, e.dump) && (r = !0), r && (e.dump = '"' + e.dump + '"')
102 }
103
104 function s(e, t, r) {
105 var n, a, i = "", c = e.tag;
106 for (n = 0, a = r.length; a > n; n += 1)f(e, t, r[n], !1, !1) && (0 !== n && (i += ", "), i += e.dump);
107 e.tag = c, e.dump = "[" + i + "]"
108 }
109
110 function l(e, t, r, n) {
111 var a, c, o = "", s = e.tag;
112 for (a = 0, c = r.length; c > a; a += 1)f(e, t + 1, r[a], !0, !0) && (n && 0 === a || (o += i(e, t)), o += "- " + e.dump);
113 e.tag = s, e.dump = o || "[]"
114 }
115
116 function u(e, t, r) {
117 var n, a, i, c, o, s = "", l = e.tag, u = Object.keys(r);
118 for (n = 0, a = u.length; a > n; n += 1)o = "", 0 !== n && (o += ", "), i = u[n], c = r[i], f(e, t, i, !1, !1) && (e.dump.length > 1024 && (o += "? "), o += e.dump + ": ", f(e, t, c, !1, !1) && (o += e.dump, s += o));
119 e.tag = l, e.dump = "{" + s + "}"
120 }
121
122 function p(e, t, r, n) {
123 var a, c, o, s, l, u, p = "", h = e.tag, d = Object.keys(r);
124 for (a = 0, c = d.length; c > a; a += 1)u = "", n && 0 === a || (u += i(e, t)), o = d[a], s = r[o], f(e, t + 1, o, !0, !0) && (l = null !== e.tag && "?" !== e.tag || e.dump && e.dump.length > 1024, l && (u += e.dump && C === e.dump.charCodeAt(0) ? "?" : "? "), u += e.dump, l && (u += i(e, t)), f(e, t + 1, s, !0, l) && (u += e.dump && C === e.dump.charCodeAt(0) ? ":" : ": ", u += e.dump, p += u));
125 e.tag = h, e.dump = p || "{}"
126 }
127
128 function h(e, t, r) {
129 var n, a, i, c, o, s;
130 for (a = r ? e.explicitTypes : e.implicitTypes, i = 0, c = a.length; c > i; i += 1)if (o = a[i], (o.dumpInstanceOf || o.dumpPredicate) && (!o.dumpInstanceOf || "object" == typeof t && t instanceof o.dumpInstanceOf) && (!o.dumpPredicate || o.dumpPredicate(t))) {
131 if (e.tag = r ? o.tag : "?", o.dumpRepresenter) {
132 if (s = e.styleMap[o.tag] || o.dumpDefaultStyle, "[object Function]" === A.call(o.dumpRepresenter))n = o.dumpRepresenter(t, s); else {
133 if (!b.call(o.dumpRepresenter, s))throw new y("!<" + o.tag + '> tag resolver accepts not "' + s + '" style');
134 n = o.dumpRepresenter[s](t, s)
135 }
136 e.dump = n
137 }
138 return!0
139 }
140 return!1
141 }
142
143 function f(e, t, r, n, a) {
144 e.tag = null, e.dump = r, h(e, r, !1) || h(e, r, !0);
145 var i = A.call(e.dump);
146 if (n && (n = 0 > e.flowLevel || e.flowLevel > t), (null !== e.tag && "?" !== e.tag || 2 !== e.indent && t > 0) && (a = !1), "[object Object]" === i)n && 0 !== Object.keys(e.dump).length ? p(e, t, e.dump, a) : u(e, t, e.dump); else if ("[object Array]" === i)n && 0 !== e.dump.length ? l(e, t, e.dump, a) : s(e, t, e.dump); else {
147 if ("[object String]" !== i) {
148 if (e.skipInvalid)return!1;
149 throw new y("unacceptabe kind of an object to dump " + i)
150 }
151 "?" !== e.tag && o(e, e.dump)
152 }
153 return null !== e.tag && "?" !== e.tag && (e.dump = "!<" + e.tag + "> " + e.dump), !0
154 }
155
156 function d(e, t) {
157 t = t || {};
158 var r = new a(t);
159 return f(r, 0, e, !0, !0) ? r.dump + "\n" : ""
160 }
161
162 function m(e, t) {
163 return d(e, g.extend({schema: v}, t))
164 }
165
166 var g = e("./common"), y = e("./exception"), x = e("./schema/default_full"), v = e("./schema/default_safe"), A = Object.prototype.toString, b = Object.prototype.hasOwnProperty, w = 9, C = 10, j = 13, S = 32, I = 33, k = 34, O = 35, E = 37, F = 38, R = 39, L = 42, M = 44, N = 45, T = 58, _ = 62, K = 63, P = 64, D = 91, Y = 93, q = 96, U = 123, H = 124, B = 125, $ = {};
167 $[0] = "\\0", $[7] = "\\a", $[8] = "\\b", $[9] = "\\t", $[10] = "\\n", $[11] = "\\v", $[12] = "\\f", $[13] = "\\r", $[27] = "\\e", $[34] = '\\"', $[92] = "\\\\", $[133] = "\\N", $[160] = "\\_", $[8232] = "\\L", $[8233] = "\\P";
168 var G = ["y", "Y", "yes", "Yes", "YES", "on", "On", "ON", "n", "N", "no", "No", "NO", "off", "Off", "OFF"];
169 t.exports.dump = d, t.exports.safeDump = m
170 }, {"./common": 3, "./exception": 5, "./schema/default_full": 10, "./schema/default_safe": 11}], 5: [function (e, t) {
171 "use strict";
172 function r(e, t) {
173 this.name = "YAMLException", this.reason = e, this.mark = t, this.message = this.toString(!1)
174 }
175
176 r.prototype.toString = function (e) {
177 var t;
178 return t = "JS-YAML: " + (this.reason || "(unknown reason)"), !e && this.mark && (t += " " + this.mark.toString()), t
179 }, t.exports = r
180 }, {}], 6: [function (e, t) {
181 "use strict";
182 function r(e, t) {
183 this.input = e, this.filename = t.filename || null, this.schema = t.schema || M, this.strict = t.strict || !1, this.legacy = t.legacy || !1, this.implicitTypes = this.schema.compiledImplicit, this.typeMap = this.schema.compiledTypeMap, this.length = e.length, this.position = 0, this.line = 0, this.lineStart = 0, this.lineIndent = 0, this.character = e.charCodeAt(0)
184 }
185
186 function n(e, t) {
187 return new F(t, new R(e.filename, e.input, e.position, e.line, e.position - e.lineStart))
188 }
189
190 function a(e, t) {
191 throw n(e, t)
192 }
193
194 function i(e, t) {
195 var r = n(e, t);
196 if (e.strict)throw r;
197 console.warn(r.toString())
198 }
199
200 function c(e, t, r, n) {
201 var i, c, o, s;
202 if (r > t) {
203 if (s = e.input.slice(t, r), n)for (i = 0, c = s.length; c > i; i += 1)o = s.charCodeAt(i), 9 === o || o >= 32 && 1114111 >= o || a(e, "expected valid JSON character");
204 e.result += s
205 }
206 }
207
208 function o(e, t, r) {
209 var n, i, c, o;
210 for (E.isObject(r) || a(e, "cannot merge mappings; the provided source object is unacceptable"), n = Object.keys(r), c = 0, o = n.length; o > c; c += 1)i = n[c], N.call(t, i) || (t[i] = r[i])
211 }
212
213 function s(e, t, r, n, a) {
214 var i, c;
215 if (n = String(n), null === t && (t = {}), "tag:yaml.org,2002:merge" === r)if (Array.isArray(a))for (i = 0, c = a.length; c > i; i += 1)o(e, t, a[i]); else o(e, t, a); else t[n] = a;
216 return t
217 }
218
219 function l(e) {
220 H === e.character ? e.position += 1 : B === e.character ? e.position += H === e.input.charCodeAt(e.position + 1) ? 2 : 1 : a(e, "a line break is expected"), e.line += 1, e.lineStart = e.position, e.character = e.input.charCodeAt(e.position)
221 }
222
223 function u(e, t, r) {
224 for (var n = 0; e.position < e.length;) {
225 for (; $ === e.character || U === e.character;)e.character = e.input.charCodeAt(++e.position);
226 if (t && J === e.character)do e.character = e.input.charCodeAt(++e.position); while (e.position < e.length && H !== e.character && B !== e.character);
227 if (H !== e.character && B !== e.character)break;
228 for (l(e), n += 1, e.lineIndent = 0; $ === e.character;)e.lineIndent += 1, e.character = e.input.charCodeAt(++e.position);
229 e.lineIndent < r && i(e, "deficient indentation")
230 }
231 return n
232 }
233
234 function p(e) {
235 var t, r;
236 return e.position === e.lineStart && (tt === e.character || rt === e.character) && e.input.charCodeAt(e.position + 1) === e.character && e.input.charCodeAt(e.position + 2) === e.character && (t = e.position + 3, r = e.input.charCodeAt(t), t >= e.length || $ === r || U === r || H === r || B === r) ? !0 : !1
237 }
238
239 function h(e, t) {
240 1 === t ? e.result += " " : t > 1 && (e.result += E.repeat("\n", t - 1))
241 }
242
243 function f(e, t, r) {
244 var n, a, i, o, s, l, f, d, m = e.kind, g = e.result;
245 if ($ === e.character || U === e.character || H === e.character || B === e.character || et === e.character || xt === e.character || At === e.character || Mt === e.character || Tt === e.character || J === e.character || Z === e.character || Q === e.character || G === e.character || Nt === e.character || lt === e.character || W === e.character || V === e.character || z === e.character || pt === e.character || wt === e.character)return!1;
246 if ((ut === e.character || tt === e.character) && (a = e.input.charCodeAt(e.position + 1), $ === a || U === a || H === a || B === a || r && (et === a || xt === a || At === a || Mt === a || Tt === a)))return!1;
247 for (e.kind = "scalar", e.result = "", i = o = e.position, s = !1; e.position < e.length;) {
248 if (ot === e.character) {
249 if (a = e.input.charCodeAt(e.position + 1), $ === a || U === a || H === a || B === a || r && (et === a || xt === a || At === a || Mt === a || Tt === a))break
250 } else if (J === e.character) {
251 if (n = e.input.charCodeAt(e.position - 1), $ === n || U === n || H === n || B === n)break
252 } else {
253 if (e.position === e.lineStart && p(e) || r && (et === e.character || xt === e.character || At === e.character || Mt === e.character || Tt === e.character))break;
254 if (H === e.character || B === e.character) {
255 if (l = e.line, f = e.lineStart, d = e.lineIndent, u(e, !1, -1), e.lineIndent >= t) {
256 s = !0;
257 continue
258 }
259 e.position = o, e.line = l, e.lineStart = f, e.lineIndent = d, e.character = e.input.charCodeAt(e.position);
260 break
261 }
262 }
263 s && (c(e, i, o, !1), h(e, e.line - l), i = o = e.position, s = !1), $ !== e.character && U !== e.character && (o = e.position + 1), e.character = e.input.charCodeAt(++e.position)
264 }
265 return c(e, i, o, !1), e.result ? !0 : (e.kind = m, e.result = g, !1)
266 }
267
268 function d(e, t) {
269 var r, n;
270 if (W !== e.character)return!1;
271 for (e.kind = "scalar", e.result = "", e.character = e.input.charCodeAt(++e.position), r = n = e.position; e.position < e.length;)if (W === e.character) {
272 if (c(e, r, e.position, !0), e.character = e.input.charCodeAt(++e.position), W !== e.character)return!0;
273 r = n = e.position, e.character = e.input.charCodeAt(++e.position)
274 } else H === e.character || B === e.character ? (c(e, r, n, !0), h(e, u(e, !1, t)), r = n = e.position, e.character = e.input.charCodeAt(e.position)) : e.position === e.lineStart && p(e) ? a(e, "unexpected end of the document within a single quoted scalar") : (e.character = e.input.charCodeAt(++e.position), n = e.position);
275 a(e, "unexpected end of the stream within a single quoted scalar")
276 }
277
278 function m(e, t) {
279 var r, n, i, o, s, l;
280 if (V !== e.character)return!1;
281 for (e.kind = "scalar", e.result = "", e.character = e.input.charCodeAt(++e.position), r = n = e.position; e.position < e.length;) {
282 if (V === e.character)return c(e, r, e.position, !0), e.character = e.input.charCodeAt(++e.position), !0;
283 if (vt === e.character) {
284 if (c(e, r, e.position, !0), e.character = e.input.charCodeAt(++e.position), H === e.character || B === e.character)u(e, !1, t); else if (_t[e.character])e.result += _t[e.character], e.character = e.input.charCodeAt(++e.position); else if (Kt[e.character]) {
285 for (i = Kt[e.character], l = 0, o = 1; i >= o; o += 1)s = 4 * (i - o), e.character = e.input.charCodeAt(++e.position), at <= e.character && e.character <= ct ? l |= e.character - at << s : ht <= e.character && e.character <= ft ? l |= e.character - ht + 10 << s : Ct <= e.character && e.character <= It ? l |= e.character - Ct + 10 << s : a(e, "expected hexadecimal character");
286 e.result += String.fromCharCode(l), e.character = e.input.charCodeAt(++e.position)
287 } else a(e, "unknown escape sequence");
288 r = n = e.position
289 } else H === e.character || B === e.character ? (c(e, r, n, !0), h(e, u(e, !1, t)), r = n = e.position, e.character = e.input.charCodeAt(e.position)) : e.position === e.lineStart && p(e) ? a(e, "unexpected end of the document within a double quoted scalar") : (e.character = e.input.charCodeAt(++e.position), n = e.position)
290 }
291 a(e, "unexpected end of the stream within a double quoted scalar")
292 }
293
294 function g(e, t) {
295 var r, n, i, c, o, l, p, h, f, d, m = !0, g = e.tag;
296 switch (e.character) {
297 case xt:
298 c = At, p = !1, n = [];
299 break;
300 case Mt:
301 c = Tt, p = !0, n = {};
302 break;
303 default:
304 return!1
305 }
306 for (null !== e.anchor && (e.anchorMap[e.anchor] = n), e.character = e.input.charCodeAt(++e.position); e.position < e.length;) {
307 if (u(e, !0, t), e.character === c)return e.character = e.input.charCodeAt(++e.position), e.tag = g, e.kind = p ? "mapping" : "sequence", e.result = n, !0;
308 m || a(e, "missed comma between flow collection entries"), f = h = d = null, o = l = !1, ut === e.character && (i = e.input.charCodeAt(e.position + 1), ($ === i || U === i || H === i || B === i) && (o = l = !0, e.position += 1, e.character = i, u(e, !0, t))), r = e.line, C(e, t, T, !1, !0), f = e.tag, h = e.result, u(e, !0, t), !l && e.line !== r || ot !== e.character || (o = !0, e.character = e.input.charCodeAt(++e.position), u(e, !0, t), C(e, t, T, !1, !0), d = e.result), p ? s(e, n, f, h, d) : o ? n.push(s(e, null, f, h, d)) : n.push(h), u(e, !0, t), et === e.character ? (m = !0, e.character = e.input.charCodeAt(++e.position)) : m = !1
309 }
310 a(e, "unexpected end of the stream within a flow collection")
311 }
312
313 function y(e, t) {
314 var r, n, i = D, o = !1, s = t, u = 0, p = !1;
315 switch (e.character) {
316 case Nt:
317 n = !1;
318 break;
319 case lt:
320 n = !0;
321 break;
322 default:
323 return!1
324 }
325 for (e.kind = "scalar", e.result = ""; e.position < e.length;)if (e.character = e.input.charCodeAt(++e.position), X === e.character || tt === e.character)D === i ? i = X === e.character ? q : Y : a(e, "repeat of a chomping mode identifier"); else {
326 if (!(at <= e.character && e.character <= ct))break;
327 at === e.character ? a(e, "bad explicit indentation width of a block scalar; it cannot be less than one") : o ? a(e, "repeat of an indentation width identifier") : (s = t + (e.character - it), o = !0)
328 }
329 if ($ === e.character || U === e.character) {
330 do e.character = e.input.charCodeAt(++e.position); while ($ === e.character || U === e.character);
331 if (J === e.character)do e.character = e.input.charCodeAt(++e.position); while (e.position < e.length && H !== e.character && B !== e.character)
332 }
333 for (; e.position < e.length;) {
334 for (l(e), e.lineIndent = 0; (!o || e.lineIndent < s) && $ === e.character;)e.lineIndent += 1, e.character = e.input.charCodeAt(++e.position);
335 if (!o && e.lineIndent > s && (s = e.lineIndent), H !== e.character && B !== e.character) {
336 if (e.lineIndent < s) {
337 switch (i) {
338 case q:
339 e.result += E.repeat("\n", u);
340 break;
341 case D:
342 o && (e.result += "\n")
343 }
344 break
345 }
346 n ? $ === e.character || U === e.character ? (p = !0, e.result += E.repeat("\n", u + 1)) : p ? (p = !1, e.result += E.repeat("\n", u + 1)) : 0 === u ? o && (e.result += " ") : e.result += E.repeat("\n", u) : e.result += o ? E.repeat("\n", u + 1) : E.repeat("\n", u), o = !0, u = 0, r = e.position;
347 do e.character = e.input.charCodeAt(++e.position); while (e.position < e.length && H !== e.character && B !== e.character);
348 c(e, r, e.position, !1)
349 } else u += 1
350 }
351 return!0
352 }
353
354 function x(e, t) {
355 var r, n, i = e.tag, c = [], o = !1;
356 for (null !== e.anchor && (e.anchorMap[e.anchor] = c); e.position < e.length && tt === e.character && (n = e.input.charCodeAt(e.position + 1), $ === n || U === n || H === n || B === n);)if (o = !0, e.position += 1, e.character = n, u(e, !0, -1) && e.lineIndent <= t)c.push(null); else if (r = e.line, C(e, t, K, !1, !0), c.push(e.result), u(e, !0, -1), (e.line === r || e.lineIndent > t) && e.position < e.length)a(e, "bad indentation of a sequence entry"); else if (e.lineIndent < t)break;
357 return o ? (e.tag = i, e.kind = "sequence", e.result = c, !0) : !1
358 }
359
360 function v(e, t) {
361 var r, n, i, c = e.tag, o = {}, l = null, p = null, h = null, f = !1, d = !1;
362 for (null !== e.anchor && (e.anchorMap[e.anchor] = o); e.position < e.length;) {
363 if (r = e.input.charCodeAt(e.position + 1), i = e.line, ut !== e.character && ot !== e.character || $ !== r && U !== r && H !== r && B !== r) {
364 if (!C(e, t, _, !1, !0))break;
365 if (e.line === i) {
366 for (; $ === e.character || U === e.character;)e.character = e.input.charCodeAt(++e.position);
367 if (ot === e.character)e.character = e.input.charCodeAt(++e.position), $ !== e.character && U !== e.character && H !== e.character && B !== e.character && a(e, "a whitespace character is expected after the key-value separator within a block mapping"), f && (s(e, o, l, p, null), l = p = h = null), d = !0, f = !1, n = !1, l = e.tag, p = e.result; else {
368 if (!d)return e.tag = c, !0;
369 a(e, "can not read an implicit mapping pair; a colon is missed")
370 }
371 } else {
372 if (!d)return e.tag = c, !0;
373 a(e, "can not read a block mapping entry; a multiline key may not be an implicit key")
374 }
375 } else ut === e.character ? (f && (s(e, o, l, p, null), l = p = h = null), d = !0, f = !0, n = !0) : f ? (f = !1, n = !0) : a(e, "incomplete explicit mapping pair; a key node is missed"), e.position += 1, e.character = r;
376 if ((e.line === i || e.lineIndent > t) && (C(e, t, P, !0, n) && (f ? p = e.result : h = e.result), f || (s(e, o, l, p, h), l = p = h = null), u(e, !0, -1)), e.lineIndent > t && e.position < e.length)a(e, "bad indentation of a mapping entry"); else if (e.lineIndent < t)break
377 }
378 return f && s(e, o, l, p, null), d && (e.tag = c, e.kind = "mapping", e.result = o), d
379 }
380
381 function A(e) {
382 var t, r, n, i = !1, c = !1;
383 if (G !== e.character)return!1;
384 if (null !== e.tag && a(e, "duplication of a tag property"), e.character = e.input.charCodeAt(++e.position), st === e.character ? (i = !0, e.character = e.input.charCodeAt(++e.position)) : G === e.character ? (c = !0, r = "!!", e.character = e.input.charCodeAt(++e.position)) : r = "!", t = e.position, i) {
385 do e.character = e.input.charCodeAt(++e.position); while (e.position < e.length && lt !== e.character);
386 e.position < e.length ? (n = e.input.slice(t, e.position), e.character = e.input.charCodeAt(++e.position)) : a(e, "unexpected end of the stream within a verbatim tag")
387 } else {
388 for (; e.position < e.length && $ !== e.character && U !== e.character && H !== e.character && B !== e.character;)G === e.character && (c ? a(e, "tag suffix cannot contain exclamation marks") : (r = e.input.slice(t - 1, e.position + 1), qt.test(r) || a(e, "named tag handle cannot contain such characters"), c = !0, t = e.position + 1)), e.character = e.input.charCodeAt(++e.position);
389 n = e.input.slice(t, e.position), Yt.test(n) && a(e, "tag suffix cannot contain flow indicator characters")
390 }
391 return n && !Ut.test(n) && a(e, "tag name cannot contain such characters: " + n), i ? e.tag = n : N.call(e.tagMap, r) ? e.tag = e.tagMap[r] + n : "!" === r ? e.tag = "!" + n : "!!" === r ? e.tag = "tag:yaml.org,2002:" + n : a(e, 'undeclared tag handle "' + r + '"'), !0
392 }
393
394 function b(e) {
395 var t;
396 if (Z !== e.character)return!1;
397 for (null !== e.anchor && a(e, "duplication of an anchor property"), e.character = e.input.charCodeAt(++e.position), t = e.position; e.position < e.length && $ !== e.character && U !== e.character && H !== e.character && B !== e.character && et !== e.character && xt !== e.character && At !== e.character && Mt !== e.character && Tt !== e.character;)e.character = e.input.charCodeAt(++e.position);
398 return e.position === t && a(e, "name of an anchor node must contain at least one character"), e.anchor = e.input.slice(t, e.position), !0
399 }
400
401 function w(e) {
402 var t, r;
403 if (Q !== e.character)return!1;
404 for (e.character = e.input.charCodeAt(++e.position), t = e.position; e.position < e.length && $ !== e.character && U !== e.character && H !== e.character && B !== e.character && et !== e.character && xt !== e.character && At !== e.character && Mt !== e.character && Tt !== e.character;)e.character = e.input.charCodeAt(++e.position);
405 return e.position === t && a(e, "name of an alias node must contain at least one character"), r = e.input.slice(t, e.position), e.anchorMap.hasOwnProperty(r) || a(e, 'unidentified alias "' + r + '"'), e.result = e.anchorMap[r], u(e, !0, -1), !0
406 }
407
408 function C(e, t, r, n, c) {
409 var o, s, l, p, h, C, j, S, I = !1, k = !0, O = !1;
410 if (e.tag = null, e.anchor = null, e.kind = null, e.result = null, o = s = l = P === r || K === r, n && u(e, !0, -1))if (I = !0, e.lineIndent === t)k = !1; else {
411 if (!(e.lineIndent > t))return!1;
412 k = !0
413 }
414 if (k)for (; A(e) || b(e);)if (u(e, !0, -1))if (I = !0, e.lineIndent > t)k = !0, l = o; else {
415 if (e.lineIndent !== t)return!0;
416 k = !1, l = o
417 } else l = !1;
418 if (l && (l = I || c), (k || P === r) && (j = T === r || _ === r ? t : t + 1, S = e.position - e.lineStart, k ? l && (x(e, S) || v(e, S)) || g(e, j) ? O = !0 : (s && y(e, j) || d(e, j) || m(e, j) ? O = !0 : w(e) ? (O = !0, (null !== e.tag || null !== e.anchor) && a(e, "alias node should not have any properties")) : f(e, j, T === r) && (O = !0, null === e.tag && (e.tag = "?")), null !== e.anchor && (e.anchorMap[e.anchor] = e.result)) : O = l && x(e, S)), null !== e.tag && "!" !== e.tag)if ("?" === e.tag) {
419 for (p = 0, h = e.implicitTypes.length; h > p; p += 1)if (C = e.implicitTypes[p], C.loadResolver && C.loadResolver(e)) {
420 e.tag = C.tag;
421 break
422 }
423 } else N.call(e.typeMap, e.tag) ? (C = e.typeMap[e.tag], null !== e.result && C.loadKind !== e.kind && a(e, "unacceptable node kind for !<" + e.tag + '> tag; it should be "' + C.loadKind + '", not "' + e.kind + '"'), C.loadResolver && !C.loadResolver(e) && a(e, "cannot resolve a node with !<" + e.tag + "> explicit tag")) : i(e, "unknown tag !<" + e.tag + ">");
424 return null !== e.tag || null !== e.anchor || O
425 }
426
427 function j(e, t) {
428 var r, n, c, o = e.position, s = !1;
429 for (e.version = null, e.checkLineBreaks = e.legacy, e.tagMap = {}, e.anchorMap = {}; e.position < e.length && (u(e, !0, -1), !(e.lineIndent > 0 || z !== e.character));) {
430 for (s = !0, e.character = e.input.charCodeAt(++e.position), r = e.position; e.position < e.length && $ !== e.character && U !== e.character && H !== e.character && B !== e.character;)e.character = e.input.charCodeAt(++e.position);
431 for (n = e.input.slice(r, e.position), c = [], n.length < 1 && a(e, "directive name must not be less than one character in length"); e.position < e.length;) {
432 for (; $ === e.character || U === e.character;)e.character = e.input.charCodeAt(++e.position);
433 if (J === e.character) {
434 do e.character = e.input.charCodeAt(++e.position); while (e.position < e.length && H !== e.character && B !== e.character);
435 break
436 }
437 if (H === e.character || B === e.character)break;
438 for (r = e.position; e.position < e.length && $ !== e.character && U !== e.character && H !== e.character && B !== e.character;)e.character = e.input.charCodeAt(++e.position);
439 c.push(e.input.slice(r, e.position))
440 }
441 e.position < e.length && l(e), N.call(Ht, n) ? Ht[n](e, n, c) : i(e, 'unknown document directive "' + n + '"')
442 }
443 return u(e, !0, -1), 0 === e.lineIndent && tt === e.character && tt === e.input.charCodeAt(e.position + 1) && tt === e.input.charCodeAt(e.position + 2) ? (e.position += 3, e.character = e.input.charCodeAt(e.position), u(e, !0, -1)) : s && a(e, "directives end mark is expected"), C(e, e.lineIndent - 1, P, !1, !0), u(e, !0, -1), e.checkLineBreaks && Dt.test(e.input.slice(o, e.position)) && i(e, "non-ASCII line breaks are interpreted as content"), t(e.result), e.position === e.lineStart && p(e) ? (rt === e.character && (e.position += 3, e.character = e.input.charCodeAt(e.position), u(e, !0, -1)), void 0) : (e.position < e.length && a(e, "end of the stream or a document separator is expected"), void 0)
444 }
445
446 function S(e, t, n) {
447 n = n || {};
448 var i = new r(e, n);
449 for (Pt.test(i.input) && a(i, "the stream contains non-printable characters"); $ === i.character;)i.lineIndent += 1, i.character = i.input.charCodeAt(++i.position);
450 for (; i.position < i.length;)j(i, t)
451 }
452
453 function I(e, t) {
454 function r(e) {
455 if (a)throw new F("expected a single document in the stream, but found more");
456 n = e, a = !0
457 }
458
459 var n = null, a = !1;
460 return S(e, r, t), n
461 }
462
463 function k(e, t, r) {
464 S(e, t, E.extend({schema: L}, r))
465 }
466
467 function O(e, t) {
468 return I(e, E.extend({schema: L}, t))
469 }
470
471 var E = e("./common"), F = e("./exception"), R = e("./mark"), L = e("./schema/default_safe"), M = e("./schema/default_full"), N = Object.prototype.hasOwnProperty, T = 1, _ = 2, K = 3, P = 4, D = 1, Y = 2, q = 3, U = 9, H = 10, B = 13, $ = 32, G = 33, V = 34, J = 35, z = 37, Z = 38, W = 39, Q = 42, X = 43, et = 44, tt = 45, rt = 46, nt = 47, at = 48, it = 49, ct = 57, ot = 58, st = 60, lt = 62, ut = 63, pt = 64, ht = 65, ft = 70, dt = 76, mt = 78, gt = 80, yt = 85, xt = 91, vt = 92, At = 93, bt = 95, wt = 96, Ct = 97, jt = 98, St = 101, It = 102, kt = 110, Ot = 114, Et = 116, Ft = 117, Rt = 118, Lt = 120, Mt = 123, Nt = 124, Tt = 125, _t = {};
472 _t[at] = "\x00", _t[Ct] = "", _t[jt] = "\b", _t[Et] = " ", _t[U] = " ", _t[kt] = "\n", _t[Rt] = " ", _t[It] = "\f", _t[Ot] = "\r", _t[St] = "", _t[$] = " ", _t[V] = '"', _t[nt] = "/", _t[vt] = "\\", _t[mt] = "…", _t[bt] = " ", _t[dt] = "\u2028", _t[gt] = "\u2029";
473 var Kt = {};
474 Kt[Lt] = 2, Kt[Ft] = 4, Kt[yt] = 8;
475 var Pt = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uD800-\uDFFF\uFFFE\uFFFF]/, Dt = /[\x85\u2028\u2029]/, Yt = /[,\[\]\{\}]/, qt = /^(?:!|!!|![a-z\-]+!)$/i, Ut = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i, Ht = {YAML: function (e, t, r) {
476 var n, c, o;
477 null !== e.version && a(e, "duplication of %YAML directive"), 1 !== r.length && a(e, "YAML directive accepts exactly one argument"), n = /^([0-9]+)\.([0-9]+)$/.exec(r[0]), null === n && a(e, "ill-formed argument of the YAML directive"), c = parseInt(n[1], 10), o = parseInt(n[2], 10), 1 !== c && a(e, "unacceptable YAML version of the document"), e.version = r[0], e.checkLineBreaks = 2 > o, 1 !== o && 2 !== o && i(e, "unsupported YAML version of the document")
478 }, TAG: function (e, t, r) {
479 var n, i;
480 2 !== r.length && a(e, "TAG directive accepts exactly two arguments"), n = r[0], i = r[1], qt.test(n) || a(e, "ill-formed tag handle (first argument) of the TAG directive"), N.call(e.tagMap, n) && a(e, 'there is a previously declared suffix for "' + n + '" tag handle'), Ut.test(i) || a(e, "ill-formed tag prefix (second argument) of the TAG directive"), e.tagMap[n] = i
481 }};
482 t.exports.loadAll = S, t.exports.load = I, t.exports.safeLoadAll = k, t.exports.safeLoad = O
483 }, {"./common": 3, "./exception": 5, "./mark": 7, "./schema/default_full": 10, "./schema/default_safe": 11}], 7: [function (e, t) {
484 "use strict";
485 function r(e, t, r, n, a) {
486 this.name = e, this.buffer = t, this.position = r, this.line = n, this.column = a
487 }
488
489 var n = e("./common");
490 r.prototype.getSnippet = function (e, t) {
491 var r, a, i, c, o;
492 if (!this.buffer)return null;
493 for (e = e || 4, t = t || 75, r = "", a = this.position; a > 0 && -1 === "\x00\r\n…\u2028\u2029".indexOf(this.buffer.charAt(a - 1));)if (a -= 1, this.position - a > t / 2 - 1) {
494 r = " ... ", a += 5;
495 break
496 }
497 for (i = "", c = this.position; c < this.buffer.length && -1 === "\x00\r\n…\u2028\u2029".indexOf(this.buffer.charAt(c));)if (c += 1, c - this.position > t / 2 - 1) {
498 i = " ... ", c -= 5;
499 break
500 }
501 return o = this.buffer.slice(a, c), n.repeat(" ", e) + r + o + i + "\n" + n.repeat(" ", e + this.position - a + r.length) + "^"
502 }, r.prototype.toString = function (e) {
503 var t, r = "";
504 return this.name && (r += 'in "' + this.name + '" '), r += "at line " + (this.line + 1) + ", column " + (this.column + 1), e || (t = this.getSnippet(), t && (r += ":\n" + t)), r
505 }, t.exports = r
506 }, {"./common": 3}], 8: [function (e, t) {
507 "use strict";
508 function r(e, t, n) {
509 var a = [];
510 return e.include.forEach(function (e) {
511 n = r(e, t, n)
512 }), e[t].forEach(function (e) {
513 n.forEach(function (t, r) {
514 t.tag === e.tag && a.push(r)
515 }), n.push(e)
516 }), n.filter(function (e, t) {
517 return-1 === a.indexOf(t)
518 })
519 }
520
521 function n() {
522 function e(e) {
523 n[e.tag] = e
524 }
525
526 var t, r, n = {};
527 for (t = 0, r = arguments.length; r > t; t += 1)arguments[t].forEach(e);
528 return n
529 }
530
531 function a(e) {
532 this.include = e.include || [], this.implicit = e.implicit || [], this.explicit = e.explicit || [], this.implicit.forEach(function (e) {
533 if (e.loadKind && "scalar" !== e.loadKind)throw new c("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")
534 }), this.compiledImplicit = r(this, "implicit", []), this.compiledExplicit = r(this, "explicit", []), this.compiledTypeMap = n(this.compiledImplicit, this.compiledExplicit)
535 }
536
537 var i = e("./common"), c = e("./exception"), o = e("./type");
538 a.DEFAULT = null, a.create = function () {
539 var e, t;
540 switch (arguments.length) {
541 case 1:
542 e = a.DEFAULT, t = arguments[0];
543 break;
544 case 2:
545 e = arguments[0], t = arguments[1];
546 break;
547 default:
548 throw new c("Wrong number of arguments for Schema.create function")
549 }
550 if (e = i.toArray(e), t = i.toArray(t), !e.every(function (e) {
551 return e instanceof a
552 }))throw new c("Specified list of super schemas (or a single Schema object) contains a non-Schema object.");
553 if (!t.every(function (e) {
554 return e instanceof o
555 }))throw new c("Specified list of YAML types (or a single Type object) contains a non-Type object.");
556 return new a({include: e, explicit: t})
557 }, t.exports = a
558 }, {"./common": 3, "./exception": 5, "./type": 14}], 9: [function (e, t) {
559 "use strict";
560 var r = e("../schema");
561 t.exports = new r({include: [e("./json")]})
562 }, {"../schema": 8, "./json": 13}], 10: [function (e, t) {
563 "use strict";
564 var r = e("../schema");
565 t.exports = r.DEFAULT = new r({include: [e("./default_safe")], explicit: [e("../type/js/undefined"), e("../type/js/regexp"), e("../type/js/function")]})
566 }, {"../schema": 8, "../type/js/function": 19, "../type/js/regexp": 20, "../type/js/undefined": 21, "./default_safe": 11}], 11: [function (e, t) {
567 "use strict";
568 var r = e("../schema");
569 t.exports = new r({include: [e("./core")], implicit: [e("../type/timestamp"), e("../type/merge")], explicit: [e("../type/binary"), e("../type/omap"), e("../type/pairs"), e("../type/set")]})
570 }, {"../schema": 8, "../type/binary": 15, "../type/merge": 23, "../type/omap": 25, "../type/pairs": 26, "../type/set": 28, "../type/timestamp": 30, "./core": 9}], 12: [function (e, t) {
571 "use strict";
572 var r = e("../schema");
573 t.exports = new r({explicit: [e("../type/str"), e("../type/seq"), e("../type/map")]})
574 }, {"../schema": 8, "../type/map": 22, "../type/seq": 27, "../type/str": 29}], 13: [function (e, t) {
575 "use strict";
576 var r = e("../schema");
577 t.exports = new r({include: [e("./failsafe")], implicit: [e("../type/null"), e("../type/bool"), e("../type/int"), e("../type/float")]})
578 }, {"../schema": 8, "../type/bool": 16, "../type/float": 17, "../type/int": 18, "../type/null": 24, "./failsafe": 12}], 14: [function (e, t) {
579 "use strict";
580 function r(e) {
581 var t = {};
582 return null !== e && Object.keys(e).forEach(function (r) {
583 e[r].forEach(function (e) {
584 t[String(e)] = r
585 })
586 }), t
587 }
588
589 function n(e, t) {
590 if (t = t || {}, Object.keys(t).forEach(function (t) {
591 if (-1 === i.indexOf(t))throw new a('Unknown option "' + t + '" is met in definition of "' + e + '" YAML type.')
592 }), this.tag = e, this.loadKind = t.loadKind || null, this.loadResolver = t.loadResolver || null, this.dumpInstanceOf = t.dumpInstanceOf || null, this.dumpPredicate = t.dumpPredicate || null, this.dumpRepresenter = t.dumpRepresenter || null, this.dumpDefaultStyle = t.dumpDefaultStyle || null, this.dumpStyleAliases = r(t.dumpStyleAliases || null), -1 === c.indexOf(this.loadKind))throw new a('Unknown loadKind "' + this.loadKind + '" is specified for "' + e + '" YAML type.')
593 }
594
595 var a = e("./exception"), i = ["loadKind", "loadResolver", "dumpInstanceOf", "dumpPredicate", "dumpRepresenter", "dumpDefaultStyle", "dumpStyleAliases"], c = ["scalar", "sequence", "mapping"];
596 t.exports = n
597 }, {"./exception": 5}], 15: [function (e, t) {
598 "use strict";
599 function r(e) {
600 var t, r, n, a, c = 0, l = [], u = e.result;
601 for (n = 0, a = 0, c = 0; c < u.length; c += 1)if (r = u.charCodeAt(c), t = s[127 & r], 10 !== r && 13 !== r) {
602 if (-1 === t)return!1;
603 a = a << 6 | t, n += 6, n >= 8 && (n -= 8, o !== u.charAt(c) && l.push(a >> n & 255), a &= (1 << n) - 1)
604 }
605 return n ? !1 : (e.result = i ? new i(l) : l, !0)
606 }
607
608 function n(e) {
609 var t, r, n, a = "";
610 for (t = 0, r = e.length - 2; r > t; t += 3)a += l[e[t + 0] >> 2], a += l[((3 & e[t + 0]) << 4) + (e[t + 1] >> 4)], a += l[((15 & e[t + 1]) << 2) + (e[t + 2] >> 6)], a += l[63 & e[t + 2]];
611 return n = e.length % 3, 0 !== n && (t = e.length - n, a += l[e[t + 0] >> 2], 2 === n ? (a += l[((3 & e[t + 0]) << 4) + (e[t + 1] >> 4)], a += l[(15 & e[t + 1]) << 2], a += o) : (a += l[(3 & e[t + 0]) << 4], a += o + o)), a
612 }
613
614 function a(e) {
615 return i && i.isBuffer(e)
616 }
617
618 var i = e("buffer").Buffer, c = e("../type"), o = "=", s = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 0, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1], l = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
619 t.exports = new c("tag:yaml.org,2002:binary", {loadKind: "scalar", loadResolver: r, dumpPredicate: a, dumpRepresenter: n})
620 }, {"../type": 14, buffer: 31}], 16: [function (e, t) {
621 "use strict";
622 function r(e) {
623 return i.hasOwnProperty(e.result) ? (e.result = i[e.result], !0) : !1
624 }
625
626 function n(e) {
627 return"[object Boolean]" === Object.prototype.toString.call(e)
628 }
629
630 var a = e("../type"), i = {"true": !0, True: !0, TRUE: !0, "false": !1, False: !1, FALSE: !1};
631 t.exports = new a("tag:yaml.org,2002:bool", {loadKind: "scalar", loadResolver: r, dumpPredicate: n, dumpRepresenter: {lowercase: function (e) {
632 return e ? "true" : "false"
633 }, uppercase: function (e) {
634 return e ? "TRUE" : "FALSE"
635 }, camelcase: function (e) {
636 return e ? "True" : "False"
637 }}, dumpDefaultStyle: "lowercase"})
638 }, {"../type": 14}], 17: [function (e, t) {
639 "use strict";
640 function r(e) {
641 var t, r, n, a, i = e.result;
642 return c.test(i) ? (t = i.replace(/_/g, "").toLowerCase(), r = "-" === t[0] ? -1 : 1, a = [], 0 <= "+-".indexOf(t[0]) && (t = t.slice(1)), ".inf" === t ? (e.result = 1 === r ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY, !0) : ".nan" === t ? (e.result = 0 / 0, !0) : 0 <= t.indexOf(":") ? (t.split(":").forEach(function (e) {
643 a.unshift(parseFloat(e, 10))
644 }), t = 0, n = 1, a.forEach(function (e) {
645 t += e * n, n *= 60
646 }), e.result = r * t, !0) : (e.result = r * parseFloat(t, 10), !0)) : !1
647 }
648
649 function n(e, t) {
650 if (isNaN(e))switch (t) {
651 case"lowercase":
652 return".nan";
653 case"uppercase":
654 return".NAN";
655 case"camelcase":
656 return".NaN"
657 } else if (Number.POSITIVE_INFINITY === e)switch (t) {
658 case"lowercase":
659 return".inf";
660 case"uppercase":
661 return".INF";
662 case"camelcase":
663 return".Inf"
664 } else {
665 if (Number.NEGATIVE_INFINITY !== e)return e.toString(10);
666 switch (t) {
667 case"lowercase":
668 return"-.inf";
669 case"uppercase":
670 return"-.INF";
671 case"camelcase":
672 return"-.Inf"
673 }
674 }
675 }
676
677 function a(e) {
678 return"[object Number]" === Object.prototype.toString.call(e) && 0 !== e % 1
679 }
680
681 var i = e("../type"), c = new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?|\\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");
682 t.exports = new i("tag:yaml.org,2002:float", {loadKind: "scalar", loadResolver: r, dumpPredicate: a, dumpRepresenter: n, dumpDefaultStyle: "lowercase"})
683 }, {"../type": 14}], 18: [function (e, t) {
684 "use strict";
685 function r(e) {
686 var t, r, n, a, c = e.result;
687 return i.test(c) ? (t = c.replace(/_/g, ""), r = "-" === t[0] ? -1 : 1, a = [], 0 <= "+-".indexOf(t[0]) && (t = t.slice(1)), "0" === t ? (e.result = 0, !0) : /^0b/.test(t) ? (e.result = r * parseInt(t.slice(2), 2), !0) : /^0x/.test(t) ? (e.result = r * parseInt(t, 16), !0) : "0" === t[0] ? (e.result = r * parseInt(t, 8), !0) : 0 <= t.indexOf(":") ? (t.split(":").forEach(function (e) {
688 a.unshift(parseInt(e, 10))
689 }), t = 0, n = 1, a.forEach(function (e) {
690 t += e * n, n *= 60
691 }), e.result = r * t, !0) : (e.result = r * parseInt(t, 10), !0)) : !1
692 }
693
694 function n(e) {
695 return"[object Number]" === Object.prototype.toString.call(e) && 0 === e % 1
696 }
697
698 var a = e("../type"), i = new RegExp("^(?:[-+]?0b[0-1_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[0-9a-fA-F_]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$");
699 t.exports = new a("tag:yaml.org,2002:int", {loadKind: "scalar", loadResolver: r, dumpPredicate: n, dumpRepresenter: {binary: function (e) {
700 return"0b" + e.toString(2)
701 }, octal: function (e) {
702 return"0" + e.toString(8)
703 }, decimal: function (e) {
704 return e.toString(10)
705 }, hexadecimal: function (e) {
706 return"0x" + e.toString(16).toUpperCase()
707 }}, dumpDefaultStyle: "decimal", dumpStyleAliases: {binary: [2, "bin"], octal: [8, "oct"], decimal: [10, "dec"], hexadecimal: [16, "hex"]}})
708 }, {"../type": 14}], 19: [function (e, t) {
709 "use strict";
710 function r(e) {
711 try {
712 var t, r = "(" + e.result + ")", n = i.parse(r, {range: !0}), a = [];
713 return"Program" !== n.type || 1 !== n.body.length || "ExpressionStatement" !== n.body[0].type || "FunctionExpression" !== n.body[0].expression.type ? !1 : (n.body[0].expression.params.forEach(function (e) {
714 a.push(e.name)
715 }), t = n.body[0].expression.body.range, e.result = new Function(a, r.slice(t[0] + 1, t[1] - 1)), !0)
716 } catch (c) {
717 return!1
718 }
719 }
720
721 function n(e) {
722 return e.toString()
723 }
724
725 function a(e) {
726 return"[object Function]" === Object.prototype.toString.call(e)
727 }
728
729 var i;
730 try {
731 i = e("esprima")
732 } catch (c) {
733 window && (i = window.esprima)
734 }
735 var o = e("../../type");
736 t.exports = new o("tag:yaml.org,2002:js/function", {loadKind: "scalar", loadResolver: r, dumpPredicate: a, dumpRepresenter: n})
737 }, {"../../type": 14, esprima: "S2ZkVY"}], 20: [function (e, t) {
738 "use strict";
739 function r(e) {
740 var t, r = e.result, n = /\/([gim]*)$/.exec(e.result);
741 "/" === r[0] && n && 4 >= n[0].length && (r = r.slice(1, r.length - n[0].length), t = n[1]);
742 try {
743 return e.result = new RegExp(r, t), !0
744 } catch (a) {
745 return!1
746 }
747 }
748
749 function n(e) {
750 var t = "/" + e.source + "/";
751 return e.global && (t += "g"), e.multiline && (t += "m"), e.ignoreCase && (t += "i"), t
752 }
753
754 function a(e) {
755 return"[object RegExp]" === Object.prototype.toString.call(e)
756 }
757
758 var i = e("../../type");
759 t.exports = new i("tag:yaml.org,2002:js/regexp", {loadKind: "scalar", loadResolver: r, dumpPredicate: a, dumpRepresenter: n})
760 }, {"../../type": 14}], 21: [function (e, t) {
761 "use strict";
762 function r(e) {
763 return e.result = void 0, !0
764 }
765
766 function n() {
767 return""
768 }
769
770 function a(e) {
771 return"undefined" == typeof e
772 }
773
774 var i = e("../../type");
775 t.exports = new i("tag:yaml.org,2002:js/undefined", {loadKind: "scalar", loadResolver: r, dumpPredicate: a, dumpRepresenter: n})
776 }, {"../../type": 14}], 22: [function (e, t) {
777 "use strict";
778 var r = e("../type");
779 t.exports = new r("tag:yaml.org,2002:map", {loadKind: "mapping"})
780 }, {"../type": 14}], 23: [function (e, t) {
781 "use strict";
782 function r(e) {
783 return"<<" === e.result
784 }
785
786 var n = e("../type");
787 t.exports = new n("tag:yaml.org,2002:merge", {loadKind: "scalar", loadResolver: r})
788 }, {"../type": 14}], 24: [function (e, t) {
789 "use strict";
790 function r(e) {
791 return i.hasOwnProperty(e.result) ? (e.result = null, !0) : !1
792 }
793
794 function n(e) {
795 return null === e
796 }
797
798 var a = e("../type"), i = {"~": !0, "null": !0, Null: !0, NULL: !0};
799 t.exports = new a("tag:yaml.org,2002:null", {loadKind: "scalar", loadResolver: r, dumpPredicate: n, dumpRepresenter: {canonical: function () {
800 return"~"
801 }, lowercase: function () {
802 return"null"
803 }, uppercase: function () {
804 return"NULL"
805 }, camelcase: function () {
806 return"Null"
807 }}, dumpDefaultStyle: "lowercase"})
808 }, {"../type": 14}], 25: [function (e, t) {
809 "use strict";
810 function r(e) {
811 var t, r, n, c, o, s = [], l = e.result;
812 for (t = 0, r = l.length; r > t; t += 1) {
813 if (n = l[t], o = !1, "[object Object]" !== i.call(n))return!1;
814 for (c in n)if (a.call(n, c)) {
815 if (o)return!1;
816 o = !0
817 }
818 if (!o)return!1;
819 if (-1 !== s.indexOf(c))return!1;
820 s.push(c)
821 }
822 return!0
823 }
824
825 var n = e("../type"), a = Object.prototype.hasOwnProperty, i = Object.prototype.toString;
826 t.exports = new n("tag:yaml.org,2002:omap", {loadKind: "sequence", loadResolver: r})
827 }, {"../type": 14}], 26: [function (e, t) {
828 "use strict";
829 function r(e) {
830 var t, r, n, i, c, o = e.result;
831 for (c = new Array(o.length), t = 0, r = o.length; r > t; t += 1) {
832 if (n = o[t], "[object Object]" !== a.call(n))return!1;
833 if (i = Object.keys(n), 1 !== i.length)return!1;
834 c[t] = [i[0], n[i[0]]]
835 }
836 return e.result = c, !0
837 }
838
839 var n = e("../type"), a = Object.prototype.toString;
840 t.exports = new n("tag:yaml.org,2002:pairs", {loadKind: "sequence", loadResolver: r})
841 }, {"../type": 14}], 27: [function (e, t) {
842 "use strict";
843 var r = e("../type");
844 t.exports = new r("tag:yaml.org,2002:seq", {loadKind: "sequence"})
845 }, {"../type": 14}], 28: [function (e, t) {
846 "use strict";
847 function r(e) {
848 var t, r = e.result;
849 for (t in r)if (a.call(r, t) && null !== r[t])return!1;
850 return!0
851 }
852
853 var n = e("../type"), a = Object.prototype.hasOwnProperty;
854 t.exports = new n("tag:yaml.org,2002:set", {loadKind: "mapping", loadResolver: r})
855 }, {"../type": 14}], 29: [function (e, t) {
856 "use strict";
857 var r = e("../type");
858 t.exports = new r("tag:yaml.org,2002:str", {loadKind: "scalar"})
859 }, {"../type": 14}], 30: [function (e, t) {
860 "use strict";
861 function r(e) {
862 var t, r, n, a, c, o, s, l, u, p, h = 0, f = null;
863 if (t = i.exec(e.result), null === t)return!1;
864 if (r = +t[1], n = +t[2] - 1, a = +t[3], !t[4])return e.result = new Date(Date.UTC(r, n, a)), !0;
865 if (c = +t[4], o = +t[5], s = +t[6], t[7]) {
866 for (h = t[7].slice(0, 3); h.length < 3;)h += "0";
867 h = +h
868 }
869 return t[9] && (l = +t[10], u = +(t[11] || 0), f = 6e4 * (60 * l + u), "-" === t[9] && (f = -f)), p = new Date(Date.UTC(r, n, a, c, o, s, h)), f && p.setTime(p.getTime() - f), e.result = p, !0
870 }
871
872 function n(e) {
873 return e.toISOString()
874 }
875
876 var a = e("../type"), i = new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?)?$");
877 t.exports = new a("tag:yaml.org,2002:timestamp", {loadKind: "scalar", loadResolver: r, dumpInstanceOf: Date, dumpRepresenter: n})
878 }, {"../type": 14}], 31: [function () {
879 }, {}]}, {}, [1])(1)
880}); \ No newline at end of file
diff --git a/point/libs/markdownjs/markdown.min.js b/point/libs/markdownjs/markdown.min.js
new file mode 100644
index 0000000..9bf8d3f
--- /dev/null
+++ b/point/libs/markdownjs/markdown.min.js
@@ -0,0 +1,538 @@
1!function (a) {
2 function b() {
3 return"Markdown.mk_block( " + uneval(this.toString()) + ", " + uneval(this.trailing) + ", " + uneval(this.lineNumber) + " )"
4 }
5
6 function c() {
7 var a = require("util");
8 return"Markdown.mk_block( " + a.inspect(this.toString()) + ", " + a.inspect(this.trailing) + ", " + a.inspect(this.lineNumber) + " )"
9 }
10
11 function d(a) {
12 for (var b = 0, c = -1; -1 !== (c = a.indexOf("\n", c + 1));)b++;
13 return b
14 }
15
16 function e(a) {
17 return a.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;")
18 }
19
20 function f(a) {
21 if ("string" == typeof a)return e(a);
22 var b = a.shift(), c = {}, d = [];
23 for (!a.length || "object" != typeof a[0] || a[0]instanceof Array || (c = a.shift()); a.length;)d.push(f(a.shift()));
24 var g = "";
25 for (var h in c)g += " " + h + '="' + e(c[h]) + '"';
26 return"img" === b || "br" === b || "hr" === b ? "<" + b + g + "/>" : "<" + b + g + ">" + d.join("") + "</" + b + ">"
27 }
28
29 function g(a, b, c) {
30 var d;
31 c = c || {};
32 var e = a.slice(0);
33 "function" == typeof c.preprocessTreeNode && (e = c.preprocessTreeNode(e, b));
34 var f = o(e);
35 if (f) {
36 e[1] = {};
37 for (d in f)e[1][d] = f[d];
38 f = e[1]
39 }
40 if ("string" == typeof e)return e;
41 switch (e[0]) {
42 case"header":
43 e[0] = "h" + e[1].level, delete e[1].level;
44 break;
45 case"bulletlist":
46 e[0] = "ul";
47 break;
48 case"numberlist":
49 e[0] = "ol";
50 break;
51 case"listitem":
52 e[0] = "li";
53 break;
54 case"para":
55 e[0] = "p";
56 break;
57 case"markdown":
58 e[0] = "html", f && delete f.references;
59 break;
60 case"code_block":
61 e[0] = "pre", d = f ? 2 : 1;
62 var h = ["code"];
63 h.push.apply(h, e.splice(d, e.length - d)), e[d] = h;
64 break;
65 case"inlinecode":
66 e[0] = "code";
67 break;
68 case"img":
69 e[1].src = e[1].href, delete e[1].href;
70 break;
71 case"linebreak":
72 e[0] = "br";
73 break;
74 case"link":
75 e[0] = "a";
76 break;
77 case"link_ref":
78 e[0] = "a";
79 var i = b[f.ref];
80 if (!i)return f.original;
81 delete f.ref, f.href = i.href, i.title && (f.title = i.title), delete f.original;
82 break;
83 case"img_ref":
84 e[0] = "img";
85 var i = b[f.ref];
86 if (!i)return f.original;
87 delete f.ref, f.src = i.href, i.title && (f.title = i.title), delete f.original
88 }
89 if (d = 1, f) {
90 for (var j in e[1]) {
91 d = 2;
92 break
93 }
94 1 === d && e.splice(d, 1)
95 }
96 for (; d < e.length; ++d)e[d] = g(e[d], b, c);
97 return e
98 }
99
100 function h(a) {
101 for (var b = o(a) ? 2 : 1; b < a.length;)"string" == typeof a[b] ? b + 1 < a.length && "string" == typeof a[b + 1] ? a[b] += a.splice(b + 1, 1)[0] : ++b : (h(a[b]), ++b)
102 }
103
104 function i(a, b) {
105 function c(a) {
106 this.len_after = a, this.name = "close_" + b
107 }
108
109 var d = a + "_state", e = "strong" === a ? "em_state" : "strong_state";
110 return function (f) {
111 if (this[d][0] === b)return this[d].shift(), [f.length, new c(f.length - b.length)];
112 var g = this[e].slice(), h = this[d].slice();
113 this[d].unshift(b);
114 var i = this.processInline(f.substr(b.length)), j = i[i.length - 1];
115 if (this[d].shift(), j instanceof c) {
116 i.pop();
117 var k = f.length - j.len_after;
118 return[k, [a].concat(i)]
119 }
120 return this[e] = g, this[d] = h, [b.length, b]
121 }
122 }
123
124 function j(a) {
125 for (var b = a.split(""), c = [""], d = !1; b.length;) {
126 var e = b.shift();
127 switch (e) {
128 case" ":
129 d ? c[c.length - 1] += e : c.push("");
130 break;
131 case"'":
132 case'"':
133 d = !d;
134 break;
135 case"\\":
136 e = b.shift();
137 default:
138 c[c.length - 1] += e
139 }
140 }
141 return c
142 }
143
144 var k = {};
145 k.mk_block = function (a, d, e) {
146 1 === arguments.length && (d = "\n\n");
147 var f = new String(a);
148 return f.trailing = d, f.inspect = c, f.toSource = b, void 0 !== e && (f.lineNumber = e), f
149 };
150 var l = k.isArray = Array.isArray || function (a) {
151 return"[object Array]" === Object.prototype.toString.call(a)
152 };
153 k.forEach = Array.prototype.forEach ? function (a, b, c) {
154 return a.forEach(b, c)
155 } : function (a, b, c) {
156 for (var d = 0; d < a.length; d++)b.call(c || a, a[d], d, a)
157 }, k.isEmpty = function (a) {
158 for (var b in a)if (hasOwnProperty.call(a, b))return!1;
159 return!0
160 }, k.extract_attr = function (a) {
161 return l(a) && a.length > 1 && "object" == typeof a[1] && !l(a[1]) ? a[1] : void 0
162 };
163 var m = function (a) {
164 switch (typeof a) {
165 case"undefined":
166 this.dialect = m.dialects.Gruber;
167 break;
168 case"object":
169 this.dialect = a;
170 break;
171 default:
172 if (!(a in m.dialects))throw new Error("Unknown Markdown dialect '" + String(a) + "'");
173 this.dialect = m.dialects[a]
174 }
175 this.em_state = [], this.strong_state = [], this.debug_indent = ""
176 };
177 m.dialects = {};
178 var n = m.mk_block = k.mk_block, l = k.isArray;
179 m.parse = function (a, b) {
180 var c = new m(b);
181 return c.toTree(a)
182 }, m.prototype.split_blocks = function (a) {
183 a = a.replace(/(\r\n|\n|\r)/g, "\n");
184 var b, c = /([\s\S]+?)($|\n#|\n(?:\s*\n|$)+)/g, e = [], f = 1;
185 for (null !== (b = /^(\s*\n)/.exec(a)) && (f += d(b[0]), c.lastIndex = b[0].length); null !== (b = c.exec(a));)"\n#" === b[2] && (b[2] = "\n", c.lastIndex--), e.push(n(b[1], b[2], f)), f += d(b[0]);
186 return e
187 }, m.prototype.processBlock = function (a, b) {
188 var c = this.dialect.block, d = c.__order__;
189 if ("__call__"in c)return c.__call__.call(this, a, b);
190 for (var e = 0; e < d.length; e++) {
191 var f = c[d[e]].call(this, a, b);
192 if (f)return(!l(f) || f.length > 0 && !l(f[0])) && this.debug(d[e], "didn't return a proper array"), f
193 }
194 return[]
195 }, m.prototype.processInline = function (a) {
196 return this.dialect.inline.__call__.call(this, String(a))
197 }, m.prototype.toTree = function (a, b) {
198 var c = a instanceof Array ? a : this.split_blocks(a), d = this.tree;
199 try {
200 for (this.tree = b || this.tree || ["markdown"]; c.length;) {
201 var e = this.processBlock(c.shift(), c);
202 e.length && this.tree.push.apply(this.tree, e)
203 }
204 return this.tree
205 } finally {
206 b && (this.tree = d)
207 }
208 }, m.prototype.debug = function () {
209 var a = Array.prototype.slice.call(arguments);
210 a.unshift(this.debug_indent), "undefined" != typeof print && print.apply(print, a), "undefined" != typeof console && "undefined" != typeof console.log && console.log.apply(null, a)
211 }, m.prototype.loop_re_over_block = function (a, b, c) {
212 for (var d, e = b.valueOf(); e.length && null !== (d = a.exec(e));)e = e.substr(d[0].length), c.call(this, d);
213 return e
214 }, m.buildBlockOrder = function (a) {
215 var b = [];
216 for (var c in a)"__order__" !== c && "__call__" !== c && b.push(c);
217 a.__order__ = b
218 }, m.buildInlinePatterns = function (a) {
219 var b = [];
220 for (var c in a)if (!c.match(/^__.*__$/)) {
221 var d = c.replace(/([\\.*+?|()\[\]{}])/g, "\\$1").replace(/\n/, "\\n");
222 b.push(1 === c.length ? d : "(?:" + d + ")")
223 }
224 b = b.join("|"), a.__patterns__ = b;
225 var e = a.__call__;
226 a.__call__ = function (a, c) {
227 return void 0 !== c ? e.call(this, a, c) : e.call(this, a, b)
228 }
229 };
230 var o = k.extract_attr;
231 m.renderJsonML = function (a, b) {
232 b = b || {}, b.root = b.root || !1;
233 var c = [];
234 if (b.root)c.push(f(a)); else for (a.shift(), !a.length || "object" != typeof a[0] || a[0]instanceof Array || a.shift(); a.length;)c.push(f(a.shift()));
235 return c.join("\n\n")
236 }, m.toHTMLTree = function (a, b, c) {
237 "string" == typeof a && (a = this.parse(a, b));
238 var d = o(a), e = {};
239 d && d.references && (e = d.references);
240 var f = g(a, e, c);
241 return h(f), f
242 }, m.toHTML = function (a, b, c) {
243 var d = this.toHTMLTree(a, b, c);
244 return this.renderJsonML(d)
245 };
246 var p = {};
247 p.inline_until_char = function (a, b) {
248 for (var c = 0, d = []; ;) {
249 if (a.charAt(c) === b)return c++, [c, d];
250 if (c >= a.length)return null;
251 var e = this.dialect.inline.__oneElement__.call(this, a.substr(c));
252 c += e[0], d.push.apply(d, e.slice(1))
253 }
254 }, p.subclassDialect = function (a) {
255 function b() {
256 }
257
258 function c() {
259 }
260
261 return b.prototype = a.block, c.prototype = a.inline, {block: new b, inline: new c}
262 };
263 var q = k.forEach, o = k.extract_attr, n = k.mk_block, r = k.isEmpty, s = p.inline_until_char, t = {block: {atxHeader: function (a, b) {
264 var c = a.match(/^(#{1,6})\s*(.*?)\s*#*\s*(?:\n|$)/);
265 if (!c)return void 0;
266 var d = ["header", {level: c[1].length}];
267 return Array.prototype.push.apply(d, this.processInline(c[2])), c[0].length < a.length && b.unshift(n(a.substr(c[0].length), a.trailing, a.lineNumber + 2)), [d]
268 }, setextHeader: function (a, b) {
269 var c = a.match(/^(.*)\n([-=])\2\2+(?:\n|$)/);
270 if (!c)return void 0;
271 var d = "=" === c[2] ? 1 : 2, e = ["header", {level: d}, c[1]];
272 return c[0].length < a.length && b.unshift(n(a.substr(c[0].length), a.trailing, a.lineNumber + 2)), [e]
273 }, code: function (a, b) {
274 var c = [], d = /^(?: {0,3}\t| {4})(.*)\n?/;
275 if (!a.match(d))return void 0;
276 a:for (; ;) {
277 var e = this.loop_re_over_block(d, a.valueOf(), function (a) {
278 c.push(a[1])
279 });
280 if (e.length) {
281 b.unshift(n(e, a.trailing));
282 break a
283 }
284 if (!b.length)break a;
285 if (!b[0].match(d))break a;
286 c.push(a.trailing.replace(/[^\n]/g, "").substring(2)), a = b.shift()
287 }
288 return[
289 ["code_block", c.join("\n")]
290 ]
291 }, horizRule: function (a, b) {
292 var c = a.match(/^(?:([\s\S]*?)\n)?[ \t]*([-_*])(?:[ \t]*\2){2,}[ \t]*(?:\n([\s\S]*))?$/);
293 if (!c)return void 0;
294 var d = [
295 ["hr"]
296 ];
297 if (c[1]) {
298 var e = n(c[1], "", a.lineNumber);
299 d.unshift.apply(d, this.toTree(e, []))
300 }
301 return c[3] && b.unshift(n(c[3], a.trailing, a.lineNumber + 1)), d
302 }, lists: function () {
303 function a(a) {
304 return new RegExp("(?:^(" + i + "{0," + a + "} {0,3})(" + f + ")\\s+)|" + "(^" + i + "{0," + (a - 1) + "}[ ]{0,4})")
305 }
306
307 function b(a) {
308 return a.replace(/ {0,3}\t/g, " ")
309 }
310
311 function c(a, b, c, d) {
312 if (b)return a.push(["para"].concat(c)), void 0;
313 var e = a[a.length - 1]instanceof Array && "para" === a[a.length - 1][0] ? a[a.length - 1] : a;
314 d && a.length > 1 && c.unshift(d);
315 for (var f = 0; f < c.length; f++) {
316 var g = c[f], h = "string" == typeof g;
317 h && e.length > 1 && "string" == typeof e[e.length - 1] ? e[e.length - 1] += g : e.push(g)
318 }
319 }
320
321 function d(a, b) {
322 for (var c = new RegExp("^(" + i + "{" + a + "}.*?\\n?)*$"), d = new RegExp("^" + i + "{" + a + "}", "gm"), e = []; b.length > 0 && c.exec(b[0]);) {
323 var f = b.shift(), g = f.replace(d, "");
324 e.push(n(g, f.trailing, f.lineNumber))
325 }
326 return e
327 }
328
329 function e(a, b, c) {
330 var d = a.list, e = d[d.length - 1];
331 if (!(e[1]instanceof Array && "para" === e[1][0]))if (b + 1 === c.length)e.push(["para"].concat(e.splice(1, e.length - 1))); else {
332 var f = e.pop();
333 e.push(["para"].concat(e.splice(1, e.length - 1)), f)
334 }
335 }
336
337 var f = "[*+-]|\\d+\\.", g = /[*+-]/, h = new RegExp("^( {0,3})(" + f + ")[ ]+"), i = "(?: {0,3}\\t| {4})";
338 return function (f, i) {
339 function j(a) {
340 var b = g.exec(a[2]) ? ["bulletlist"] : ["numberlist"];
341 return n.push({list: b, indent: a[1]}), b
342 }
343
344 var k = f.match(h);
345 if (!k)return void 0;
346 for (var l, m, n = [], o = j(k), p = !1, r = [n[0].list]; ;) {
347 for (var s = f.split(/(?=\n)/), t = "", u = "", v = 0; v < s.length; v++) {
348 u = "";
349 var w = s[v].replace(/^\n/, function (a) {
350 return u = a, ""
351 }), x = a(n.length);
352 if (k = w.match(x), void 0 !== k[1]) {
353 t.length && (c(l, p, this.processInline(t), u), p = !1, t = ""), k[1] = b(k[1]);
354 var y = Math.floor(k[1].length / 4) + 1;
355 if (y > n.length)o = j(k), l.push(o), l = o[1] = ["listitem"]; else {
356 var z = !1;
357 for (m = 0; m < n.length; m++)if (n[m].indent === k[1]) {
358 o = n[m].list, n.splice(m + 1, n.length - (m + 1)), z = !0;
359 break
360 }
361 z || (y++, y <= n.length ? (n.splice(y, n.length - y), o = n[y - 1].list) : (o = j(k), l.push(o))), l = ["listitem"], o.push(l)
362 }
363 u = ""
364 }
365 w.length > k[0].length && (t += u + w.substr(k[0].length))
366 }
367 t.length && (c(l, p, this.processInline(t), u), p = !1, t = "");
368 var A = d(n.length, i);
369 A.length > 0 && (q(n, e, this), l.push.apply(l, this.toTree(A, [])));
370 var B = i[0] && i[0].valueOf() || "";
371 if (!B.match(h) && !B.match(/^ /))break;
372 f = i.shift();
373 var C = this.dialect.block.horizRule(f, i);
374 if (C) {
375 r.push.apply(r, C);
376 break
377 }
378 q(n, e, this), p = !0
379 }
380 return r
381 }
382 }(), blockquote: function (a, b) {
383 if (!a.match(/^>/m))return void 0;
384 var c = [];
385 if (">" !== a[0]) {
386 for (var d = a.split(/\n/), e = [], f = a.lineNumber; d.length && ">" !== d[0][0];)e.push(d.shift()), f++;
387 var g = n(e.join("\n"), "\n", a.lineNumber);
388 c.push.apply(c, this.processBlock(g, [])), a = n(d.join("\n"), a.trailing, f)
389 }
390 for (; b.length && ">" === b[0][0];) {
391 var h = b.shift();
392 a = n(a + a.trailing + h, h.trailing, a.lineNumber)
393 }
394 var i = a.replace(/^> ?/gm, ""), j = (this.tree, this.toTree(i, ["blockquote"])), k = o(j);
395 return k && k.references && (delete k.references, r(k) && j.splice(1, 1)), c.push(j), c
396 }, referenceDefn: function (a, b) {
397 var c = /^\s*\[(.*?)\]:\s*(\S+)(?:\s+(?:(['"])(.*?)\3|\((.*?)\)))?\n?/;
398 if (!a.match(c))return void 0;
399 o(this.tree) || this.tree.splice(1, 0, {});
400 var d = o(this.tree);
401 void 0 === d.references && (d.references = {});
402 var e = this.loop_re_over_block(c, a, function (a) {
403 a[2] && "<" === a[2][0] && ">" === a[2][a[2].length - 1] && (a[2] = a[2].substring(1, a[2].length - 1));
404 var b = d.references[a[1].toLowerCase()] = {href: a[2]};
405 void 0 !== a[4] ? b.title = a[4] : void 0 !== a[5] && (b.title = a[5])
406 });
407 return e.length && b.unshift(n(e, a.trailing)), []
408 }, para: function (a) {
409 return[["para"].concat(this.processInline(a))]
410 }}, inline: {__oneElement__: function (a, b, c) {
411 var d, e;
412 b = b || this.dialect.inline.__patterns__;
413 var f = new RegExp("([\\s\\S]*?)(" + (b.source || b) + ")");
414 if (d = f.exec(a), !d)return[a.length, a];
415 if (d[1])return[d[1].length, d[1]];
416 var e;
417 return d[2]in this.dialect.inline && (e = this.dialect.inline[d[2]].call(this, a.substr(d.index), d, c || [])), e = e || [d[2].length, d[2]]
418 }, __call__: function (a, b) {
419 function c(a) {
420 "string" == typeof a && "string" == typeof e[e.length - 1] ? e[e.length - 1] += a : e.push(a)
421 }
422
423 for (var d, e = []; a.length > 0;)d = this.dialect.inline.__oneElement__.call(this, a, b, e), a = a.substr(d.shift()), q(d, c);
424 return e
425 }, "]": function () {
426 }, "}": function () {
427 }, __escape__: /^\\[\\`\*_{}\[\]()#\+.!\-]/, "\\": function (a) {
428 return this.dialect.inline.__escape__.exec(a) ? [2, a.charAt(1)] : [1, "\\"]
429 }, "![": function (a) {
430 var b = a.match(/^!\[(.*?)\][ \t]*\([ \t]*([^")]*?)(?:[ \t]+(["'])(.*?)\3)?[ \t]*\)/);
431 if (b) {
432 b[2] && "<" === b[2][0] && ">" === b[2][b[2].length - 1] && (b[2] = b[2].substring(1, b[2].length - 1)), b[2] = this.dialect.inline.__call__.call(this, b[2], /\\/)[0];
433 var c = {alt: b[1], href: b[2] || ""};
434 return void 0 !== b[4] && (c.title = b[4]), [b[0].length, ["img", c]]
435 }
436 return b = a.match(/^!\[(.*?)\][ \t]*\[(.*?)\]/), b ? [b[0].length, ["img_ref", {alt: b[1], ref: b[2].toLowerCase(), original: b[0]}]] : [2, "!["]
437 }, "[": function v(a) {
438 var b = String(a), c = s.call(this, a.substr(1), "]");
439 if (!c)return[1, "["];
440 var v, d, e = 1 + c[0], f = c[1];
441 a = a.substr(e);
442 var g = a.match(/^\s*\([ \t]*([^"']*)(?:[ \t]+(["'])(.*?)\2)?[ \t]*\)/);
443 if (g) {
444 var h = g[1];
445 if (e += g[0].length, h && "<" === h[0] && ">" === h[h.length - 1] && (h = h.substring(1, h.length - 1)), !g[3])for (var i = 1, j = 0; j < h.length; j++)switch (h[j]) {
446 case"(":
447 i++;
448 break;
449 case")":
450 0 === --i && (e -= h.length - j, h = h.substring(0, j))
451 }
452 return h = this.dialect.inline.__call__.call(this, h, /\\/)[0], d = {href: h || ""}, void 0 !== g[3] && (d.title = g[3]), v = ["link", d].concat(f), [e, v]
453 }
454 return g = a.match(/^\s*\[(.*?)\]/), g ? (e += g[0].length, d = {ref: (g[1] || String(f)).toLowerCase(), original: b.substr(0, e)}, v = ["link_ref", d].concat(f), [e, v]) : 1 === f.length && "string" == typeof f[0] ? (d = {ref: f[0].toLowerCase(), original: b.substr(0, e)}, v = ["link_ref", d, f[0]], [e, v]) : [1, "["]
455 }, "<": function (a) {
456 var b;
457 return null !== (b = a.match(/^<(?:((https?|ftp|mailto):[^>]+)|(.*?@.*?\.[a-zA-Z]+))>/)) ? b[3] ? [b[0].length, ["link", {href: "mailto:" + b[3]}, b[3]]] : "mailto" === b[2] ? [b[0].length, ["link", {href: b[1]}, b[1].substr("mailto:".length)]] : [b[0].length, ["link", {href: b[1]}, b[1]]] : [1, "<"]
458 }, "`": function (a) {
459 var b = a.match(/(`+)(([\s\S]*?)\1)/);
460 return b && b[2] ? [b[1].length + b[2].length, ["inlinecode", b[3]]] : [1, "`"]
461 }, " \n": function () {
462 return[3, ["linebreak"]]
463 }}};
464 t.inline["**"] = i("strong", "**"), t.inline.__ = i("strong", "__"), t.inline["*"] = i("em", "*"), t.inline._ = i("em", "_"), m.dialects.Gruber = t, m.buildBlockOrder(m.dialects.Gruber.block), m.buildInlinePatterns(m.dialects.Gruber.inline);
465 var u = p.subclassDialect(t), o = k.extract_attr, q = k.forEach;
466 u.processMetaHash = function (a) {
467 for (var b = j(a), c = {}, d = 0; d < b.length; ++d)if (/^#/.test(b[d]))c.id = b[d].substring(1); else if (/^\./.test(b[d]))c["class"] = c["class"] ? c["class"] + b[d].replace(/./, " ") : b[d].substring(1); else if (/\=/.test(b[d])) {
468 var e = b[d].split(/\=/);
469 c[e[0]] = e[1]
470 }
471 return c
472 }, u.block.document_meta = function (a) {
473 if (a.lineNumber > 1)return void 0;
474 if (!a.match(/^(?:\w+:.*\n)*\w+:.*$/))return void 0;
475 o(this.tree) || this.tree.splice(1, 0, {});
476 var b = a.split(/\n/);
477 for (var c in b) {
478 var d = b[c].match(/(\w+):\s*(.*)$/), e = d[1].toLowerCase(), f = d[2];
479 this.tree[1][e] = f
480 }
481 return[]
482 }, u.block.block_meta = function (a) {
483 var b = a.match(/(^|\n) {0,3}\{:\s*((?:\\\}|[^\}])*)\s*\}$/);
484 if (!b)return void 0;
485 var c, d = this.dialect.processMetaHash(b[2]);
486 if ("" === b[1]) {
487 var e = this.tree[this.tree.length - 1];
488 if (c = o(e), "string" == typeof e)return void 0;
489 c || (c = {}, e.splice(1, 0, c));
490 for (var f in d)c[f] = d[f];
491 return[]
492 }
493 var g = a.replace(/\n.*$/, ""), h = this.processBlock(g, []);
494 c = o(h[0]), c || (c = {}, h[0].splice(1, 0, c));
495 for (var f in d)c[f] = d[f];
496 return h
497 }, u.block.definition_list = function (a, b) {
498 var c, d, e = /^((?:[^\s:].*\n)+):\s+([\s\S]+)$/, f = ["dl"];
499 if (!(d = a.match(e)))return void 0;
500 for (var g = [a]; b.length && e.exec(b[0]);)g.push(b.shift());
501 for (var h = 0; h < g.length; ++h) {
502 var d = g[h].match(e), i = d[1].replace(/\n$/, "").split(/\n/), j = d[2].split(/\n:\s+/);
503 for (c = 0; c < i.length; ++c)f.push(["dt", i[c]]);
504 for (c = 0; c < j.length; ++c)f.push(["dd"].concat(this.processInline(j[c].replace(/(\n)\s+/, "$1"))))
505 }
506 return[f]
507 }, u.block.table = function w(a) {
508 var b, c, d = function (a, b) {
509 b = b || "\\s", b.match(/^[\\|\[\]{}?*.+^$]$/) && (b = "\\" + b);
510 for (var c, d = [], e = new RegExp("^((?:\\\\.|[^\\\\" + b + "])*)" + b + "(.*)"); c = a.match(e);)d.push(c[1]), a = c[2];
511 return d.push(a), d
512 }, e = /^ {0,3}\|(.+)\n {0,3}\|\s*([\-:]+[\-| :]*)\n((?:\s*\|.*(?:\n|$))*)(?=\n|$)/, f = /^ {0,3}(\S(?:\\.|[^\\|])*\|.*)\n {0,3}([\-:]+\s*\|[\-| :]*)\n((?:(?:\\.|[^\\|])*\|.*(?:\n|$))*)(?=\n|$)/;
513 if (c = a.match(e))c[3] = c[3].replace(/^\s*\|/gm, ""); else if (!(c = a.match(f)))return void 0;
514 var w = ["table", ["thead", ["tr"]], ["tbody"]];
515 c[2] = c[2].replace(/\|\s*$/, "").split("|");
516 var g = [];
517 for (q(c[2], function (a) {
518 a.match(/^\s*-+:\s*$/) ? g.push({align: "right"}) : a.match(/^\s*:-+\s*$/) ? g.push({align: "left"}) : a.match(/^\s*:-+:\s*$/) ? g.push({align: "center"}) : g.push({})
519 }), c[1] = d(c[1].replace(/\|\s*$/, ""), "|"), b = 0; b < c[1].length; b++)w[1][1].push(["th", g[b] || {}].concat(this.processInline(c[1][b].trim())));
520 return q(c[3].replace(/\|\s*$/gm, "").split("\n"), function (a) {
521 var c = ["tr"];
522 for (a = d(a, "|"), b = 0; b < a.length; b++)c.push(["td", g[b] || {}].concat(this.processInline(a[b].trim())));
523 w[2].push(c)
524 }, this), [w]
525 }, u.inline["{:"] = function (a, b, c) {
526 if (!c.length)return[2, "{:"];
527 var d = c[c.length - 1];
528 if ("string" == typeof d)return[2, "{:"];
529 var e = a.match(/^\{:\s*((?:\\\}|[^\}])*)\s*\}/);
530 if (!e)return[2, "{:"];
531 var f = this.dialect.processMetaHash(e[1]), g = o(d);
532 g || (g = {}, d.splice(1, 0, g));
533 for (var h in f)g[h] = f[h];
534 return[e[0].length, ""]
535 }, m.dialects.Maruku = u, m.dialects.Maruku.inline.__escape__ = /^\\[\\`\*_{}\[\]()#\+.!\-|:]/, m.buildBlockOrder(m.dialects.Maruku.block), m.buildInlinePatterns(m.dialects.Maruku.inline), a.Markdown = m, a.parse = m.parse, a.toHTML = m.toHTML, a.toHTMLTree = m.toHTMLTree, a.renderJsonML = m.renderJsonML
536}(function () {
537 return window.markdown = {}, window.markdown
538}()); \ No newline at end of file
diff --git a/point/libs/normalize/normalize.js b/point/libs/normalize/normalize.js
new file mode 100644
index 0000000..e1733d6
--- /dev/null
+++ b/point/libs/normalize/normalize.js
@@ -0,0 +1,140 @@
1/*
2 * css.normalize.js
3 *
4 * CSS Normalization
5 *
6 * CSS paths are normalized based on an optional basePath and the RequireJS config
7 *
8 * Usage:
9 * normalize(css, fromBasePath, toBasePath);
10 *
11 * css: the stylesheet content to normalize
12 * fromBasePath: the absolute base path of the css relative to any root (but without ../ backtracking)
13 * toBasePath: the absolute new base path of the css relative to the same root
14 *
15 * Absolute dependencies are left untouched.
16 *
17 * Urls in the CSS are picked up by regular expressions.
18 * These will catch all statements of the form:
19 *
20 * url(*)
21 * url('*')
22 * url("*")
23 *
24 * @import '*'
25 * @import "*"
26 *
27 * (and so also @import url(*) variations)
28 *
29 * For urls needing normalization
30 *
31 */
32
33define(function () {
34
35 // regular expression for removing double slashes
36 // eg http://www.example.com//my///url/here -> http://www.example.com/my/url/here
37 var slashes = /([^:])\/+/g
38 var removeDoubleSlashes = function (uri) {
39 return uri.replace(slashes, '$1/');
40 }
41
42 // given a relative URI, and two absolute base URIs, convert it from one base to another
43 var protocolRegEx = /[^\:\/]*:\/\/([^\/])*/;
44 var absUrlRegEx = /^(\/|data:)/;
45
46 function convertURIBase(uri, fromBase, toBase) {
47 if (uri.match(absUrlRegEx) || uri.match(protocolRegEx))
48 return uri;
49 uri = removeDoubleSlashes(uri);
50 // if toBase specifies a protocol path, ensure this is the same protocol as fromBase, if not
51 // use absolute path at fromBase
52 var toBaseProtocol = toBase.match(protocolRegEx);
53 var fromBaseProtocol = fromBase.match(protocolRegEx);
54 if (fromBaseProtocol && (!toBaseProtocol || toBaseProtocol[1] != fromBaseProtocol[1] || toBaseProtocol[2] != fromBaseProtocol[2]))
55 return absoluteURI(uri, fromBase);
56
57 else {
58 return relativeURI(absoluteURI(uri, fromBase), toBase);
59 }
60 };
61
62 // given a relative URI, calculate the absolute URI
63 function absoluteURI(uri, base) {
64 if (uri.substr(0, 2) == './')
65 uri = uri.substr(2);
66
67 // absolute urls are left in tact
68 if (uri.match(absUrlRegEx) || uri.match(protocolRegEx))
69 return uri;
70
71 var baseParts = base.split('/');
72 var uriParts = uri.split('/');
73
74 baseParts.pop();
75
76 while (curPart = uriParts.shift())
77 if (curPart == '..')
78 baseParts.pop();
79 else
80 baseParts.push(curPart);
81
82 return baseParts.join('/');
83 };
84
85
86 // given an absolute URI, calculate the relative URI
87 function relativeURI(uri, base) {
88
89 // reduce base and uri strings to just their difference string
90 var baseParts = base.split('/');
91 baseParts.pop();
92 base = baseParts.join('/') + '/';
93 i = 0;
94 while (base.substr(i, 1) == uri.substr(i, 1))
95 i++;
96 while (base.substr(i, 1) != '/')
97 i--;
98 base = base.substr(i + 1);
99 uri = uri.substr(i + 1);
100
101 // each base folder difference is thus a backtrack
102 baseParts = base.split('/');
103 var uriParts = uri.split('/');
104 out = '';
105 while (baseParts.shift())
106 out += '../';
107
108 // finally add uri parts
109 while (curPart = uriParts.shift())
110 out += curPart + '/';
111
112 return out.substr(0, out.length - 1);
113 };
114
115 var normalizeCSS = function (source, fromBase, toBase) {
116
117 fromBase = removeDoubleSlashes(fromBase);
118 toBase = removeDoubleSlashes(toBase);
119
120 var urlRegEx = /@import\s*("([^"]*)"|'([^']*)')|url\s*\(\s*(\s*"([^"]*)"|'([^']*)'|[^\)]*\s*)\s*\)/ig;
121 var result, url, source;
122
123 while (result = urlRegEx.exec(source)) {
124 url = result[3] || result[2] || result[5] || result[6] || result[4];
125 var newUrl;
126 newUrl = convertURIBase(url, fromBase, toBase);
127 var quoteLen = result[5] || result[6] ? 1 : 0;
128 source = source.substr(0, urlRegEx.lastIndex - url.length - quoteLen - 1) + newUrl + source.substr(urlRegEx.lastIndex - quoteLen - 1);
129 urlRegEx.lastIndex = urlRegEx.lastIndex + (newUrl.length - url.length);
130 }
131
132 return source;
133 };
134
135 normalizeCSS.convertURIBase = convertURIBase;
136 normalizeCSS.absoluteURI = absoluteURI;
137 normalizeCSS.relativeURI = relativeURI;
138
139 return normalizeCSS;
140});
diff --git a/point/libs/normalizecss/normalize.css b/point/libs/normalizecss/normalize.css
new file mode 100644
index 0000000..67a5436
--- /dev/null
+++ b/point/libs/normalizecss/normalize.css
@@ -0,0 +1,425 @@
1/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
2
3/**
4 * 1. Set default font family to sans-serif.
5 * 2. Prevent iOS text size adjust after orientation change, without disabling
6 * user zoom.
7 */
8
9html {
10 font-family: sans-serif; /* 1 */
11 -ms-text-size-adjust: 100%; /* 2 */
12 -webkit-text-size-adjust: 100%; /* 2 */
13}
14
15/**
16 * Remove default margin.
17 */
18
19body {
20 margin: 0;
21}
22
23/* HTML5 display definitions
24 ========================================================================== */
25
26/**
27 * Correct `block` display not defined for any HTML5 element in IE 8/9.
28 * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
29 * Correct `block` display not defined for `main` in IE 11.
30 */
31
32article,
33aside,
34details,
35figcaption,
36figure,
37footer,
38header,
39hgroup,
40main,
41nav,
42section,
43summary {
44 display: block;
45}
46
47/**
48 * 1. Correct `inline-block` display not defined in IE 8/9.
49 * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
50 */
51
52audio,
53canvas,
54progress,
55video {
56 display: inline-block; /* 1 */
57 vertical-align: baseline; /* 2 */
58}
59
60/**
61 * Prevent modern browsers from displaying `audio` without controls.
62 * Remove excess height in iOS 5 devices.
63 */
64
65audio:not([controls]) {
66 display: none;
67 height: 0;
68}
69
70/**
71 * Address `[hidden]` styling not present in IE 8/9/10.
72 * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
73 */
74
75[hidden],
76template {
77 display: none;
78}
79
80/* Links
81 ========================================================================== */
82
83/**
84 * Remove the gray background color from active links in IE 10.
85 */
86
87a {
88 background: transparent;
89}
90
91/**
92 * Improve readability when focused and also mouse hovered in all browsers.
93 */
94
95a:active,
96a:hover {
97 outline: 0;
98}
99
100/* Text-level semantics
101 ========================================================================== */
102
103/**
104 * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
105 */
106
107abbr[title] {
108 border-bottom: 1px dotted;
109}
110
111/**
112 * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
113 */
114
115b,
116strong {
117 font-weight: bold;
118}
119
120/**
121 * Address styling not present in Safari and Chrome.
122 */
123
124dfn {
125 font-style: italic;
126}
127
128/**
129 * Address variable `h1` font-size and margin within `section` and `article`
130 * contexts in Firefox 4+, Safari, and Chrome.
131 */
132
133h1 {
134 font-size: 2em;
135 margin: 0.67em 0;
136}
137
138/**
139 * Address styling not present in IE 8/9.
140 */
141
142mark {
143 background: #ff0;
144 color: #000;
145}
146
147/**
148 * Address inconsistent and variable font size in all browsers.
149 */
150
151small {
152 font-size: 80%;
153}
154
155/**
156 * Prevent `sub` and `sup` affecting `line-height` in all browsers.
157 */
158
159sub,
160sup {
161 font-size: 75%;
162 line-height: 0;
163 position: relative;
164 vertical-align: baseline;
165}
166
167sup {
168 top: -0.5em;
169}
170
171sub {
172 bottom: -0.25em;
173}
174
175/* Embedded content
176 ========================================================================== */
177
178/**
179 * Remove border when inside `a` element in IE 8/9/10.
180 */
181
182img {
183 border: 0;
184}
185
186/**
187 * Correct overflow not hidden in IE 9/10/11.
188 */
189
190svg:not(:root) {
191 overflow: hidden;
192}
193
194/* Grouping content
195 ========================================================================== */
196
197/**
198 * Address margin not present in IE 8/9 and Safari.
199 */
200
201figure {
202 margin: 1em 40px;
203}
204
205/**
206 * Address differences between Firefox and other browsers.
207 */
208
209hr {
210 -moz-box-sizing: content-box;
211 box-sizing: content-box;
212 height: 0;
213}
214
215/**
216 * Contain overflow in all browsers.
217 */
218
219pre {
220 overflow: auto;
221}
222
223/**
224 * Address odd `em`-unit font size rendering in all browsers.
225 */
226
227code,
228kbd,
229pre,
230samp {
231 font-family: monospace, monospace;
232 font-size: 1em;
233}
234
235/* Forms
236 ========================================================================== */
237
238/**
239 * Known limitation: by default, Chrome and Safari on OS X allow very limited
240 * styling of `select`, unless a `border` property is set.
241 */
242
243/**
244 * 1. Correct color not being inherited.
245 * Known issue: affects color of disabled elements.
246 * 2. Correct font properties not being inherited.
247 * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
248 */
249
250button,
251input,
252optgroup,
253select,
254textarea {
255 color: inherit; /* 1 */
256 font: inherit; /* 2 */
257 margin: 0; /* 3 */
258}
259
260/**
261 * Address `overflow` set to `hidden` in IE 8/9/10/11.
262 */
263
264button {
265 overflow: visible;
266}
267
268/**
269 * Address inconsistent `text-transform` inheritance for `button` and `select`.
270 * All other form control elements do not inherit `text-transform` values.
271 * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
272 * Correct `select` style inheritance in Firefox.
273 */
274
275button,
276select {
277 text-transform: none;
278}
279
280/**
281 * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
282 * and `video` controls.
283 * 2. Correct inability to style clickable `input` types in iOS.
284 * 3. Improve usability and consistency of cursor style between image-type
285 * `input` and others.
286 */
287
288button,
289html input[type="button"], /* 1 */
290input[type="reset"],
291input[type="submit"] {
292 -webkit-appearance: button; /* 2 */
293 cursor: pointer; /* 3 */
294}
295
296/**
297 * Re-set default cursor for disabled elements.
298 */
299
300button[disabled],
301html input[disabled] {
302 cursor: default;
303}
304
305/**
306 * Remove inner padding and border in Firefox 4+.
307 */
308
309button::-moz-focus-inner,
310input::-moz-focus-inner {
311 border: 0;
312 padding: 0;
313}
314
315/**
316 * Address Firefox 4+ setting `line-height` on `input` using `!important` in
317 * the UA stylesheet.
318 */
319
320input {
321 line-height: normal;
322}
323
324/**
325 * It's recommended that you don't attempt to style these elements.
326 * Firefox's implementation doesn't respect box-sizing, padding, or width.
327 *
328 * 1. Address box sizing set to `content-box` in IE 8/9/10.
329 * 2. Remove excess padding in IE 8/9/10.
330 */
331
332input[type="checkbox"],
333input[type="radio"] {
334 box-sizing: border-box; /* 1 */
335 padding: 0; /* 2 */
336}
337
338/**
339 * Fix the cursor style for Chrome's increment/decrement buttons. For certain
340 * `font-size` values of the `input`, it causes the cursor style of the
341 * decrement button to change from `default` to `text`.
342 */
343
344input[type="number"]::-webkit-inner-spin-button,
345input[type="number"]::-webkit-outer-spin-button {
346 height: auto;
347}
348
349/**
350 * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
351 * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
352 * (include `-moz` to future-proof).
353 */
354
355input[type="search"] {
356 -webkit-appearance: textfield; /* 1 */
357 -moz-box-sizing: content-box;
358 -webkit-box-sizing: content-box; /* 2 */
359 box-sizing: content-box;
360}
361
362/**
363 * Remove inner padding and search cancel button in Safari and Chrome on OS X.
364 * Safari (but not Chrome) clips the cancel button when the search input has
365 * padding (and `textfield` appearance).
366 */
367
368input[type="search"]::-webkit-search-cancel-button,
369input[type="search"]::-webkit-search-decoration {
370 -webkit-appearance: none;
371}
372
373/**
374 * Define consistent border, margin, and padding.
375 */
376
377fieldset {
378 border: 1px solid #c0c0c0;
379 margin: 0 2px;
380 padding: 0.35em 0.625em 0.75em;
381}
382
383/**
384 * 1. Correct `color` not being inherited in IE 8/9/10/11.
385 * 2. Remove padding so people aren't caught out if they zero out fieldsets.
386 */
387
388legend {
389 border: 0; /* 1 */
390 padding: 0; /* 2 */
391}
392
393/**
394 * Remove default vertical scrollbar in IE 8/9/10/11.
395 */
396
397textarea {
398 overflow: auto;
399}
400
401/**
402 * Don't inherit the `font-weight` (applied by a rule above).
403 * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
404 */
405
406optgroup {
407 font-weight: bold;
408}
409
410/* Tables
411 ========================================================================== */
412
413/**
414 * Remove most spacing between table cells.
415 */
416
417table {
418 border-collapse: collapse;
419 border-spacing: 0;
420}
421
422td,
423th {
424 padding: 0;
425}
diff --git a/point/libs/pdfjs/pdf.js b/point/libs/pdfjs/pdf.js
new file mode 100644
index 0000000..929914f
--- /dev/null
+++ b/point/libs/pdfjs/pdf.js
@@ -0,0 +1,8550 @@
1/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
3/* Copyright 2012 Mozilla Foundation
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17/*jshint globalstrict: false */
18
19// Initializing PDFJS global object (if still undefined)
20if (typeof PDFJS === 'undefined') {
21 (typeof window !== 'undefined' ? window : this).PDFJS = {};
22}
23
24PDFJS.version = '1.0.68';
25PDFJS.build = 'ead4cbf';
26
27(function pdfjsWrapper() {
28 // Use strict in our context only - users might not want it
29 'use strict';
3