diff --git a/out/fonts/OpenSans-Bold-webfont.eot b/out/fonts/OpenSans-Bold-webfont.eot new file mode 100644 index 00000000..5d20d916 Binary files /dev/null and b/out/fonts/OpenSans-Bold-webfont.eot differ diff --git a/out/fonts/OpenSans-Bold-webfont.svg b/out/fonts/OpenSans-Bold-webfont.svg new file mode 100644 index 00000000..3ed7be4b --- /dev/null +++ b/out/fonts/OpenSans-Bold-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/out/fonts/OpenSans-Bold-webfont.woff b/out/fonts/OpenSans-Bold-webfont.woff new file mode 100644 index 00000000..1205787b Binary files /dev/null and b/out/fonts/OpenSans-Bold-webfont.woff differ diff --git a/out/fonts/OpenSans-BoldItalic-webfont.eot b/out/fonts/OpenSans-BoldItalic-webfont.eot new file mode 100644 index 00000000..1f639a15 Binary files /dev/null and b/out/fonts/OpenSans-BoldItalic-webfont.eot differ diff --git a/out/fonts/OpenSans-BoldItalic-webfont.svg b/out/fonts/OpenSans-BoldItalic-webfont.svg new file mode 100644 index 00000000..6a2607b9 --- /dev/null +++ b/out/fonts/OpenSans-BoldItalic-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/out/fonts/OpenSans-BoldItalic-webfont.woff b/out/fonts/OpenSans-BoldItalic-webfont.woff new file mode 100644 index 00000000..ed760c06 Binary files /dev/null and b/out/fonts/OpenSans-BoldItalic-webfont.woff differ diff --git a/out/fonts/OpenSans-Italic-webfont.eot b/out/fonts/OpenSans-Italic-webfont.eot new file mode 100644 index 00000000..0c8a0ae0 Binary files /dev/null and b/out/fonts/OpenSans-Italic-webfont.eot differ diff --git a/out/fonts/OpenSans-Italic-webfont.svg b/out/fonts/OpenSans-Italic-webfont.svg new file mode 100644 index 00000000..e1075dcc --- /dev/null +++ b/out/fonts/OpenSans-Italic-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/out/fonts/OpenSans-Italic-webfont.woff b/out/fonts/OpenSans-Italic-webfont.woff new file mode 100644 index 00000000..ff652e64 Binary files /dev/null and b/out/fonts/OpenSans-Italic-webfont.woff differ diff --git a/out/fonts/OpenSans-Light-webfont.eot b/out/fonts/OpenSans-Light-webfont.eot new file mode 100644 index 00000000..14868406 Binary files /dev/null and b/out/fonts/OpenSans-Light-webfont.eot differ diff --git a/out/fonts/OpenSans-Light-webfont.svg b/out/fonts/OpenSans-Light-webfont.svg new file mode 100644 index 00000000..11a472ca --- /dev/null +++ b/out/fonts/OpenSans-Light-webfont.svg @@ -0,0 +1,1831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/out/fonts/OpenSans-Light-webfont.woff b/out/fonts/OpenSans-Light-webfont.woff new file mode 100644 index 00000000..e7860748 Binary files /dev/null and b/out/fonts/OpenSans-Light-webfont.woff differ diff --git a/out/fonts/OpenSans-LightItalic-webfont.eot b/out/fonts/OpenSans-LightItalic-webfont.eot new file mode 100644 index 00000000..8f445929 Binary files /dev/null and b/out/fonts/OpenSans-LightItalic-webfont.eot differ diff --git a/out/fonts/OpenSans-LightItalic-webfont.svg b/out/fonts/OpenSans-LightItalic-webfont.svg new file mode 100644 index 00000000..431d7e35 --- /dev/null +++ b/out/fonts/OpenSans-LightItalic-webfont.svg @@ -0,0 +1,1835 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/out/fonts/OpenSans-LightItalic-webfont.woff b/out/fonts/OpenSans-LightItalic-webfont.woff new file mode 100644 index 00000000..43e8b9e6 Binary files /dev/null and b/out/fonts/OpenSans-LightItalic-webfont.woff differ diff --git a/out/fonts/OpenSans-Regular-webfont.eot b/out/fonts/OpenSans-Regular-webfont.eot new file mode 100644 index 00000000..6bbc3cf5 Binary files /dev/null and b/out/fonts/OpenSans-Regular-webfont.eot differ diff --git a/out/fonts/OpenSans-Regular-webfont.svg b/out/fonts/OpenSans-Regular-webfont.svg new file mode 100644 index 00000000..25a39523 --- /dev/null +++ b/out/fonts/OpenSans-Regular-webfont.svg @@ -0,0 +1,1831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/out/fonts/OpenSans-Regular-webfont.woff b/out/fonts/OpenSans-Regular-webfont.woff new file mode 100644 index 00000000..e231183d Binary files /dev/null and b/out/fonts/OpenSans-Regular-webfont.woff differ diff --git a/out/global.html b/out/global.html new file mode 100644 index 00000000..10a4a6f0 --- /dev/null +++ b/out/global.html @@ -0,0 +1,244 @@ + + + + + JSDoc: Global + + + + + + + + + + +
+ +

Global

+ + + + + + +
+ +
+ +

+ + +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

getDevicePixelRatio() → {number}

+ + + + + + +
+ Detects reported or approximate device pixel ratio. +* 1.0 means 1 CSS pixel is 1 hardware pixel +* 2.0 means 1 CSS pixel is 2 hardware pixels +* etc. + +Uses window.devicePixelRatio if available, or CSS media queries on IE. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ Device pixel ratio +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/out/index.html b/out/index.html new file mode 100644 index 00000000..56b9cf05 --- /dev/null +++ b/out/index.html @@ -0,0 +1,65 @@ + + + + + JSDoc: Home + + + + + + + + + + +
+ +

Home

+ + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/out/scripts/linenumber.js b/out/scripts/linenumber.js new file mode 100644 index 00000000..4354785c --- /dev/null +++ b/out/scripts/linenumber.js @@ -0,0 +1,25 @@ +/*global document */ +(() => { + const source = document.getElementsByClassName('prettyprint source linenums'); + let i = 0; + let lineNumber = 0; + let lineId; + let lines; + let totalLines; + let anchorHash; + + if (source && source[0]) { + anchorHash = document.location.hash.substring(1); + lines = source[0].getElementsByTagName('li'); + totalLines = lines.length; + + for (; i < totalLines; i++) { + lineNumber++; + lineId = `line${lineNumber}`; + lines[i].id = lineId; + if (lineId === anchorHash) { + lines[i].className += ' selected'; + } + } + } +})(); diff --git a/out/scripts/prettify/Apache-License-2.0.txt b/out/scripts/prettify/Apache-License-2.0.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/out/scripts/prettify/Apache-License-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/out/scripts/prettify/lang-css.js b/out/scripts/prettify/lang-css.js new file mode 100644 index 00000000..041e1f59 --- /dev/null +++ b/out/scripts/prettify/lang-css.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", +/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/out/scripts/prettify/prettify.js b/out/scripts/prettify/prettify.js new file mode 100644 index 00000000..eef5ad7e --- /dev/null +++ b/out/scripts/prettify/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p th:last-child { border-right: 1px solid #ddd; } + +.ancestors, .attribs { color: #999; } +.ancestors a, .attribs a +{ + color: #999 !important; + text-decoration: none; +} + +.clear +{ + clear: both; +} + +.important +{ + font-weight: bold; + color: #950B02; +} + +.yes-def { + text-indent: -1000px; +} + +.type-signature { + color: #aaa; +} + +.name, .signature { + font-family: Consolas, Monaco, 'Andale Mono', monospace; +} + +.details { margin-top: 14px; border-left: 2px solid #DDD; } +.details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; } +.details dd { margin-left: 70px; } +.details ul { margin: 0; } +.details ul { list-style-type: none; } +.details li { margin-left: 30px; padding-top: 6px; } +.details pre.prettyprint { margin: 0 } +.details .object-value { padding-top: 0; } + +.description { + margin-bottom: 1em; + margin-top: 1em; +} + +.code-caption +{ + font-style: italic; + font-size: 107%; + margin: 0; +} + +.source +{ + border: 1px solid #ddd; + width: 80%; + overflow: auto; +} + +.prettyprint.source { + width: inherit; +} + +.source code +{ + font-size: 100%; + line-height: 18px; + display: block; + padding: 4px 12px; + margin: 0; + background-color: #fff; + color: #4D4E53; +} + +.prettyprint code span.line +{ + display: inline-block; +} + +.prettyprint.linenums +{ + padding-left: 70px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.prettyprint.linenums ol +{ + padding-left: 0; +} + +.prettyprint.linenums li +{ + border-left: 3px #ddd solid; +} + +.prettyprint.linenums li.selected, +.prettyprint.linenums li.selected * +{ + background-color: lightyellow; +} + +.prettyprint.linenums li * +{ + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.params .name, .props .name, .name code { + color: #4D4E53; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 100%; +} + +.params td.description > p:first-child, +.props td.description > p:first-child +{ + margin-top: 0; + padding-top: 0; +} + +.params td.description > p:last-child, +.props td.description > p:last-child +{ + margin-bottom: 0; + padding-bottom: 0; +} + +.disabled { + color: #454545; +} diff --git a/out/styles/prettify-jsdoc.css b/out/styles/prettify-jsdoc.css new file mode 100644 index 00000000..5a2526e3 --- /dev/null +++ b/out/styles/prettify-jsdoc.css @@ -0,0 +1,111 @@ +/* JSDoc prettify.js theme */ + +/* plain text */ +.pln { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* string content */ +.str { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a keyword */ +.kwd { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a comment */ +.com { + font-weight: normal; + font-style: italic; +} + +/* a type name */ +.typ { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* a literal value */ +.lit { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* punctuation */ +.pun { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* lisp open bracket */ +.opn { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* lisp close bracket */ +.clo { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a markup tag name */ +.tag { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a markup attribute name */ +.atn { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a markup attribute value */ +.atv { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a declaration */ +.dec { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a variable name */ +.var { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* a function name */ +.fun { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; +} diff --git a/out/styles/prettify-tomorrow.css b/out/styles/prettify-tomorrow.css new file mode 100644 index 00000000..b6f92a78 --- /dev/null +++ b/out/styles/prettify-tomorrow.css @@ -0,0 +1,132 @@ +/* Tomorrow Theme */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* Pretty printing styles. Used with prettify.js. */ +/* SPAN elements with the classes below are added by prettyprint. */ +/* plain text */ +.pln { + color: #4d4d4c; } + +@media screen { + /* string content */ + .str { + color: #718c00; } + + /* a keyword */ + .kwd { + color: #8959a8; } + + /* a comment */ + .com { + color: #8e908c; } + + /* a type name */ + .typ { + color: #4271ae; } + + /* a literal value */ + .lit { + color: #f5871f; } + + /* punctuation */ + .pun { + color: #4d4d4c; } + + /* lisp open bracket */ + .opn { + color: #4d4d4c; } + + /* lisp close bracket */ + .clo { + color: #4d4d4c; } + + /* a markup tag name */ + .tag { + color: #c82829; } + + /* a markup attribute name */ + .atn { + color: #f5871f; } + + /* a markup attribute value */ + .atv { + color: #3e999f; } + + /* a declaration */ + .dec { + color: #f5871f; } + + /* a variable name */ + .var { + color: #c82829; } + + /* a function name */ + .fun { + color: #4271ae; } } +/* Use higher contrast and text-weight for printable form. */ +@media print, projection { + .str { + color: #060; } + + .kwd { + color: #006; + font-weight: bold; } + + .com { + color: #600; + font-style: italic; } + + .typ { + color: #404; + font-weight: bold; } + + .lit { + color: #044; } + + .pun, .opn, .clo { + color: #440; } + + .tag { + color: #006; + font-weight: bold; } + + .atn { + color: #404; } + + .atv { + color: #060; } } +/* Style */ +/* +pre.prettyprint { + background: white; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 12px; + line-height: 1.5; + border: 1px solid #ccc; + padding: 10px; } +*/ + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; } + +/* IE indents via margin-left */ +li.L0, +li.L1, +li.L2, +li.L3, +li.L4, +li.L5, +li.L6, +li.L7, +li.L8, +li.L9 { + /* */ } + +/* Alternate shading for lines */ +li.L1, +li.L3, +li.L5, +li.L7, +li.L9 { + /* */ } diff --git a/out/window.WMTypeAhead.html b/out/window.WMTypeAhead.html new file mode 100644 index 00000000..bda5d922 --- /dev/null +++ b/out/window.WMTypeAhead.html @@ -0,0 +1,1781 @@ + + + + + JSDoc: Class: WMTypeAhead + + + + + + + + + + +
+ +

Class: WMTypeAhead

+ + + + + + +
+ +
+ +

WMTypeAhead(appendTo, searchInput) → {Object|HTMLElement|function}

+ + +
+ +
+
+ + + + + + +

new WMTypeAhead(appendTo, searchInput) → {Object|HTMLElement|function}

+ + + + + + +
+ WMTypeAhead. +Displays search suggestions with thumbnail and description +as user types into an input field. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
appendTo + + +string + + + + ID of a container element that the suggestions will be appended to.
searchInput + + +string + + + + ID of a search input whose value will be used to generate + search suggestions.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+
    +
  • +
    + Returns an object with the following properties: +
    + + + +
    +
    + Type +
    +
    + +Object + + +
    +
    +
  • + +
  • +
    + return.typeAheadEl The type-ahead DOM object. +
    + + + +
    +
    + Type +
    +
    + +HTMLElement + + +
    +
    +
  • + +
  • +
    + return.query A function that loads the type-ahead suggestions. +
    + + + +
    +
    + Type +
    +
    + +function + + +
    +
    +
  • +
+ + + + +
Example
+ +
var typeAhead = new WMTypeAhead('containerID', 'inputID');
+typeAhead.query('search string', 'en');
+ + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(inner) ssActiveIndex

+ + + + +
+ Maintains the 'active' state on search suggestions. +Makes sure the 'active' element is synchronized between mouse and keyboard usage, +and cleared when new search suggestions appear. +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

(inner) clearTypeAhead()

+ + + + + + +
+ Removes the type-ahead suggestions from the DOM. +Reason for timeout: The typeahead is set to clear on input blur. +When a user clicks on a search suggestion, they triggers the input blur +and remove the typeahead before a click event is registered. +The timeout makes it so a click on the search suggestion is registered before +an input blur. +300ms is used to account for the click delay on mobile devices. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(inner) clearTypeAheadElements()

+ + + + + + +
+ Removed the actual child nodes from typeAheadEl +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + +
See:
+
+
    +
  • {typeAheadEl}
  • +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(inner) forceLinkFollow(e)

+ + + + + + +
+ Manually redirects the page to the href of a given element. + +For Chrome on Android to solve T221628. +When search suggestions below the fold are clicked, the blur event +on the search input is triggered and the page scrolls the search input +into view. However, the originating click event does not redirect +the page. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
e + + +Event + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(inner) generateTemplateString(suggestions) → {string}

+ + + + + + +
+ Generates a template string based on an array of search suggestions. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
suggestions + + +Array + + + + An array of search suggestion results.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A string representing the search suggestions DOM +
+ + + +
+
+ Type +
+
+ +string + + +
+
+ + + + + + + + + + + + + +

(inner) getLoadingIndicator() → {string}

+ + + + + + +
+ Card displayed while loading search results +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +string + + +
+
+ + + + + + + + + + + + + +

(inner) getNoResultsIndicator(searchString) → {string}

+ + + + + + +
+ Card displayed if no results could be found +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
searchString + + +string + + + + The search string.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +string + + +
+
+ + + + + + + + + + + + + +

(inner) highlightTitle(title, searchString) → {string}

+ + + + + + +
+ Highlights the part of the suggestion title that matches the search query. +Used inside the generateTemplateString function. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
title + + +string + + + + The title of the search suggestion.
searchString + + +string + + + + The string to highlight.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The title with highlighted part in an tag. +
+ + + +
+
+ Type +
+
+ +string + + +
+
+ + + + + + + + + + + + + +

(inner) keyboardEvents(event)

+ + + + + + +
+ Keyboard events: up arrow, down arrow and enter. +moves the 'active' suggestion up and down. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +event + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(inner) loadQueryScript(string, lang)

+ + + + + + +
+ Inserts script element containing the Search API results into document head. +The script itself calls the 'portalOpensearchCallback' callback function, +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
string + + +string + + + + query string to search.
lang + + +string + + + + ISO code of language to search in.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(inner) toggleActiveClass(item, collection)

+ + + + + + +
+ - Removes 'active' class from a collection of elements. +- Adds 'active' class to an item if missing. +- Removes 'active' class from item if present. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
item + + +HTMLElement + + + + Item to add active class to.
collection + + +NodeList + + + + Sibling items.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.6.3 on Mon Jan 06 2020 19:31:51 GMT+0000 (Coordinated Universal Time) +
+ + + + + \ No newline at end of file diff --git a/out/wm-typeahead.js.html b/out/wm-typeahead.js.html new file mode 100644 index 00000000..46e2e146 --- /dev/null +++ b/out/wm-typeahead.js.html @@ -0,0 +1,642 @@ + + + + + JSDoc: Source: wm-typeahead.js + + + + + + + + + + +
+ +

Source: wm-typeahead.js

+ + + + + + +
+
+
/**
+ * Based on https://gerrit.wikimedia.org/g/wikimedia/portals/+/refs/heads/master
+ * See T219590 for more details
+ */
+
+/**
+* Below are additional dependency extracted from polyfills.js
+* TODO: Optimize and clear unneeded code
+*/
+
+/**
+ * Detects reported or approximate device pixel ratio.
+ * * 1.0 means 1 CSS pixel is 1 hardware pixel
+ * * 2.0 means 1 CSS pixel is 2 hardware pixels
+ * * etc.
+ *
+ * Uses window.devicePixelRatio if available, or CSS media queries on IE.
+ *
+ * @return {number} Device pixel ratio
+ */
+function getDevicePixelRatio() {
+
+	if ( window.devicePixelRatio !== undefined ) {
+		// Most web browsers:
+		// * WebKit (Safari, Chrome, Android browser, etc)
+		// * Opera
+		// * Firefox 18+
+		return window.devicePixelRatio;
+	} else if ( window.msMatchMedia !== undefined ) {
+		// Windows 8 desktops / tablets, probably Windows Phone 8
+		//
+		// IE 10 doesn't report pixel ratio directly, but we can get the
+		// screen DPI and divide by 96. We'll bracket to [1, 1.5, 2.0] for
+		// simplicity, but you may get different values depending on zoom
+		// factor, size of screen and orientation in Metro IE.
+		if ( window.msMatchMedia( '(min-resolution: 192dpi)' ).matches ) {
+			return 2;
+		} else if ( window.msMatchMedia( '(min-resolution: 144dpi)' ).matches ) {
+			return 1.5;
+		} else {
+			return 1;
+		}
+	} else {
+		// Legacy browsers...
+		// Assume 1 if unknown.
+		return 1;
+	}
+}
+
+function addEvent( obj, evt, fn ) {
+
+	if ( !obj ) {
+		return;
+	}
+
+	if ( obj.addEventListener ) {
+		obj.addEventListener( evt, fn, false );
+	} else if ( obj.attachEvent ) {
+		obj.attachedEvents.push( [ obj, evt, fn ] );
+		obj.attachEvent( 'on' + evt, fn );
+	}
+}
+
+/**
+ * WMTypeAhead.
+ * Displays search suggestions with thumbnail and description
+ * as user types into an input field.
+ *
+ * @constructor
+ * @param {string} appendTo  - ID of a container element that the suggestions will be appended to.
+ * @param {string} searchInput - ID of a search input whose value will be used to generate
+ *                               search suggestions.
+ *
+ * @return {Object} Returns an object with the following properties:
+ * @return {HTMLElement} return.typeAheadEl The type-ahead DOM object.
+ * @return {Function} return.query A function that loads the type-ahead suggestions.
+ *
+ * @example
+ * var typeAhead = new WMTypeAhead('containerID', 'inputID');
+ * typeAhead.query('search string', 'en');
+ *
+ */
+window.WMTypeAhead = function ( appendTo, searchInput ) {
+
+	let typeAheadID = 'typeahead-suggestions',
+		typeAheadEl = document.getElementById( typeAheadID ), // Type-ahead DOM element.
+		appendEl = document.getElementById( appendTo ),
+		searchEl = document.getElementById( searchInput ),
+		server = mw.config.get( 'wgServer' ),
+		articleurl = server + mw.config.get( 'wgArticlePath' ).replace( '$1', '' ),
+		thumbnailSize = getDevicePixelRatio() * 80,
+		descriptionSource = mw.config.get( 'wgCitizenSearchDescriptionSource' ),
+		maxSearchResults = mw.config.get( 'wgCitizenMaxSearchResults' ),
+		searchString,
+		typeAheadItems,
+		activeItem,
+		ssActiveIndex,
+		api = new mw.Api();
+
+	// Only create typeAheadEl once on page.
+	if ( !typeAheadEl ) {
+		typeAheadEl = document.createElement( 'div' );
+		typeAheadEl.id = typeAheadID;
+		appendEl.appendChild( typeAheadEl );
+	}
+
+	/**
+	 * Keeps track of the search query callbacks. Consists of an array of
+	 * callback functions and an index that keeps track of the order of requests.
+	 * Callbacks are deleted by replacing the callback function with a no-op.
+	 */
+	window.callbackStack = {
+		queue: {},
+		index: -1,
+		incrementIndex: function () {
+			this.index += 1;
+			return this.index;
+		},
+		addCallback: function ( func ) {
+			const index = this.incrementIndex();
+			this.queue[ index ] = func( index );
+			return index;
+		},
+		deleteSelfFromQueue: function ( i ) {
+			delete this.queue[ i ];
+		},
+		deletePrevCallbacks: function ( j ) {
+			let callback;
+
+			this.deleteSelfFromQueue( j );
+
+			for ( callback in this.queue ) {
+				if ( callback < j ) {
+					this.queue[ callback ] = this.deleteSelfFromQueue.bind(
+						window.callbackStack, callback
+					);
+				}
+			}
+		}
+	};
+
+	/**
+	 * Maintains the 'active' state on search suggestions.
+	 * Makes sure the 'active' element is synchronized between mouse and keyboard usage,
+	 * and cleared when new search suggestions appear.
+	 */
+	ssActiveIndex = {
+		index: -1,
+		max: maxSearchResults,
+		setMax: function ( x ) {
+			this.max = x;
+		},
+		increment: function ( i ) {
+			this.index += i;
+			if ( this.index < 0 ) {
+				this.setIndex( this.max - 1 );
+			} // Index reaches top
+			if ( this.index === this.max ) {
+				this.setIndex( 0 );
+			} // Index reaches bottom
+			return this.index;
+		},
+		setIndex: function ( i ) {
+			if ( i <= this.max - 1 ) {
+				this.index = i;
+			}
+			return this.index;
+		},
+		clear: function () {
+			this.setIndex( -1 );
+		}
+	};
+
+	/**
+	 * Removed the actual child nodes from typeAheadEl
+	 * @see {typeAheadEl}
+	 */
+	function clearTypeAheadElements() {
+		if ( typeof typeAheadEl === 'undefined' ) {
+			return;
+		}
+
+		while ( typeAheadEl.firstChild !== null ) {
+			typeAheadEl.removeChild( typeAheadEl.firstChild );
+		}
+	}
+
+	/**
+	 * Removes the type-ahead suggestions from the DOM.
+	 * Reason for timeout: The typeahead is set to clear on input blur.
+	 * When a user clicks on a search suggestion, they triggers the input blur
+	 * and remove the typeahead before a click event is registered.
+	 * The timeout makes it so a click on the search suggestion is registered before
+	 * an input blur.
+	 * 300ms is used to account for the click delay on mobile devices.
+	 *
+	 */
+	function clearTypeAhead() {
+		setTimeout( function () {
+			clearTypeAheadElements();
+			ssActiveIndex.clear();
+		}, 300 );
+	}
+
+	/**
+	 * Manually redirects the page to the href of a given element.
+	 *
+	 * For Chrome on Android to solve T221628.
+	 * When search suggestions below the fold are clicked, the blur event
+	 * on the search input is triggered and the page scrolls the search input
+	 * into view. However, the originating click event does not redirect
+	 * the page.
+	 *
+	 * @param {Event} e
+	 */
+	function forceLinkFollow( e ) {
+		const el = e.relatedTarget;
+		if ( el && /suggestion-link/.test( el.className ) ) {
+			window.location = el.href;
+		}
+	}
+
+	/**
+	 * Card displayed while loading search results
+	 * @return {string}
+	 */
+	function getLoadingIndicator() {
+		return '<div class="suggestions-dropdown">' +
+			'<div class="suggestion-link">' +
+				'<div class="suggestion-text suggestion-placeholder">' +
+					'<h3 class="suggestion-title"></h3>' +
+					'<p class="suggestion-description"></p>' +
+				'</div>' +
+				'<div class="suggestion-thumbnail"></div>' +
+			'</div>' +
+		'</div>';
+	}
+
+	/**
+	 * Card displayed if no results could be found
+	 * @param {string} searchString - The search string.
+	 * @return {string}
+	 */
+	function getNoResultsIndicator( searchString ) {
+		const titlemsg = mw.message( 'citizen-search-no-results-title', searchString ).text(),
+			descmsg = mw.message( 'citizen-search-no-results-desc', searchString ).text();
+
+		return `
+< div class = "suggestions-dropdown" >
+	< div class = "suggestion-link" >
+		< div class = "suggestion-text" >
+			< h3 class = "suggestion-title" > ` + titlemsg + ` < / h3 >
+			< p class = "suggestion-description" > ` + descmsg + ` < / p >
+		< / div >
+		< div class = "suggestion-thumbnail" > < / div >
+	< / div >
+< / div > `;
+	}
+
+	/**
+	 * Inserts script element containing the Search API results into document head.
+	 * The script itself calls the 'portalOpensearchCallback' callback function,
+	 *
+	 * @param {string} string - query string to search.
+	 * @param {string} lang - ISO code of language to search in.
+	 */
+	function loadQueryScript( string ) {
+		let callbackIndex,
+			searchQuery;
+
+		// Variables declared in parent function.
+		searchString = encodeURIComponent( string );
+		if ( searchString.length === 0 ) {
+			clearTypeAhead();
+			return;
+		}
+
+		callbackIndex = window.callbackStack.addCallback( window.portalOpensearchCallback );
+
+		// Removed description prop
+		// TODO: Use text extract or PCS for description
+		searchQuery = {
+			generator: 'prefixsearch',
+			prop: 'pageprops|pageimages',
+			redirects: '',
+			ppprop: 'displaytitle',
+			piprop: 'thumbnail',
+			pithumbsize: thumbnailSize,
+			pilimit: maxSearchResults,
+			gpssearch: string,
+			gpsnamespace: 0,
+			gpslimit: maxSearchResults
+		};
+
+		switch (descriptionSource) {
+			case 'wikidata':
+				searchQuery.prop += '|description';
+				break;
+			case 'textextracts':
+				searchQuery.prop += '|extracts';
+				searchQuery.exchars = '60';
+				searchQuery.exintro = '1';
+				searchQuery.exlimit = maxSearchResults;
+				searchQuery.explaintext = '1';
+				break;
+			case 'pagedescription':
+				searchQuery.prop += '|pageprops';
+				searchQuery.ppprop = 'description';
+				break;
+		}
+
+		typeAheadEl.innerHTML = getLoadingIndicator();
+
+		api.get( searchQuery )
+			.done( ( data ) => {
+				clearTypeAheadElements();
+				window.callbackStack.queue[ callbackIndex ]( data, string );
+			} );
+	} // END loadQueryScript
+
+	/**
+	 * Highlights the part of the suggestion title that matches the search query.
+	 * Used inside the generateTemplateString function.
+	 *
+	 * @param {string} title - The title of the search suggestion.
+	 * @param {string} searchString - The string to highlight.
+	 * @return {string} The title with highlighted part in an <em> tag.
+	 */
+	function highlightTitle( title, searchString ) {
+		let sanitizedSearchString = mw.html.escape( mw.RegExp.escape( searchString ) ),
+			searchRegex = new RegExp( sanitizedSearchString, 'i' ),
+			startHighlightIndex = title.search( searchRegex ),
+			formattedTitle = mw.html.escape( title ),
+			endHighlightIndex,
+			strong,
+			beforeHighlight,
+			aferHighlight;
+
+		if ( startHighlightIndex >= 0 ) {
+			endHighlightIndex = startHighlightIndex + sanitizedSearchString.length;
+			strong = title.substring( startHighlightIndex, endHighlightIndex );
+			beforeHighlight = title.substring( 0, startHighlightIndex );
+			aferHighlight = title.substring( endHighlightIndex, title.length );
+			formattedTitle = beforeHighlight + mw.html.element( 'em', { class: 'suggestion-highlight' }, strong ) + aferHighlight;
+		}
+
+		return formattedTitle;
+	} // END highlightTitle
+
+	/**
+	 * Generates a template string based on an array of search suggestions.
+	 *
+	 * @param {Array} suggestions - An array of search suggestion results.
+	 * @return {string} A string representing the search suggestions DOM
+	 */
+	function generateTemplateString( suggestions ) {
+		let string = '<div class="suggestions-dropdown">',
+			suggestionLink,
+			suggestionThumbnail,
+			suggestionText,
+			suggestionTitle,
+			suggestionDescription,
+			page,
+			sanitizedThumbURL = false,
+			descriptionText = '',
+			pageDescription = '',
+			i;
+
+		if ( suggestions.length === 0 ) {
+			return getNoResultsIndicator( searchString );
+		}
+
+		for ( i = 0; i < suggestions.length; i++ ) {
+			if ( !suggestions[ i ] ) {
+				continue;
+			}
+
+			page = suggestions[ i ];
+
+			switch (descriptionSource) {
+				case 'wikidata':
+					pageDescription = page.description || '';
+					break;
+				case 'textextracts':
+					pageDescription = page.extract || '';
+					break;
+				case 'pagedescription':
+					pageDescription = page.pageprops.description || '';
+					break;
+			}
+
+			// Ensure that the value from the previous iteration isn't used
+			sanitizedThumbURL = false;
+
+			if ( page.thumbnail && page.thumbnail.source ) {
+				sanitizedThumbURL = page.thumbnail.source.replace( /"/g, '%22' );
+				sanitizedThumbURL = sanitizedThumbURL.replace( /'/g, '%27' );
+			}
+
+			// Ensure that the value from the previous iteration isn't used
+			descriptionText = '';
+
+			// Check if description exists
+			if ( pageDescription ) {
+				// If the description is an array, use the first item
+				if ( typeof pageDescription === 'object' && pageDescription[ 0 ] ) {
+					descriptionText = pageDescription[ 0 ].toString();
+				} else {
+					// Otherwise, use the description as is.
+					descriptionText = pageDescription.toString();
+				}
+			}
+
+			// Filter out no text from TextExtracts
+			if ( descriptionText === '...' ) {
+				descriptionText = '';
+			}
+
+			suggestionDescription = mw.html.element( 'p', { class: 'suggestion-description' }, descriptionText );
+
+			suggestionTitle = mw.html.element( 'h3', { class: 'suggestion-title' }, new mw.html.Raw( highlightTitle( page.title, searchString ) ) );
+
+			suggestionText = mw.html.element( 'div', { class: 'suggestion-text' }, new mw.html.Raw( suggestionTitle + suggestionDescription ) );
+
+			suggestionThumbnail = mw.html.element( 'div', {
+				class: 'suggestion-thumbnail',
+				style: ( sanitizedThumbURL ) ? 'background-image:url(' + sanitizedThumbURL + ')' : false
+			}, '' );
+
+			// TODO: Make it configurable from the skin
+			suggestionLink = mw.html.element( 'a', {
+				class: 'suggestion-link',
+				href: articleurl + encodeURIComponent( page.title.replace( / /gi, '_' ) )
+			}, new mw.html.Raw( suggestionText + suggestionThumbnail ) );
+
+			string += suggestionLink;
+
+		}
+
+		string += '</div>';
+
+		return string;
+	} // END generateTemplateString
+
+	/**
+	 * - Removes 'active' class from a collection of elements.
+	 * - Adds 'active' class to an item if missing.
+	 * - Removes 'active' class from item if present.
+	 *
+	 * @param {HTMLElement} item Item to add active class to.
+	 * @param {NodeList} collection Sibling items.
+	 */
+	function toggleActiveClass( item, collection ) {
+		let activeClass = ' active', // Prefixed with space.
+			colItem,
+			i;
+
+		for ( i = 0; i < collection.length; i++ ) {
+			colItem = collection[ i ];
+			// Remove the class name from everything except item.
+			if ( colItem !== item ) {
+				colItem.className = colItem.className.replace( activeClass, '' );
+			} else {
+				// If item has class name, remove it
+				if ( / active/.test( item.className ) ) {
+					item.className = item.className.replace( activeClass, '' );
+				} else {
+					// It item doesn't have class name, add it.
+					item.className += activeClass;
+					ssActiveIndex.setIndex( i );
+				}
+			}
+		}
+	}
+
+	/**
+	 * Search API callback. Returns a closure that holds the index of the request.
+	 * Deletes previous callbacks based on this index. This prevents callbacks for old
+	 * requests from executing. Then:
+	 *  - parses the search results
+	 *  - generates the template String
+	 *  - inserts the template string into the DOM
+	 *  - attaches event listeners on each suggestion item.
+	 *
+	 * @param {number} i
+	 * @return {Function}
+	 */
+	window.portalOpensearchCallback = function ( i ) {
+		let callbackIndex = i,
+			orderedResults = [],
+			suggestions,
+			item,
+			result,
+			templateDOMString,
+			listEl;
+
+		return function ( xhrResults, queryString ) {
+			window.callbackStack.deletePrevCallbacks( callbackIndex );
+
+			if ( document.activeElement !== searchEl ) {
+				return;
+			}
+
+			suggestions = ( xhrResults.query && xhrResults.query.pages ) ?
+				xhrResults.query.pages : [];
+
+			if ( suggestions.length === 0 ) {
+				typeAheadEl.innerHTML = getNoResultsIndicator( queryString );
+				return;
+			}
+
+			for ( item in suggestions ) {
+				if ( Object.prototype.hasOwnProperty.call( suggestions, item ) ) {
+					result = suggestions[ item ];
+					orderedResults[ result.index - 1 ] = result;
+				}
+			}
+
+			templateDOMString = generateTemplateString( orderedResults );
+
+			ssActiveIndex.setMax( orderedResults.length );
+			ssActiveIndex.clear();
+
+			typeAheadEl.innerHTML = templateDOMString;
+
+			typeAheadItems = typeAheadEl.childNodes[ 0 ].childNodes;
+
+			// Attaching hover events
+			for ( i = 0; i < typeAheadItems.length; i++ ) {
+				listEl = typeAheadItems[ i ];
+				// Requires the addEvent global polyfill
+				addEvent( listEl, 'mouseenter', toggleActiveClass.bind( this, listEl, typeAheadItems ) );
+				addEvent( listEl, 'mouseleave', toggleActiveClass.bind( this, listEl, typeAheadItems ) );
+			}
+		};
+	};
+
+	/**
+	 * Keyboard events: up arrow, down arrow and enter.
+	 * moves the 'active' suggestion up and down.
+	 *
+	 * @param {event} event
+	 */
+	function keyboardEvents( event ) {
+		let e = event || window.event,
+			keycode = e.which || e.keyCode,
+			suggestionItems,
+			searchSuggestionIndex;
+
+		if ( !typeAheadEl.firstChild ) {
+			return;
+		}
+
+		if ( keycode === 40 || keycode === 38 ) {
+			suggestionItems = typeAheadEl.firstChild.childNodes;
+
+			if ( keycode === 40 ) {
+				searchSuggestionIndex = ssActiveIndex.increment( 1 );
+			} else {
+				searchSuggestionIndex = ssActiveIndex.increment( -1 );
+			}
+
+			activeItem = ( suggestionItems ) ? suggestionItems[ searchSuggestionIndex ] : false;
+
+			toggleActiveClass( activeItem, suggestionItems );
+
+		}
+		if ( keycode === 13 && activeItem ) {
+
+			if ( e.preventDefault ) {
+				e.preventDefault();
+			} else {
+				( e.returnValue = false );
+			}
+
+			activeItem.children[ 0 ].click();
+		}
+	}
+
+	addEvent( searchEl, 'keydown', keyboardEvents );
+
+	addEvent( searchEl, 'blur', function ( e ) {
+		clearTypeAhead();
+		forceLinkFollow( e );
+	} );
+
+	return {
+		typeAheadEl: typeAheadEl,
+		query: loadQueryScript
+	};
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.6.3 on Mon Jan 06 2020 19:31:51 GMT+0000 (Coordinated Universal Time) +
+ + + + + diff --git a/package-lock.json b/package-lock.json index eec7b09a..52d96bda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -477,6 +477,12 @@ } } }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -578,6 +584,15 @@ "integrity": "sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA==", "dev": true }, + "catharsis": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz", + "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, "ccount": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", @@ -2238,6 +2253,45 @@ "esprima": "^4.0.0" } }, + "js2xmlparser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.0.tgz", + "integrity": "sha512-WuNgdZOXVmBk5kUPMcTcVUpbGRzLfNkv7+7APq7WiDihpXVKrgxo6wwRpRl9OQeEBgKCVk9mR7RbzrnNWC8oBw==", + "dev": true, + "requires": { + "xmlcreate": "^2.0.0" + } + }, + "jsdoc": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.3.tgz", + "integrity": "sha512-Yf1ZKA3r9nvtMWHO1kEuMZTlHOF8uoQ0vyo5eH7SQy5YeIiHM+B0DgKnn+X6y6KDYZcF7G2SPkKF+JORCXWE/A==", + "dev": true, + "requires": { + "@babel/parser": "^7.4.4", + "bluebird": "^3.5.4", + "catharsis": "^0.8.11", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.0", + "klaw": "^3.0.0", + "markdown-it": "^8.4.2", + "markdown-it-anchor": "^5.0.2", + "marked": "^0.7.0", + "mkdirp": "^0.5.1", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.0.1", + "taffydb": "2.6.2", + "underscore": "~1.9.1" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -2291,6 +2345,15 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, "known-css-properties": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.17.0.tgz", @@ -2319,6 +2382,15 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -2408,12 +2480,37 @@ "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==", "dev": true }, + "markdown-it": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", + "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + }, + "markdown-it-anchor": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.2.5.tgz", + "integrity": "sha512-xLIjLQmtym3QpoY9llBgApknl7pxAcN3WDRc2d3rwpl+/YvDZHPmKscGs+L6E05xf2KrCXPBvosWt7MZukwSpQ==", + "dev": true + }, "markdown-table": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", "dev": true }, + "marked": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", + "dev": true + }, "mathml-tag-names": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz", @@ -2429,6 +2526,12 @@ "unist-util-visit": "^1.1.0" } }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -3220,6 +3323,15 @@ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, + "requizzle": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", + "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, "resolve": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", @@ -4049,6 +4161,12 @@ } } }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4172,6 +4290,18 @@ "is-typedarray": "^1.0.0" } }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "dev": true + }, "underscore.string": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", @@ -4496,6 +4626,12 @@ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", "dev": true }, + "xmlcreate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.1.tgz", + "integrity": "sha512-MjGsXhKG8YjTKrDCXseFo3ClbMGvUD4en29H2Cev1dv4P/chlpw6KdYmlCWDkhosBVKRDjM836+3e3pm1cBNJA==", + "dev": true + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/resources/components/darkmode.less b/resources/components/darkmode.less index bdbc74a9..b40d866e 100644 --- a/resources/components/darkmode.less +++ b/resources/components/darkmode.less @@ -184,10 +184,10 @@ .suggestion-placeholder { .suggestion-title, - .suggestion-description { - background: @dark-bg-20; - background: linear-gradient(to right, @dark-bg-40 8%, @dark-bg-30 38%, @dark-bg-40 54%); - } + .suggestion-description { + background: @dark-bg-20; + background: linear-gradient( to right, @dark-bg-40 8%, @dark-bg-30 38%, @dark-bg-40 54% ); + } } } diff --git a/resources/components/search.less b/resources/components/search.less index 0824ccae..feaa934c 100644 --- a/resources/components/search.less +++ b/resources/components/search.less @@ -7,284 +7,283 @@ // TODO: Make it configurable and flexible #site-search { - #search-form { - position: absolute; - z-index: -1; // Not interactable - margin: 7px 0 8px; // 1px h3 screen reader - display: flex; - top: 0; - right: @icon-box-size + @icon-padding * 2; - opacity: 0; - .boxshadow(4); - transition: @transition-opacity; + #search-form { + position: absolute; + z-index: -1; // Not interactable + margin: 7px 0 8px; // 1px h3 screen reader + display: flex; + top: 0; + right: @icon-box-size + @icon-padding * 2; + opacity: 0; + .boxshadow(4); + transition: @transition-opacity; - // Search field - #search-input { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - padding: 12px 15px; - width: 0; - max-width: calc(~'100vw -'@icon-box-size * 2 + @icon-padding * 4 + @margin-side ); - border: 1px solid @base-90; - transition: @transition-width, @transition-box-shadow; + // Search field + #search-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + padding: 12px 15px; + width: 0; + max-width: calc( ~'100vw -'@icon-box-size * 2 + @icon-padding * 4 + @margin-side ); + border: 1px solid @base-90; + transition: @transition-width, @transition-box-shadow; - &:focus { - outline: 0; - .boxshadow(5); - } - } + &:focus { + outline: 0; + .boxshadow(5); + } + } - // Search field button - #search-button { - .button-blue; - width: @icon-box-size + @icon-padding * 2; - height: 42px; - border: 0; - cursor: pointer; //somehow it is not pointer + // Search field button + #search-button { + .button-blue; + width: @icon-box-size + @icon-padding * 2; + height: 42px; + border: 0; + cursor: pointer; //somehow it is not pointer - img { - filter: invert(1); - width: 16px; - } + img { + filter: invert( 1 ); + width: 16px; + } - &:hover, - &:active, - &:focus { - .button-blue-active; - } - } - } + &:hover, + &:active, + &:focus { + .button-blue-active; + } + } + } - #search-toggle-icon-container { - display: flex; - align-items: center; - justify-content: center; - height: inherit; + #search-toggle-icon-container { + display: flex; + align-items: center; + justify-content: center; + height: inherit; - #search-toggle-icon { - opacity: @opacity-icon; - position: absolute; - margin-top: -2px; - margin-left: -2px; - width: 10px; - height: 10px; - border: solid 2px @base-0; - border-radius: 100%; - transform: rotate(-45deg); - transition: @transition-transform, @transition-height, @transition-opacity, @transition-border-color; + #search-toggle-icon { + opacity: @opacity-icon; + position: absolute; + margin-top: -2px; + margin-left: -2px; + width: 10px; + height: 10px; + border: solid 2px @base-0; + border-radius: 100%; + transform: rotate( -45deg ); + transition: @transition-transform, @transition-height, @transition-opacity, @transition-border-color; - &:before, - &:after { - content: ''; - position: absolute; - width: 2px; - background-color: @base-0; - transition: inherit; - } + &:before, + &:after { + content: ''; + position: absolute; + width: 2px; + background-color: @base-0; + transition: inherit; + } - &:before { - top: 10px; - left: 3px; - height: 10px; - } + &:before { + top: 10px; + left: 3px; + height: 10px; + } - &:after { - opacity: 0; - top: -1px; - left: 4px; - height: 18px; - transform: rotate(-90deg); - } - } - } + &:after { + opacity: 0; + top: -1px; + left: 4px; + height: 18px; + transform: rotate( -90deg ); + } + } + } - #search-toggle { - &:checked { - ~#search-form { - z-index: 10; - opacity: 1; + #search-toggle { + &:checked { + ~ #search-form { + z-index: 10; + opacity: 1; - #search-input { - width: 400px; - } - } + #search-input { + width: 400px; + } + } - ~#search-toggle-icon-container #search-toggle-icon { - border-color: transparent; + ~ #search-toggle-icon-container #search-toggle-icon { + border-color: transparent; - &:before { - height: 18px; - transform: translate(1px, -11px); - } + &:before { + height: 18px; + transform: translate( 1px, -11px ); + } - &:after { - opacity: 1; - } + &:after { + opacity: 1; + } - &:hover { - ~#search-toggle-icon-container #search-toggle-icon { - border-color: @base-0; + &:hover { + ~ #search-toggle-icon-container #search-toggle-icon { + border-color: @base-0; - &:after { - opacity: 0; - } - } - } - } + &:after { + opacity: 0; + } + } + } + } - &:hover { - ~#search-toggle-icon-container #search-toggle-icon { - border-color: @base-0; + &:hover { + ~ #search-toggle-icon-container #search-toggle-icon { + border-color: @base-0; - &:after { - height: 12px; - } - } - } - } + &:after { + height: 12px; + } + } + } + } - &:hover { - ~#search-toggle-icon-container #search-toggle-icon { - opacity: @opacity-icon-active; + &:hover { + ~ #search-toggle-icon-container #search-toggle-icon { + opacity: @opacity-icon-active; - &:before { - height: 5px; - transform: translate(0, 5px); - } - } - } - } + &:before { + height: 5px; + transform: translate( 0, 5px ); + } + } + } + } } #typeahead-suggestions { - position: absolute; - top: @header-height; - z-index: 99999; + position: absolute; + top: @header-height; + z-index: 99999; } .suggestions-dropdown { - background: @base-100; - .boxshadow(4); - width: @suggestion-max-width; - max-width: calc(~'100vw -'@icon-box-size + @icon-padding * 2 + @margin-side ); + background: @base-100; + .boxshadow(4); + width: @suggestion-max-width; + max-width: calc( ~'100vw -'@icon-box-size + @icon-padding * 2 + @margin-side ); } .suggestion-link { - display: block; - position: relative; - min-height: 2rem * @content-scaling; - padding: 1rem 1rem 1rem 8.5rem * @content-scaling; - border-bottom: 1px solid @base-90; + display: block; + position: relative; + min-height: 2rem * @content-scaling; + padding: 1rem 1rem 1rem 8.5rem * @content-scaling; + border-bottom: 1px solid @base-90; } .suggestion-title { - margin: 0 0 0.78rem * @content-scaling 0; - color: @base-10; - font-size: 1.6rem * @content-scaling; - font-weight: normal; - line-height: 1.872rem * @content-scaling; + margin: 0 0 0.78rem * @content-scaling 0; + color: @base-10; + font-size: 1.6rem * @content-scaling; + font-weight: normal; + line-height: 1.872rem * @content-scaling; } .suggestion-link.active .suggestion-title { - color: @accent-50; + color: @accent-50; } .suggestion-highlight { - font-weight: 600; - font-style: normal; + font-weight: 600; + font-style: normal; } .suggestion-description { - color: @base-30; - margin: 0; - font-family: @fonts; - font-size: 1.3rem * @content-scaling; - line-height: 1.43rem * @content-scaling; + color: @base-30; + margin: 0; + font-family: @fonts; + font-size: 1.3rem * @content-scaling; + line-height: 1.43rem * @content-scaling; } .suggestion-link.active { - background-color: @accent-90; + background-color: @accent-90; } /* using element selector to override default anchor styles */ a.suggestion-link:hover { - text-decoration: none; + text-decoration: none; } .suggestion-thumbnail { - background-color: @base-80; - background-position: center center; - background-repeat: no-repeat; - background-size: cover; - height: 100%; - width: 7rem * @content-scaling; - position: absolute; - top: 0; - left: 0; + background-color: @base-80; + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + height: 100%; + width: 7rem * @content-scaling; + position: absolute; + top: 0; + left: 0; } .suggestion-placeholder { - .suggestion-title { - width: 30%; - height: 1.6rem * @content-scaling; - } + .suggestion-title { + width: 30%; + height: 1.6rem * @content-scaling; + } - .suggestion-description { - width: 70%; - height: 1.3rem * @content-scaling; - } + .suggestion-description { + width: 70%; + height: 1.3rem * @content-scaling; + } - .suggestion-title, - .suggestion-description { - animation-duration: 1.8s; - animation-fill-mode: forwards; - animation-iteration-count: infinite; - animation-name: placeHolderShimmer; - animation-timing-function: linear; - background: @base-70; - background: linear-gradient(to right, @base-90 8%, @base-80 38%, @base-90 54%); - background-size: 1000px 640px; - position: relative; - - } + .suggestion-title, + .suggestion-description { + animation-duration: 1.8s; + animation-fill-mode: forwards; + animation-iteration-count: infinite; + animation-name: placeHolderShimmer; + animation-timing-function: linear; + background: @base-70; + background: linear-gradient( to right, @base-90 8%, @base-80 38%, @base-90 54% ); + background-size: 1000px 640px; + position: relative; + } } // RTL tweaks .rtl { - #site-search { - #search-form { - left: @icon-box-size + @margin-side + @icon-padding; - right: unset; - } - } + #site-search { + #search-form { + left: @icon-box-size + @margin-side + @icon-padding; + right: unset; + } + } } -@media only screen and (max-width: @suggestion-max-width ) { - .suggestions-dropdown { - position: fixed; - left: 0; - top: @header-height + 1px; - max-width: 100vw; +@media only screen and ( max-width: @suggestion-max-width ) { + .suggestions-dropdown { + position: fixed; + left: 0; + top: @header-height + 1px; + max-width: 100vw; - &:after { - content: ''; - width: 100vw; - height: 100vh; - background: #000; - display: block; - opacity: 0.7; - position: fixed; - } - } + &:after { + content: ''; + width: 100vw; + height: 100vh; + background: #000; + display: block; + opacity: 0.7; + position: fixed; + } + } } @keyframes placeHolderShimmer { - 0% { - background-position: -468px 0 - } + 0% { + background-position: -468px 0; + } - 100% { - background-position: 468px 0 - } -} \ No newline at end of file + 100% { + background-position: 468px 0; + } +} diff --git a/resources/scripts/toc.js b/resources/scripts/toc.js index 320abd9c..229d0bcb 100644 --- a/resources/scripts/toc.js +++ b/resources/scripts/toc.js @@ -36,7 +36,7 @@ const SmoothScroll = () => { node = document.querySelector( `a[href * = "${id}"]` ).parentNode, active = document.querySelector( '.active' ); - if (active !== null) { + if ( active !== null ) { active.classList.remove( 'active' ); } diff --git a/resources/scripts/wm-typeahead.js b/resources/scripts/wm-typeahead.js index ce09e145..d5e26705 100644 --- a/resources/scripts/wm-typeahead.js +++ b/resources/scripts/wm-typeahead.js @@ -292,7 +292,7 @@ window.WMTypeAhead = function ( appendTo, searchInput ) { gpslimit: maxSearchResults }; - switch (descriptionSource) { + switch ( descriptionSource ) { case 'wikidata': searchQuery.prop += '|description'; break; @@ -377,7 +377,7 @@ window.WMTypeAhead = function ( appendTo, searchInput ) { page = suggestions[ i ]; - switch (descriptionSource) { + switch ( descriptionSource ) { case 'wikidata': pageDescription = page.description || ''; break;