| /* | 
 |  * Copyright (C) 2013, 2015 Apple Inc. All rights reserved. | 
 |  * | 
 |  * Redistribution and use in source and binary forms, with or without | 
 |  * modification, are permitted provided that the following conditions | 
 |  * are met: | 
 |  * 1. Redistributions of source code must retain the above copyright | 
 |  *    notice, this list of conditions and the following disclaimer. | 
 |  * 2. Redistributions in binary form must reproduce the above copyright | 
 |  *    notice, this list of conditions and the following disclaimer in the | 
 |  *    documentation and/or other materials provided with the distribution. | 
 |  * | 
 |  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' | 
 |  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | 
 |  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 
 |  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS | 
 |  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 
 |  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 
 |  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 
 |  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 
 |  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 
 |  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | 
 |  * THE POSSIBILITY OF SUCH DAMAGE. | 
 |  */ | 
 |  | 
 | WI.DetailsSectionSimpleRow = class DetailsSectionSimpleRow extends WI.DetailsSectionRow | 
 | { | 
 |     constructor(label, value) | 
 |     { | 
 |         super(); | 
 |  | 
 |         this.element.classList.add("simple"); | 
 |  | 
 |         this._labelElement = document.createElement("div"); | 
 |         this._labelElement.className = "label"; | 
 |         this.element.appendChild(this._labelElement); | 
 |  | 
 |         this._valueElement = document.createElement("div"); | 
 |         this._valueElement.className = "value"; | 
 |         this.element.appendChild(this._valueElement); | 
 |  | 
 |         // Workaround for <rdar://problem/12668870> Triple-clicking text within a | 
 |         // <div> set to "display: table-cell" selects text outside the cell. | 
 |         // | 
 |         // On triple-click, adjust the selection range to include only the value | 
 |         // element if the selection extends WI.beyond it. | 
 |         var valueElementClicked = function(event) { | 
 |             event.stopPropagation(); | 
 |  | 
 |             if (event.detail < 3) | 
 |                 return; | 
 |  | 
 |             var currentSelection = window.getSelection(); | 
 |             if (!currentSelection) | 
 |                 return; | 
 |  | 
 |             var currentRange = currentSelection.getRangeAt(0); | 
 |             if (!currentRange || currentRange.startContainer === currentRange.endContainer) | 
 |                 return; | 
 |  | 
 |             var correctedRange = document.createRange(); | 
 |             correctedRange.selectNodeContents(event.currentTarget); | 
 |             currentSelection.removeAllRanges(); | 
 |             currentSelection.addRange(correctedRange); | 
 |         }; | 
 |         this._valueElement.addEventListener("click", valueElementClicked); | 
 |  | 
 |         this.label = label; | 
 |         this.value = value; | 
 |     } | 
 |  | 
 |     // Public | 
 |  | 
 |     get label() | 
 |     { | 
 |         return this._label; | 
 |     } | 
 |  | 
 |     set label(label) | 
 |     { | 
 |         this._label = label || ""; | 
 |  | 
 |         if (this._label instanceof Node) { | 
 |             this._labelElement.removeChildren(); | 
 |             this._labelElement.appendChild(this._label); | 
 |         } else | 
 |             this._labelElement.textContent = this._label; | 
 |     } | 
 |  | 
 |     get value() | 
 |     { | 
 |         return this._value; | 
 |     } | 
 |  | 
 |     set value(value) | 
 |     { | 
 |         this._value = value || ""; | 
 |  | 
 |         if (this._value || this._value === 0) { | 
 |             this.element.classList.remove(WI.DetailsSectionSimpleRow.EmptyStyleClassName); | 
 |  | 
 |             // If the value has space characters that cause word wrapping then we don't need the data class. | 
 |             if (/[\s\u200b]/.test(this._value)) | 
 |                 this.element.classList.remove(WI.DetailsSectionSimpleRow.DataStyleClassName); | 
 |             else | 
 |                 this.element.classList.add(WI.DetailsSectionSimpleRow.DataStyleClassName); | 
 |         } else { | 
 |             this.element.classList.add(WI.DetailsSectionSimpleRow.EmptyStyleClassName); | 
 |             this.element.classList.remove(WI.DetailsSectionSimpleRow.DataStyleClassName); | 
 |         } | 
 |  | 
 |         if (value instanceof Node) { | 
 |             this._valueElement.removeChildren(); | 
 |             this._valueElement.appendChild(this._value); | 
 |         } else | 
 |             this._valueElement.textContent = this._value; | 
 |     } | 
 |  | 
 |     get tooltip() | 
 |     { | 
 |         return this._valueElement.title; | 
 |     } | 
 |  | 
 |     set tooltip(x) | 
 |     { | 
 |         this._valueElement.title = x; | 
 |     } | 
 | }; | 
 |  | 
 | WI.DetailsSectionSimpleRow.DataStyleClassName = "data"; | 
 | WI.DetailsSectionSimpleRow.EmptyStyleClassName = "empty"; |