|  | 
| 1 | 1 | /* | 
| 2 |  | -Details Element Polyfill 2.1.1 | 
|  | 2 | +Details Element Polyfill 2.2.0 | 
| 3 | 3 | Copyright © 2018 Javan Makhmali | 
| 4 | 4 |  */ | 
| 5 | 5 | (function() { | 
| @@ -62,32 +62,45 @@ Copyright © 2018 Javan Makhmali | 
| 62 | 62 |         value: function value(name, _value) { | 
| 63 | 63 |           var _this = this; | 
| 64 | 64 |           var call = function call() { | 
| 65 |  | -            setAttribute.call(_this, name, _value); | 
|  | 65 | +            return setAttribute.call(_this, name, _value); | 
| 66 | 66 |           }; | 
| 67 |  | -          return this.tagName == "DETAILS" ? triggerToggleIfToggled(this, call) : call(); | 
|  | 67 | +          if (name == "open" && this.tagName == "DETAILS") { | 
|  | 68 | +            var wasOpen = this.hasAttribute("open"); | 
|  | 69 | +            var result = call(); | 
|  | 70 | +            if (!wasOpen) { | 
|  | 71 | +              var summary = this.querySelector("summary"); | 
|  | 72 | +              if (summary) summary.setAttribute("aria-expanded", true); | 
|  | 73 | +              triggerToggle(this); | 
|  | 74 | +            } | 
|  | 75 | +            return result; | 
|  | 76 | +          } | 
|  | 77 | +          return call(); | 
| 68 | 78 |         } | 
| 69 | 79 |       }, | 
| 70 | 80 |       removeAttribute: { | 
| 71 | 81 |         value: function value(name) { | 
| 72 | 82 |           var _this2 = this; | 
| 73 | 83 |           var call = function call() { | 
| 74 |  | -            removeAttribute.call(_this2, name); | 
|  | 84 | +            return removeAttribute.call(_this2, name); | 
| 75 | 85 |           }; | 
| 76 |  | -          return this.tagName == "DETAILS" ? triggerToggleIfToggled(this, call) : call(); | 
|  | 86 | +          if (name == "open" && this.tagName == "DETAILS") { | 
|  | 87 | +            var wasOpen = this.hasAttribute("open"); | 
|  | 88 | +            var result = call(); | 
|  | 89 | +            if (wasOpen) { | 
|  | 90 | +              var summary = this.querySelector("summary"); | 
|  | 91 | +              if (summary) summary.setAttribute("aria-expanded", false); | 
|  | 92 | +              triggerToggle(this); | 
|  | 93 | +            } | 
|  | 94 | +            return result; | 
|  | 95 | +          } | 
|  | 96 | +          return call(); | 
| 77 | 97 |         } | 
| 78 | 98 |       } | 
| 79 | 99 |     }); | 
| 80 | 100 |   } | 
| 81 | 101 |   function polyfillToggle() { | 
| 82 | 102 |     onTogglingTrigger(function(element) { | 
| 83 |  | -      var summary = element.querySelector("summary"); | 
| 84 |  | -      if (element.hasAttribute("open")) { | 
| 85 |  | -        element.removeAttribute("open"); | 
| 86 |  | -        element.setAttribute("aria-expanded", false); | 
| 87 |  | -      } else { | 
| 88 |  | -        element.setAttribute("open", ""); | 
| 89 |  | -        element.setAttribute("aria-expanded", true); | 
| 90 |  | -      } | 
|  | 103 | +      element.hasAttribute("open") ? element.removeAttribute("open") : element.setAttribute("open", ""); | 
| 91 | 104 |     }); | 
| 92 | 105 |   } | 
| 93 | 106 |   function polyfillToggleEvent() { | 
| @@ -171,15 +184,6 @@ Copyright © 2018 Javan Makhmali | 
| 171 | 184 |     event.initEvent("toggle", true, false); | 
| 172 | 185 |     element.dispatchEvent(event); | 
| 173 | 186 |   } | 
| 174 |  | -  function triggerToggleIfToggled(element, callback) { | 
| 175 |  | -    var wasOpen = element.getAttribute("open"); | 
| 176 |  | -    var result = callback(); | 
| 177 |  | -    var isOpen = element.getAttribute("open"); | 
| 178 |  | -    if (wasOpen != isOpen) { | 
| 179 |  | -      triggerToggle(element); | 
| 180 |  | -    } | 
| 181 |  | -    return result; | 
| 182 |  | -  } | 
| 183 | 187 |   function findElementsWithTagName(root, tagName) { | 
| 184 | 188 |     return (root.tagName == tagName ? [ root ] : []).concat(typeof root.getElementsByTagName == "function" ? slice.call(root.getElementsByTagName(tagName)) : []); | 
| 185 | 189 |   } | 
|  | 
0 commit comments