From 4a4d3a60bb384ba07875a3db08d085a469e2691b Mon Sep 17 00:00:00 2001
From: Xavier Morel <xmo@odoo.com>
Date: Mon, 19 Jan 2015 15:36:26 +0100
Subject: [PATCH] [IMP] doc: simplify webservice api doc

* remove ZeroClipboard, pain to test locally and deployment didn't work
  right due to needing absolute path to the swf always
* remove the clipboard alteration on the fly, behaves oddly and can be
  confusing
* add an explicit button to expand and collapse the setup content
* fixup some styling
---
 doc/_themes/odoodoc/layout.html               |   1 -
 doc/_themes/odoodoc/static/app.js             |  85 ++++------------
 doc/_themes/odoodoc/static/style.css          |  68 +++++--------
 doc/_themes/odoodoc/static/style.less         |  94 ++++++++----------
 .../zeroclipboard-2.1.6/ZeroClipboard.min.js  |   9 --
 .../zeroclipboard-2.1.6/ZeroClipboard.swf     | Bin 4036 -> 0 bytes
 6 files changed, 91 insertions(+), 166 deletions(-)
 delete mode 100644 doc/_themes/odoodoc/static/zeroclipboard-2.1.6/ZeroClipboard.min.js
 delete mode 100644 doc/_themes/odoodoc/static/zeroclipboard-2.1.6/ZeroClipboard.swf

diff --git a/doc/_themes/odoodoc/layout.html b/doc/_themes/odoodoc/layout.html
index b01eaf052163..af62f44bbb40 100644
--- a/doc/_themes/odoodoc/layout.html
+++ b/doc/_themes/odoodoc/layout.html
@@ -6,7 +6,6 @@
   '_static/bootstrap/js/tooltip.js',
   '_static/bootstrap/js/collapse.js',
   '_static/bootstrap/js/dropdown.js',
-  '_static/zeroclipboard-2.1.6/ZeroClipboard.min.js',
   '_static/app.js'
 ] %}
 
diff --git a/doc/_themes/odoodoc/static/app.js b/doc/_themes/odoodoc/static/app.js
index a0d7376530a4..208a29dcf42b 100644
--- a/doc/_themes/odoodoc/static/app.js
+++ b/doc/_themes/odoodoc/static/app.js
@@ -25,40 +25,6 @@ $(function () {
         });
     }, 100);
 
-    /*
-    for clipboard:
-    * add per-language setup code to document, hidden
-    * adds button to each switchable language block except when they're setup
-      stuff because fuck'em
-    * per-language, add clipboard hook to prefix with setup bit on-copy
-    * setup bit is... ?
-    * actually not all blocks because we don't want to add the setup bits to
-      the setup bits, so that's kinda shit
-     */
-
-    document.addEventListener('copy', copyCode);
-
-    ZeroClipboard.config({
-        swfPath: '../_static/zeroclipboard-2.1.6/ZeroClipboard.swf',
-        flashLoadTimeout: 3e3,
-    });
-    var zc = new ZeroClipboard();
-    zc.on('ready', function () {
-        var $highlighted = $('.switchable:not(.setup) .highlight').addClass('with-btn-clipboard');
-        var $clipboard_buttons =
-            $('<button type="button" class="btn-clipboard">Copy</button>')
-            .on('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function () {
-                $(this).removeClass('active');
-            })
-            .prependTo($highlighted);
-        zc.clip($clipboard_buttons);
-    });
-    zc.on('copy', function (e) {
-        // yellow flash
-        $(e.target).addClass('active');
-        copyCode(e);
-    });
-
     // stripe page stuff
     if ($('div.document-super').hasClass('stripe')) { (function () {
         // iterate on highlighted PL blocks (but not results because that'd
@@ -95,38 +61,31 @@ $(function () {
                 sheet.insertRule(sel + '{' + content + '}', lastIndex);
             });
         $switcher.affix();
-    })(); }
 
+        $('<button type="button" class="btn-show-setup">Toggle Setup Code</button>')
+            .prependTo('.switchable:not(.setup) .highlight');
+        $(document).on('click', '.btn-show-setup', function (e) {
+            var $target = $(e.target);
+            var target = $target.closest('.switchable:not(.setup)').get(0);
+            // not in a switchable (???)
+            if (!target) { return; }
+            var lang = getHighlightLanguage(target);
+            if (!lang) {
+                // switchable without highlight (e.g. language-specific notes),
+                // don't munge
+                return;
+            }
 
-    function copyCode(e) {
-        // works for both C-c and "Copy" button if copy button is injected
-        // inside highlighted code section
-        var target = $(e.target).closest('.switchable:not(.setup)').get(0);
-        // not in a switchable
-        if (!target) { return; }
-        var lang = getHighlightLanguage(target);
-        if (!lang) {
-            // switchable without highlight (e.g. language-specific notes),
-            // don't munge
-            return;
-        }
-
-        // get generic setup code
-        var setup_selector = '.setupcode.highlight-' + lang + ' pre';
-        var setup = document.querySelector(setup_selector).textContent;
-
-        // prepend setup code to current snippet, get all of current snippet
-        // in case only part of it was selected. Ensure we don't get e.g.
-        // button text around snippet itself
-        var data = setup + '\n' + target.querySelector('pre').textContent;
-        // sane browsers & ZeroClipboard
-        e.clipboardData.setData('text/plain', data);
-        // MSIE
-        e.clipboardData.setData('Text', data);
+            var $setup_code = $target.prev();
+            if ($setup_code.length) {
+                // remove existing setup code
+                $setup_code.remove();
+            } else {
+                $('.setupcode.highlight-' + lang + ' pre').clone().insertBefore($target);
+            }
+        });
+    })(); }
 
-        // no preventDefault on ZC event
-        e.preventDefault && e.preventDefault();
-    }
     /**
      * @param {Node} node highlight node to get the language of
      * @returns {String|null} either the highlight language or null
diff --git a/doc/_themes/odoodoc/static/style.css b/doc/_themes/odoodoc/static/style.css
index 12ffb135f6fd..7fc2d3dcb956 100644
--- a/doc/_themes/odoodoc/static/style.css
+++ b/doc/_themes/odoodoc/static/style.css
@@ -4076,7 +4076,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
   }
 }
 .navbar-default {
-  background-color: #ffffff;
+  background-color: white;
   border-color: 0;
 }
 .navbar-default .navbar-brand {
@@ -6663,49 +6663,43 @@ div.section > h2 {
 .admonition.exercise > .admonition-title {
   color: #555555;
 }
-/*
- * Code snippets
- *
- * Generated via Pygments
- */
+.highlight {
+  position: relative;
+  color: #333333;
+  background: #eeeeee none !important;
+  border: 1px solid #777777;
+  border-radius: 4px 0 4px 4px;
+  margin: 10px 0;
+}
 .highlight pre {
-  padding: 4px;
+  padding: 0;
+  margin: 10px;
   font-size: 75%;
   word-break: normal;
   word-wrap: normal;
+  background: none;
+  border: none;
 }
-.switchable .highlight.with-btn-clipboard pre {
-  padding-right: 50px;
-}
-/*
- * ZeroClipboard styles
- */
-.highlight {
-  position: relative;
+.highlight:hover .btn-show-setup {
+  display: block;
 }
-.btn-clipboard {
+.highlight .btn-show-setup {
+  display: none;
   position: absolute;
-  top: 0;
+  bottom: 100%;
   right: 0;
   z-index: 3;
-  display: block;
   padding: 5px 8px;
   font-size: 12px;
-  color: #777;
+  color: #777777;
   cursor: pointer;
-  background-color: #fff;
-  border: 1px solid #e1e1e8;
-  border-radius: 0 4px 0 4px;
+  border: 1px solid #777777;
+  border-radius: 4px 4px 0 0;
+  background: inherit;
 }
-.btn-clipboard:focus {
+.highlight .btn-show-setup:focus {
   outline: none;
 }
-.btn-clipboard.active {
-  background-color: #ffffad;
-  -webkit-transition: background-color 0.5s linear;
-  -o-transition: background-color 0.5s linear;
-  transition: background-color 0.5s linear;
-}
 img.align-center {
   display: block;
   margin: 0 auto;
@@ -6843,20 +6837,14 @@ td.field-body > ul {
     border-bottom-color: #777777;
     border-right-color: #777777;
   }
-  .stripe .section > .force-right pre,
-  .stripe .section > [class*=highlight] pre {
-    padding: 0;
-    margin: 10px;
-    background: none;
-    border: none;
-  }
   .stripe .section > .force-right .highlight,
   .stripe .section > [class*=highlight] .highlight {
     border-color: #555555;
     border-style: solid;
     border-width: 1px 0;
+    border-radius: 0;
     color: #cccccc;
-    background: none;
+    background: none !important;
     /* Line Numbers */
     /* Comment */
     /* Error */
@@ -7243,14 +7231,12 @@ td.field-body > ul {
   .stripe .highlight pre {
     white-space: pre-wrap;
   }
-  .stripe .btn-clipboard {
+  .stripe .btn-show-setup {
     background-color: transparent;
     color: #eeeeee;
     border-color: #777777;
-    border-top: none;
-    border-top-right-radius: 0;
   }
-  .stripe .btn-clipboard.active {
+  .stripe .btn-show-setup.active {
     background-color: #555555;
     -webkit-transition: background-color 0.5s linear;
     -o-transition: background-color 0.5s linear;
diff --git a/doc/_themes/odoodoc/static/style.less b/doc/_themes/odoodoc/static/style.less
index d37039994143..480e43c5cb8c 100644
--- a/doc/_themes/odoodoc/static/style.less
+++ b/doc/_themes/odoodoc/static/style.less
@@ -465,50 +465,50 @@ div.section > h2 {
   }
 }
 
-/*
- * Code snippets
- *
- * Generated via Pygments
- */
-.highlight pre {
-  padding: 4px;
-  font-size: 75%;
-  // don't break lines within words
-  word-break: normal;
-  word-wrap: normal;
-}
-.switchable .highlight.with-btn-clipboard pre {
-  // avoid copy button overlapping with even long lines
-  padding-right: 50px;
-}
-
-/*
- * ZeroClipboard styles
- */
 .highlight {
   position: relative;
-}
-.btn-clipboard {
-  position: absolute;
-  top: 0;
-  right: 0;
-  z-index: 3;
-  display: block;
-  padding: 5px 8px;
-  font-size: 12px;
-  color: #777;
-  cursor: pointer;
-  background-color: #fff;
-  border: 1px solid #e1e1e8;
-  border-radius: 0 4px 0 4px;
 
-  &:focus {
-    outline: none;
+  // move styling from pre to highlight so can have multiple pre elements in
+  // a single "code block" for ease of adding and removing setup code &al
+  color: @gray-dark;
+  // force override of pygments yellow background background
+  background: @gray-lighter none !important;
+  border: 1px solid @gray-light;
+  border-radius: @border-radius-base 0 @border-radius-base @border-radius-base;
+  margin: 10px 0;
+
+  pre {
+    padding: 0;
+    margin: 10px;
+    font-size: 75%;
+    // don't break lines within words
+    word-break: normal;
+    word-wrap: normal;
+
+    background: none;
+    border: none;
   }
 
-  &.active {
-    background-color: #ffffad;
-    .transition(background-color .5s linear);
+  &:hover .btn-show-setup {
+    display: block;
+  }
+  .btn-show-setup {
+    display: none;
+    position: absolute;
+    bottom: 100%;
+    right: 0;
+    z-index: 3;
+    padding: 5px 8px;
+    font-size: 12px;
+    color: @gray-light;
+    cursor: pointer;
+    border: 1px solid @gray-light;
+    border-radius: @border-radius-base @border-radius-base 0 0;
+    background: inherit;
+
+    &:focus {
+      outline: none;
+    }
   }
 }
 
@@ -638,22 +638,14 @@ td.field-body {
         border-bottom-color: @separator-right;
         border-right-color: @separator-right;
       }
-      pre {
-        // padding leads to overflow scrollbar in safari for no reason I understand,
-        // margin does not have that issue
-        padding: 0;
-        margin: 10px;
-
-        background: none;
-        border: none;
-      }
       .highlight {
         border-color: @gray;
         border-style: solid;
         border-width: 1px 0;
+        border-radius: 0;
         // solarized-ish from https://gist.github.com/qguv/7936275
         color: @color-right-code;
-        background: none;
+        background: none !important;
         .lineno { color: #586e75 } /* Line Numbers */
         .c { color: #586e75 } /* Comment */
         .err { color: @color-right-code } /* Error */
@@ -761,12 +753,10 @@ td.field-body {
       white-space: pre-wrap;
     }
 
-    .btn-clipboard {
+    .btn-show-setup {
       background-color: transparent;
       color: @color-right;
       border-color: @separator-right;
-      border-top: none;
-      border-top-right-radius: 0;
 
       &.active {
         background-color: @gray;
diff --git a/doc/_themes/odoodoc/static/zeroclipboard-2.1.6/ZeroClipboard.min.js b/doc/_themes/odoodoc/static/zeroclipboard-2.1.6/ZeroClipboard.min.js
deleted file mode 100644
index 365737f559a8..000000000000
--- a/doc/_themes/odoodoc/static/zeroclipboard-2.1.6/ZeroClipboard.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * ZeroClipboard
- * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.
- * Copyright (c) 2014 Jon Rohan, James M. Greene
- * Licensed MIT
- * http://zeroclipboard.org/
- * v2.1.6
- */
-!function(a,b){"use strict";var c,d,e=a,f=e.document,g=e.navigator,h=e.setTimeout,i=e.encodeURIComponent,j=e.ActiveXObject,k=e.Error,l=e.Number.parseInt||e.parseInt,m=e.Number.parseFloat||e.parseFloat,n=e.Number.isNaN||e.isNaN,o=e.Math.round,p=e.Date.now,q=e.Object.keys,r=e.Object.defineProperty,s=e.Object.prototype.hasOwnProperty,t=e.Array.prototype.slice,u=function(){var a=function(a){return a};if("function"==typeof e.wrap&&"function"==typeof e.unwrap)try{var b=f.createElement("div"),c=e.unwrap(b);1===b.nodeType&&c&&1===c.nodeType&&(a=e.unwrap)}catch(d){}return a}(),v=function(a){return t.call(a,0)},w=function(){var a,c,d,e,f,g,h=v(arguments),i=h[0]||{};for(a=1,c=h.length;c>a;a++)if(null!=(d=h[a]))for(e in d)s.call(d,e)&&(f=i[e],g=d[e],i!==g&&g!==b&&(i[e]=g));return i},x=function(a){var b,c,d,e;if("object"!=typeof a||null==a)b=a;else if("number"==typeof a.length)for(b=[],c=0,d=a.length;d>c;c++)s.call(a,c)&&(b[c]=x(a[c]));else{b={};for(e in a)s.call(a,e)&&(b[e]=x(a[e]))}return b},y=function(a,b){for(var c={},d=0,e=b.length;e>d;d++)b[d]in a&&(c[b[d]]=a[b[d]]);return c},z=function(a,b){var c={};for(var d in a)-1===b.indexOf(d)&&(c[d]=a[d]);return c},A=function(a){if(a)for(var b in a)s.call(a,b)&&delete a[b];return a},B=function(a,b){if(a&&1===a.nodeType&&a.ownerDocument&&b&&(1===b.nodeType&&b.ownerDocument&&b.ownerDocument===a.ownerDocument||9===b.nodeType&&!b.ownerDocument&&b===a.ownerDocument))do{if(a===b)return!0;a=a.parentNode}while(a);return!1},C=function(a){var b;return"string"==typeof a&&a&&(b=a.split("#")[0].split("?")[0],b=a.slice(0,a.lastIndexOf("/")+1)),b},D=function(a){var b,c;return"string"==typeof a&&a&&(c=a.match(/^(?:|[^:@]*@|.+\)@(?=http[s]?|file)|.+?\s+(?: at |@)(?:[^:\(]+ )*[\(]?)((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/),c&&c[1]?b=c[1]:(c=a.match(/\)@((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/),c&&c[1]&&(b=c[1]))),b},E=function(){var a,b;try{throw new k}catch(c){b=c}return b&&(a=b.sourceURL||b.fileName||D(b.stack)),a},F=function(){var a,c,d;if(f.currentScript&&(a=f.currentScript.src))return a;if(c=f.getElementsByTagName("script"),1===c.length)return c[0].src||b;if("readyState"in c[0])for(d=c.length;d--;)if("interactive"===c[d].readyState&&(a=c[d].src))return a;return"loading"===f.readyState&&(a=c[c.length-1].src)?a:(a=E())?a:b},G=function(){var a,c,d,e=f.getElementsByTagName("script");for(a=e.length;a--;){if(!(d=e[a].src)){c=null;break}if(d=C(d),null==c)c=d;else if(c!==d){c=null;break}}return c||b},H=function(){var a=C(F())||G()||"";return a+"ZeroClipboard.swf"},I={bridge:null,version:"0.0.0",pluginType:"unknown",disabled:null,outdated:null,unavailable:null,deactivated:null,overdue:null,ready:null},J="11.0.0",K={},L={},M=null,N={ready:"Flash communication is established",error:{"flash-disabled":"Flash is disabled or not installed","flash-outdated":"Flash is too outdated to support ZeroClipboard","flash-unavailable":"Flash is unable to communicate bidirectionally with JavaScript","flash-deactivated":"Flash is too outdated for your browser and/or is configured as click-to-activate","flash-overdue":"Flash communication was established but NOT within the acceptable time limit"}},O={swfPath:H(),trustedDomains:a.location.host?[a.location.host]:[],cacheBust:!0,forceEnhancedClipboard:!1,flashLoadTimeout:3e4,autoActivate:!0,bubbleEvents:!0,containerId:"global-zeroclipboard-html-bridge",containerClass:"global-zeroclipboard-container",swfObjectId:"global-zeroclipboard-flash-bridge",hoverClass:"zeroclipboard-is-hover",activeClass:"zeroclipboard-is-active",forceHandCursor:!1,title:null,zIndex:999999999},P=function(a){if("object"==typeof a&&null!==a)for(var b in a)if(s.call(a,b))if(/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(b))O[b]=a[b];else if(null==I.bridge)if("containerId"===b||"swfObjectId"===b){if(!cb(a[b]))throw new Error("The specified `"+b+"` value is not valid as an HTML4 Element ID");O[b]=a[b]}else O[b]=a[b];{if("string"!=typeof a||!a)return x(O);if(s.call(O,a))return O[a]}},Q=function(){return{browser:y(g,["userAgent","platform","appName"]),flash:z(I,["bridge"]),zeroclipboard:{version:Fb.version,config:Fb.config()}}},R=function(){return!!(I.disabled||I.outdated||I.unavailable||I.deactivated)},S=function(a,b){var c,d,e,f={};if("string"==typeof a&&a)e=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)s.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&Fb.on(c,a[c]);if(e&&e.length){for(c=0,d=e.length;d>c;c++)a=e[c].replace(/^on/,""),f[a]=!0,K[a]||(K[a]=[]),K[a].push(b);if(f.ready&&I.ready&&Fb.emit({type:"ready"}),f.error){var g=["disabled","outdated","unavailable","deactivated","overdue"];for(c=0,d=g.length;d>c;c++)if(I[g[c]]===!0){Fb.emit({type:"error",name:"flash-"+g[c]});break}}}return Fb},T=function(a,b){var c,d,e,f,g;if(0===arguments.length)f=q(K);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)s.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&Fb.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=K[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return Fb},U=function(a){var b;return b="string"==typeof a&&a?x(K[a])||null:x(K)},V=function(a){var b,c,d;return a=db(a),a&&!jb(a)?"ready"===a.type&&I.overdue===!0?Fb.emit({type:"error",name:"flash-overdue"}):(b=w({},a),ib.call(this,b),"copy"===a.type&&(d=pb(L),c=d.data,M=d.formatMap),c):void 0},W=function(){if("boolean"!=typeof I.ready&&(I.ready=!1),!Fb.isFlashUnusable()&&null===I.bridge){var a=O.flashLoadTimeout;"number"==typeof a&&a>=0&&h(function(){"boolean"!=typeof I.deactivated&&(I.deactivated=!0),I.deactivated===!0&&Fb.emit({type:"error",name:"flash-deactivated"})},a),I.overdue=!1,nb()}},X=function(){Fb.clearData(),Fb.blur(),Fb.emit("destroy"),ob(),Fb.off()},Y=function(a,b){var c;if("object"==typeof a&&a&&"undefined"==typeof b)c=a,Fb.clearData();else{if("string"!=typeof a||!a)return;c={},c[a]=b}for(var d in c)"string"==typeof d&&d&&s.call(c,d)&&"string"==typeof c[d]&&c[d]&&(L[d]=c[d])},Z=function(a){"undefined"==typeof a?(A(L),M=null):"string"==typeof a&&s.call(L,a)&&delete L[a]},$=function(a){return"undefined"==typeof a?x(L):"string"==typeof a&&s.call(L,a)?L[a]:void 0},_=function(a){if(a&&1===a.nodeType){c&&(xb(c,O.activeClass),c!==a&&xb(c,O.hoverClass)),c=a,wb(a,O.hoverClass);var b=a.getAttribute("title")||O.title;if("string"==typeof b&&b){var d=mb(I.bridge);d&&d.setAttribute("title",b)}var e=O.forceHandCursor===!0||"pointer"===yb(a,"cursor");Cb(e),Bb()}},ab=function(){var a=mb(I.bridge);a&&(a.removeAttribute("title"),a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.top="1px"),c&&(xb(c,O.hoverClass),xb(c,O.activeClass),c=null)},bb=function(){return c||null},cb=function(a){return"string"==typeof a&&a&&/^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(a)},db=function(a){var b;if("string"==typeof a&&a?(b=a,a={}):"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(b=a.type),b){!a.target&&/^(copy|aftercopy|_click)$/.test(b.toLowerCase())&&(a.target=d),w(a,{type:b.toLowerCase(),target:a.target||c||null,relatedTarget:a.relatedTarget||null,currentTarget:I&&I.bridge||null,timeStamp:a.timeStamp||p()||null});var e=N[a.type];return"error"===a.type&&a.name&&e&&(e=e[a.name]),e&&(a.message=e),"ready"===a.type&&w(a,{target:null,version:I.version}),"error"===a.type&&(/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(a.name)&&w(a,{target:null,minimumVersion:J}),/^flash-(outdated|unavailable|deactivated|overdue)$/.test(a.name)&&w(a,{version:I.version})),"copy"===a.type&&(a.clipboardData={setData:Fb.setData,clearData:Fb.clearData}),"aftercopy"===a.type&&(a=qb(a,M)),a.target&&!a.relatedTarget&&(a.relatedTarget=eb(a.target)),a=fb(a)}},eb=function(a){var b=a&&a.getAttribute&&a.getAttribute("data-clipboard-target");return b?f.getElementById(b):null},fb=function(a){if(a&&/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)){var c=a.target,d="_mouseover"===a.type&&a.relatedTarget?a.relatedTarget:b,g="_mouseout"===a.type&&a.relatedTarget?a.relatedTarget:b,h=Ab(c),i=e.screenLeft||e.screenX||0,j=e.screenTop||e.screenY||0,k=f.body.scrollLeft+f.documentElement.scrollLeft,l=f.body.scrollTop+f.documentElement.scrollTop,m=h.left+("number"==typeof a._stageX?a._stageX:0),n=h.top+("number"==typeof a._stageY?a._stageY:0),o=m-k,p=n-l,q=i+o,r=j+p,s="number"==typeof a.movementX?a.movementX:0,t="number"==typeof a.movementY?a.movementY:0;delete a._stageX,delete a._stageY,w(a,{srcElement:c,fromElement:d,toElement:g,screenX:q,screenY:r,pageX:m,pageY:n,clientX:o,clientY:p,x:o,y:p,movementX:s,movementY:t,offsetX:0,offsetY:0,layerX:0,layerY:0})}return a},gb=function(a){var b=a&&"string"==typeof a.type&&a.type||"";return!/^(?:(?:before)?copy|destroy)$/.test(b)},hb=function(a,b,c,d){d?h(function(){a.apply(b,c)},0):a.apply(b,c)},ib=function(a){if("object"==typeof a&&a&&a.type){var b=gb(a),c=K["*"]||[],d=K[a.type]||[],f=c.concat(d);if(f&&f.length){var g,h,i,j,k,l=this;for(g=0,h=f.length;h>g;g++)i=f[g],j=l,"string"==typeof i&&"function"==typeof e[i]&&(i=e[i]),"object"==typeof i&&i&&"function"==typeof i.handleEvent&&(j=i,i=i.handleEvent),"function"==typeof i&&(k=w({},a),hb(i,j,[k],b))}return this}},jb=function(a){var b=a.target||c||null,e="swf"===a._source;delete a._source;var f=["flash-disabled","flash-outdated","flash-unavailable","flash-deactivated","flash-overdue"];switch(a.type){case"error":-1!==f.indexOf(a.name)&&w(I,{disabled:"flash-disabled"===a.name,outdated:"flash-outdated"===a.name,unavailable:"flash-unavailable"===a.name,deactivated:"flash-deactivated"===a.name,overdue:"flash-overdue"===a.name,ready:!1});break;case"ready":var g=I.deactivated===!0;w(I,{disabled:!1,outdated:!1,unavailable:!1,deactivated:!1,overdue:g,ready:!g});break;case"beforecopy":d=b;break;case"copy":var h,i,j=a.relatedTarget;!L["text/html"]&&!L["text/plain"]&&j&&(i=j.value||j.outerHTML||j.innerHTML)&&(h=j.value||j.textContent||j.innerText)?(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",h),i!==h&&a.clipboardData.setData("text/html",i)):!L["text/plain"]&&a.target&&(h=a.target.getAttribute("data-clipboard-text"))&&(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",h));break;case"aftercopy":Fb.clearData(),b&&b!==vb()&&b.focus&&b.focus();break;case"_mouseover":Fb.focus(b),O.bubbleEvents===!0&&e&&(b&&b!==a.relatedTarget&&!B(a.relatedTarget,b)&&kb(w({},a,{type:"mouseenter",bubbles:!1,cancelable:!1})),kb(w({},a,{type:"mouseover"})));break;case"_mouseout":Fb.blur(),O.bubbleEvents===!0&&e&&(b&&b!==a.relatedTarget&&!B(a.relatedTarget,b)&&kb(w({},a,{type:"mouseleave",bubbles:!1,cancelable:!1})),kb(w({},a,{type:"mouseout"})));break;case"_mousedown":wb(b,O.activeClass),O.bubbleEvents===!0&&e&&kb(w({},a,{type:a.type.slice(1)}));break;case"_mouseup":xb(b,O.activeClass),O.bubbleEvents===!0&&e&&kb(w({},a,{type:a.type.slice(1)}));break;case"_click":d=null,O.bubbleEvents===!0&&e&&kb(w({},a,{type:a.type.slice(1)}));break;case"_mousemove":O.bubbleEvents===!0&&e&&kb(w({},a,{type:a.type.slice(1)}))}return/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)?!0:void 0},kb=function(a){if(a&&"string"==typeof a.type&&a){var b,c=a.target||null,d=c&&c.ownerDocument||f,g={view:d.defaultView||e,canBubble:!0,cancelable:!0,detail:"click"===a.type?1:0,button:"number"==typeof a.which?a.which-1:"number"==typeof a.button?a.button:d.createEvent?0:1},h=w(g,a);c&&d.createEvent&&c.dispatchEvent&&(h=[h.type,h.canBubble,h.cancelable,h.view,h.detail,h.screenX,h.screenY,h.clientX,h.clientY,h.ctrlKey,h.altKey,h.shiftKey,h.metaKey,h.button,h.relatedTarget],b=d.createEvent("MouseEvents"),b.initMouseEvent&&(b.initMouseEvent.apply(b,h),b._source="js",c.dispatchEvent(b)))}},lb=function(){var a=f.createElement("div");return a.id=O.containerId,a.className=O.containerClass,a.style.position="absolute",a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.height="1px",a.style.zIndex=""+Db(O.zIndex),a},mb=function(a){for(var b=a&&a.parentNode;b&&"OBJECT"===b.nodeName&&b.parentNode;)b=b.parentNode;return b||null},nb=function(){var a,b=I.bridge,c=mb(b);if(!b){var d=ub(e.location.host,O),g="never"===d?"none":"all",h=sb(O),i=O.swfPath+rb(O.swfPath,O);c=lb();var j=f.createElement("div");c.appendChild(j),f.body.appendChild(c);var k=f.createElement("div"),l="activex"===I.pluginType;k.innerHTML='<object id="'+O.swfObjectId+'" name="'+O.swfObjectId+'" width="100%" height="100%" '+(l?'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"':'type="application/x-shockwave-flash" data="'+i+'"')+">"+(l?'<param name="movie" value="'+i+'"/>':"")+'<param name="allowScriptAccess" value="'+d+'"/><param name="allowNetworking" value="'+g+'"/><param name="menu" value="false"/><param name="wmode" value="transparent"/><param name="flashvars" value="'+h+'"/></object>',b=k.firstChild,k=null,u(b).ZeroClipboard=Fb,c.replaceChild(b,j)}return b||(b=f[O.swfObjectId],b&&(a=b.length)&&(b=b[a-1]),!b&&c&&(b=c.firstChild)),I.bridge=b||null,b},ob=function(){var a=I.bridge;if(a){var b=mb(a);b&&("activex"===I.pluginType&&"readyState"in a?(a.style.display="none",function c(){if(4===a.readyState){for(var d in a)"function"==typeof a[d]&&(a[d]=null);a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b)}else h(c,10)}()):(a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b))),I.ready=null,I.bridge=null,I.deactivated=null}},pb=function(a){var b={},c={};if("object"==typeof a&&a){for(var d in a)if(d&&s.call(a,d)&&"string"==typeof a[d]&&a[d])switch(d.toLowerCase()){case"text/plain":case"text":case"air:text":case"flash:text":b.text=a[d],c.text=d;break;case"text/html":case"html":case"air:html":case"flash:html":b.html=a[d],c.html=d;break;case"application/rtf":case"text/rtf":case"rtf":case"richtext":case"air:rtf":case"flash:rtf":b.rtf=a[d],c.rtf=d}return{data:b,formatMap:c}}},qb=function(a,b){if("object"!=typeof a||!a||"object"!=typeof b||!b)return a;var c={};for(var d in a)if(s.call(a,d)){if("success"!==d&&"data"!==d){c[d]=a[d];continue}c[d]={};var e=a[d];for(var f in e)f&&s.call(e,f)&&s.call(b,f)&&(c[d][b[f]]=e[f])}return c},rb=function(a,b){var c=null==b||b&&b.cacheBust===!0;return c?(-1===a.indexOf("?")?"?":"&")+"noCache="+p():""},sb=function(a){var b,c,d,f,g="",h=[];if(a.trustedDomains&&("string"==typeof a.trustedDomains?f=[a.trustedDomains]:"object"==typeof a.trustedDomains&&"length"in a.trustedDomains&&(f=a.trustedDomains)),f&&f.length)for(b=0,c=f.length;c>b;b++)if(s.call(f,b)&&f[b]&&"string"==typeof f[b]){if(d=tb(f[b]),!d)continue;if("*"===d){h.length=0,h.push(d);break}h.push.apply(h,[d,"//"+d,e.location.protocol+"//"+d])}return h.length&&(g+="trustedOrigins="+i(h.join(","))),a.forceEnhancedClipboard===!0&&(g+=(g?"&":"")+"forceEnhancedClipboard=true"),"string"==typeof a.swfObjectId&&a.swfObjectId&&(g+=(g?"&":"")+"swfObjectId="+i(a.swfObjectId)),g},tb=function(a){if(null==a||""===a)return null;if(a=a.replace(/^\s+|\s+$/g,""),""===a)return null;var b=a.indexOf("//");a=-1===b?a:a.slice(b+2);var c=a.indexOf("/");return a=-1===c?a:-1===b||0===c?null:a.slice(0,c),a&&".swf"===a.slice(-4).toLowerCase()?null:a||null},ub=function(){var a=function(a){var b,c,d,e=[];if("string"==typeof a&&(a=[a]),"object"!=typeof a||!a||"number"!=typeof a.length)return e;for(b=0,c=a.length;c>b;b++)if(s.call(a,b)&&(d=tb(a[b]))){if("*"===d){e.length=0,e.push("*");break}-1===e.indexOf(d)&&e.push(d)}return e};return function(b,c){var d=tb(c.swfPath);null===d&&(d=b);var e=a(c.trustedDomains),f=e.length;if(f>0){if(1===f&&"*"===e[0])return"always";if(-1!==e.indexOf(b))return 1===f&&b===d?"sameDomain":"always"}return"never"}}(),vb=function(){try{return f.activeElement}catch(a){return null}},wb=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)||a.classList.add(b),a;if(b&&"string"==typeof b){var c=(b||"").split(/\s+/);if(1===a.nodeType)if(a.className){for(var d=" "+a.className+" ",e=a.className,f=0,g=c.length;g>f;f++)d.indexOf(" "+c[f]+" ")<0&&(e+=" "+c[f]);a.className=e.replace(/^\s+|\s+$/g,"")}else a.className=b}return a},xb=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)&&a.classList.remove(b),a;if("string"==typeof b&&b){var c=b.split(/\s+/);if(1===a.nodeType&&a.className){for(var d=(" "+a.className+" ").replace(/[\n\t]/g," "),e=0,f=c.length;f>e;e++)d=d.replace(" "+c[e]+" "," ");a.className=d.replace(/^\s+|\s+$/g,"")}}return a},yb=function(a,b){var c=e.getComputedStyle(a,null).getPropertyValue(b);return"cursor"!==b||c&&"auto"!==c||"A"!==a.nodeName?c:"pointer"},zb=function(){var a,b,c,d=1;return"function"==typeof f.body.getBoundingClientRect&&(a=f.body.getBoundingClientRect(),b=a.right-a.left,c=f.body.offsetWidth,d=o(b/c*100)/100),d},Ab=function(a){var b={left:0,top:0,width:0,height:0};if(a.getBoundingClientRect){var c,d,g,h=a.getBoundingClientRect();"pageXOffset"in e&&"pageYOffset"in e?(c=e.pageXOffset,d=e.pageYOffset):(g=zb(),c=o(f.documentElement.scrollLeft/g),d=o(f.documentElement.scrollTop/g));var i=f.documentElement.clientLeft||0,j=f.documentElement.clientTop||0;b.left=h.left+c-i,b.top=h.top+d-j,b.width="width"in h?h.width:h.right-h.left,b.height="height"in h?h.height:h.bottom-h.top}return b},Bb=function(){var a;if(c&&(a=mb(I.bridge))){var b=Ab(c);w(a.style,{width:b.width+"px",height:b.height+"px",top:b.top+"px",left:b.left+"px",zIndex:""+Db(O.zIndex)})}},Cb=function(a){I.ready===!0&&(I.bridge&&"function"==typeof I.bridge.setHandCursor?I.bridge.setHandCursor(a):I.ready=!1)},Db=function(a){if(/^(?:auto|inherit)$/.test(a))return a;var b;return"number"!=typeof a||n(a)?"string"==typeof a&&(b=Db(l(a,10))):b=a,"number"==typeof b?b:"auto"},Eb=function(a){function b(a){var b=a.match(/[\d]+/g);return b.length=3,b.join(".")}function c(a){return!!a&&(a=a.toLowerCase())&&(/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(a)||"chrome.plugin"===a.slice(-13))}function d(a){a&&(i=!0,a.version&&(l=b(a.version)),!l&&a.description&&(l=b(a.description)),a.filename&&(k=c(a.filename)))}var e,f,h,i=!1,j=!1,k=!1,l="";if(g.plugins&&g.plugins.length)e=g.plugins["Shockwave Flash"],d(e),g.plugins["Shockwave Flash 2.0"]&&(i=!0,l="2.0.0.11");else if(g.mimeTypes&&g.mimeTypes.length)h=g.mimeTypes["application/x-shockwave-flash"],e=h&&h.enabledPlugin,d(e);else if("undefined"!=typeof a){j=!0;try{f=new a("ShockwaveFlash.ShockwaveFlash.7"),i=!0,l=b(f.GetVariable("$version"))}catch(n){try{f=new a("ShockwaveFlash.ShockwaveFlash.6"),i=!0,l="6.0.21"}catch(o){try{f=new a("ShockwaveFlash.ShockwaveFlash"),i=!0,l=b(f.GetVariable("$version"))}catch(p){j=!1}}}}I.disabled=i!==!0,I.outdated=l&&m(l)<m(J),I.version=l||"0.0.0",I.pluginType=k?"pepper":j?"activex":i?"netscape":"unknown"};Eb(j);var Fb=function(){return this instanceof Fb?void("function"==typeof Fb._createClient&&Fb._createClient.apply(this,v(arguments))):new Fb};r(Fb,"version",{value:"2.1.6",writable:!1,configurable:!0,enumerable:!0}),Fb.config=function(){return P.apply(this,v(arguments))},Fb.state=function(){return Q.apply(this,v(arguments))},Fb.isFlashUnusable=function(){return R.apply(this,v(arguments))},Fb.on=function(){return S.apply(this,v(arguments))},Fb.off=function(){return T.apply(this,v(arguments))},Fb.handlers=function(){return U.apply(this,v(arguments))},Fb.emit=function(){return V.apply(this,v(arguments))},Fb.create=function(){return W.apply(this,v(arguments))},Fb.destroy=function(){return X.apply(this,v(arguments))},Fb.setData=function(){return Y.apply(this,v(arguments))},Fb.clearData=function(){return Z.apply(this,v(arguments))},Fb.getData=function(){return $.apply(this,v(arguments))},Fb.focus=Fb.activate=function(){return _.apply(this,v(arguments))},Fb.blur=Fb.deactivate=function(){return ab.apply(this,v(arguments))},Fb.activeElement=function(){return bb.apply(this,v(arguments))};var Gb=0,Hb={},Ib=0,Jb={},Kb={};w(O,{autoActivate:!0});var Lb=function(a){var b=this;b.id=""+Gb++,Hb[b.id]={instance:b,elements:[],handlers:{}},a&&b.clip(a),Fb.on("*",function(a){return b.emit(a)}),Fb.on("destroy",function(){b.destroy()}),Fb.create()},Mb=function(a,b){var c,d,e,f={},g=Hb[this.id]&&Hb[this.id].handlers;if("string"==typeof a&&a)e=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)s.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.on(c,a[c]);if(e&&e.length){for(c=0,d=e.length;d>c;c++)a=e[c].replace(/^on/,""),f[a]=!0,g[a]||(g[a]=[]),g[a].push(b);if(f.ready&&I.ready&&this.emit({type:"ready",client:this}),f.error){var h=["disabled","outdated","unavailable","deactivated","overdue"];for(c=0,d=h.length;d>c;c++)if(I[h[c]]){this.emit({type:"error",name:"flash-"+h[c],client:this});break}}}return this},Nb=function(a,b){var c,d,e,f,g,h=Hb[this.id]&&Hb[this.id].handlers;if(0===arguments.length)f=q(h);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)s.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=h[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return this},Ob=function(a){var b=null,c=Hb[this.id]&&Hb[this.id].handlers;return c&&(b="string"==typeof a&&a?c[a]?c[a].slice(0):[]:x(c)),b},Pb=function(a){if(Ub.call(this,a)){"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(a=w({},a));var b=w({},db(a),{client:this});Vb.call(this,b)}return this},Qb=function(a){a=Wb(a);for(var b=0;b<a.length;b++)if(s.call(a,b)&&a[b]&&1===a[b].nodeType){a[b].zcClippingId?-1===Jb[a[b].zcClippingId].indexOf(this.id)&&Jb[a[b].zcClippingId].push(this.id):(a[b].zcClippingId="zcClippingId_"+Ib++,Jb[a[b].zcClippingId]=[this.id],O.autoActivate===!0&&Xb(a[b]));var c=Hb[this.id]&&Hb[this.id].elements;-1===c.indexOf(a[b])&&c.push(a[b])}return this},Rb=function(a){var b=Hb[this.id];if(!b)return this;var c,d=b.elements;a="undefined"==typeof a?d.slice(0):Wb(a);for(var e=a.length;e--;)if(s.call(a,e)&&a[e]&&1===a[e].nodeType){for(c=0;-1!==(c=d.indexOf(a[e],c));)d.splice(c,1);var f=Jb[a[e].zcClippingId];if(f){for(c=0;-1!==(c=f.indexOf(this.id,c));)f.splice(c,1);0===f.length&&(O.autoActivate===!0&&Yb(a[e]),delete a[e].zcClippingId)}}return this},Sb=function(){var a=Hb[this.id];return a&&a.elements?a.elements.slice(0):[]},Tb=function(){this.unclip(),this.off(),delete Hb[this.id]},Ub=function(a){if(!a||!a.type)return!1;if(a.client&&a.client!==this)return!1;var b=Hb[this.id]&&Hb[this.id].elements,c=!!b&&b.length>0,d=!a.target||c&&-1!==b.indexOf(a.target),e=a.relatedTarget&&c&&-1!==b.indexOf(a.relatedTarget),f=a.client&&a.client===this;return d||e||f?!0:!1},Vb=function(a){if("object"==typeof a&&a&&a.type){var b=gb(a),c=Hb[this.id]&&Hb[this.id].handlers["*"]||[],d=Hb[this.id]&&Hb[this.id].handlers[a.type]||[],f=c.concat(d);if(f&&f.length){var g,h,i,j,k,l=this;for(g=0,h=f.length;h>g;g++)i=f[g],j=l,"string"==typeof i&&"function"==typeof e[i]&&(i=e[i]),"object"==typeof i&&i&&"function"==typeof i.handleEvent&&(j=i,i=i.handleEvent),"function"==typeof i&&(k=w({},a),hb(i,j,[k],b))}return this}},Wb=function(a){return"string"==typeof a&&(a=[]),"number"!=typeof a.length?[a]:a},Xb=function(a){if(a&&1===a.nodeType){var b=function(a){(a||(a=e.event))&&("js"!==a._source&&(a.stopImmediatePropagation(),a.preventDefault()),delete a._source)},c=function(c){(c||(c=e.event))&&(b(c),Fb.focus(a))};a.addEventListener("mouseover",c,!1),a.addEventListener("mouseout",b,!1),a.addEventListener("mouseenter",b,!1),a.addEventListener("mouseleave",b,!1),a.addEventListener("mousemove",b,!1),Kb[a.zcClippingId]={mouseover:c,mouseout:b,mouseenter:b,mouseleave:b,mousemove:b}}},Yb=function(a){if(a&&1===a.nodeType){var b=Kb[a.zcClippingId];if("object"==typeof b&&b){for(var c,d,e=["move","leave","enter","out","over"],f=0,g=e.length;g>f;f++)c="mouse"+e[f],d=b[c],"function"==typeof d&&a.removeEventListener(c,d,!1);delete Kb[a.zcClippingId]}}};Fb._createClient=function(){Lb.apply(this,v(arguments))},Fb.prototype.on=function(){return Mb.apply(this,v(arguments))},Fb.prototype.off=function(){return Nb.apply(this,v(arguments))},Fb.prototype.handlers=function(){return Ob.apply(this,v(arguments))},Fb.prototype.emit=function(){return Pb.apply(this,v(arguments))},Fb.prototype.clip=function(){return Qb.apply(this,v(arguments))},Fb.prototype.unclip=function(){return Rb.apply(this,v(arguments))},Fb.prototype.elements=function(){return Sb.apply(this,v(arguments))},Fb.prototype.destroy=function(){return Tb.apply(this,v(arguments))},Fb.prototype.setText=function(a){return Fb.setData("text/plain",a),this},Fb.prototype.setHtml=function(a){return Fb.setData("text/html",a),this},Fb.prototype.setRichText=function(a){return Fb.setData("application/rtf",a),this},Fb.prototype.setData=function(){return Fb.setData.apply(this,v(arguments)),this},Fb.prototype.clearData=function(){return Fb.clearData.apply(this,v(arguments)),this},Fb.prototype.getData=function(){return Fb.getData.apply(this,v(arguments))},"function"==typeof define&&define.amd?define(function(){return Fb}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports?module.exports=Fb:a.ZeroClipboard=Fb}(function(){return this||window}());
diff --git a/doc/_themes/odoodoc/static/zeroclipboard-2.1.6/ZeroClipboard.swf b/doc/_themes/odoodoc/static/zeroclipboard-2.1.6/ZeroClipboard.swf
deleted file mode 100644
index d4e2561b366e131d3bae303acce90a137a4956e1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4036
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

-- 
GitLab