├── .github ├── issue_template.md └── workflows │ └── main.yml ├── .gitignore ├── LICENSE ├── README.md ├── _config.yml ├── colours_palette.html ├── documentation.html ├── documentation.org ├── documentation.org.html ├── emacs-conf-2020.html ├── emacs-conf-2020.org ├── images ├── badges.png ├── calculational_proofs.png ├── colour_links.png ├── colours.jpg ├── details.png ├── edcomm.png ├── example_link.png ├── foo_block.png ├── html-themes-as-links.png ├── inference-rules.png ├── kbd.png ├── marginal_remarks.png ├── minimal-working-example-multiforms.png ├── minimal-working-example.png ├── o-deflink.png ├── parallel.png ├── tooltips_browser.png ├── tooltips_declaration.png ├── tooltips_emacs.png └── tooltips_pdf.png ├── index.html ├── index.pdf ├── mwe.org ├── mwe.pdf ├── org-special-block-extras.el ├── org-special-block-extras.org ├── tests.el ├── tests ├── badge.yaml ├── box.yaml ├── calc.yaml ├── colors.yaml ├── details.yaml ├── doc.yaml ├── e2e.el ├── fortune.yaml ├── kbd.yaml ├── latex-definitions.yaml ├── org-demo.yaml ├── osbe-example.yaml ├── parallel.yaml ├── rename.yaml ├── show.yaml ├── solution.pdf ├── solution.yaml ├── spoiler.yaml ├── tooltip.yaml └── tree.yaml └── tooltipster ├── LICENSE ├── README.md ├── bower.json ├── composer.json ├── dist ├── css │ ├── plugins │ │ └── tooltipster │ │ │ └── sideTip │ │ │ └── themes │ │ │ ├── tooltipster-sideTip-borderless.min.css │ │ │ ├── tooltipster-sideTip-light.min.css │ │ │ ├── tooltipster-sideTip-noir.min.css │ │ │ ├── tooltipster-sideTip-punk.min.css │ │ │ └── tooltipster-sideTip-shadow.min.css │ ├── tooltipster.bundle.css │ ├── tooltipster.bundle.min.css │ ├── tooltipster.main.css │ └── tooltipster.main.min.css └── js │ ├── plugins │ └── tooltipster │ │ └── SVG │ │ ├── tooltipster-SVG.js │ │ └── tooltipster-SVG.min.js │ ├── tooltipster.bundle.js │ ├── tooltipster.bundle.min.js │ ├── tooltipster.main.js │ └── tooltipster.main.min.js └── package.json /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | ## I defined the following defblock 2 | 3 | For example, 4 | 5 | (org-defblock shout () 6 | "Say things in uppercase" 7 | (upcase contents)) 8 | 9 | ## I am using it as follows 10 | 11 | #+begin_shout 12 | Hello, can you hear me? 13 | #+end_shout 14 | 15 | ## In the HMTL backend, I expect to see 16 | 17 | HELLO, CAN YOU HEAR ME? 18 | 19 | ## However, what I actually see 20 | 21 | ... 22 | 23 | ## I suspect the issue is at ... 24 | 25 | Or can be solved by ... 26 | 27 | ## Please tick the following, by replacing `[ ]` with `[X]` 28 | 29 | 1. [ ] I am aware of the extensive documentation at http://alhassy.com/org-special-block-extras/ 30 | 2. [ ] I have read the documentation of doc:org-defblock 31 | 3. [ ] I have checked some boxes without reading them. 32 | 4. [ ] I am aware that `(org-defblock X ⋯)` gives me a Lisp function `org-block/X` 33 | that I can play with; e.g., `C-h o org-block/shout` shows a function with its 34 | docstring and arguments. We can press `C-u C-x C-e` at the end of the 35 | closing parens of `(org-block/shout 'html "*Hello*, /world/!")` to see 36 | what _Org sees_ when it rewrites a `shout` block with the given string as its contents. 37 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of dependencies and run tests 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/ 3 | 4 | name: Tests 5 | 6 | # Controls when the action will run. 7 | on: 8 | # Triggers the workflow on push or pull request events but only for the main branch 9 | push: 10 | branches: [ master ] 11 | pull_request: 12 | branches: [ master ] 13 | 14 | # Allows you to run this workflow manually from the Actions tab 15 | workflow_dispatch: 16 | 17 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 18 | jobs: 19 | # This workflow contains a single job called "build" 20 | build: 21 | # The type of runner that the job will run on 22 | runs-on: ubuntu-latest 23 | 24 | # Steps represent a sequence of tasks that will be executed as part of the job 25 | steps: 26 | - name: Unit test runner 27 | uses: emilyseville7cfg-better-emacs/unit-test-runner@v1.1 28 | 29 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 30 | - uses: actions/checkout@v2 31 | 32 | # - name: Set up Emacs 33 | # uses: purcell/setup-emacs@v3.0 34 | # with: 35 | # # The version of Emacs to install, e.g. "24.3", or "snapshot" for a recent development version. 36 | # version: 27.1 # optional 37 | 38 | # Runs a single command using the runners shell 39 | # - name: Run a one-line script 40 | # run: echo Hello, world! 41 | 42 | # Runs a set of commands using the runners shell 43 | # - name: Run a multi-line script 44 | # run: | 45 | # echo Add other actions to build, 46 | # echo test, and deploy your project. 47 | 48 | - name: Run tests 49 | run: emacs -batch -l ert -l tests.el -f ert-run-tests-batch-and-exit 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /README.bbl 2 | /README.tex 3 | /_minted-README/ 4 | /org-special-block-extras.elc 5 | /org-special-block-extras.tex 6 | /org-special-block-extras.html 7 | /org-special-block-extras.pdf 8 | /org-special-block-extras.bbl 9 | /_minted-org-special-block-extras/ 10 | /_minted-index/ 11 | /index.bbl 12 | /index.tex 13 | /mwe.html 14 | /mwe.bbl 15 | /ltximg/ 16 | **/.DS_Store 17 | 18 | /tests/indent.log 19 | /indent.log 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

A unified interface for Emacs' Org-mode block & link types (•̀ᴗ•́)و

2 | 3 |

Which is used to obtain 30 new custom blocks and 34 link types ¯\_(ツ)_/¯

4 | 5 |
6 | 7 |
8 |

9 | 10 |

11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |

23 | 24 | 25 |

26 | 27 | 28 | 29 |

30 | 31 |

32 | 33 | MELPA 34 | 35 |
36 | 37 |

38 | 39 | 40 | 41 | 42 |

43 | 44 |

45 | 46 | 47 |

48 | 49 |

50 | 51 |

52 | 53 |

54 | 55 |

56 |
57 | 58 |
59 |

60 | Abstract 61 |

62 |
63 | 64 | > The aim is to write something once using Org-mode markup 65 | > then generate the markup for multiple backends. 66 | > That is, ***write once, generate many!*** 67 | > 68 | > In particular, we are concerned with *‘custom’, or ‘special’, blocks* which 69 | > delimit how a particular region of text is supposed to be formatted according to 70 | > the possible export backends. In some sense, special blocks are meta-blocks. 71 | > Rather than writing text in, say, LaTeX environments using LaTeX commands or in 72 | > HTML `div`'s using HTML tags, we promote using Org-mode markup in special blocks 73 | > —Org markup cannot be used explicitly within HTML or LaTeX environments. 74 | > 75 | > *Special blocks*, like `centre` and `quote`, allow us to use Org-mode as the primary 76 | > interface regardless of whether the final result is an HTML or PDF article; 77 | > sometime we need to make our own special blocks to avoid a duplication of 78 | > effort. However, this can be difficult and may require familiarity with 79 | > relatively advanced ELisp concepts, such as macros and hooks; as such, users may 80 | > not be willing to put in the time and instead use ad-hoc solutions. 81 | > 82 | > We present a new macro, [defblock](org-special-block-extras--defblock), which is similar in-spirit to Lisp's standard 83 | > except that where the latter defines functions, ours defines new 84 | > special blocks for Emacs' Org-mode —as well as, simultaneously, defining new 85 | > Org link types. Besides the macro, the primary contribution of this effort is an 86 | > interface for special blocks that *admits* arguments and is familar to Org users 87 | > —namely, we ‘try to reuse’ the familiar `src`-block interface, including 88 | > header-args, but for special blocks. 89 | > 90 | > It is hoped that the ease of creating custom special blocks will be a gateway 91 | > for many Emacs users to start using Lisp. 92 | > 93 | > ** 94 | > 95 | > 96 | > 97 | > A 5-page PDF covering ELisp fundamentals 98 | > 99 | > 100 | > 101 | > ** can be found **[here](https://alhassy.github.io/ElispCheatSheet/CheatSheet.pdf)**. 102 | > 103 | > This article is featured in EmacsConf2020, with slides [here](https://alhassy.github.io/org-special-block-extras/emacs-conf-2020): 104 | > No pictures, instead we use this system to make the slides 105 | > have a variety of styling information; i.e., we write Org 106 | > and the result looks nice. “Look ma, no HTML required!” 107 | 108 | ![img](images/minimal-working-example-multiforms.png "Write in Emacs using Org-mode, export beautifully to HTML or LaTeX") 109 | 110 | 116 | 117 | 118 | # Table of Contents 119 | 120 | 1. [Installation Instructions](#Installation-Instructions) 121 | 2. [Minimal working example](#Minimal-working-example) 122 | 3. [Bye!](#Bye) 123 | 124 | > The full article may be read as a [PDF](https://alhassy.github.io/org-special-block-extras/index.pdf) or as [HTML](https://alhassy.github.io/org-special-block-extras) —or visit the [repo](https://github.com/alhassy/org-special-block-extras). 125 | > Installation instructions are . 126 | 127 |
128 | 129 | 130 | 131 | 132 | # Installation Instructions 133 | 134 | Manually or using [quelpa](https://github.com/alhassy/emacs.d#installing-emacs-packages-directly-from-source): 135 | 136 | ;; ⟨0⟩ Download the org-special-block-extras.el file manually or using quelpa 137 | (quelpa '(org-special-block-extras :fetcher github :repo 138 | "alhassy/org-special-block-extras")) 139 | 140 | ;; ⟨1⟩ Have this always active in Org buffers 141 | (add-hook #'org-mode-hook #'org-special-block-extras-mode) 142 | 143 | ;; ⟨1′⟩ Or use: “M-x org-special-block-extras-mode” to turn it on/off 144 | 145 | **Or** with [use-package](https://github.com/alhassy/emacs.d#use-package-the-start-of-initel): 146 | 147 | (use-package org-special-block-extras 148 | :ensure t 149 | :hook (org-mode . org-special-block-extras-mode) 150 | ;; All relevant Lisp functions are prefixed ‘o-’; e.g., `o-docs-insert'. 151 | :custom 152 | (o-docs-libraries 153 | '("~/org-special-block-extras/documentation.org") 154 | "The places where I keep my ‘#+documentation’"))) 155 | 156 | Then, provide support for a new type of special block, say re-using the `src` 157 | blocks that, say, folds up all such blocks in HTML export, by declaring the 158 | following. 159 | 160 | (o-defblock src (lang nil) (title nil exports nil file nil) 161 | "Fold-away all ‘src’ blocks as ‘
’ HTML export. 162 | If a block has a ‘:title’, use that to title the ‘
’." 163 | (format "
%s
 %s 
" 164 | (or title (concat "Details; " lang)) 165 | raw-contents)) 166 | 167 | 168 | 169 | 170 | # Minimal working example 171 | 172 | The following example showcases the prominent features of this library. 173 | 174 | #+begin_parallel 175 | [[color:orange][Are you excited to learn some Lisp?]] [[blue:Yes!]] 176 | 177 | Pop-quiz: How does doc:apply work? 178 | #+end_parallel 179 | 180 | #+begin_details Answer 181 | link-here:solution 182 | Syntactically, ~(apply f '(x0 ... xN)) = (f x0 ... xN)~. 183 | 184 | [[remark:Musa][Ain't that cool?]] 185 | 186 | #+begin_spoiler aqua 187 | That is, [[color:magenta][we can ((apply)) a function to a list of arguments!]] 188 | #+end_spoiler 189 | 190 | #+end_details 191 | 192 | #+html:
193 | #+begin_box 194 | octoicon:report Note that kbd:C-x_C-e evaluates a Lisp form! 195 | #+end_box 196 | 197 | #+LATEX_HEADER: \usepackage{multicol} 198 | #+LATEX_HEADER: \usepackage{tcolorbox} 199 | #+latex: In the LaTeX output, we have a glossary. 200 | 201 | show:GLOSSARY 202 | 203 | badge:Thanks|for_reading 204 | tweet:https://github.com/alhassy/org-special-block-extras 205 | badge:|buy_me_a coffee|gray|https://www.buymeacoffee.com/alhassy|buy-me-a-coffee 206 | 207 | Here is what it looks like as HTML (left) and LaTeX (right): 208 | 209 | ![img](images/minimal-working-example.png) 210 | 211 | The above section, , presents a few puzzles to get you 212 | comfortable with `defblock` ;-) 213 | 214 | 215 | 216 | 217 | # Bye! 218 | 219 | 220 | 221 | 222 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-merlot -------------------------------------------------------------------------------- /emacs-conf-2020.org: -------------------------------------------------------------------------------- 1 | #+TITLE: Powering-up Special Blocks 2 | #+DESCRIPTION: A modular interface for special blocks and links: defblock 3 | 4 | #+AUTHOR: [[https://alhassy.github.io/][Musa Al-hassy]] 5 | #+EMAIL: alhassy@gmail.com 6 | #+OPTIONS: html-postamble:nil 7 | #+PROPERTY: header-args:agda2 :tangle aim-2020.agda 8 | 9 | # +TITLE: @@html:
@@Unbundling   on   the   fly   and   mechanically   obtaining   termtypes   from   theories@@html:
@@ 10 | #+begin_src emacs-lisp :exports none 11 | (make-local-variable 'org-reveal-title-slide) 12 | (setq org-reveal-title-slide "

%t

13 |

A modular interface
for special blocks and links

14 |

15 |

Emacs-Conf-2020

16 |
17 | %a 18 |
19 | 20 | 21 | ⟪ Flattened View ; Press ? for Help ⟫ 22 | 23 | 24 |
25 | 26 | 27 |
28 | 29 | 30 | 31 |
32 | \"MELPA\" 33 | 34 | 35 |
36 | 37 | 38 | 39 |
40 | 41 |
42 | ") 43 | #+end_src 44 | 45 | #+OPTIONS: timestamp:nil 46 | #+OPTIONS: toc:nil d:nil 47 | 48 | #+OPTIONS: reveal_center:t reveal_progress:t reveal_history:t reveal_control:t 49 | #+OPTIONS: reveal_rolling_links:t reveal_keyboard:t reveal_overview:t num:nil 50 | # OPTIONS: reveal_width:1200 reveal_height:800 51 | #+OPTIONS: reveal_height:800 52 | 53 | #+REVEAL_MARGIN: 0.1 54 | #+REVEAL_MIN_SCALE: 0.5 55 | #+REVEAL_MAX_SCALE: 2.5 56 | 57 | # Available transitions are: default|cube|page|concave|zoom|linear|fade|none. 58 | #+REVEAL_TRANS: fade 59 | # Available transitions are: default(black)|white|league|sky|beige|simple|serif|blood|night|moon|solarized 60 | #+REVEAL_THEME: sky 61 | # REVEAL_THEME: blood 62 | 63 | #+REVEAL_HLEVEL: 2 64 | # REVEAL_HEAD_PREAMBLE: 65 | #+REVEAL_POSTAMBLE: 66 | #+REVEAL_PLUGINS: (markdown notes) 67 | #+REVEAL_EXTRA_CSS: ./local.css 68 | # 69 | # See here for examples of how fragments look 70 | # https://revealjs.com/#/fragments 71 | # 72 | # Here for what themes look like 73 | # https://revealjs.com/#/themes 74 | 75 | #+MACRO: myfrag #+ATTR_REVEAL: :frag (appear) 76 | 77 | #+MACRO: begin-columns #+REVEAL_HTML:
78 | #+MACRO: break-columns #+REVEAL_HTML:
79 | #+MACRO: end-columns #+REVEAL_HTML:
80 | 81 | # Place item in a 1×1 table then center the table. 82 | # This works nicely for preformatted code whose indentation is important. 83 | # 84 | #+MACRO: begin-center #+REVEAL_HTML:
85 | #+MACRO: end-center #+REVEAL_HTML:
86 | 87 | * css :ignore: 88 | :PROPERTIES: 89 | :CUSTOM_ID: css 90 | :END: 91 | 92 | # For the most part, I “view page source” to inspect what div or whatever it is I want 93 | # to alter, then I lookup the css to do so and that gives me the following ^_^ 94 | 95 | # Bigger & redish (ff2d00) page numbers; max vertical and horizontal size 96 | # Also reasonable ?print-pdf url extension ^_^ 97 | #+BEGIN_EXPORT html 98 | 161 | #+END_EXPORT 162 | 163 | # 164 | # !important everywhere forces my suggestions. 165 | # 166 | 167 | * Overview 168 | :PROPERTIES: 169 | :CUSTOM_ID: Overview 170 | :END: 171 | #+ATTR_REVEAL: :frag (appear) 172 | With a bit of Lisp ---and a lot of time--- we obtain 173 | 174 | #+html: 175 | 176 | #+ATTR_REVEAL: :frag (appear) 177 | 1. a uniform, and *practical*, syntax for both /special blocks/ and /link types/ 178 | #+html:
179 | 2. reusing the Org ~src~ interface ---including arguments for blocks 180 | and *global header arguments* for links 181 | #+html:
182 | 3. *“write once, generate many”*: Write markup in Org and have 183 | it exported to other backends! 184 | #+html:
185 | 186 | #+begin_details (•̀ᴗ•́)و 187 | | Idea | Documentation | Link only? | 188 | |------------------------+---------------------------------+---------------------| 189 | | Colours | [[doc:org-special-block-extras--latex-definitions][latex-definitions]], [[doc:org-special-block-extras--color][color]] | | 190 | | Parallel | [[doc:org-special-block-extras--parallel][parallel]] | | 191 | | Editorial Remarks | [[doc:org-special-block-extras--remark][remark]] | | 192 | | Folded Details | [[doc:org-special-block-extras--details][details]] , [[doc:org-special-block-extras--box][box]] | | 193 | | Keystrokes | kbd:C-c_C-e | ~kbd~ | 194 | | OctoIcons & Link Here | octoicon:report link-here:Overview | ~octoicon~, ~link-here~ | 195 | | Documentation-Glossary | [[doc:org-special-block-extras--documentation][documentation]] | ~doc~ | 196 | 197 | Other fun stuff: [[doc:org-special-block-extras--solution][solution]], [[doc:org-special-block-extras--org-demo][org-demo]], [[doc:org-special-block-extras--stutter][stutter]], [[doc:org-special-block-extras--rename][rename]], [[doc:org-special-block-extras--spoiler][spoiler]] (─‿‿─) 198 | #+end_details 199 | #+begin_box Incidentally 200 | 😂 The setup joyously works for org-reveal 😹 201 | 202 | 🥰 🍭 🦄 😆 203 | #+end_box 204 | 205 | #+html:
206 | * Motivation 207 | 208 | See an *[[green:][aesthetically pleasing style]]* online and seek to reproduce it … 209 | #+html:
210 | 211 | #+html_head: 35 |

36 | Yusuf said to his father Yacoub , 37 | “O my father, indeed I have seen eleven stars and 39 | the sun and the moon ; I saw them prostrating to 40 | me.” 42 |

43 | 44 |

45 | There are also options for the left delimiter of a hidden item, the right 46 | delimiter, and the color of the hidden item. These default to 47 | grey, ((, )) respectively. 48 |

49 | 50 | 60 |

61 | Yusuf said to his father Yacoub , 62 | “O my father, indeed I have seen eleven stars and 64 | the sun and the moon ; I saw them prostrating to 65 | me.” 67 |

68 | latex: |- 69 | The \texttt{spoiler} block is for “fill in the blanks” or “guess, and hover 70 | to see the results” style of exposition. 71 | 72 | 73 | \fbox{\phantom{Yusuf}}\footnote{Yusuf} said to his father \fbox{\phantom{Yacoub}}\footnote{Yacoub}, \emph{“O my father, indeed I have seen 74 | \fbox{\phantom{eleven stars}}\footnote{eleven stars} and \fbox{\phantom{the sun and the moon}}\footnote{the sun and the moon}; I saw them prostrating to me.”} 75 | 76 | 77 | 78 | There are also options for the left delimiter of a hidden item, the right delimiter, 79 | and the color of the hidden item. These default to \texttt{grey, ((, ))} respectively. 80 | 81 | 82 | \fbox{\phantom{Yusuf}}\footnote{Yusuf} said to his father \fbox{\phantom{Yacoub}}\footnote{Yacoub}, \emph{“O my father, indeed I have seen 83 | \fbox{\phantom{eleven stars}}\footnote{eleven stars} and \fbox{\phantom{the sun and the moon}}\footnote{the sun and the moon}; I saw them prostrating to me.”} 84 | -------------------------------------------------------------------------------- /tests/tooltip.yaml: -------------------------------------------------------------------------------- 1 | input: |- 2 | It can be annoying to make readers jump to the bottom of the page to 3 | read a footnote. Instead, I prefer to write an /inline [[doc:org-block/tooltip][remark]]/ 4 | containing, say, references or additional explanation. 5 | 6 | /[[tooltip:Allah][The God of Abraham; known as Elohim in the Bible]] does not burden a 7 | soul beyond what it can bear./ --- Quran 2:286 8 | 9 | Or, without specifying an explicit label: 10 | 11 | /Allah[[tooltip:][The God of Abraham; known as Elohim in the Bible]] does not 12 | burden a soul beyond what it can bear./ --- Quran 2:286 13 | 14 | expectations: 15 | html: |- 16 |

17 | It can be annoying to make readers jump to the bottom of the page to read a 18 | footnote. Instead, I prefer to write an 19 | inline 21 | remark 27 | containing, say, references or additional explanation. 28 |

29 | 30 |

31 | Allah  does not burden a soul beyond what it can bear. 38 | — Quran 2:286 39 |

40 | 41 |

Or, without specifying an explicit label:

42 | 43 |

44 | Allah°  does not burden a soul beyond what it can bear. 51 | — Quran 2:286 52 |

53 | latex: |- 54 | 🚫 The LaTex backend is intentionally unmaintained. 55 | 🫠 Whoops, there seems to be an error: 56 | (void-variable label) 57 | -------------------------------------------------------------------------------- /tests/tree.yaml: -------------------------------------------------------------------------------- 1 | input: |- 2 | #+begin_box Programming ≈ Proving 3 | #+begin_tree 4 | + Function Application :: f(a) : B 5 | - a : A 6 | - f : A → B 7 | 8 | + Modus Ponens :: q 9 | - p 10 | - p ⇒ q 11 | #+end_tree 12 | #+end_box 13 | 14 | expectations: 15 | html: |- 16 |
24 |

Programming ≈ Proving

25 | \[\frac{\displaystyle \qquad a : A \qquad f : A → B }{f(a) : B}[\text{Function 26 | Application}]\]\[\frac{\displaystyle \qquad p \qquad p ⇒ q}{q}[\text{Modus 27 | Ponens}]\] 28 |
29 | latex: |- 30 | \begin{tcolorbox}[title={Programming ≈ Proving},colback=red!5!white,colframe=red!75!black,colbacktitle=yellow!50!red,coltitle=red!25!black, fonttitle=\bfseries,subtitle style={boxrule=0.4pt, colback=yellow!50!red!25!white}] 31 | \[\frac{\displaystyle \qquad a : A \qquad f : A → B 32 | }{f(a) : B}[\text{Function Application}]\]\[\frac{\displaystyle \qquad p \qquad p ⇒ q}{q}[\text{Modus Ponens}]\] 33 | 34 | \end{tcolorbox} 35 | -------------------------------------------------------------------------------- /tooltipster/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2012,2016 Caleb Jacob and Louis Ameline 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /tooltipster/README.md: -------------------------------------------------------------------------------- 1 | Tooltipster 2 | =========== 3 | 4 | A flexible and extensible jQuery plugin for modern tooltips by Caleb Jacob and Louis Ameline under MIT license. 5 | Compatible with Mozilla Firefox, Google Chrome, IE6+ and others. 6 | Requires jQuery 1.10+ (or less, see the compatibility note in the doc). 7 | Default css + js files = 10Kb gzipped. 8 | 9 | A reminder of options/methods lies below. For detailed documentation, visit http://iamceege.github.io/tooltipster/ 10 | 11 | Standard options 12 | ---------------- 13 | 14 | animation 15 | animationDuration 16 | content 17 | contentAsHTML 18 | contentCloning 19 | debug 20 | delay 21 | delayTouch 22 | functionInit 23 | functionBefore 24 | functionReady 25 | functionAfter 26 | functionFormat 27 | IEmin 28 | interactive 29 | multiple 30 | plugins 31 | repositionOnScroll 32 | restoration 33 | selfDestruction 34 | timer 35 | theme 36 | trackerInterval 37 | trackOrigin 38 | trackTooltip 39 | trigger 40 | triggerClose 41 | triggerOpen 42 | updateAnimation 43 | zIndex 44 | 45 | Other options 46 | ------------- 47 | 48 | (these are available when you use sideTip, the default plugin) 49 | 50 | arrow 51 | distance 52 | functionPosition 53 | maxWidth 54 | minIntersection 55 | minWidth 56 | side 57 | viewportAware 58 | 59 | Instance methods 60 | ---------------- 61 | 62 | close([callback]) 63 | content([myNewContent]) 64 | destroy() 65 | disable() 66 | elementOrigin() 67 | elementTooltip() 68 | enable() 69 | instance() 70 | on, one, off, triggerHandler 71 | open([callback]) 72 | option(optionName [, optionValue]) 73 | reposition() 74 | status() 75 | 76 | Core methods 77 | ------------ 78 | 79 | instances([selector || element]) 80 | instancesLatest() 81 | on, one, off, triggerHandler 82 | origins() 83 | setDefaults({}) 84 | 85 | Events 86 | ------ 87 | 88 | after 89 | before 90 | close 91 | closing 92 | created 93 | destroy 94 | destroyed 95 | dismissable 96 | format 97 | geometry 98 | init 99 | state 100 | ready 101 | reposition 102 | repositioned 103 | scroll 104 | start 105 | startcancel 106 | startend 107 | updated 108 | 109 | sideTip events 110 | -------------- 111 | 112 | position 113 | positionTest 114 | positionTested -------------------------------------------------------------------------------- /tooltipster/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tooltipster", 3 | "main": ["dist/js/tooltipster.bundle.js", "dist/css/tooltipster.bundle.css"], 4 | "dependencies": { 5 | "jquery": ">=1.10" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tooltipster/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tooltipster/tooltipster", 3 | "description": "Tooltipster is a flexible and extensible jQuery plugin for modern tooltips.", 4 | "keywords": [ 5 | "jquery", 6 | "tooltip", 7 | "plugin", 8 | "replacement" 9 | ], 10 | "homepage": "http://iamceege.github.io/tooltipster/", 11 | "authors": [ 12 | { 13 | "name": "Caleb Jacob", 14 | "homepage": "https://plus.google.com/+CalebJacob?rel=author" 15 | }, 16 | { 17 | "name": "Louis Ameline", 18 | "homepage": "https://github.com/louisameline" 19 | } 20 | ], 21 | "license": "MIT", 22 | "suggest": { 23 | "components/jquery": ">=1.10" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tooltipster/dist/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css: -------------------------------------------------------------------------------- 1 | .tooltipster-sidetip.tooltipster-borderless .tooltipster-box{border:none;background:#1b1b1b;background:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-bottom .tooltipster-box{margin-top:8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-left .tooltipster-box{margin-right:8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-box{margin-left:8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-top .tooltipster-box{margin-bottom:8px}.tooltipster-sidetip.tooltipster-borderless .tooltipster-arrow{height:8px;margin-left:-8px;width:16px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-arrow{height:16px;margin-left:0;margin-top:-8px;width:8px}.tooltipster-sidetip.tooltipster-borderless .tooltipster-arrow-background{display:none}.tooltipster-sidetip.tooltipster-borderless .tooltipster-arrow-border{border:8px solid transparent}.tooltipster-sidetip.tooltipster-borderless.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#1b1b1b;border-bottom-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-left .tooltipster-arrow-border{border-left-color:#1b1b1b;border-left-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-arrow-border{border-right-color:#1b1b1b;border-right-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-top .tooltipster-arrow-border{border-top-color:#1b1b1b;border-top-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-bottom .tooltipster-arrow-uncropped{top:-8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-arrow-uncropped{left:-8px} -------------------------------------------------------------------------------- /tooltipster/dist/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-light.min.css: -------------------------------------------------------------------------------- 1 | .tooltipster-sidetip.tooltipster-light .tooltipster-box{border-radius:3px;border:1px solid #ccc;background:#ededed}.tooltipster-sidetip.tooltipster-light .tooltipster-content{color:#666}.tooltipster-sidetip.tooltipster-light .tooltipster-arrow{height:9px;margin-left:-9px;width:18px}.tooltipster-sidetip.tooltipster-light.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow{height:18px;margin-left:0;margin-top:-9px;width:9px}.tooltipster-sidetip.tooltipster-light .tooltipster-arrow-background{border:9px solid transparent}.tooltipster-sidetip.tooltipster-light.tooltipster-bottom .tooltipster-arrow-background{border-bottom-color:#ededed;top:1px}.tooltipster-sidetip.tooltipster-light.tooltipster-left .tooltipster-arrow-background{border-left-color:#ededed;left:-1px}.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow-background{border-right-color:#ededed;left:1px}.tooltipster-sidetip.tooltipster-light.tooltipster-top .tooltipster-arrow-background{border-top-color:#ededed;top:-1px}.tooltipster-sidetip.tooltipster-light .tooltipster-arrow-border{border:9px solid transparent}.tooltipster-sidetip.tooltipster-light.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-left .tooltipster-arrow-border{border-left-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow-border{border-right-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-top .tooltipster-arrow-border{border-top-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-bottom .tooltipster-arrow-uncropped{top:-9px}.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow-uncropped{left:-9px} -------------------------------------------------------------------------------- /tooltipster/dist/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css: -------------------------------------------------------------------------------- 1 | .tooltipster-sidetip.tooltipster-noir .tooltipster-box{border-radius:0;border:3px solid #000;background:#fff}.tooltipster-sidetip.tooltipster-noir .tooltipster-content{color:#000}.tooltipster-sidetip.tooltipster-noir .tooltipster-arrow{height:11px;margin-left:-11px;width:22px}.tooltipster-sidetip.tooltipster-noir.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-noir.tooltipster-right .tooltipster-arrow{height:22px;margin-left:0;margin-top:-11px;width:11px}.tooltipster-sidetip.tooltipster-noir .tooltipster-arrow-background{border:11px solid transparent}.tooltipster-sidetip.tooltipster-noir.tooltipster-bottom .tooltipster-arrow-background{border-bottom-color:#fff;top:4px}.tooltipster-sidetip.tooltipster-noir.tooltipster-left .tooltipster-arrow-background{border-left-color:#fff;left:-4px}.tooltipster-sidetip.tooltipster-noir.tooltipster-right .tooltipster-arrow-background{border-right-color:#fff;left:4px}.tooltipster-sidetip.tooltipster-noir.tooltipster-top .tooltipster-arrow-background{border-top-color:#fff;top:-4px}.tooltipster-sidetip.tooltipster-noir .tooltipster-arrow-border{border-width:11px}.tooltipster-sidetip.tooltipster-noir.tooltipster-bottom .tooltipster-arrow-uncropped{top:-11px}.tooltipster-sidetip.tooltipster-noir.tooltipster-right .tooltipster-arrow-uncropped{left:-11px} -------------------------------------------------------------------------------- /tooltipster/dist/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-punk.min.css: -------------------------------------------------------------------------------- 1 | .tooltipster-sidetip.tooltipster-punk .tooltipster-box{border-radius:5px;border:none;border-bottom:3px solid #f71169;background:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-top .tooltipster-box{margin-bottom:7px}.tooltipster-sidetip.tooltipster-punk .tooltipster-content{color:#fff;padding:8px 16px}.tooltipster-sidetip.tooltipster-punk .tooltipster-arrow-background{display:none}.tooltipster-sidetip.tooltipster-punk.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-left .tooltipster-arrow-border{border-left-color:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-right .tooltipster-arrow-border{border-right-color:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-top .tooltipster-arrow-border{border-top-color:#f71169} -------------------------------------------------------------------------------- /tooltipster/dist/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css: -------------------------------------------------------------------------------- 1 | .tooltipster-sidetip.tooltipster-shadow .tooltipster-box{border:none;border-radius:5px;background:#fff;box-shadow:0 0 10px 6px rgba(0,0,0,.1)}.tooltipster-sidetip.tooltipster-shadow.tooltipster-bottom .tooltipster-box{margin-top:6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-left .tooltipster-box{margin-right:6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-box{margin-left:6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-top .tooltipster-box{margin-bottom:6px}.tooltipster-sidetip.tooltipster-shadow .tooltipster-content{color:#8d8d8d}.tooltipster-sidetip.tooltipster-shadow .tooltipster-arrow{height:6px;margin-left:-6px;width:12px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-arrow{height:12px;margin-left:0;margin-top:-6px;width:6px}.tooltipster-sidetip.tooltipster-shadow .tooltipster-arrow-background{display:none}.tooltipster-sidetip.tooltipster-shadow .tooltipster-arrow-border{border:6px solid transparent}.tooltipster-sidetip.tooltipster-shadow.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-left .tooltipster-arrow-border{border-left-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-arrow-border{border-right-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-top .tooltipster-arrow-border{border-top-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-bottom .tooltipster-arrow-uncropped{top:-6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-arrow-uncropped{left:-6px} -------------------------------------------------------------------------------- /tooltipster/dist/css/tooltipster.bundle.css: -------------------------------------------------------------------------------- 1 | /* This is the core CSS of Tooltipster */ 2 | 3 | /* GENERAL STRUCTURE RULES (do not edit this section) */ 4 | 5 | .tooltipster-base { 6 | /* this ensures that a constrained height set by functionPosition, 7 | if greater that the natural height of the tooltip, will be enforced 8 | in browsers that support display:flex */ 9 | display: flex; 10 | pointer-events: none; 11 | /* this may be overriden in JS for fixed position origins */ 12 | position: absolute; 13 | } 14 | 15 | .tooltipster-box { 16 | /* see .tooltipster-base. flex-shrink 1 is only necessary for IE10- 17 | and flex-basis auto for IE11- (at least) */ 18 | flex: 1 1 auto; 19 | } 20 | 21 | .tooltipster-content { 22 | /* prevents an overflow if the user adds padding to the div */ 23 | box-sizing: border-box; 24 | /* these make sure we'll be able to detect any overflow */ 25 | max-height: 100%; 26 | max-width: 100%; 27 | overflow: auto; 28 | } 29 | 30 | .tooltipster-ruler { 31 | /* these let us test the size of the tooltip without overflowing the window */ 32 | bottom: 0; 33 | left: 0; 34 | overflow: hidden; 35 | position: fixed; 36 | right: 0; 37 | top: 0; 38 | visibility: hidden; 39 | } 40 | 41 | /* ANIMATIONS */ 42 | 43 | /* Open/close animations */ 44 | 45 | /* fade */ 46 | 47 | .tooltipster-fade { 48 | opacity: 0; 49 | -webkit-transition-property: opacity; 50 | -moz-transition-property: opacity; 51 | -o-transition-property: opacity; 52 | -ms-transition-property: opacity; 53 | transition-property: opacity; 54 | } 55 | .tooltipster-fade.tooltipster-show { 56 | opacity: 1; 57 | } 58 | 59 | /* grow */ 60 | 61 | .tooltipster-grow { 62 | -webkit-transform: scale(0,0); 63 | -moz-transform: scale(0,0); 64 | -o-transform: scale(0,0); 65 | -ms-transform: scale(0,0); 66 | transform: scale(0,0); 67 | -webkit-transition-property: -webkit-transform; 68 | -moz-transition-property: -moz-transform; 69 | -o-transition-property: -o-transform; 70 | -ms-transition-property: -ms-transform; 71 | transition-property: transform; 72 | -webkit-backface-visibility: hidden; 73 | } 74 | .tooltipster-grow.tooltipster-show { 75 | -webkit-transform: scale(1,1); 76 | -moz-transform: scale(1,1); 77 | -o-transform: scale(1,1); 78 | -ms-transform: scale(1,1); 79 | transform: scale(1,1); 80 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 81 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 82 | -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 83 | -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 84 | -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 85 | transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 86 | } 87 | 88 | /* swing */ 89 | 90 | .tooltipster-swing { 91 | opacity: 0; 92 | -webkit-transform: rotateZ(4deg); 93 | -moz-transform: rotateZ(4deg); 94 | -o-transform: rotateZ(4deg); 95 | -ms-transform: rotateZ(4deg); 96 | transform: rotateZ(4deg); 97 | -webkit-transition-property: -webkit-transform, opacity; 98 | -moz-transition-property: -moz-transform; 99 | -o-transition-property: -o-transform; 100 | -ms-transition-property: -ms-transform; 101 | transition-property: transform; 102 | } 103 | .tooltipster-swing.tooltipster-show { 104 | opacity: 1; 105 | -webkit-transform: rotateZ(0deg); 106 | -moz-transform: rotateZ(0deg); 107 | -o-transform: rotateZ(0deg); 108 | -ms-transform: rotateZ(0deg); 109 | transform: rotateZ(0deg); 110 | -webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 1); 111 | -webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); 112 | -moz-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); 113 | -ms-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); 114 | -o-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); 115 | transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); 116 | } 117 | 118 | /* fall */ 119 | 120 | .tooltipster-fall { 121 | -webkit-transition-property: top; 122 | -moz-transition-property: top; 123 | -o-transition-property: top; 124 | -ms-transition-property: top; 125 | transition-property: top; 126 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 127 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 128 | -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 129 | -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 130 | -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 131 | transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 132 | } 133 | .tooltipster-fall.tooltipster-initial { 134 | top: 0 !important; 135 | } 136 | .tooltipster-fall.tooltipster-show { 137 | } 138 | .tooltipster-fall.tooltipster-dying { 139 | -webkit-transition-property: all; 140 | -moz-transition-property: all; 141 | -o-transition-property: all; 142 | -ms-transition-property: all; 143 | transition-property: all; 144 | top: 0 !important; 145 | opacity: 0; 146 | } 147 | 148 | /* slide */ 149 | 150 | .tooltipster-slide { 151 | -webkit-transition-property: left; 152 | -moz-transition-property: left; 153 | -o-transition-property: left; 154 | -ms-transition-property: left; 155 | transition-property: left; 156 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 157 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 158 | -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 159 | -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 160 | -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 161 | transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 162 | } 163 | .tooltipster-slide.tooltipster-initial { 164 | left: -40px !important; 165 | } 166 | .tooltipster-slide.tooltipster-show { 167 | } 168 | .tooltipster-slide.tooltipster-dying { 169 | -webkit-transition-property: all; 170 | -moz-transition-property: all; 171 | -o-transition-property: all; 172 | -ms-transition-property: all; 173 | transition-property: all; 174 | left: 0 !important; 175 | opacity: 0; 176 | } 177 | 178 | /* Update animations */ 179 | 180 | /* We use animations rather than transitions here because 181 | transition durations may be specified in the style tag due to 182 | animationDuration, and we try to avoid collisions and the use 183 | of !important */ 184 | 185 | /* fade */ 186 | 187 | @keyframes tooltipster-fading { 188 | 0% { 189 | opacity: 0; 190 | } 191 | 100% { 192 | opacity: 1; 193 | } 194 | } 195 | 196 | .tooltipster-update-fade { 197 | animation: tooltipster-fading 400ms; 198 | } 199 | 200 | /* rotate */ 201 | 202 | @keyframes tooltipster-rotating { 203 | 25% { 204 | transform: rotate(-2deg); 205 | } 206 | 75% { 207 | transform: rotate(2deg); 208 | } 209 | 100% { 210 | transform: rotate(0); 211 | } 212 | } 213 | 214 | .tooltipster-update-rotate { 215 | animation: tooltipster-rotating 600ms; 216 | } 217 | 218 | /* scale */ 219 | 220 | @keyframes tooltipster-scaling { 221 | 50% { 222 | transform: scale(1.1); 223 | } 224 | 100% { 225 | transform: scale(1); 226 | } 227 | } 228 | 229 | .tooltipster-update-scale { 230 | animation: tooltipster-scaling 600ms; 231 | } 232 | 233 | /** 234 | * DEFAULT STYLE OF THE SIDETIP PLUGIN 235 | * 236 | * All styles are "namespaced" with .tooltipster-sidetip to prevent 237 | * conflicts between plugins. 238 | */ 239 | 240 | /* .tooltipster-box */ 241 | 242 | .tooltipster-sidetip .tooltipster-box { 243 | background: #565656; 244 | border: 2px solid black; 245 | border-radius: 4px; 246 | } 247 | 248 | .tooltipster-sidetip.tooltipster-bottom .tooltipster-box { 249 | margin-top: 8px; 250 | } 251 | 252 | .tooltipster-sidetip.tooltipster-left .tooltipster-box { 253 | margin-right: 8px; 254 | } 255 | 256 | .tooltipster-sidetip.tooltipster-right .tooltipster-box { 257 | margin-left: 8px; 258 | } 259 | 260 | .tooltipster-sidetip.tooltipster-top .tooltipster-box { 261 | margin-bottom: 8px; 262 | } 263 | 264 | /* .tooltipster-content */ 265 | 266 | .tooltipster-sidetip .tooltipster-content { 267 | color: white; 268 | line-height: 18px; 269 | padding: 6px 14px; 270 | } 271 | 272 | /* .tooltipster-arrow : will keep only the zone of .tooltipster-arrow-uncropped that 273 | corresponds to the arrow we want to display */ 274 | 275 | .tooltipster-sidetip .tooltipster-arrow { 276 | overflow: hidden; 277 | position: absolute; 278 | } 279 | 280 | .tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow { 281 | height: 10px; 282 | /* half the width, for centering */ 283 | margin-left: -10px; 284 | top: 0; 285 | width: 20px; 286 | } 287 | 288 | .tooltipster-sidetip.tooltipster-left .tooltipster-arrow { 289 | height: 20px; 290 | margin-top: -10px; 291 | right: 0; 292 | /* top 0 to keep the arrow from overflowing .tooltipster-base when it has not 293 | been positioned yet */ 294 | top: 0; 295 | width: 10px; 296 | } 297 | 298 | .tooltipster-sidetip.tooltipster-right .tooltipster-arrow { 299 | height: 20px; 300 | margin-top: -10px; 301 | left: 0; 302 | /* same as .tooltipster-left .tooltipster-arrow */ 303 | top: 0; 304 | width: 10px; 305 | } 306 | 307 | .tooltipster-sidetip.tooltipster-top .tooltipster-arrow { 308 | bottom: 0; 309 | height: 10px; 310 | margin-left: -10px; 311 | width: 20px; 312 | } 313 | 314 | /* common rules between .tooltipster-arrow-background and .tooltipster-arrow-border */ 315 | 316 | .tooltipster-sidetip .tooltipster-arrow-background, .tooltipster-sidetip .tooltipster-arrow-border { 317 | height: 0; 318 | position: absolute; 319 | width: 0; 320 | } 321 | 322 | /* .tooltipster-arrow-background */ 323 | 324 | .tooltipster-sidetip .tooltipster-arrow-background { 325 | border: 10px solid transparent; 326 | } 327 | 328 | .tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background { 329 | border-bottom-color: #565656; 330 | left: 0; 331 | top: 3px; 332 | } 333 | 334 | .tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background { 335 | border-left-color: #565656; 336 | left: -3px; 337 | top: 0; 338 | } 339 | 340 | .tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background { 341 | border-right-color: #565656; 342 | left: 3px; 343 | top: 0; 344 | } 345 | 346 | .tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background { 347 | border-top-color: #565656; 348 | left: 0; 349 | top: -3px; 350 | } 351 | 352 | /* .tooltipster-arrow-border */ 353 | 354 | .tooltipster-sidetip .tooltipster-arrow-border { 355 | border: 10px solid transparent; 356 | left: 0; 357 | top: 0; 358 | } 359 | 360 | .tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border { 361 | border-bottom-color: black; 362 | } 363 | 364 | .tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border { 365 | border-left-color: black; 366 | } 367 | 368 | .tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border { 369 | border-right-color: black; 370 | } 371 | 372 | .tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border { 373 | border-top-color: black; 374 | } 375 | 376 | /* tooltipster-arrow-uncropped */ 377 | 378 | .tooltipster-sidetip .tooltipster-arrow-uncropped { 379 | position: relative; 380 | } 381 | 382 | .tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped { 383 | top: -10px; 384 | } 385 | 386 | .tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped { 387 | left: -10px; 388 | } 389 | -------------------------------------------------------------------------------- /tooltipster/dist/css/tooltipster.bundle.min.css: -------------------------------------------------------------------------------- 1 | .tooltipster-fall,.tooltipster-grow.tooltipster-show{-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1);-moz-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-ms-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-o-transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-base{display:flex;pointer-events:none;position:absolute}.tooltipster-box{flex:1 1 auto}.tooltipster-content{box-sizing:border-box;max-height:100%;max-width:100%;overflow:auto}.tooltipster-ruler{bottom:0;left:0;overflow:hidden;position:fixed;right:0;top:0;visibility:hidden}.tooltipster-fade{opacity:0;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;-ms-transition-property:opacity;transition-property:opacity}.tooltipster-fade.tooltipster-show{opacity:1}.tooltipster-grow{-webkit-transform:scale(0,0);-moz-transform:scale(0,0);-o-transform:scale(0,0);-ms-transform:scale(0,0);transform:scale(0,0);-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-backface-visibility:hidden}.tooltipster-grow.tooltipster-show{-webkit-transform:scale(1,1);-moz-transform:scale(1,1);-o-transform:scale(1,1);-ms-transform:scale(1,1);transform:scale(1,1);-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-swing{opacity:0;-webkit-transform:rotateZ(4deg);-moz-transform:rotateZ(4deg);-o-transform:rotateZ(4deg);-ms-transform:rotateZ(4deg);transform:rotateZ(4deg);-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform}.tooltipster-swing.tooltipster-show{opacity:1;-webkit-transform:rotateZ(0);-moz-transform:rotateZ(0);-o-transform:rotateZ(0);-ms-transform:rotateZ(0);transform:rotateZ(0);-webkit-transition-timing-function:cubic-bezier(.23,.635,.495,1);-webkit-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-moz-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-ms-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-o-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);transition-timing-function:cubic-bezier(.23,.635,.495,2.4)}.tooltipster-fall{-webkit-transition-property:top;-moz-transition-property:top;-o-transition-property:top;-ms-transition-property:top;transition-property:top;-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-fall.tooltipster-initial{top:0!important}.tooltipster-fall.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;top:0!important;opacity:0}.tooltipster-slide{-webkit-transition-property:left;-moz-transition-property:left;-o-transition-property:left;-ms-transition-property:left;transition-property:left;-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-moz-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-ms-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-o-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-slide.tooltipster-initial{left:-40px!important}.tooltipster-slide.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;left:0!important;opacity:0}@keyframes tooltipster-fading{0%{opacity:0}100%{opacity:1}}.tooltipster-update-fade{animation:tooltipster-fading .4s}@keyframes tooltipster-rotating{25%{transform:rotate(-2deg)}75%{transform:rotate(2deg)}100%{transform:rotate(0)}}.tooltipster-update-rotate{animation:tooltipster-rotating .6s}@keyframes tooltipster-scaling{50%{transform:scale(1.1)}100%{transform:scale(1)}}.tooltipster-update-scale{animation:tooltipster-scaling .6s}.tooltipster-sidetip .tooltipster-box{background:#565656;border:2px solid #000;border-radius:4px}.tooltipster-sidetip.tooltipster-bottom .tooltipster-box{margin-top:8px}.tooltipster-sidetip.tooltipster-left .tooltipster-box{margin-right:8px}.tooltipster-sidetip.tooltipster-right .tooltipster-box{margin-left:8px}.tooltipster-sidetip.tooltipster-top .tooltipster-box{margin-bottom:8px}.tooltipster-sidetip .tooltipster-content{color:#fff;line-height:18px;padding:6px 14px}.tooltipster-sidetip .tooltipster-arrow{overflow:hidden;position:absolute}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow{height:10px;margin-left:-10px;top:0;width:20px}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow{height:20px;margin-top:-10px;right:0;top:0;width:10px}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow{height:20px;margin-top:-10px;left:0;top:0;width:10px}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow{bottom:0;height:10px;margin-left:-10px;width:20px}.tooltipster-sidetip .tooltipster-arrow-background,.tooltipster-sidetip .tooltipster-arrow-border{height:0;position:absolute;width:0}.tooltipster-sidetip .tooltipster-arrow-background{border:10px solid transparent}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background{border-bottom-color:#565656;left:0;top:3px}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background{border-left-color:#565656;left:-3px;top:0}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background{border-right-color:#565656;left:3px;top:0}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background{border-top-color:#565656;left:0;top:-3px}.tooltipster-sidetip .tooltipster-arrow-border{border:10px solid transparent;left:0;top:0}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#000}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border{border-left-color:#000}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border{border-right-color:#000}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border{border-top-color:#000}.tooltipster-sidetip .tooltipster-arrow-uncropped{position:relative}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped{top:-10px}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped{left:-10px} -------------------------------------------------------------------------------- /tooltipster/dist/css/tooltipster.main.css: -------------------------------------------------------------------------------- 1 | /* This is the core CSS of Tooltipster */ 2 | 3 | /* GENERAL STRUCTURE RULES (do not edit this section) */ 4 | 5 | .tooltipster-base { 6 | /* this ensures that a constrained height set by functionPosition, 7 | if greater that the natural height of the tooltip, will be enforced 8 | in browsers that support display:flex */ 9 | display: flex; 10 | pointer-events: none; 11 | /* this may be overriden in JS for fixed position origins */ 12 | position: absolute; 13 | } 14 | 15 | .tooltipster-box { 16 | /* see .tooltipster-base. flex-shrink 1 is only necessary for IE10- 17 | and flex-basis auto for IE11- (at least) */ 18 | flex: 1 1 auto; 19 | } 20 | 21 | .tooltipster-content { 22 | /* prevents an overflow if the user adds padding to the div */ 23 | box-sizing: border-box; 24 | /* these make sure we'll be able to detect any overflow */ 25 | max-height: 100%; 26 | max-width: 100%; 27 | overflow: auto; 28 | } 29 | 30 | .tooltipster-ruler { 31 | /* these let us test the size of the tooltip without overflowing the window */ 32 | bottom: 0; 33 | left: 0; 34 | overflow: hidden; 35 | position: fixed; 36 | right: 0; 37 | top: 0; 38 | visibility: hidden; 39 | } 40 | 41 | /* ANIMATIONS */ 42 | 43 | /* Open/close animations */ 44 | 45 | /* fade */ 46 | 47 | .tooltipster-fade { 48 | opacity: 0; 49 | -webkit-transition-property: opacity; 50 | -moz-transition-property: opacity; 51 | -o-transition-property: opacity; 52 | -ms-transition-property: opacity; 53 | transition-property: opacity; 54 | } 55 | .tooltipster-fade.tooltipster-show { 56 | opacity: 1; 57 | } 58 | 59 | /* grow */ 60 | 61 | .tooltipster-grow { 62 | -webkit-transform: scale(0,0); 63 | -moz-transform: scale(0,0); 64 | -o-transform: scale(0,0); 65 | -ms-transform: scale(0,0); 66 | transform: scale(0,0); 67 | -webkit-transition-property: -webkit-transform; 68 | -moz-transition-property: -moz-transform; 69 | -o-transition-property: -o-transform; 70 | -ms-transition-property: -ms-transform; 71 | transition-property: transform; 72 | -webkit-backface-visibility: hidden; 73 | } 74 | .tooltipster-grow.tooltipster-show { 75 | -webkit-transform: scale(1,1); 76 | -moz-transform: scale(1,1); 77 | -o-transform: scale(1,1); 78 | -ms-transform: scale(1,1); 79 | transform: scale(1,1); 80 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 81 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 82 | -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 83 | -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 84 | -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 85 | transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 86 | } 87 | 88 | /* swing */ 89 | 90 | .tooltipster-swing { 91 | opacity: 0; 92 | -webkit-transform: rotateZ(4deg); 93 | -moz-transform: rotateZ(4deg); 94 | -o-transform: rotateZ(4deg); 95 | -ms-transform: rotateZ(4deg); 96 | transform: rotateZ(4deg); 97 | -webkit-transition-property: -webkit-transform, opacity; 98 | -moz-transition-property: -moz-transform; 99 | -o-transition-property: -o-transform; 100 | -ms-transition-property: -ms-transform; 101 | transition-property: transform; 102 | } 103 | .tooltipster-swing.tooltipster-show { 104 | opacity: 1; 105 | -webkit-transform: rotateZ(0deg); 106 | -moz-transform: rotateZ(0deg); 107 | -o-transform: rotateZ(0deg); 108 | -ms-transform: rotateZ(0deg); 109 | transform: rotateZ(0deg); 110 | -webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 1); 111 | -webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); 112 | -moz-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); 113 | -ms-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); 114 | -o-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); 115 | transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); 116 | } 117 | 118 | /* fall */ 119 | 120 | .tooltipster-fall { 121 | -webkit-transition-property: top; 122 | -moz-transition-property: top; 123 | -o-transition-property: top; 124 | -ms-transition-property: top; 125 | transition-property: top; 126 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 127 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 128 | -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 129 | -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 130 | -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 131 | transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 132 | } 133 | .tooltipster-fall.tooltipster-initial { 134 | top: 0 !important; 135 | } 136 | .tooltipster-fall.tooltipster-show { 137 | } 138 | .tooltipster-fall.tooltipster-dying { 139 | -webkit-transition-property: all; 140 | -moz-transition-property: all; 141 | -o-transition-property: all; 142 | -ms-transition-property: all; 143 | transition-property: all; 144 | top: 0 !important; 145 | opacity: 0; 146 | } 147 | 148 | /* slide */ 149 | 150 | .tooltipster-slide { 151 | -webkit-transition-property: left; 152 | -moz-transition-property: left; 153 | -o-transition-property: left; 154 | -ms-transition-property: left; 155 | transition-property: left; 156 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 157 | -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 158 | -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 159 | -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 160 | -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 161 | transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); 162 | } 163 | .tooltipster-slide.tooltipster-initial { 164 | left: -40px !important; 165 | } 166 | .tooltipster-slide.tooltipster-show { 167 | } 168 | .tooltipster-slide.tooltipster-dying { 169 | -webkit-transition-property: all; 170 | -moz-transition-property: all; 171 | -o-transition-property: all; 172 | -ms-transition-property: all; 173 | transition-property: all; 174 | left: 0 !important; 175 | opacity: 0; 176 | } 177 | 178 | /* Update animations */ 179 | 180 | /* We use animations rather than transitions here because 181 | transition durations may be specified in the style tag due to 182 | animationDuration, and we try to avoid collisions and the use 183 | of !important */ 184 | 185 | /* fade */ 186 | 187 | @keyframes tooltipster-fading { 188 | 0% { 189 | opacity: 0; 190 | } 191 | 100% { 192 | opacity: 1; 193 | } 194 | } 195 | 196 | .tooltipster-update-fade { 197 | animation: tooltipster-fading 400ms; 198 | } 199 | 200 | /* rotate */ 201 | 202 | @keyframes tooltipster-rotating { 203 | 25% { 204 | transform: rotate(-2deg); 205 | } 206 | 75% { 207 | transform: rotate(2deg); 208 | } 209 | 100% { 210 | transform: rotate(0); 211 | } 212 | } 213 | 214 | .tooltipster-update-rotate { 215 | animation: tooltipster-rotating 600ms; 216 | } 217 | 218 | /* scale */ 219 | 220 | @keyframes tooltipster-scaling { 221 | 50% { 222 | transform: scale(1.1); 223 | } 224 | 100% { 225 | transform: scale(1); 226 | } 227 | } 228 | 229 | .tooltipster-update-scale { 230 | animation: tooltipster-scaling 600ms; 231 | } 232 | -------------------------------------------------------------------------------- /tooltipster/dist/css/tooltipster.main.min.css: -------------------------------------------------------------------------------- 1 | .tooltipster-fall,.tooltipster-grow.tooltipster-show{-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1);-moz-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-ms-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-o-transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-base{display:flex;pointer-events:none;position:absolute}.tooltipster-box{flex:1 1 auto}.tooltipster-content{box-sizing:border-box;max-height:100%;max-width:100%;overflow:auto}.tooltipster-ruler{bottom:0;left:0;overflow:hidden;position:fixed;right:0;top:0;visibility:hidden}.tooltipster-fade{opacity:0;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;-ms-transition-property:opacity;transition-property:opacity}.tooltipster-fade.tooltipster-show{opacity:1}.tooltipster-grow{-webkit-transform:scale(0,0);-moz-transform:scale(0,0);-o-transform:scale(0,0);-ms-transform:scale(0,0);transform:scale(0,0);-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-backface-visibility:hidden}.tooltipster-grow.tooltipster-show{-webkit-transform:scale(1,1);-moz-transform:scale(1,1);-o-transform:scale(1,1);-ms-transform:scale(1,1);transform:scale(1,1);-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-swing{opacity:0;-webkit-transform:rotateZ(4deg);-moz-transform:rotateZ(4deg);-o-transform:rotateZ(4deg);-ms-transform:rotateZ(4deg);transform:rotateZ(4deg);-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform}.tooltipster-swing.tooltipster-show{opacity:1;-webkit-transform:rotateZ(0);-moz-transform:rotateZ(0);-o-transform:rotateZ(0);-ms-transform:rotateZ(0);transform:rotateZ(0);-webkit-transition-timing-function:cubic-bezier(.23,.635,.495,1);-webkit-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-moz-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-ms-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-o-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);transition-timing-function:cubic-bezier(.23,.635,.495,2.4)}.tooltipster-fall{-webkit-transition-property:top;-moz-transition-property:top;-o-transition-property:top;-ms-transition-property:top;transition-property:top;-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-fall.tooltipster-initial{top:0!important}.tooltipster-fall.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;top:0!important;opacity:0}.tooltipster-slide{-webkit-transition-property:left;-moz-transition-property:left;-o-transition-property:left;-ms-transition-property:left;transition-property:left;-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-moz-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-ms-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-o-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-slide.tooltipster-initial{left:-40px!important}.tooltipster-slide.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;left:0!important;opacity:0}@keyframes tooltipster-fading{0%{opacity:0}100%{opacity:1}}.tooltipster-update-fade{animation:tooltipster-fading .4s}@keyframes tooltipster-rotating{25%{transform:rotate(-2deg)}75%{transform:rotate(2deg)}100%{transform:rotate(0)}}.tooltipster-update-rotate{animation:tooltipster-rotating .6s}@keyframes tooltipster-scaling{50%{transform:scale(1.1)}100%{transform:scale(1)}}.tooltipster-update-scale{animation:tooltipster-scaling .6s} -------------------------------------------------------------------------------- /tooltipster/dist/js/plugins/tooltipster/SVG/tooltipster-SVG.js: -------------------------------------------------------------------------------- 1 | (function (root, factory) { 2 | if (typeof define === 'function' && define.amd) { 3 | // AMD. Register as an anonymous module unless amdModuleId is set 4 | define(["tooltipster"], function (a0) { 5 | return (factory(a0)); 6 | }); 7 | } else if (typeof exports === 'object') { 8 | // Node. Does not work with strict CommonJS, but 9 | // only CommonJS-like environments that support module.exports, 10 | // like Node. 11 | module.exports = factory(require("tooltipster")); 12 | } else { 13 | factory(jQuery); 14 | } 15 | }(this, function ($) { 16 | 17 | (function (root, factory) { 18 | if (typeof define === 'function' && define.amd) { 19 | // AMD. Register as an anonymous module unless amdModuleId is set 20 | define(["jquery"], function (a0) { 21 | return (factory(a0)); 22 | }); 23 | } else if (typeof exports === 'object') { 24 | // Node. Does not work with strict CommonJS, but 25 | // only CommonJS-like environments that support module.exports, 26 | // like Node. 27 | module.exports = factory(require("jquery")); 28 | } else { 29 | factory(jQuery); 30 | } 31 | }(this, function ($) { 32 | 33 | var pluginName = 'tooltipster.SVG'; 34 | 35 | $.tooltipster._plugin({ 36 | name: pluginName, 37 | core: { 38 | __init: function() { 39 | 40 | $.tooltipster._on('init', function(event) { 41 | 42 | var win = $.tooltipster._env.window; 43 | 44 | if ( win.SVGElement 45 | && event.origin instanceof win.SVGElement 46 | ) { 47 | 48 | // auto-activation of the plugin on the instance 49 | event.instance._plug(pluginName); 50 | } 51 | }); 52 | } 53 | }, 54 | instance: { 55 | __init: function(instance) { 56 | 57 | var self = this; 58 | 59 | //list of instance variables 60 | self.__hadTitleTag = false; 61 | self.__instance = instance; 62 | 63 | // jQuery < v3.0's addClass and hasClass do not work on SVG elements. 64 | // However, $('.tooltipstered') does find elements having the class. 65 | if (!self.__instance._$origin.hasClass('tooltipstered')) { 66 | 67 | var c = self.__instance._$origin.attr('class') || ''; 68 | 69 | if (c.indexOf('tooltipstered') == -1) { 70 | self.__instance._$origin.attr('class', c + ' tooltipstered'); 71 | } 72 | } 73 | 74 | // if there is no content yet, let's look for a child element 75 | if (self.__instance.content() === null) { 76 | 77 | // TODO: when there are several <title> tags (not supported in 78 | // today's browsers yet though, still an RFC draft), pick the right 79 | // one based on its "lang" attribute 80 | var $title = self.__instance._$origin.find('>title'); 81 | 82 | if ($title[0]) { 83 | 84 | var title = $title.text(); 85 | 86 | self.__hadTitleTag = true; 87 | self.__instance._$origin.data('tooltipster-initialTitle', title); 88 | self.__instance.content(title); 89 | 90 | $title.remove(); 91 | } 92 | } 93 | 94 | // rectify the geometry if SVG.js and its screenBBox plugin have been included 95 | self.__instance 96 | ._on('geometry.'+ self.namespace, function(event) { 97 | 98 | var win = $.tooltipster._env.window; 99 | 100 | // SVG coordinates may need fixing but we need svg.screenbox.js 101 | // to provide it. SVGElement is IE8+ 102 | if (win.SVG.svgjs) { 103 | 104 | if (!win.SVG.parser) { 105 | win.SVG.prepare(); 106 | } 107 | 108 | var svgEl = win.SVG.adopt(event.origin); 109 | 110 | // not all figures need (and have) screenBBox 111 | if (svgEl && svgEl.screenBBox) { 112 | 113 | var bbox = svgEl.screenBBox(); 114 | 115 | event.edit({ 116 | height: bbox.height, 117 | left: bbox.x, 118 | top: bbox.y, 119 | width: bbox.width 120 | }); 121 | } 122 | } 123 | }) 124 | // if jQuery < v3.0, we have to remove the class ourselves 125 | ._on('destroy.'+ self.namespace, function() { 126 | self.__destroy(); 127 | }); 128 | }, 129 | 130 | __destroy: function() { 131 | 132 | var self = this; 133 | 134 | if (!self.__instance._$origin.hasClass('tooltipstered')) { 135 | var c = self.__instance._$origin.attr('class').replace('tooltipstered', ''); 136 | self.__instance._$origin.attr('class', c); 137 | } 138 | 139 | self.__instance._off('.'+ self.namespace); 140 | 141 | // if the content was provided as a title tag, we may need to restore it 142 | if (self.__hadTitleTag) { 143 | 144 | // this must happen after Tooltipster restored (or not) the title attr 145 | self.__instance.one('destroyed', function() { 146 | 147 | // if a title attribute was restored, we just need to replace it with a tag 148 | var title = self.__instance._$origin.attr('title'); 149 | 150 | if (title) { 151 | 152 | // must be namespaced to work 153 | $(document.createElementNS('http://www.w3.org/2000/svg', 'title')) 154 | .text(title) 155 | .appendTo(self.__instance._$origin); 156 | 157 | self.__instance._$origin.removeAttr('title'); 158 | } 159 | }); 160 | } 161 | } 162 | } 163 | }); 164 | 165 | /* a build task will add "return $;" here */ 166 | return $; 167 | 168 | })); 169 | 170 | 171 | })); 172 | -------------------------------------------------------------------------------- /tooltipster/dist/js/plugins/tooltipster/SVG/tooltipster-SVG.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define(["tooltipster"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("tooltipster")):b(jQuery)}(this,function(a){!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){var b="tooltipster.SVG";return a.tooltipster._plugin({name:b,core:{__init:function(){a.tooltipster._on("init",function(c){var d=a.tooltipster._env.window;d.SVGElement&&c.origin instanceof d.SVGElement&&c.instance._plug(b)})}},instance:{__init:function(b){var c=this;if(c.__hadTitleTag=!1,c.__instance=b,!c.__instance._$origin.hasClass("tooltipstered")){var d=c.__instance._$origin.attr("class")||"";-1==d.indexOf("tooltipstered")&&c.__instance._$origin.attr("class",d+" tooltipstered")}if(null===c.__instance.content()){var e=c.__instance._$origin.find(">title");if(e[0]){var f=e.text();c.__hadTitleTag=!0,c.__instance._$origin.data("tooltipster-initialTitle",f),c.__instance.content(f),e.remove()}}c.__instance._on("geometry."+c.namespace,function(b){var c=a.tooltipster._env.window;if(c.SVG.svgjs){c.SVG.parser||c.SVG.prepare();var d=c.SVG.adopt(b.origin);if(d&&d.screenBBox){var e=d.screenBBox();b.edit({height:e.height,left:e.x,top:e.y,width:e.width})}}})._on("destroy."+c.namespace,function(){c.__destroy()})},__destroy:function(){var b=this;if(!b.__instance._$origin.hasClass("tooltipstered")){var c=b.__instance._$origin.attr("class").replace("tooltipstered","");b.__instance._$origin.attr("class",c)}b.__instance._off("."+b.namespace),b.__hadTitleTag&&b.__instance.one("destroyed",function(){var c=b.__instance._$origin.attr("title");c&&(a(document.createElementNS("http://www.w3.org/2000/svg","title")).text(c).appendTo(b.__instance._$origin),b.__instance._$origin.removeAttr("title"))})}}}),a})}); -------------------------------------------------------------------------------- /tooltipster/dist/js/tooltipster.main.min.js: -------------------------------------------------------------------------------- 1 | /*! tooltipster v4.2.7 */!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){function b(a){this.$container,this.constraints=null,this.__$tooltip,this.__init(a)}function c(b,c){var d=!0;return a.each(b,function(a,e){return void 0===c[a]||b[a]!==c[a]?(d=!1,!1):void 0}),d}function d(b){var c=b.attr("id"),d=c?h.window.document.getElementById(c):null;return d?d===b[0]:a.contains(h.window.document.body,b[0])}function e(){if(!g)return!1;var a=g.document.body||g.document.documentElement,b=a.style,c="transition",d=["Moz","Webkit","Khtml","O","ms"];if("string"==typeof b[c])return!0;c=c.charAt(0).toUpperCase()+c.substr(1);for(var e=0;e<d.length;e++)if("string"==typeof b[d[e]+c])return!0;return!1}var f={animation:"fade",animationDuration:350,content:null,contentAsHTML:!1,contentCloning:!1,debug:!0,delay:300,delayTouch:[300,500],functionInit:null,functionBefore:null,functionReady:null,functionAfter:null,functionFormat:null,IEmin:6,interactive:!1,multiple:!1,parent:null,plugins:["sideTip"],repositionOnScroll:!1,restoration:"none",selfDestruction:!0,theme:[],timer:0,trackerInterval:500,trackOrigin:!1,trackTooltip:!1,trigger:"hover",triggerClose:{click:!1,mouseleave:!1,originClick:!1,scroll:!1,tap:!1,touchleave:!1},triggerOpen:{click:!1,mouseenter:!1,tap:!1,touchstart:!1},updateAnimation:"rotate",zIndex:9999999},g="undefined"!=typeof window?window:null,h={hasTouchCapability:!(!g||!("ontouchstart"in g||g.DocumentTouch&&g.document instanceof g.DocumentTouch||g.navigator.maxTouchPoints)),hasTransitions:e(),IE:!1,semVer:"4.2.7",window:g},i=function(){this.__$emitterPrivate=a({}),this.__$emitterPublic=a({}),this.__instancesLatestArr=[],this.__plugins={},this._env=h};i.prototype={__bridge:function(b,c,d){if(!c[d]){var e=function(){};e.prototype=b;var g=new e;g.__init&&g.__init(c),a.each(b,function(a,b){0!=a.indexOf("__")&&(c[a]?f.debug&&console.log("The "+a+" method of the "+d+" plugin conflicts with another plugin or native methods"):(c[a]=function(){return g[a].apply(g,Array.prototype.slice.apply(arguments))},c[a].bridged=g))}),c[d]=g}return this},__setWindow:function(a){return h.window=a,this},_getRuler:function(a){return new b(a)},_off:function(){return this.__$emitterPrivate.off.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_on:function(){return this.__$emitterPrivate.on.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_one:function(){return this.__$emitterPrivate.one.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_plugin:function(b){var c=this;if("string"==typeof b){var d=b,e=null;return d.indexOf(".")>0?e=c.__plugins[d]:a.each(c.__plugins,function(a,b){return b.name.substring(b.name.length-d.length-1)=="."+d?(e=b,!1):void 0}),e}if(b.name.indexOf(".")<0)throw new Error("Plugins must be namespaced");return c.__plugins[b.name]=b,b.core&&c.__bridge(b.core,c,b.name),this},_trigger:function(){var a=Array.prototype.slice.apply(arguments);return"string"==typeof a[0]&&(a[0]={type:a[0]}),this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,a),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,a),this},instances:function(b){var c=[],d=b||".tooltipstered";return a(d).each(function(){var b=a(this),d=b.data("tooltipster-ns");d&&a.each(d,function(a,d){c.push(b.data(d))})}),c},instancesLatest:function(){return this.__instancesLatestArr},off:function(){return this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},origins:function(b){var c=b?b+" ":"";return a(c+".tooltipstered").toArray()},setDefaults:function(b){return a.extend(f,b),this},triggerHandler:function(){return this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.tooltipster=new i,a.Tooltipster=function(b,c){this.__callbacks={close:[],open:[]},this.__closingTime,this.__Content,this.__contentBcr,this.__destroyed=!1,this.__$emitterPrivate=a({}),this.__$emitterPublic=a({}),this.__enabled=!0,this.__garbageCollector,this.__Geometry,this.__lastPosition,this.__namespace="tooltipster-"+Math.round(1e6*Math.random()),this.__options,this.__$originParents,this.__pointerIsOverOrigin=!1,this.__previousThemes=[],this.__state="closed",this.__timeouts={close:[],open:null},this.__touchEvents=[],this.__tracker=null,this._$origin,this._$tooltip,this.__init(b,c)},a.Tooltipster.prototype={__init:function(b,c){var d=this;if(d._$origin=a(b),d.__options=a.extend(!0,{},f,c),d.__optionsFormat(),!h.IE||h.IE>=d.__options.IEmin){var e=null;if(void 0===d._$origin.data("tooltipster-initialTitle")&&(e=d._$origin.attr("title"),void 0===e&&(e=null),d._$origin.data("tooltipster-initialTitle",e)),null!==d.__options.content)d.__contentSet(d.__options.content);else{var g,i=d._$origin.attr("data-tooltip-content");i&&(g=a(i)),g&&g[0]?d.__contentSet(g.first()):d.__contentSet(e)}d._$origin.removeAttr("title").addClass("tooltipstered"),d.__prepareOrigin(),d.__prepareGC(),a.each(d.__options.plugins,function(a,b){d._plug(b)}),h.hasTouchCapability&&a(h.window.document.body).on("touchmove."+d.__namespace+"-triggerOpen",function(a){d._touchRecordEvent(a)}),d._on("created",function(){d.__prepareTooltip()})._on("repositioned",function(a){d.__lastPosition=a.position})}else d.__options.disabled=!0},__contentInsert:function(){var a=this,b=a._$tooltip.find(".tooltipster-content"),c=a.__Content,d=function(a){c=a};return a._trigger({type:"format",content:a.__Content,format:d}),a.__options.functionFormat&&(c=a.__options.functionFormat.call(a,a,{origin:a._$origin[0]},a.__Content)),"string"!=typeof c||a.__options.contentAsHTML?b.empty().append(c):b.text(c),a},__contentSet:function(b){return b instanceof a&&this.__options.contentCloning&&(b=b.clone(!0)),this.__Content=b,this._trigger({type:"updated",content:b}),this},__destroyError:function(){throw new Error("This tooltip has been destroyed and cannot execute your method call.")},__geometry:function(){var b=this,c=b._$origin,d=b._$origin.is("area");if(d){var e=b._$origin.parent().attr("name");c=a('img[usemap="#'+e+'"]')}var f=c[0].getBoundingClientRect(),g=a(h.window.document),i=a(h.window),j=c,k={available:{document:null,window:null},document:{size:{height:g.height(),width:g.width()}},window:{scroll:{left:h.window.scrollX||h.window.document.documentElement.scrollLeft,top:h.window.scrollY||h.window.document.documentElement.scrollTop},size:{height:i.height(),width:i.width()}},origin:{fixedLineage:!1,offset:{},size:{height:f.bottom-f.top,width:f.right-f.left},usemapImage:d?c[0]:null,windowOffset:{bottom:f.bottom,left:f.left,right:f.right,top:f.top}}};if(d){var l=b._$origin.attr("shape"),m=b._$origin.attr("coords");if(m&&(m=m.split(","),a.map(m,function(a,b){m[b]=parseInt(a)})),"default"!=l)switch(l){case"circle":var n=m[0],o=m[1],p=m[2],q=o-p,r=n-p;k.origin.size.height=2*p,k.origin.size.width=k.origin.size.height,k.origin.windowOffset.left+=r,k.origin.windowOffset.top+=q;break;case"rect":var s=m[0],t=m[1],u=m[2],v=m[3];k.origin.size.height=v-t,k.origin.size.width=u-s,k.origin.windowOffset.left+=s,k.origin.windowOffset.top+=t;break;case"poly":for(var w=0,x=0,y=0,z=0,A="even",B=0;B<m.length;B++){var C=m[B];"even"==A?(C>y&&(y=C,0===B&&(w=y)),w>C&&(w=C),A="odd"):(C>z&&(z=C,1==B&&(x=z)),x>C&&(x=C),A="even")}k.origin.size.height=z-x,k.origin.size.width=y-w,k.origin.windowOffset.left+=w,k.origin.windowOffset.top+=x}}var D=function(a){k.origin.size.height=a.height,k.origin.windowOffset.left=a.left,k.origin.windowOffset.top=a.top,k.origin.size.width=a.width};for(b._trigger({type:"geometry",edit:D,geometry:{height:k.origin.size.height,left:k.origin.windowOffset.left,top:k.origin.windowOffset.top,width:k.origin.size.width}}),k.origin.windowOffset.right=k.origin.windowOffset.left+k.origin.size.width,k.origin.windowOffset.bottom=k.origin.windowOffset.top+k.origin.size.height,k.origin.offset.left=k.origin.windowOffset.left+k.window.scroll.left,k.origin.offset.top=k.origin.windowOffset.top+k.window.scroll.top,k.origin.offset.bottom=k.origin.offset.top+k.origin.size.height,k.origin.offset.right=k.origin.offset.left+k.origin.size.width,k.available.document={bottom:{height:k.document.size.height-k.origin.offset.bottom,width:k.document.size.width},left:{height:k.document.size.height,width:k.origin.offset.left},right:{height:k.document.size.height,width:k.document.size.width-k.origin.offset.right},top:{height:k.origin.offset.top,width:k.document.size.width}},k.available.window={bottom:{height:Math.max(k.window.size.height-Math.max(k.origin.windowOffset.bottom,0),0),width:k.window.size.width},left:{height:k.window.size.height,width:Math.max(k.origin.windowOffset.left,0)},right:{height:k.window.size.height,width:Math.max(k.window.size.width-Math.max(k.origin.windowOffset.right,0),0)},top:{height:Math.max(k.origin.windowOffset.top,0),width:k.window.size.width}};"html"!=j[0].tagName.toLowerCase();){if("fixed"==j.css("position")){k.origin.fixedLineage=!0;break}j=j.parent()}return k},__optionsFormat:function(){return"number"==typeof this.__options.animationDuration&&(this.__options.animationDuration=[this.__options.animationDuration,this.__options.animationDuration]),"number"==typeof this.__options.delay&&(this.__options.delay=[this.__options.delay,this.__options.delay]),"number"==typeof this.__options.delayTouch&&(this.__options.delayTouch=[this.__options.delayTouch,this.__options.delayTouch]),"string"==typeof this.__options.theme&&(this.__options.theme=[this.__options.theme]),null===this.__options.parent?this.__options.parent=a(h.window.document.body):"string"==typeof this.__options.parent&&(this.__options.parent=a(this.__options.parent)),"hover"==this.__options.trigger?(this.__options.triggerOpen={mouseenter:!0,touchstart:!0},this.__options.triggerClose={mouseleave:!0,originClick:!0,touchleave:!0}):"click"==this.__options.trigger&&(this.__options.triggerOpen={click:!0,tap:!0},this.__options.triggerClose={click:!0,tap:!0}),this._trigger("options"),this},__prepareGC:function(){var b=this;return b.__options.selfDestruction?b.__garbageCollector=setInterval(function(){var c=(new Date).getTime();b.__touchEvents=a.grep(b.__touchEvents,function(a,b){return c-a.time>6e4}),d(b._$origin)||b.close(function(){b.destroy()})},2e4):clearInterval(b.__garbageCollector),b},__prepareOrigin:function(){var a=this;if(a._$origin.off("."+a.__namespace+"-triggerOpen"),h.hasTouchCapability&&a._$origin.on("touchstart."+a.__namespace+"-triggerOpen touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen",function(b){a._touchRecordEvent(b)}),a.__options.triggerOpen.click||a.__options.triggerOpen.tap&&h.hasTouchCapability){var b="";a.__options.triggerOpen.click&&(b+="click."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.tap&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&a._open(b)})}if(a.__options.triggerOpen.mouseenter||a.__options.triggerOpen.touchstart&&h.hasTouchCapability){var b="";a.__options.triggerOpen.mouseenter&&(b+="mouseenter."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.touchstart&&h.hasTouchCapability&&(b+="touchstart."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){!a._touchIsTouchEvent(b)&&a._touchIsEmulatedEvent(b)||(a.__pointerIsOverOrigin=!0,a._openShortly(b))})}if(a.__options.triggerClose.mouseleave||a.__options.triggerClose.touchleave&&h.hasTouchCapability){var b="";a.__options.triggerClose.mouseleave&&(b+="mouseleave."+a.__namespace+"-triggerOpen "),a.__options.triggerClose.touchleave&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&(a.__pointerIsOverOrigin=!1)})}return a},__prepareTooltip:function(){var b=this,c=b.__options.interactive?"auto":"";return b._$tooltip.attr("id",b.__namespace).css({"pointer-events":c,zIndex:b.__options.zIndex}),a.each(b.__previousThemes,function(a,c){b._$tooltip.removeClass(c)}),a.each(b.__options.theme,function(a,c){b._$tooltip.addClass(c)}),b.__previousThemes=a.merge([],b.__options.theme),b},__scrollHandler:function(b){var c=this;if(c.__options.triggerClose.scroll)c._close(b);else if(d(c._$origin)&&d(c._$tooltip)){var e=null;if(b.target===h.window.document)c.__Geometry.origin.fixedLineage||c.__options.repositionOnScroll&&c.reposition(b);else{e=c.__geometry();var f=!1;if("fixed"!=c._$origin.css("position")&&c.__$originParents.each(function(b,c){var d=a(c),g=d.css("overflow-x"),h=d.css("overflow-y");if("visible"!=g||"visible"!=h){var i=c.getBoundingClientRect();if("visible"!=g&&(e.origin.windowOffset.left<i.left||e.origin.windowOffset.right>i.right))return f=!0,!1;if("visible"!=h&&(e.origin.windowOffset.top<i.top||e.origin.windowOffset.bottom>i.bottom))return f=!0,!1}return"fixed"==d.css("position")?!1:void 0}),f)c._$tooltip.css("visibility","hidden");else if(c._$tooltip.css("visibility","visible"),c.__options.repositionOnScroll)c.reposition(b);else{var g=e.origin.offset.left-c.__Geometry.origin.offset.left,i=e.origin.offset.top-c.__Geometry.origin.offset.top;c._$tooltip.css({left:c.__lastPosition.coord.left+g,top:c.__lastPosition.coord.top+i})}}c._trigger({type:"scroll",event:b,geo:e})}return c},__stateSet:function(a){return this.__state=a,this._trigger({type:"state",state:a}),this},__timeoutsClear:function(){return clearTimeout(this.__timeouts.open),this.__timeouts.open=null,a.each(this.__timeouts.close,function(a,b){clearTimeout(b)}),this.__timeouts.close=[],this},__trackerStart:function(){var a=this,b=a._$tooltip.find(".tooltipster-content");return a.__options.trackTooltip&&(a.__contentBcr=b[0].getBoundingClientRect()),a.__tracker=setInterval(function(){if(d(a._$origin)&&d(a._$tooltip)){if(a.__options.trackOrigin){var e=a.__geometry(),f=!1;c(e.origin.size,a.__Geometry.origin.size)&&(a.__Geometry.origin.fixedLineage?c(e.origin.windowOffset,a.__Geometry.origin.windowOffset)&&(f=!0):c(e.origin.offset,a.__Geometry.origin.offset)&&(f=!0)),f||(a.__options.triggerClose.mouseleave?a._close():a.reposition())}if(a.__options.trackTooltip){var g=b[0].getBoundingClientRect();g.height===a.__contentBcr.height&&g.width===a.__contentBcr.width||(a.reposition(),a.__contentBcr=g)}}else a._close()},a.__options.trackerInterval),a},_close:function(b,c,d){var e=this,f=!0;if(e._trigger({type:"close",event:b,stop:function(){f=!1}}),f||d){c&&e.__callbacks.close.push(c),e.__callbacks.open=[],e.__timeoutsClear();var g=function(){a.each(e.__callbacks.close,function(a,c){c.call(e,e,{event:b,origin:e._$origin[0]})}),e.__callbacks.close=[]};if("closed"!=e.__state){var i=!0,j=new Date,k=j.getTime(),l=k+e.__options.animationDuration[1];if("disappearing"==e.__state&&l>e.__closingTime&&e.__options.animationDuration[1]>0&&(i=!1),i){e.__closingTime=l,"disappearing"!=e.__state&&e.__stateSet("disappearing");var m=function(){clearInterval(e.__tracker),e._trigger({type:"closing",event:b}),e._$tooltip.off("."+e.__namespace+"-triggerClose").removeClass("tooltipster-dying"),a(h.window).off("."+e.__namespace+"-triggerClose"),e.__$originParents.each(function(b,c){a(c).off("scroll."+e.__namespace+"-triggerClose")}),e.__$originParents=null,a(h.window.document.body).off("."+e.__namespace+"-triggerClose"),e._$origin.off("."+e.__namespace+"-triggerClose"),e._off("dismissable"),e.__stateSet("closed"),e._trigger({type:"after",event:b}),e.__options.functionAfter&&e.__options.functionAfter.call(e,e,{event:b,origin:e._$origin[0]}),g()};h.hasTransitions?(e._$tooltip.css({"-moz-animation-duration":e.__options.animationDuration[1]+"ms","-ms-animation-duration":e.__options.animationDuration[1]+"ms","-o-animation-duration":e.__options.animationDuration[1]+"ms","-webkit-animation-duration":e.__options.animationDuration[1]+"ms","animation-duration":e.__options.animationDuration[1]+"ms","transition-duration":e.__options.animationDuration[1]+"ms"}),e._$tooltip.clearQueue().removeClass("tooltipster-show").addClass("tooltipster-dying"),e.__options.animationDuration[1]>0&&e._$tooltip.delay(e.__options.animationDuration[1]),e._$tooltip.queue(m)):e._$tooltip.stop().fadeOut(e.__options.animationDuration[1],m)}}else g()}return e},_off:function(){return this.__$emitterPrivate.off.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_on:function(){return this.__$emitterPrivate.on.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_one:function(){return this.__$emitterPrivate.one.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_open:function(b,c){var e=this;if(!e.__destroying&&d(e._$origin)&&e.__enabled){var f=!0;if("closed"==e.__state&&(e._trigger({type:"before",event:b,stop:function(){f=!1}}),f&&e.__options.functionBefore&&(f=e.__options.functionBefore.call(e,e,{event:b,origin:e._$origin[0]}))),f!==!1&&null!==e.__Content){c&&e.__callbacks.open.push(c),e.__callbacks.close=[],e.__timeoutsClear();var g,i=function(){"stable"!=e.__state&&e.__stateSet("stable"),a.each(e.__callbacks.open,function(a,b){b.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}),e.__callbacks.open=[]};if("closed"!==e.__state)g=0,"disappearing"===e.__state?(e.__stateSet("appearing"),h.hasTransitions?(e._$tooltip.clearQueue().removeClass("tooltipster-dying").addClass("tooltipster-show"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i)):e._$tooltip.stop().fadeIn(i)):"stable"==e.__state&&i();else{if(e.__stateSet("appearing"),g=e.__options.animationDuration[0],e.__contentInsert(),e.reposition(b,!0),h.hasTransitions?(e._$tooltip.addClass("tooltipster-"+e.__options.animation).addClass("tooltipster-initial").css({"-moz-animation-duration":e.__options.animationDuration[0]+"ms","-ms-animation-duration":e.__options.animationDuration[0]+"ms","-o-animation-duration":e.__options.animationDuration[0]+"ms","-webkit-animation-duration":e.__options.animationDuration[0]+"ms","animation-duration":e.__options.animationDuration[0]+"ms","transition-duration":e.__options.animationDuration[0]+"ms"}),setTimeout(function(){"closed"!=e.__state&&(e._$tooltip.addClass("tooltipster-show").removeClass("tooltipster-initial"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i))},0)):e._$tooltip.css("display","none").fadeIn(e.__options.animationDuration[0],i),e.__trackerStart(),a(h.window).on("resize."+e.__namespace+"-triggerClose",function(b){var c=a(document.activeElement);(c.is("input")||c.is("textarea"))&&a.contains(e._$tooltip[0],c[0])||e.reposition(b)}).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)}),e.__$originParents=e._$origin.parents(),e.__$originParents.each(function(b,c){a(c).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)})}),e.__options.triggerClose.mouseleave||e.__options.triggerClose.touchleave&&h.hasTouchCapability){e._on("dismissable",function(a){a.dismissable?a.delay?(m=setTimeout(function(){e._close(a.event)},a.delay),e.__timeouts.close.push(m)):e._close(a):clearTimeout(m)});var j=e._$origin,k="",l="",m=null;e.__options.interactive&&(j=j.add(e._$tooltip)),e.__options.triggerClose.mouseleave&&(k+="mouseenter."+e.__namespace+"-triggerClose ",l+="mouseleave."+e.__namespace+"-triggerClose "),e.__options.triggerClose.touchleave&&h.hasTouchCapability&&(k+="touchstart."+e.__namespace+"-triggerClose",l+="touchend."+e.__namespace+"-triggerClose touchcancel."+e.__namespace+"-triggerClose"),j.on(l,function(a){if(e._touchIsTouchEvent(a)||!e._touchIsEmulatedEvent(a)){var b="mouseleave"==a.type?e.__options.delay:e.__options.delayTouch;e._trigger({delay:b[1],dismissable:!0,event:a,type:"dismissable"})}}).on(k,function(a){!e._touchIsTouchEvent(a)&&e._touchIsEmulatedEvent(a)||e._trigger({dismissable:!1,event:a,type:"dismissable"})})}e.__options.triggerClose.originClick&&e._$origin.on("click."+e.__namespace+"-triggerClose",function(a){e._touchIsTouchEvent(a)||e._touchIsEmulatedEvent(a)||e._close(a)}),(e.__options.triggerClose.click||e.__options.triggerClose.tap&&h.hasTouchCapability)&&setTimeout(function(){if("closed"!=e.__state){var b="",c=a(h.window.document.body);e.__options.triggerClose.click&&(b+="click."+e.__namespace+"-triggerClose "),e.__options.triggerClose.tap&&h.hasTouchCapability&&(b+="touchend."+e.__namespace+"-triggerClose"),c.on(b,function(b){e._touchIsMeaningfulEvent(b)&&(e._touchRecordEvent(b),e.__options.interactive&&a.contains(e._$tooltip[0],b.target)||e._close(b))}),e.__options.triggerClose.tap&&h.hasTouchCapability&&c.on("touchstart."+e.__namespace+"-triggerClose",function(a){e._touchRecordEvent(a)})}},0),e._trigger("ready"),e.__options.functionReady&&e.__options.functionReady.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}if(e.__options.timer>0){var m=setTimeout(function(){e._close()},e.__options.timer+g);e.__timeouts.close.push(m)}}}return e},_openShortly:function(a){var b=this,c=!0;if("stable"!=b.__state&&"appearing"!=b.__state&&!b.__timeouts.open&&(b._trigger({type:"start",event:a,stop:function(){c=!1}}),c)){var d=0==a.type.indexOf("touch")?b.__options.delayTouch:b.__options.delay;d[0]?b.__timeouts.open=setTimeout(function(){b.__timeouts.open=null,b.__pointerIsOverOrigin&&b._touchIsMeaningfulEvent(a)?(b._trigger("startend"),b._open(a)):b._trigger("startcancel")},d[0]):(b._trigger("startend"),b._open(a))}return b},_optionsExtract:function(b,c){var d=this,e=a.extend(!0,{},c),f=d.__options[b];return f||(f={},a.each(c,function(a,b){var c=d.__options[a];void 0!==c&&(f[a]=c)})),a.each(e,function(b,c){void 0!==f[b]&&("object"!=typeof c||c instanceof Array||null==c||"object"!=typeof f[b]||f[b]instanceof Array||null==f[b]?e[b]=f[b]:a.extend(e[b],f[b]))}),e},_plug:function(b){var c=a.tooltipster._plugin(b);if(!c)throw new Error('The "'+b+'" plugin is not defined');return c.instance&&a.tooltipster.__bridge(c.instance,this,c.name),this},_touchIsEmulatedEvent:function(a){for(var b=!1,c=(new Date).getTime(),d=this.__touchEvents.length-1;d>=0;d--){var e=this.__touchEvents[d];if(!(c-e.time<500))break;e.target===a.target&&(b=!0)}return b},_touchIsMeaningfulEvent:function(a){return this._touchIsTouchEvent(a)&&!this._touchSwiped(a.target)||!this._touchIsTouchEvent(a)&&!this._touchIsEmulatedEvent(a)},_touchIsTouchEvent:function(a){return 0==a.type.indexOf("touch")},_touchRecordEvent:function(a){return this._touchIsTouchEvent(a)&&(a.time=(new Date).getTime(),this.__touchEvents.push(a)),this},_touchSwiped:function(a){for(var b=!1,c=this.__touchEvents.length-1;c>=0;c--){var d=this.__touchEvents[c];if("touchmove"==d.type){b=!0;break}if("touchstart"==d.type&&a===d.target)break}return b},_trigger:function(){var b=Array.prototype.slice.apply(arguments);return"string"==typeof b[0]&&(b[0]={type:b[0]}),b[0].instance=this,b[0].origin=this._$origin?this._$origin[0]:null,b[0].tooltip=this._$tooltip?this._$tooltip[0]:null,this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,b),a.tooltipster._trigger.apply(a.tooltipster,b),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,b),this},_unplug:function(b){var c=this;if(c[b]){var d=a.tooltipster._plugin(b);d.instance&&a.each(d.instance,function(a,d){c[a]&&c[a].bridged===c[b]&&delete c[a]}),c[b].__destroy&&c[b].__destroy(),delete c[b]}return c},close:function(a){return this.__destroyed?this.__destroyError():this._close(null,a),this},content:function(a){var b=this;if(void 0===a)return b.__Content;if(b.__destroyed)b.__destroyError();else if(b.__contentSet(a),null!==b.__Content){if("closed"!==b.__state&&(b.__contentInsert(),b.reposition(),b.__options.updateAnimation))if(h.hasTransitions){var c=b.__options.updateAnimation;b._$tooltip.addClass("tooltipster-update-"+c),setTimeout(function(){"closed"!=b.__state&&b._$tooltip.removeClass("tooltipster-update-"+c)},1e3)}else b._$tooltip.fadeTo(200,.5,function(){"closed"!=b.__state&&b._$tooltip.fadeTo(200,1)})}else b._close();return b},destroy:function(){var b=this;if(b.__destroyed)b.__destroyError();else{"closed"!=b.__state?b.option("animationDuration",0)._close(null,null,!0):b.__timeoutsClear(),b._trigger("destroy"),b.__destroyed=!0,b._$origin.removeData(b.__namespace).off("."+b.__namespace+"-triggerOpen"),a(h.window.document.body).off("."+b.__namespace+"-triggerOpen");var c=b._$origin.data("tooltipster-ns");if(c)if(1===c.length){var d=null;"previous"==b.__options.restoration?d=b._$origin.data("tooltipster-initialTitle"):"current"==b.__options.restoration&&(d="string"==typeof b.__Content?b.__Content:a("<div></div>").append(b.__Content).html()),d&&b._$origin.attr("title",d),b._$origin.removeClass("tooltipstered"),b._$origin.removeData("tooltipster-ns").removeData("tooltipster-initialTitle")}else c=a.grep(c,function(a,c){return a!==b.__namespace}),b._$origin.data("tooltipster-ns",c);b._trigger("destroyed"),b._off(),b.off(),b.__Content=null,b.__$emitterPrivate=null,b.__$emitterPublic=null,b.__options.parent=null,b._$origin=null,b._$tooltip=null,a.tooltipster.__instancesLatestArr=a.grep(a.tooltipster.__instancesLatestArr,function(a,c){return b!==a}),clearInterval(b.__garbageCollector)}return b},disable:function(){return this.__destroyed?(this.__destroyError(),this):(this._close(),this.__enabled=!1,this)},elementOrigin:function(){return this.__destroyed?void this.__destroyError():this._$origin[0]},elementTooltip:function(){return this._$tooltip?this._$tooltip[0]:null},enable:function(){return this.__enabled=!0,this},hide:function(a){return this.close(a)},instance:function(){return this},off:function(){return this.__destroyed||this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},open:function(a){return this.__destroyed?this.__destroyError():this._open(null,a),this},option:function(b,c){return void 0===c?this.__options[b]:(this.__destroyed?this.__destroyError():(this.__options[b]=c,this.__optionsFormat(),a.inArray(b,["trigger","triggerClose","triggerOpen"])>=0&&this.__prepareOrigin(),"selfDestruction"===b&&this.__prepareGC()),this)},reposition:function(a,b){var c=this;return c.__destroyed?c.__destroyError():"closed"!=c.__state&&d(c._$origin)&&(b||d(c._$tooltip))&&(b||c._$tooltip.detach(),c.__Geometry=c.__geometry(),c._trigger({type:"reposition",event:a,helper:{geo:c.__Geometry}})),c},show:function(a){return this.open(a)},status:function(){return{destroyed:this.__destroyed,enabled:this.__enabled,open:"closed"!==this.__state,state:this.__state}},triggerHandler:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.fn.tooltipster=function(){var b=Array.prototype.slice.apply(arguments),c="You are using a single HTML element as content for several tooltips. You probably want to set the contentCloning option to TRUE.";if(0===this.length)return this;if("string"==typeof b[0]){var d="#*$~&";return this.each(function(){var e=a(this).data("tooltipster-ns"),f=e?a(this).data(e[0]):null;if(!f)throw new Error("You called Tooltipster's \""+b[0]+'" method on an uninitialized element');if("function"!=typeof f[b[0]])throw new Error('Unknown method "'+b[0]+'"');this.length>1&&"content"==b[0]&&(b[1]instanceof a||"object"==typeof b[1]&&null!=b[1]&&b[1].tagName)&&!f.__options.contentCloning&&f.__options.debug&&console.log(c);var g=f[b[0]](b[1],b[2]);return g!==f||"instance"===b[0]?(d=g,!1):void 0}),"#*$~&"!==d?d:this}a.tooltipster.__instancesLatestArr=[];var e=b[0]&&void 0!==b[0].multiple,g=e&&b[0].multiple||!e&&f.multiple,h=b[0]&&void 0!==b[0].content,i=h&&b[0].content||!h&&f.content,j=b[0]&&void 0!==b[0].contentCloning,k=j&&b[0].contentCloning||!j&&f.contentCloning,l=b[0]&&void 0!==b[0].debug,m=l&&b[0].debug||!l&&f.debug;return this.length>1&&(i instanceof a||"object"==typeof i&&null!=i&&i.tagName)&&!k&&m&&console.log(c),this.each(function(){var c=!1,d=a(this),e=d.data("tooltipster-ns"),f=null;e?g?c=!0:m&&(console.log("Tooltipster: one or more tooltips are already attached to the element below. Ignoring."),console.log(this)):c=!0,c&&(f=new a.Tooltipster(this,b[0]),e||(e=[]),e.push(f.__namespace),d.data("tooltipster-ns",e),d.data(f.__namespace,f),f.__options.functionInit&&f.__options.functionInit.call(f,f,{origin:this}),f._trigger("init")),a.tooltipster.__instancesLatestArr.push(f)}),this},b.prototype={__init:function(b){this.__$tooltip=b,this.__$tooltip.css({left:0,overflow:"hidden",position:"absolute",top:0}).find(".tooltipster-content").css("overflow","auto"),this.$container=a('<div class="tooltipster-ruler"></div>').append(this.__$tooltip).appendTo(h.window.document.body)},__forceRedraw:function(){var a=this.__$tooltip.parent();this.__$tooltip.detach(),this.__$tooltip.appendTo(a)},constrain:function(a,b){return this.constraints={width:a,height:b},this.__$tooltip.css({display:"block",height:"",overflow:"auto",width:a}),this},destroy:function(){this.__$tooltip.detach().find(".tooltipster-content").css({display:"",overflow:""}),this.$container.remove()},free:function(){return this.constraints=null,this.__$tooltip.css({display:"",height:"",overflow:"visible",width:""}),this},measure:function(){this.__forceRedraw();var a=this.__$tooltip[0].getBoundingClientRect(),b={size:{height:a.height||a.bottom-a.top,width:a.width||a.right-a.left}};if(this.constraints){var c=this.__$tooltip.find(".tooltipster-content"),d=this.__$tooltip.outerHeight(),e=c[0].getBoundingClientRect(),f={height:d<=this.constraints.height,width:a.width<=this.constraints.width&&e.width>=c[0].scrollWidth-1};b.fits=f.height&&f.width}return h.IE&&h.IE<=11&&b.size.width!==h.window.document.documentElement.clientWidth&&(b.size.width=Math.ceil(b.size.width)+1),b}};var j=navigator.userAgent.toLowerCase();-1!=j.indexOf("msie")?h.IE=parseInt(j.split("msie")[1]):-1!==j.toLowerCase().indexOf("trident")&&-1!==j.indexOf(" rv:11")?h.IE=11:-1!=j.toLowerCase().indexOf("edge/")&&(h.IE=parseInt(j.toLowerCase().split("edge/")[1]))}); -------------------------------------------------------------------------------- /tooltipster/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": { 3 | "name" : "Caleb Jacob", 4 | "email" : "hello@calebjacob.com", 5 | "url" : "http://calebjacob.com" 6 | }, 7 | "bugs": { 8 | "url": "https://github.com/iamceege/tooltipster/issues" 9 | }, 10 | "description": "A flexible and extensible jQuery plugin for modern tooltips.", 11 | "devDependencies": { 12 | "grunt": "1.5.3", 13 | "grunt-contrib-clean": "1.0.0", 14 | "grunt-contrib-compress": "1.2.0", 15 | "grunt-contrib-concat": "1.0.1", 16 | "grunt-contrib-copy": "1.0.0", 17 | "grunt-contrib-cssmin": "1.0.1", 18 | "grunt-contrib-uglify": "1.0.1", 19 | "grunt-string-replace": "1.2.1", 20 | "grunt-umd": "3.0.0" 21 | }, 22 | "homepage": "https://github.com/iamceege/tooltipster", 23 | "keywords": [ 24 | "ecosystem:jquery", 25 | "jquery-plugin", 26 | "tooltip", 27 | "tooltips" 28 | ], 29 | "license": "MIT", 30 | "main": "dist/js/tooltipster.bundle.min.js", 31 | "maintainers": [{ 32 | "name" : "Louis Ameline", 33 | "email" : "evangun2001@yahoo.fr", 34 | "url" : "https://github.com/louisameline" 35 | }], 36 | "name": "tooltipster", 37 | "peerDependencies": { 38 | "jquery": ">=1.11.0" 39 | }, 40 | "repository": { 41 | "type": "git", 42 | "url": "https://github.com/iamceege/tooltipster.git" 43 | }, 44 | "scripts": { 45 | "test": "echo \"Error: no test specified\" && exit 1" 46 | }, 47 | "version": "4.2.7" 48 | } 49 | --------------------------------------------------------------------------------