adaptivecards-controls
Advanced tools
Comparing version 0.3.3 to 0.3.4
@@ -76,17 +76,18 @@ declare module 'adaptivecards-controls/constants' { | ||
export abstract class PopupControl { | ||
private _isOpen; | ||
private _overlayElement; | ||
private _popupElement; | ||
protected abstract renderContent(): HTMLElement; | ||
protected close(): void; | ||
onClose: (popupControl: PopupControl) => void; | ||
onClose: (popupControl: PopupControl, wasCancelled: boolean) => void; | ||
keyDown(e: KeyboardEvent): void; | ||
render(rootElementBounds: ClientRect): HTMLElement; | ||
focus(): void; | ||
popup(rootElement: HTMLElement): void; | ||
closePopup(wasCancelled: boolean): void; | ||
readonly isOpen: boolean; | ||
} | ||
export abstract class InputWithPopup<TPopupControl extends PopupControl, TValue> extends InputControl { | ||
private _isOpen; | ||
private _labelElement; | ||
private _dropDownButtonElement; | ||
private _overlayElement; | ||
private _popupControl; | ||
private _popupControlElement; | ||
private _placeholderText; | ||
@@ -105,3 +106,3 @@ private _value; | ||
popup(): void; | ||
closePopup(): void; | ||
closePopup(wasCancelled: boolean): void; | ||
readonly isOpen: boolean; | ||
@@ -267,5 +268,2 @@ placeholderText: string; | ||
export class PopupMenu extends PopupControl { | ||
private _overlayElement; | ||
private _popupControlElement; | ||
private _isOpen; | ||
private _items; | ||
@@ -277,5 +275,2 @@ private _renderedItems; | ||
keyDown(e: KeyboardEvent): void; | ||
popup(rootElement: HTMLElement): void; | ||
closePopup(): void; | ||
readonly isOpen: boolean; | ||
readonly items: Collection<DropDownItem>; | ||
@@ -282,0 +277,0 @@ selectedIndex: number; |
@@ -1,2 +0,2 @@ | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("ACControls",[],t):"object"==typeof exports?exports.ACControls=t():e.ACControls=t()}(this,function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var i=t[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(o,i,function(t){return e[t]}.bind(null,i));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=7)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.KEY_TAB=9,t.KEY_ENTER=13,t.KEY_ESCAPE=27,t.KEY_UP=38,t.KEY_DOWN=40,t.KEY_DELETE=46},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(){}return e.prototype.validateRootElement=function(e){},e.prototype.keyDown=function(e){},Object.defineProperty(e.prototype,"rootElement",{get:function(){return this._rootElement},enumerable:!0,configurable:!0}),e.prototype.attach=function(e){var t=this;this.validateRootElement(e),this._rootElement=e,this._rootElement.onkeydown=function(e){t.keyDown(e)}},e}();t.InputControl=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(5),i=function(){function e(){}return e.getLongDayName=function(t){if(t>=0&&t<e.longDayNames.length)return e.longDayNames[t];throw new Error("Day index out of range: "+t)},e.getShortDayName=function(t){if(t>=0&&t<e.shortDayNames.length)return e.shortDayNames[t];throw new Error("Day index out of range: "+t)},e.getInitialDayName=function(t){if(t>=0&&t<e.minimalDayNames.length)return e.minimalDayNames[t];throw new Error("Day index out of range: "+t)},e.getLongMonthName=function(t){if(t>=0&&t<e.longMonthNames.length)return e.longMonthNames[t];throw new Error("Month index out of range: "+t)},e.getShortMonthName=function(t){if(t>=0&&t<e.shortMonthNames.length)return e.shortMonthNames[t];throw new Error("Month index out of range: "+t)},e.monthsInYear=12,e.daysInWeek=7,e.firstDayOfWeek=o.DayOfWeek.Sunday,e.longDayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],e.shortDayNames=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],e.minimalDayNames=["Su","Mo","Tu","We","Th","Fr","Sa"],e.longMonthNames=["January","February","March","April","May","June","July","August","September","October","November","December"],e.shortMonthNames=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],e}();function r(e,t){var n=new Date(e.getTime());return n.setDate(n.getDate()+t),n}t.CalendarSettings=i,t.daysInMonth=function(e,t){switch(t){case 1:return e%4==0&&e%100||e%400==0?29:28;case 3:case 5:case 8:case 10:return 30;default:return 31}},t.addDays=r,t.addMonths=function(e,t){var n=new Date(e.getTime()),o=n.getMonth()+t;return n.setMonth(o),n.getMonth()!==(o%i.monthsInYear+i.monthsInYear)%i.monthsInYear&&(n=r(n,-n.getDate())),n},t.areDatesEqual=function(e,t){return e.getFullYear()==t.getFullYear()&&e.getMonth()==t.getMonth()&&e.getDate()==t.getDate()},t.getScrollX=function(){return window.pageXOffset},t.getScrollY=function(){return window.pageYOffset},t.getAttributeValueAsBool=function(e,t,n){var o=e.attributes[t];return o?"true"===o.value:n},t.getAttributeValueAsString=function(e,t,n){var o=e.attributes[t];return o?o.value:n},t.getAttributeValueAsInt=function(e,t,n){var o=e.attributes[t];if(o){var i=parseInt(o.value);if(!isNaN(i))return i}return n}},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),s=n(2),l=n(1),a=function(){function e(){}return e.prototype.close=function(){this.onClose&&this.onClose(this)},e.prototype.keyDown=function(e){switch(e.keyCode){case r.KEY_ESCAPE:this.close()}},e.prototype.render=function(e){var t=this;return this._popupElement=document.createElement("div"),this._popupElement.tabIndex=0,this._popupElement.className="ms-ctrl ms-ctrl-popup-container",this._popupElement.onkeydown=function(e){return t.keyDown(e),!e.cancelBubble},this._popupElement.appendChild(this.renderContent()),this._popupElement},e.prototype.focus=function(){this._popupElement&&this._popupElement.firstElementChild.focus()},e}();t.PopupControl=a;var c=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.keyDown=function(e){switch(e.keyCode){case r.KEY_ENTER:this.popup()}},t.prototype.updateLabel=function(){this._labelElement&&(this._value?(this._labelElement.innerHTML=this.getValueAsString(),this._labelElement.classList.remove("placeholder")):(this._labelElement.innerText=this._placeholderText?this._placeholderText:"",this._labelElement.classList.add("placeholder")))},Object.defineProperty(t.prototype,"popupControl",{get:function(){return this._popupControl},enumerable:!0,configurable:!0}),t.prototype.getButtonIconCssClassName=function(){return"ms-icon-chevronDown"},t.prototype.getValueAsString=function(){return this._value.toString()},t.prototype.valueChanged=function(){this.onValueChanged&&this.onValueChanged(this)},t.prototype.attach=function(t){var n=this;e.prototype.attach.call(this,t),t.tabIndex=0,t.className=this.getCssClassName(),window.addEventListener("resize",function(e){n.closePopup()}),this.rootElement.onclick=function(e){n._isOpen?n.closePopup():n.popup()};var o=this.rootElement.attributes.getNamedItem("placeholder");o&&(this._placeholderText=o.value),this._labelElement=document.createElement("span"),this._labelElement.className="ms-ctrl ms-dropdown-label",this._dropDownButtonElement=document.createElement("i"),this._dropDownButtonElement.className="ms-icon ms-ctrl-dropdown-button "+this.getButtonIconCssClassName(),this.rootElement.appendChild(this._labelElement),this.rootElement.appendChild(this._dropDownButtonElement),this.updateLabel()},t.prototype.popup=function(){var e=this;if(!this._isOpen){this._overlayElement=document.createElement("div"),this._overlayElement.className="ms-ctrl-overlay",this._overlayElement.tabIndex=0,this._overlayElement.style.width=document.documentElement.scrollWidth+"px",this._overlayElement.style.height=document.documentElement.scrollHeight+"px",this._overlayElement.onfocus=function(t){e.closePopup()},document.body.appendChild(this._overlayElement),this._popupControl=this.createPopupControl(),this._popupControl.onClose=function(t){e.closePopup(),e.rootElement.focus()};var t=this.rootElement.getBoundingClientRect();this._popupControlElement=this._popupControl.render(t),this._popupControlElement.classList.remove("ms-ctrl-slide","ms-ctrl-slideLeftToRight","ms-ctrl-slideRightToLeft","ms-ctrl-slideTopToBottom","ms-ctrl-slideRightToLeft"),this._overlayElement.appendChild(this._popupControlElement);var n,o=this._popupControlElement.getBoundingClientRect(),i=window.innerHeight-t.bottom,r=t.top,l=t.left+s.getScrollX();if(r<o.height&&i<o.height){var a=Math.min(o.height,window.innerHeight);this._popupControlElement.style.maxHeight=a+"px",n=a<o.height?s.getScrollY():s.getScrollY()+t.top+(t.height-a)/2;var c=window.innerWidth-t.right;if(t.left<o.width&&c<o.width){var u=Math.min(o.width,window.innerWidth);this._popupControlElement.style.maxWidth=u+"px",l=u<o.width?s.getScrollX():s.getScrollX()+t.left+(t.width-u)/2}else c>=o.width?(l=s.getScrollX()+t.right,this._popupControlElement.classList.add("ms-ctrl-slide","ms-ctrl-slideLeftToRight")):(l=s.getScrollX()+t.left-o.width,this._popupControlElement.classList.add("ms-ctrl-slide","ms-ctrl-slideRightToLeft"))}else i>=o.height?(n=s.getScrollY()+t.bottom,this._popupControlElement.classList.add("ms-ctrl-slide","ms-ctrl-slideTopToBottom")):(n=s.getScrollY()+t.top-o.height,this._popupControlElement.classList.add("ms-ctrl-slide","ms-ctrl-slideBottomToTop"));this._popupControlElement.style.left=l+"px",this._popupControlElement.style.top=n+"px",this._popupControlElement.focus(),this._isOpen=!0}},t.prototype.closePopup=function(){this._isOpen&&(document.body.removeChild(this._overlayElement),this._isOpen=!1)},Object.defineProperty(t.prototype,"isOpen",{get:function(){return this._isOpen},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeholderText",{get:function(){return this._placeholderText},set:function(e){this._placeholderText=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"value",{get:function(){return this._value},set:function(e){this._value!=e&&(this._value=e,this.updateLabel(),this.valueChanged())},enumerable:!0,configurable:!0}),t}(l.InputControl);t.InputWithPopup=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(){this._items=[],this.onItemAdded=null,this.onItemRemoved=null}return e.prototype.get=function(e){return this._items[e]},e.prototype.add=function(e){this._items.push(e),this.onItemAdded&&this.onItemAdded(e)},e.prototype.remove=function(e){var t=this._items.indexOf(e);t>=0&&(this._items=this._items.splice(t,1),this.onItemRemoved&&this.onItemRemoved(e))},e.prototype.indexOf=function(e){return this._items.indexOf(e)},Object.defineProperty(e.prototype,"length",{get:function(){return this._items.length},enumerable:!0,configurable:!0}),e}();t.Collection=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Sunday=0]="Sunday",e[e.Monday=1]="Monday",e[e.Tuesday=2]="Tuesday",e[e.Wednesday=3]="Wednesday",e[e.Thursday=4]="Thursday",e[e.Friday=5]="Friday",e[e.Saturday=6]="Saturday"}(t.DayOfWeek||(t.DayOfWeek={}))},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),s=n(0),l=n(1),a=function(){function e(e){this._isSubdued=!1,this._isSelected=!1,this.date=e}return e.prototype.selected=function(){this.onSelected&&this.onSelected(this)},e.prototype.render=function(){var e=this;return this._element=document.createElement("div"),this._element.className="ms-ctrl ms-ctrl-calendarDay",this._element.innerText=this.date.getDate().toString(),this._element.tabIndex=0,this._element.onclick=function(t){e.selected()},this._element.onkeydown=function(t){if(t.keyCode==s.KEY_ENTER)return e.selected(),!1},this._element},e.prototype.focus=function(){this._element.focus()},Object.defineProperty(e.prototype,"isSubdued",{get:function(){return this._isSubdued},set:function(e){this._isSubdued=e,this._isSubdued?this._element.classList.add("subdued"):this._element.classList.remove("subdued")},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isSelected",{get:function(){return this._isSelected},set:function(e){this._isSelected=e,this._isSelected?this._element.classList.add("selected"):this._element.classList.remove("selected")},enumerable:!0,configurable:!0}),e}();t.DayCell=a;var c=function(e){function t(){var t=e.call(this)||this;t._selectedDay=null,t._miniCalendarElement=document.createElement("table"),t._miniCalendarElement.className="ms-ctrl ms-ctrl-slide",t._miniCalendarElement.cellPadding="0px",t._miniCalendarElement.cellSpacing="0px";var n=document.createElement("div");n.className="ms-ctrl ms-ctrl-calendarHeader",n.style.display="flex",t._monthYearLabelElement=document.createElement("div"),t._monthYearLabelElement.style.flex="1 1 100%",n.appendChild(t._monthYearLabelElement);var o=document.createElement("div");o.style.flex="0 0 auto";var i=document.createElement("i");return i.className="ms-icon ms-ctrl-calendarNavButton ms-icon-chevronLeft",i.tabIndex=0,i.onclick=function(e){t.date=r.addMonths(t.date,-1)},i.onkeydown=function(e){if(e.keyCode==s.KEY_ENTER)return t.date=r.addMonths(t.date,-1),!1},o.appendChild(i),(i=document.createElement("i")).className="ms-icon ms-ctrl-calendarNavButton ms-icon-chevronRight",i.tabIndex=0,i.onclick=function(e){t.date=r.addMonths(t.date,1)},i.onkeydown=function(e){if(e.keyCode==s.KEY_ENTER)return t.date=r.addMonths(t.date,1),!1},o.appendChild(i),n.appendChild(o),t._rootContainerElement=document.createElement("div"),t._rootContainerElement.className="ms-ctrl ms-ctrl-calendar",t._rootContainerElement.appendChild(n),t._rootContainerElement.appendChild(t._miniCalendarElement),t.date=new Date,t}return i(t,e),t.prototype.generateDayCells=function(e){var t=this;this._days=[];var n=e.getMonth(),o=e.getFullYear(),i=new Date(o,n,1),s=new Date(o,n,r.daysInMonth(o,n)),l=i.getDay();l-r.CalendarSettings.firstDayOfWeek>0&&(i=r.addDays(i,r.CalendarSettings.firstDayOfWeek-l));var c=s.getDay(),u=r.CalendarSettings.firstDayOfWeek+6;u-c>0&&(s=r.addDays(s,u-c));var h=s.getDate(),p=s.getMonth(),d=s.getFullYear();do{var m=new a(i);m.onSelected=function(e){t.selectedDayCell=e,t.onDateChanged&&t.onDateChanged(t)},this._days.push(m);var f=i.getDate()==h&&i.getMonth()==p&&i.getFullYear()==d;i=r.addDays(i,1)}while(!f)},Object.defineProperty(t.prototype,"selectedDayCell",{get:function(){return this._selectedDay},set:function(e){this._selectedDay&&(this._selectedDay.isSelected=!1),this._selectedDay=e,this._selectedDay&&(this._selectedDay.isSelected=!0,this._date=this._selectedDay.date)},enumerable:!0,configurable:!0}),t.prototype.initializeSelection=function(){if(this._date)for(var e=0;e<this._days.length;e++)if(r.areDatesEqual(this._days[e].date,this.date)){this.selectedDayCell=this._days[e];break}},t.prototype.rebuildMiniCalendar=function(e,t){this.generateDayCells(e);var n=e.getMonth();this._miniCalendarElement.innerHTML="",this._miniCalendarElement.classList.remove("ms-ctrl-slide","ms-ctrl-slideLeftToRight","ms-ctrl-slideRightToLeft");for(var o=document.createElement("tr"),i=r.CalendarSettings.firstDayOfWeek,s=0;s<r.CalendarSettings.daysInWeek;s++){var l=document.createElement("td");l.className="ms-ctrl ms-ctrl-calendarDayHeader",l.innerText=r.CalendarSettings.getInitialDayName(i),o.appendChild(l),++i>=r.CalendarSettings.daysInWeek&&(i=0)}this._miniCalendarElement.appendChild(o);for(s=0;s<this._days.length;s++){s%7==0&&(o=document.createElement("tr"),this._miniCalendarElement.appendChild(o));var a=document.createElement("td");a.appendChild(this._days[s].render()),this._days[s].date.getMonth()!=n&&(this._days[s].isSubdued=!0),o.appendChild(a)}if(t){var c=e.getTime()-t.getTime();c>0?this._miniCalendarElement.classList.add("ms-ctrl-slide","ms-ctrl-slideRightToLeft"):c<0&&this._miniCalendarElement.classList.add("ms-ctrl-slide","ms-ctrl-slideLeftToRight")}},t.prototype.attach=function(t){e.prototype.attach.call(this,t),t.innerHTML="",t.appendChild(this._rootContainerElement)},t.prototype.focus=function(){this._selectedDay&&this._selectedDay.focus()},Object.defineProperty(t.prototype,"date",{get:function(){return this._date},set:function(e){var t=!0,n=e||new Date;this._date&&(t=!this._days||n.getFullYear()!=this._date.getFullYear()||n.getMonth()!=this._date.getMonth()),t&&this.rebuildMiniCalendar(n,this._date),this._date=n,this.initializeSelection(),this._monthYearLabelElement.innerText=r.CalendarSettings.getLongMonthName(this._date.getMonth())+" "+this._date.getFullYear()},enumerable:!0,configurable:!0}),t}(l.InputControl);t.Calendar=c},function(e,t,n){"use strict";function o(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}Object.defineProperty(t,"__esModule",{value:!0}),o(n(0)),o(n(5)),o(n(2)),o(n(4)),o(n(1)),o(n(3)),o(n(6)),o(n(8)),o(n(9)),o(n(10)),o(n(11)),o(n(12)),o(n(13))},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),s=n(4),l=n(3),a=function(){function e(e,t){this.key=e,this._value=t}return e.prototype.click=function(){this.onClick&&this.onClick(this)},e.prototype.toString=function(){return this.value},e.prototype.render=function(){var e=this;return this._element||(this._element=document.createElement("span"),this._element.className="ms-ctrl ms-ctrl-dropdown-item",this._element.innerText=this.value,this._element.onmouseup=function(t){e.click()}),this._element},Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){this._value=e,this._element&&(this._element.innerText=e)},enumerable:!0,configurable:!0}),e}();t.DropDownItem=a;var c=function(e){function t(t){var n=e.call(this)||this;return n._renderedItems=[],n._selectedIndex=-1,n._owner=t,n}return i(t,e),t.prototype.renderContent=function(){var e=document.createElement("div");e.className="ms-ctrl ms-popup";for(var t=this._owner.selectedIndex,n=0;n<this._owner.items.length;n++){var o=this._owner.items.get(n).render();o.tabIndex=0,e.appendChild(o),n==t&&o.focus(),this._renderedItems.push(o)}return e},t.prototype.keyDown=function(t){e.prototype.keyDown.call(this,t);var n=this._selectedIndex;switch(t.keyCode){case r.KEY_TAB:this.close();break;case r.KEY_ENTER:this.selectedIndex>=0&&(this._owner.selectedIndex=this.selectedIndex,this.close());break;case r.KEY_UP:n<=0?n=this._renderedItems.length-1:--n<0&&(n=this._renderedItems.length-1),this.selectedIndex=n,t.cancelBubble=!0;break;case r.KEY_DOWN:n<0?n=0:++n>=this._renderedItems.length&&(n=0),this.selectedIndex=n,t.cancelBubble=!0}},t.prototype.render=function(t){var n=e.prototype.render.call(this,t);return n.style.minWidth=t.width/2+"px",n.style.maxWidth=t.width+"px",n},Object.defineProperty(t.prototype,"selectedIndex",{get:function(){return this._selectedIndex},set:function(e){e>=0&&e<this._renderedItems.length&&(this._renderedItems[e].focus(),this._selectedIndex=e)},enumerable:!0,configurable:!0}),t}(l.PopupControl);t.DropDownPopupControl=c;var u=function(e){function t(){var t=e.call(this)||this;return t._items=new s.Collection,t._items.onItemAdded=function(e){e.onClick=function(e){t.itemClicked(e)}},t._items.onItemRemoved=function(e){e.onClick=null},t}return i(t,e),t.prototype.itemClicked=function(e){this.selectedItem=e,this.closePopup(),this.rootElement.focus()},t.prototype.validateRootElement=function(e){if(!(e instanceof HTMLDivElement))throw new Error("DropDown requires a DIV element as its root.")},t.prototype.createPopupControl=function(){return new c(this)},t.prototype.getCssClassName=function(){return"ms-ctrl ms-ctrl-dropdown"},t.prototype.attach=function(t){e.prototype.attach.call(this,t);for(var n=0;n<this.rootElement.children.length;n++){var o=this.rootElement.children[n];if("ms-dropdown-item"==o.tagName.toLowerCase()){var i=new a(o.attributes.getNamedItem("key").value,o.attributes.getNamedItem("value").value);this._items.add(i)}}},t.prototype.popup=function(){e.prototype.popup.call(this),this.popupControl.selectedIndex=this.selectedIndex},Object.defineProperty(t.prototype,"items",{get:function(){return this._items},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selectedItem",{get:function(){return this.value},set:function(e){this.value=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selectedIndex",{get:function(){return this.items.indexOf(this.value)},set:function(e){e>=0&&this.items.length>e&&(this.selectedItem=this.items.get(e))},enumerable:!0,configurable:!0}),t}(l.InputWithPopup);t.DropDown=u},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(3),s=n(6),l=function(e){function t(t){var n=e.call(this)||this;return n._owner=t,n}return i(t,e),t.prototype.renderContent=function(){var e=this,t=document.createElement("div");return t.className="ms-ctrl ms-calendarPopup",this._calendar=new s.Calendar,this._calendar.date=this._owner.value,this._calendar.onDateChanged=function(t){e._owner.value=t.date,e.close()},this._calendar.attach(t),t},t.prototype.focus=function(){this._calendar&&this._calendar.focus()},t}(r.PopupControl);t.CalendarPopupControl=l;var a=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.validateRootElement=function(e){if(!(e instanceof HTMLDivElement))throw new Error("DatePicker requires a DIV element as its root.")},t.prototype.createPopupControl=function(){return new l(this)},t.prototype.getValueAsString=function(){return this.value.toLocaleDateString()},t.prototype.getCssClassName=function(){return"ms-ctrl ms-ctrl-datePicker"},t.prototype.getButtonIconCssClassName=function(){return"ms-icon-calendar"},t.prototype.popup=function(){e.prototype.popup.call(this),this.isOpen&&this.popupControl.focus()},t}(r.InputWithPopup);t.DatePicker=a},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),s=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._label="",t._checkboxElement=null,t._spanElement=null,t}return i(t,e),t.createId=function(){var e=t.creationIndex;return t.creationIndex++,e},t.prototype.changed=function(){this.onChange&&this.onChange(this)},t.prototype.keyDown=function(e){switch(e.keyCode){case r.KEY_ENTER:this.isChecked=!this.isChecked}},t.prototype.attach=function(n){var o=this;e.prototype.attach.call(this,n),n.className="ms-ctrl ms-ctrl-checkbox",n.tabIndex=0;var i=n.attributes.label;i&&(this._label=i.value);var r=n.attributes.ischecked;r&&(this._isChecked="true"===r.value),this._checkboxElement=document.createElement("input"),this._checkboxElement.id="ms-ctrl-checkbox-"+t.createId(),this._checkboxElement.type="checkbox",this._checkboxElement.style.position="absolute",this._checkboxElement.checked=this.isChecked,this._checkboxElement.onchange=function(e){o.changed()};var s=document.createElement("label");s.htmlFor=this._checkboxElement.id,this._spanElement=document.createElement("span"),this._spanElement.innerText=this._label,s.appendChild(this._spanElement),n.innerHTML="",n.appendChild(this._checkboxElement),n.appendChild(s)},Object.defineProperty(t.prototype,"label",{get:function(){return this._label},set:function(e){this._label=e,this._spanElement&&(this._spanElement.innerText=this._label)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isChecked",{get:function(){return this._isChecked},set:function(e){this._isChecked!=e&&(this._isChecked=e,this._checkboxElement&&(this._checkboxElement.checked=this._isChecked),this.changed())},enumerable:!0,configurable:!0}),t.creationIndex=0,t}(n(1).InputControl);t.CheckBox=s},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),s=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._label="",t._checkboxElement=null,t._spanElement=null,t}return i(t,e),t.createId=function(){var e=t.creationIndex;return t.creationIndex++,e},t.prototype.changed=function(){this.onChange&&this.onChange(this)},t.prototype.keyDown=function(e){switch(e.keyCode){case r.KEY_ENTER:this.isChecked=!this.isChecked}},t.prototype.attach=function(n){var o=this;e.prototype.attach.call(this,n),n.className="ms-ctrl ms-ctrl-radiobutton",n.tabIndex=0;var i=n.attributes.label;i&&(this._label=i.value);var r=n.attributes.ischecked;r&&(this._isChecked="true"===r.value),this._checkboxElement=document.createElement("input"),this._checkboxElement.id="ms-ctrl-radio-"+t.createId(),this._checkboxElement.type="radio",this._checkboxElement.style.position="absolute",this._checkboxElement.checked=this.isChecked,this._checkboxElement.onchange=function(e){o.changed()};var s=n.attributes.groupname;s&&(this._checkboxElement.name=s.value);var l=document.createElement("label");l.htmlFor=this._checkboxElement.id,this._spanElement=document.createElement("span"),this._spanElement.innerText=this._label,l.appendChild(this._spanElement),n.innerHTML="",n.appendChild(this._checkboxElement),n.appendChild(l)},Object.defineProperty(t.prototype,"label",{get:function(){return this._label},set:function(e){this._label=e,this._spanElement&&(this._spanElement.innerText=this._label)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isChecked",{get:function(){return this._isChecked},set:function(e){this._isChecked!=e&&(this._isChecked=e,this._checkboxElement&&(this._checkboxElement.checked=this._isChecked),this.changed())},enumerable:!0,configurable:!0}),t.creationIndex=0,t}(n(1).InputControl);t.RadioButton=s},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),s=n(1),l=function(){function e(){}return e.prototype.changed=function(){this.onChange&&this.onChange()},e}(),a=function(e){function t(){var t=e.call(this)||this;return t._inputElement=document.createElement("input"),t._inputElement.className="ms-ctrl ms-ctrl-textbox",t._inputElement.type="text",t._inputElement.oninput=function(e){t.changed()},t}return i(t,e),Object.defineProperty(t.prototype,"element",{get:function(){return this._inputElement},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeholder",{set:function(e){this._inputElement.placeholder=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lineCount",{set:function(e){},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxLength",{set:function(e){this._inputElement.maxLength!=e&&(this._inputElement.maxLength=e,this.value=this.value.substr(0,e))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"value",{get:function(){return this._inputElement.value},set:function(e){this._inputElement.value=e},enumerable:!0,configurable:!0}),t}(l),c=function(e){function t(){var t=e.call(this)||this;return t._textareaElement=document.createElement("textarea"),t._textareaElement.className="ms-ctrl ms-ctrl-textbox ms-ctrl-textbox-multiline",t._textareaElement.oninput=function(e){t.changed()},t}return i(t,e),Object.defineProperty(t.prototype,"element",{get:function(){return this._textareaElement},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeholder",{set:function(e){this._textareaElement.placeholder=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lineCount",{set:function(e){this._textareaElement.rows=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxLength",{set:function(e){this._textareaElement.maxLength!=e&&(this._textareaElement.maxLength=e,this.value=this.value.substr(0,e))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"value",{get:function(){return this._textareaElement.value},set:function(e){this._textareaElement.value=e},enumerable:!0,configurable:!0}),t}(l),u=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._isMultiline=!1,t._lineCount=3,t}return i(t,e),t.prototype.editBoxChanged=function(){this.onChange&&this.onChange(this)},t.prototype.recreateEditBox=function(){var e=this,t=null;t=this._editBox?this._editBox.value:this.rootElement.innerText,this._isMultiline?this._editBox=new c:this._editBox=new a,t&&(this._editBox.value=t),this._editBox.lineCount=this._lineCount,this._editBox.maxLength=this._maxLength,this._editBox.placeholder=this._placeholder,this._editBox.onChange=function(){e.editBoxChanged()},this.rootElement.innerHTML="",this.rootElement.appendChild(this._editBox.element)},Object.defineProperty(t.prototype,"editBox",{get:function(){return this._editBox||this.recreateEditBox(),this._editBox},enumerable:!0,configurable:!0}),t.prototype.attach=function(t){e.prototype.attach.call(this,t),this._isMultiline=r.getAttributeValueAsBool(t,"ismultiline",!1),this._lineCount=r.getAttributeValueAsInt(t,"lines",3),this._maxLength=r.getAttributeValueAsInt(t,"maxlength",5e4),this._placeholder=r.getAttributeValueAsString(t,"placeholder",null),this.recreateEditBox()},Object.defineProperty(t.prototype,"value",{get:function(){return this.editBox.value},set:function(e){this.editBox.value=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeholder",{get:function(){return this._placeholder},set:function(e){this._placeholder=e,this.editBox.placeholder=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isMultiline",{get:function(){return this._isMultiline},set:function(e){this._isMultiline!=e&&(this._isMultiline=e,this.recreateEditBox())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lineCount",{get:function(){return this._lineCount},set:function(e){e>0&&(this._lineCount=e,this.editBox.lineCount=e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxLength",{get:function(){return this._maxLength},set:function(e){e>0&&(this._maxLength=e,this.editBox.maxLength=e)},enumerable:!0,configurable:!0}),t}(s.InputControl);t.TextBox=u},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),s=n(0),l=n(4),a=function(e){function t(){var t=e.call(this)||this;return t._items=new l.Collection,t._renderedItems=[],t._selectedIndex=-1,t}return i(t,e),t.prototype.renderContent=function(){var e=document.createElement("div");e.className="ms-ctrl ms-popup";for(var t=0;t<this._items.length;t++){var n=this._items.get(t).render();n.tabIndex=0,e.appendChild(n),t==this.selectedIndex&&n.focus(),this._renderedItems.push(n)}return e},t.prototype.keyDown=function(t){e.prototype.keyDown.call(this,t);var n=this._selectedIndex;switch(t.keyCode){case s.KEY_TAB:this.close();break;case s.KEY_UP:n<=0?n=this._renderedItems.length-1:--n<0&&(n=this._renderedItems.length-1),this.selectedIndex=n,t.cancelBubble=!0;break;case s.KEY_DOWN:n<0?n=0:++n>=this._renderedItems.length&&(n=0),this.selectedIndex=n,t.cancelBubble=!0}},t.prototype.popup=function(e){var t=this;if(!this._isOpen){this._overlayElement=document.createElement("div"),this._overlayElement.className="ms-ctrl-overlay",this._overlayElement.tabIndex=0,this._overlayElement.style.width=document.documentElement.scrollWidth+"px",this._overlayElement.style.height=document.documentElement.scrollHeight+"px",this._overlayElement.onfocus=function(e){t.closePopup()},document.body.appendChild(this._overlayElement);var n=e.getBoundingClientRect();this._popupControlElement=this.render(n),this._popupControlElement.classList.remove("ms-ctrl-slide","ms-ctrl-slideLeftToRight","ms-ctrl-slideRightToLeft","ms-ctrl-slideTopToBottom","ms-ctrl-slideRightToLeft"),this._overlayElement.appendChild(this._popupControlElement);var o,i=this._popupControlElement.getBoundingClientRect(),s=window.innerHeight-n.bottom,l=n.top,a=n.left+r.getScrollX();if(l<i.height&&s<i.height){var c=window.innerHeight;this._popupControlElement.style.maxHeight=c+"px",o=c<i.height?r.getScrollY():r.getScrollY()+n.top+(n.height-c)/2;var u=window.innerWidth-n.right;if(n.left<i.width&&u<i.width){var h=window.innerWidth;this._popupControlElement.style.maxWidth=h+"px",a=h<i.width?r.getScrollX():r.getScrollX()+n.left+(n.width-h)/2}else u>=i.width?(a=r.getScrollX()+n.right,this._popupControlElement.classList.add("ms-ctrl-slide","ms-ctrl-slideLeftToRight")):(a=r.getScrollX()+n.left-i.width,this._popupControlElement.classList.add("ms-ctrl-slide","ms-ctrl-slideRightToLeft"))}else s>=i.height?(o=r.getScrollY()+n.bottom,this._popupControlElement.classList.add("ms-ctrl-slide","ms-ctrl-slideTopToBottom")):(o=r.getScrollY()+n.top-i.height,this._popupControlElement.classList.add("ms-ctrl-slide","ms-ctrl-slideBottomToTop"));this._popupControlElement.style.left=a+"px",this._popupControlElement.style.top=o+"px",this._popupControlElement.focus(),this._isOpen=!0}},t.prototype.closePopup=function(){this._isOpen&&(document.body.removeChild(this._overlayElement),this._isOpen=!1)},Object.defineProperty(t.prototype,"isOpen",{get:function(){return this._isOpen},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"items",{get:function(){return this._items},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selectedIndex",{get:function(){return this._selectedIndex},set:function(e){e>=0&&e<this._renderedItems.length&&(this._renderedItems[e].focus(),this._selectedIndex=e)},enumerable:!0,configurable:!0}),t}(n(3).PopupControl);t.PopupMenu=a}])}); | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("ACControls",[],t):"object"==typeof exports?exports.ACControls=t():e.ACControls=t()}(this,function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var i=t[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(o,i,function(t){return e[t]}.bind(null,i));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=7)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.KEY_TAB=9,t.KEY_ENTER=13,t.KEY_ESCAPE=27,t.KEY_UP=38,t.KEY_DOWN=40,t.KEY_DELETE=46},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(){}return e.prototype.validateRootElement=function(e){},e.prototype.keyDown=function(e){},Object.defineProperty(e.prototype,"rootElement",{get:function(){return this._rootElement},enumerable:!0,configurable:!0}),e.prototype.attach=function(e){var t=this;this.validateRootElement(e),this._rootElement=e,this._rootElement.onkeydown=function(e){t.keyDown(e)}},e}();t.InputControl=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(5),i=function(){function e(){}return e.getLongDayName=function(t){if(t>=0&&t<e.longDayNames.length)return e.longDayNames[t];throw new Error("Day index out of range: "+t)},e.getShortDayName=function(t){if(t>=0&&t<e.shortDayNames.length)return e.shortDayNames[t];throw new Error("Day index out of range: "+t)},e.getInitialDayName=function(t){if(t>=0&&t<e.minimalDayNames.length)return e.minimalDayNames[t];throw new Error("Day index out of range: "+t)},e.getLongMonthName=function(t){if(t>=0&&t<e.longMonthNames.length)return e.longMonthNames[t];throw new Error("Month index out of range: "+t)},e.getShortMonthName=function(t){if(t>=0&&t<e.shortMonthNames.length)return e.shortMonthNames[t];throw new Error("Month index out of range: "+t)},e.monthsInYear=12,e.daysInWeek=7,e.firstDayOfWeek=o.DayOfWeek.Sunday,e.longDayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],e.shortDayNames=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],e.minimalDayNames=["Su","Mo","Tu","We","Th","Fr","Sa"],e.longMonthNames=["January","February","March","April","May","June","July","August","September","October","November","December"],e.shortMonthNames=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],e}();function r(e,t){var n=new Date(e.getTime());return n.setDate(n.getDate()+t),n}t.CalendarSettings=i,t.daysInMonth=function(e,t){switch(t){case 1:return e%4==0&&e%100||e%400==0?29:28;case 3:case 5:case 8:case 10:return 30;default:return 31}},t.addDays=r,t.addMonths=function(e,t){var n=new Date(e.getTime()),o=n.getMonth()+t;return n.setMonth(o),n.getMonth()!==(o%i.monthsInYear+i.monthsInYear)%i.monthsInYear&&(n=r(n,-n.getDate())),n},t.areDatesEqual=function(e,t){return e.getFullYear()==t.getFullYear()&&e.getMonth()==t.getMonth()&&e.getDate()==t.getDate()},t.getScrollX=function(){return window.pageXOffset},t.getScrollY=function(){return window.pageYOffset},t.getAttributeValueAsBool=function(e,t,n){var o=e.attributes[t];return o?"true"===o.value:n},t.getAttributeValueAsString=function(e,t,n){var o=e.attributes[t];return o?o.value:n},t.getAttributeValueAsInt=function(e,t,n){var o=e.attributes[t];if(o){var i=parseInt(o.value);if(!isNaN(i))return i}return n}},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),s=n(2),l=n(1),a=function(){function e(){this._isOpen=!1}return e.prototype.keyDown=function(e){switch(e.keyCode){case r.KEY_ESCAPE:this.closePopup(!0)}},e.prototype.render=function(e){var t=this,n=document.createElement("div");return n.tabIndex=0,n.className="ms-ctrl ms-ctrl-popup-container",n.onkeydown=function(e){return t.keyDown(e),!e.cancelBubble},n.appendChild(this.renderContent()),n},e.prototype.focus=function(){this._popupElement&&this._popupElement.firstElementChild.focus()},e.prototype.popup=function(e){var t=this;if(!this._isOpen){this._overlayElement=document.createElement("div"),this._overlayElement.className="ms-ctrl-overlay",this._overlayElement.tabIndex=0,this._overlayElement.style.width=document.documentElement.scrollWidth+"px",this._overlayElement.style.height=document.documentElement.scrollHeight+"px",this._overlayElement.onfocus=function(e){t.closePopup(!0)},document.body.appendChild(this._overlayElement);var n=e.getBoundingClientRect();this._popupElement=this.render(n),this._popupElement.classList.remove("ms-ctrl-slide","ms-ctrl-slideLeftToRight","ms-ctrl-slideRightToLeft","ms-ctrl-slideTopToBottom","ms-ctrl-slideRightToLeft"),this._overlayElement.appendChild(this._popupElement);var o,i=this._popupElement.getBoundingClientRect(),r=window.innerHeight-n.bottom,l=n.top,a=(window.innerWidth,n.left),c=(a=window.innerWidth-n.right,n.left),u=n.left+s.getScrollX();if(l<i.height&&r<i.height){var h=Math.min(i.height,window.innerHeight);if(this._popupElement.style.maxHeight=h+"px",o=h<i.height?s.getScrollY():s.getScrollY()+n.top+(n.height-h)/2,c<i.width&&a<i.width){var p=Math.min(i.width,window.innerWidth);this._popupElement.style.maxWidth=p+"px",u=p<i.width?s.getScrollX():s.getScrollX()+n.left+(n.width-p)/2}else a>=i.width?(u=s.getScrollX()+n.right,this._popupElement.classList.add("ms-ctrl-slide","ms-ctrl-slideLeftToRight")):(u=s.getScrollX()+n.left-i.width,this._popupElement.classList.add("ms-ctrl-slide","ms-ctrl-slideRightToLeft"))}else r>=i.height?(o=s.getScrollY()+n.bottom,this._popupElement.classList.add("ms-ctrl-slide","ms-ctrl-slideTopToBottom")):(o=s.getScrollY()+n.top-i.height,this._popupElement.classList.add("ms-ctrl-slide","ms-ctrl-slideBottomToTop")),a<i.width&&(u=s.getScrollX()+n.right-i.width);this._popupElement.style.left=u+"px",this._popupElement.style.top=o+"px",this._popupElement.focus(),this._isOpen=!0}},e.prototype.closePopup=function(e){this._isOpen&&(document.body.removeChild(this._overlayElement),this._isOpen=!1,this.onClose&&this.onClose(this,e))},Object.defineProperty(e.prototype,"isOpen",{get:function(){return this._isOpen},enumerable:!0,configurable:!0}),e}();t.PopupControl=a;var c=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.keyDown=function(e){switch(e.keyCode){case r.KEY_ENTER:this.popup()}},t.prototype.updateLabel=function(){this._labelElement&&(this._value?(this._labelElement.innerHTML=this.getValueAsString(),this._labelElement.classList.remove("placeholder")):(this._labelElement.innerText=this._placeholderText?this._placeholderText:"",this._labelElement.classList.add("placeholder")))},Object.defineProperty(t.prototype,"popupControl",{get:function(){return this._popupControl},enumerable:!0,configurable:!0}),t.prototype.getButtonIconCssClassName=function(){return"ms-icon-chevronDown"},t.prototype.getValueAsString=function(){return this._value.toString()},t.prototype.valueChanged=function(){this.onValueChanged&&this.onValueChanged(this)},t.prototype.attach=function(t){var n=this;e.prototype.attach.call(this,t),t.tabIndex=0,t.className=this.getCssClassName(),window.addEventListener("resize",function(e){n.closePopup(!0)}),this.rootElement.onclick=function(e){n.isOpen?n.closePopup(!0):n.popup()};var o=this.rootElement.attributes.getNamedItem("placeholder");o&&(this._placeholderText=o.value),this._labelElement=document.createElement("span"),this._labelElement.className="ms-ctrl ms-dropdown-label",this._dropDownButtonElement=document.createElement("i"),this._dropDownButtonElement.className="ms-icon ms-ctrl-dropdown-button "+this.getButtonIconCssClassName(),this.rootElement.appendChild(this._labelElement),this.rootElement.appendChild(this._dropDownButtonElement),this.updateLabel()},t.prototype.popup=function(){var e=this;this._popupControl=this.createPopupControl(),this._popupControl=this.createPopupControl(),this._popupControl.onClose=function(t,n){e.closePopup(n),e.rootElement.focus()},this._popupControl.popup(this.rootElement)},t.prototype.closePopup=function(e){this.popupControl&&this.popupControl.closePopup(e)},Object.defineProperty(t.prototype,"isOpen",{get:function(){return!!this._popupControl&&this._popupControl.isOpen},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeholderText",{get:function(){return this._placeholderText},set:function(e){this._placeholderText=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"value",{get:function(){return this._value},set:function(e){this._value!=e&&(this._value=e,this.updateLabel(),this.valueChanged())},enumerable:!0,configurable:!0}),t}(l.InputControl);t.InputWithPopup=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(){this._items=[],this.onItemAdded=null,this.onItemRemoved=null}return e.prototype.get=function(e){return this._items[e]},e.prototype.add=function(e){this._items.push(e),this.onItemAdded&&this.onItemAdded(e)},e.prototype.remove=function(e){var t=this._items.indexOf(e);t>=0&&(this._items=this._items.splice(t,1),this.onItemRemoved&&this.onItemRemoved(e))},e.prototype.indexOf=function(e){return this._items.indexOf(e)},Object.defineProperty(e.prototype,"length",{get:function(){return this._items.length},enumerable:!0,configurable:!0}),e}();t.Collection=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Sunday=0]="Sunday",e[e.Monday=1]="Monday",e[e.Tuesday=2]="Tuesday",e[e.Wednesday=3]="Wednesday",e[e.Thursday=4]="Thursday",e[e.Friday=5]="Friday",e[e.Saturday=6]="Saturday"}(t.DayOfWeek||(t.DayOfWeek={}))},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),s=n(0),l=n(1),a=function(){function e(e){this._isSubdued=!1,this._isSelected=!1,this.date=e}return e.prototype.selected=function(){this.onSelected&&this.onSelected(this)},e.prototype.render=function(){var e=this;return this._element=document.createElement("div"),this._element.className="ms-ctrl ms-ctrl-calendarDay",this._element.innerText=this.date.getDate().toString(),this._element.tabIndex=0,this._element.onclick=function(t){e.selected()},this._element.onkeydown=function(t){if(t.keyCode==s.KEY_ENTER)return e.selected(),!1},this._element},e.prototype.focus=function(){this._element.focus()},Object.defineProperty(e.prototype,"isSubdued",{get:function(){return this._isSubdued},set:function(e){this._isSubdued=e,this._isSubdued?this._element.classList.add("subdued"):this._element.classList.remove("subdued")},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isSelected",{get:function(){return this._isSelected},set:function(e){this._isSelected=e,this._isSelected?this._element.classList.add("selected"):this._element.classList.remove("selected")},enumerable:!0,configurable:!0}),e}();t.DayCell=a;var c=function(e){function t(){var t=e.call(this)||this;t._selectedDay=null,t._miniCalendarElement=document.createElement("table"),t._miniCalendarElement.className="ms-ctrl ms-ctrl-slide",t._miniCalendarElement.cellPadding="0px",t._miniCalendarElement.cellSpacing="0px";var n=document.createElement("div");n.className="ms-ctrl ms-ctrl-calendarHeader",n.style.display="flex",t._monthYearLabelElement=document.createElement("div"),t._monthYearLabelElement.style.flex="1 1 100%",n.appendChild(t._monthYearLabelElement);var o=document.createElement("div");o.style.flex="0 0 auto";var i=document.createElement("i");return i.className="ms-icon ms-ctrl-calendarNavButton ms-icon-chevronLeft",i.tabIndex=0,i.onclick=function(e){t.date=r.addMonths(t.date,-1)},i.onkeydown=function(e){if(e.keyCode==s.KEY_ENTER)return t.date=r.addMonths(t.date,-1),!1},o.appendChild(i),(i=document.createElement("i")).className="ms-icon ms-ctrl-calendarNavButton ms-icon-chevronRight",i.tabIndex=0,i.onclick=function(e){t.date=r.addMonths(t.date,1)},i.onkeydown=function(e){if(e.keyCode==s.KEY_ENTER)return t.date=r.addMonths(t.date,1),!1},o.appendChild(i),n.appendChild(o),t._rootContainerElement=document.createElement("div"),t._rootContainerElement.className="ms-ctrl ms-ctrl-calendar",t._rootContainerElement.appendChild(n),t._rootContainerElement.appendChild(t._miniCalendarElement),t.date=new Date,t}return i(t,e),t.prototype.generateDayCells=function(e){var t=this;this._days=[];var n=e.getMonth(),o=e.getFullYear(),i=new Date(o,n,1),s=new Date(o,n,r.daysInMonth(o,n)),l=i.getDay();l-r.CalendarSettings.firstDayOfWeek>0&&(i=r.addDays(i,r.CalendarSettings.firstDayOfWeek-l));var c=s.getDay(),u=r.CalendarSettings.firstDayOfWeek+6;u-c>0&&(s=r.addDays(s,u-c));var h=s.getDate(),p=s.getMonth(),d=s.getFullYear();do{var m=new a(i);m.onSelected=function(e){t.selectedDayCell=e,t.onDateChanged&&t.onDateChanged(t)},this._days.push(m);var f=i.getDate()==h&&i.getMonth()==p&&i.getFullYear()==d;i=r.addDays(i,1)}while(!f)},Object.defineProperty(t.prototype,"selectedDayCell",{get:function(){return this._selectedDay},set:function(e){this._selectedDay&&(this._selectedDay.isSelected=!1),this._selectedDay=e,this._selectedDay&&(this._selectedDay.isSelected=!0,this._date=this._selectedDay.date)},enumerable:!0,configurable:!0}),t.prototype.initializeSelection=function(){if(this._date)for(var e=0;e<this._days.length;e++)if(r.areDatesEqual(this._days[e].date,this.date)){this.selectedDayCell=this._days[e];break}},t.prototype.rebuildMiniCalendar=function(e,t){this.generateDayCells(e);var n=e.getMonth();this._miniCalendarElement.innerHTML="",this._miniCalendarElement.classList.remove("ms-ctrl-slide","ms-ctrl-slideLeftToRight","ms-ctrl-slideRightToLeft");for(var o=document.createElement("tr"),i=r.CalendarSettings.firstDayOfWeek,s=0;s<r.CalendarSettings.daysInWeek;s++){var l=document.createElement("td");l.className="ms-ctrl ms-ctrl-calendarDayHeader",l.innerText=r.CalendarSettings.getInitialDayName(i),o.appendChild(l),++i>=r.CalendarSettings.daysInWeek&&(i=0)}this._miniCalendarElement.appendChild(o);for(s=0;s<this._days.length;s++){s%7==0&&(o=document.createElement("tr"),this._miniCalendarElement.appendChild(o));var a=document.createElement("td");a.appendChild(this._days[s].render()),this._days[s].date.getMonth()!=n&&(this._days[s].isSubdued=!0),o.appendChild(a)}if(t){var c=e.getTime()-t.getTime();c>0?this._miniCalendarElement.classList.add("ms-ctrl-slide","ms-ctrl-slideRightToLeft"):c<0&&this._miniCalendarElement.classList.add("ms-ctrl-slide","ms-ctrl-slideLeftToRight")}},t.prototype.attach=function(t){e.prototype.attach.call(this,t),t.innerHTML="",t.appendChild(this._rootContainerElement)},t.prototype.focus=function(){this._selectedDay&&this._selectedDay.focus()},Object.defineProperty(t.prototype,"date",{get:function(){return this._date},set:function(e){var t=!0,n=e||new Date;this._date&&(t=!this._days||n.getFullYear()!=this._date.getFullYear()||n.getMonth()!=this._date.getMonth()),t&&this.rebuildMiniCalendar(n,this._date),this._date=n,this.initializeSelection(),this._monthYearLabelElement.innerText=r.CalendarSettings.getLongMonthName(this._date.getMonth())+" "+this._date.getFullYear()},enumerable:!0,configurable:!0}),t}(l.InputControl);t.Calendar=c},function(e,t,n){"use strict";function o(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}Object.defineProperty(t,"__esModule",{value:!0}),o(n(0)),o(n(5)),o(n(2)),o(n(4)),o(n(1)),o(n(3)),o(n(6)),o(n(8)),o(n(9)),o(n(10)),o(n(11)),o(n(12)),o(n(13))},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),s=n(4),l=n(3),a=function(){function e(e,t){this.key=e,this._value=t}return e.prototype.click=function(){this.onClick&&this.onClick(this)},e.prototype.toString=function(){return this.value},e.prototype.render=function(){var e=this;return this._element||(this._element=document.createElement("span"),this._element.className="ms-ctrl ms-ctrl-dropdown-item",this._element.innerText=this.value,this._element.onmouseup=function(t){e.click()}),this._element},Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){this._value=e,this._element&&(this._element.innerText=e)},enumerable:!0,configurable:!0}),e}();t.DropDownItem=a;var c=function(e){function t(t){var n=e.call(this)||this;return n._renderedItems=[],n._selectedIndex=-1,n._owner=t,n}return i(t,e),t.prototype.renderContent=function(){var e=document.createElement("div");e.className="ms-ctrl ms-popup";for(var t=this._owner.selectedIndex,n=0;n<this._owner.items.length;n++){var o=this._owner.items.get(n).render();o.tabIndex=0,e.appendChild(o),n==t&&o.focus(),this._renderedItems.push(o)}return e},t.prototype.keyDown=function(t){e.prototype.keyDown.call(this,t);var n=this._selectedIndex;switch(t.keyCode){case r.KEY_TAB:this.closePopup(!0);break;case r.KEY_ENTER:this.selectedIndex>=0&&(this._owner.selectedIndex=this.selectedIndex,this.closePopup(!1));break;case r.KEY_UP:n<=0?n=this._renderedItems.length-1:--n<0&&(n=this._renderedItems.length-1),this.selectedIndex=n,t.cancelBubble=!0;break;case r.KEY_DOWN:n<0?n=0:++n>=this._renderedItems.length&&(n=0),this.selectedIndex=n,t.cancelBubble=!0}},t.prototype.render=function(t){var n=e.prototype.render.call(this,t);return n.style.minWidth=t.width/2+"px",n.style.maxWidth=t.width+"px",n},Object.defineProperty(t.prototype,"selectedIndex",{get:function(){return this._selectedIndex},set:function(e){e>=0&&e<this._renderedItems.length&&(this._renderedItems[e].focus(),this._selectedIndex=e)},enumerable:!0,configurable:!0}),t}(l.PopupControl);t.DropDownPopupControl=c;var u=function(e){function t(){var t=e.call(this)||this;return t._items=new s.Collection,t._items.onItemAdded=function(e){e.onClick=function(e){t.itemClicked(e)}},t._items.onItemRemoved=function(e){e.onClick=null},t}return i(t,e),t.prototype.itemClicked=function(e){this.selectedItem=e,this.closePopup(!1),this.rootElement.focus()},t.prototype.validateRootElement=function(e){if(!(e instanceof HTMLDivElement))throw new Error("DropDown requires a DIV element as its root.")},t.prototype.createPopupControl=function(){return new c(this)},t.prototype.getCssClassName=function(){return"ms-ctrl ms-ctrl-dropdown"},t.prototype.attach=function(t){e.prototype.attach.call(this,t);for(var n=0;n<this.rootElement.children.length;n++){var o=this.rootElement.children[n];if("ms-dropdown-item"==o.tagName.toLowerCase()){var i=new a(o.attributes.getNamedItem("key").value,o.attributes.getNamedItem("value").value);this._items.add(i)}}},t.prototype.popup=function(){e.prototype.popup.call(this),this.popupControl.selectedIndex=this.selectedIndex},Object.defineProperty(t.prototype,"items",{get:function(){return this._items},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selectedItem",{get:function(){return this.value},set:function(e){this.value=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selectedIndex",{get:function(){return this.items.indexOf(this.value)},set:function(e){e>=0&&this.items.length>e&&(this.selectedItem=this.items.get(e))},enumerable:!0,configurable:!0}),t}(l.InputWithPopup);t.DropDown=u},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(3),s=n(6),l=function(e){function t(t){var n=e.call(this)||this;return n._owner=t,n}return i(t,e),t.prototype.renderContent=function(){var e=this,t=document.createElement("div");return t.className="ms-ctrl ms-calendarPopup",this._calendar=new s.Calendar,this._calendar.date=this._owner.value,this._calendar.onDateChanged=function(t){e._owner.value=t.date,e.closePopup(!1)},this._calendar.attach(t),t},t.prototype.focus=function(){this._calendar&&this._calendar.focus()},t}(r.PopupControl);t.CalendarPopupControl=l;var a=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.prototype.validateRootElement=function(e){if(!(e instanceof HTMLDivElement))throw new Error("DatePicker requires a DIV element as its root.")},t.prototype.createPopupControl=function(){return new l(this)},t.prototype.getValueAsString=function(){return this.value.toLocaleDateString()},t.prototype.getCssClassName=function(){return"ms-ctrl ms-ctrl-datePicker"},t.prototype.getButtonIconCssClassName=function(){return"ms-icon-calendar"},t.prototype.popup=function(){e.prototype.popup.call(this),this.isOpen&&this.popupControl.focus()},t}(r.InputWithPopup);t.DatePicker=a},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),s=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._label="",t._checkboxElement=null,t._spanElement=null,t}return i(t,e),t.createId=function(){var e=t.creationIndex;return t.creationIndex++,e},t.prototype.changed=function(){this.onChange&&this.onChange(this)},t.prototype.keyDown=function(e){switch(e.keyCode){case r.KEY_ENTER:this.isChecked=!this.isChecked}},t.prototype.attach=function(n){var o=this;e.prototype.attach.call(this,n),n.className="ms-ctrl ms-ctrl-checkbox",n.tabIndex=0;var i=n.attributes.label;i&&(this._label=i.value);var r=n.attributes.ischecked;r&&(this._isChecked="true"===r.value),this._checkboxElement=document.createElement("input"),this._checkboxElement.id="ms-ctrl-checkbox-"+t.createId(),this._checkboxElement.type="checkbox",this._checkboxElement.style.position="absolute",this._checkboxElement.checked=this.isChecked,this._checkboxElement.onchange=function(e){o.changed()};var s=document.createElement("label");s.htmlFor=this._checkboxElement.id,this._spanElement=document.createElement("span"),this._spanElement.innerText=this._label,s.appendChild(this._spanElement),n.innerHTML="",n.appendChild(this._checkboxElement),n.appendChild(s)},Object.defineProperty(t.prototype,"label",{get:function(){return this._label},set:function(e){this._label=e,this._spanElement&&(this._spanElement.innerText=this._label)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isChecked",{get:function(){return this._isChecked},set:function(e){this._isChecked!=e&&(this._isChecked=e,this._checkboxElement&&(this._checkboxElement.checked=this._isChecked),this.changed())},enumerable:!0,configurable:!0}),t.creationIndex=0,t}(n(1).InputControl);t.CheckBox=s},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),s=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._label="",t._checkboxElement=null,t._spanElement=null,t}return i(t,e),t.createId=function(){var e=t.creationIndex;return t.creationIndex++,e},t.prototype.changed=function(){this.onChange&&this.onChange(this)},t.prototype.keyDown=function(e){switch(e.keyCode){case r.KEY_ENTER:this.isChecked=!this.isChecked}},t.prototype.attach=function(n){var o=this;e.prototype.attach.call(this,n),n.className="ms-ctrl ms-ctrl-radiobutton",n.tabIndex=0;var i=n.attributes.label;i&&(this._label=i.value);var r=n.attributes.ischecked;r&&(this._isChecked="true"===r.value),this._checkboxElement=document.createElement("input"),this._checkboxElement.id="ms-ctrl-radio-"+t.createId(),this._checkboxElement.type="radio",this._checkboxElement.style.position="absolute",this._checkboxElement.checked=this.isChecked,this._checkboxElement.onchange=function(e){o.changed()};var s=n.attributes.groupname;s&&(this._checkboxElement.name=s.value);var l=document.createElement("label");l.htmlFor=this._checkboxElement.id,this._spanElement=document.createElement("span"),this._spanElement.innerText=this._label,l.appendChild(this._spanElement),n.innerHTML="",n.appendChild(this._checkboxElement),n.appendChild(l)},Object.defineProperty(t.prototype,"label",{get:function(){return this._label},set:function(e){this._label=e,this._spanElement&&(this._spanElement.innerText=this._label)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isChecked",{get:function(){return this._isChecked},set:function(e){this._isChecked!=e&&(this._isChecked=e,this._checkboxElement&&(this._checkboxElement.checked=this._isChecked),this.changed())},enumerable:!0,configurable:!0}),t.creationIndex=0,t}(n(1).InputControl);t.RadioButton=s},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),s=n(1),l=function(){function e(){}return e.prototype.changed=function(){this.onChange&&this.onChange()},e}(),a=function(e){function t(){var t=e.call(this)||this;return t._inputElement=document.createElement("input"),t._inputElement.className="ms-ctrl ms-ctrl-textbox",t._inputElement.type="text",t._inputElement.oninput=function(e){t.changed()},t}return i(t,e),Object.defineProperty(t.prototype,"element",{get:function(){return this._inputElement},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeholder",{set:function(e){this._inputElement.placeholder=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lineCount",{set:function(e){},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxLength",{set:function(e){this._inputElement.maxLength!=e&&(this._inputElement.maxLength=e,this.value=this.value.substr(0,e))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"value",{get:function(){return this._inputElement.value},set:function(e){this._inputElement.value=e},enumerable:!0,configurable:!0}),t}(l),c=function(e){function t(){var t=e.call(this)||this;return t._textareaElement=document.createElement("textarea"),t._textareaElement.className="ms-ctrl ms-ctrl-textbox ms-ctrl-textbox-multiline",t._textareaElement.oninput=function(e){t.changed()},t}return i(t,e),Object.defineProperty(t.prototype,"element",{get:function(){return this._textareaElement},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeholder",{set:function(e){this._textareaElement.placeholder=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lineCount",{set:function(e){this._textareaElement.rows=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxLength",{set:function(e){this._textareaElement.maxLength!=e&&(this._textareaElement.maxLength=e,this.value=this.value.substr(0,e))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"value",{get:function(){return this._textareaElement.value},set:function(e){this._textareaElement.value=e},enumerable:!0,configurable:!0}),t}(l),u=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._isMultiline=!1,t._lineCount=3,t}return i(t,e),t.prototype.editBoxChanged=function(){this.onChange&&this.onChange(this)},t.prototype.recreateEditBox=function(){var e=this,t=null;t=this._editBox?this._editBox.value:this.rootElement.innerText,this._isMultiline?this._editBox=new c:this._editBox=new a,t&&(this._editBox.value=t),this._editBox.lineCount=this._lineCount,this._editBox.maxLength=this._maxLength,this._editBox.placeholder=this._placeholder,this._editBox.onChange=function(){e.editBoxChanged()},this.rootElement.innerHTML="",this.rootElement.appendChild(this._editBox.element)},Object.defineProperty(t.prototype,"editBox",{get:function(){return this._editBox||this.recreateEditBox(),this._editBox},enumerable:!0,configurable:!0}),t.prototype.attach=function(t){e.prototype.attach.call(this,t),this._isMultiline=r.getAttributeValueAsBool(t,"ismultiline",!1),this._lineCount=r.getAttributeValueAsInt(t,"lines",3),this._maxLength=r.getAttributeValueAsInt(t,"maxlength",5e4),this._placeholder=r.getAttributeValueAsString(t,"placeholder",null),this.recreateEditBox()},Object.defineProperty(t.prototype,"value",{get:function(){return this.editBox.value},set:function(e){this.editBox.value=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeholder",{get:function(){return this._placeholder},set:function(e){this._placeholder=e,this.editBox.placeholder=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isMultiline",{get:function(){return this._isMultiline},set:function(e){this._isMultiline!=e&&(this._isMultiline=e,this.recreateEditBox())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lineCount",{get:function(){return this._lineCount},set:function(e){e>0&&(this._lineCount=e,this.editBox.lineCount=e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxLength",{get:function(){return this._maxLength},set:function(e){e>0&&(this._maxLength=e,this.editBox.maxLength=e)},enumerable:!0,configurable:!0}),t}(s.InputControl);t.TextBox=u},function(e,t,n){"use strict";var o,i=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),s=n(4),l=function(e){function t(){var t=e.call(this)||this;return t._items=new s.Collection,t._renderedItems=[],t._selectedIndex=-1,t}return i(t,e),t.prototype.renderContent=function(){var e=document.createElement("div");e.className="ms-ctrl ms-popup";for(var t=0;t<this._items.length;t++){var n=this._items.get(t).render();n.tabIndex=0,e.appendChild(n),t==this.selectedIndex&&n.focus(),this._renderedItems.push(n)}return e},t.prototype.keyDown=function(t){e.prototype.keyDown.call(this,t);var n=this._selectedIndex;switch(t.keyCode){case r.KEY_TAB:this.closePopup(!0);break;case r.KEY_UP:n<=0?n=this._renderedItems.length-1:--n<0&&(n=this._renderedItems.length-1),this.selectedIndex=n,t.cancelBubble=!0;break;case r.KEY_DOWN:n<0?n=0:++n>=this._renderedItems.length&&(n=0),this.selectedIndex=n,t.cancelBubble=!0}},Object.defineProperty(t.prototype,"items",{get:function(){return this._items},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selectedIndex",{get:function(){return this._selectedIndex},set:function(e){e>=0&&e<this._renderedItems.length&&(this._renderedItems[e].focus(),this._selectedIndex=e)},enumerable:!0,configurable:!0}),t}(n(3).PopupControl);t.PopupMenu=l}])}); | ||
//# sourceMappingURL=adaptivecards-controls.min.js.map |
@@ -35,3 +35,3 @@ "use strict"; | ||
_this._owner.value = c.date; | ||
_this.close(); | ||
_this.closePopup(false); | ||
}; | ||
@@ -38,0 +38,0 @@ this._calendar.attach(element); |
@@ -89,3 +89,3 @@ "use strict"; | ||
case Constants.KEY_TAB: | ||
this.close(); | ||
this.closePopup(true); | ||
break; | ||
@@ -95,3 +95,3 @@ case Constants.KEY_ENTER: | ||
this._owner.selectedIndex = this.selectedIndex; | ||
this.close(); | ||
this.closePopup(false); | ||
} | ||
@@ -160,3 +160,3 @@ break; | ||
this.selectedItem = item; | ||
this.closePopup(); | ||
this.closePopup(false); | ||
this.rootElement.focus(); | ||
@@ -163,0 +163,0 @@ }; |
import { InputControl } from "./inputcontrol"; | ||
export declare abstract class PopupControl { | ||
private _isOpen; | ||
private _overlayElement; | ||
private _popupElement; | ||
protected abstract renderContent(): HTMLElement; | ||
protected close(): void; | ||
onClose: (popupControl: PopupControl) => void; | ||
onClose: (popupControl: PopupControl, wasCancelled: boolean) => void; | ||
keyDown(e: KeyboardEvent): void; | ||
render(rootElementBounds: ClientRect): HTMLElement; | ||
focus(): void; | ||
popup(rootElement: HTMLElement): void; | ||
closePopup(wasCancelled: boolean): void; | ||
readonly isOpen: boolean; | ||
} | ||
export declare abstract class InputWithPopup<TPopupControl extends PopupControl, TValue> extends InputControl { | ||
private _isOpen; | ||
private _labelElement; | ||
private _dropDownButtonElement; | ||
private _overlayElement; | ||
private _popupControl; | ||
private _popupControlElement; | ||
private _placeholderText; | ||
@@ -31,3 +32,3 @@ private _value; | ||
popup(): void; | ||
closePopup(): void; | ||
closePopup(wasCancelled: boolean): void; | ||
readonly isOpen: boolean; | ||
@@ -34,0 +35,0 @@ placeholderText: string; |
@@ -23,12 +23,8 @@ "use strict"; | ||
function PopupControl() { | ||
this._isOpen = false; | ||
} | ||
PopupControl.prototype.close = function () { | ||
if (this.onClose) { | ||
this.onClose(this); | ||
} | ||
}; | ||
PopupControl.prototype.keyDown = function (e) { | ||
switch (e.keyCode) { | ||
case Constants.KEY_ESCAPE: | ||
this.close(); | ||
this.closePopup(true); | ||
break; | ||
@@ -39,11 +35,11 @@ } | ||
var _this = this; | ||
this._popupElement = document.createElement("div"); | ||
this._popupElement.tabIndex = 0; | ||
this._popupElement.className = "ms-ctrl ms-ctrl-popup-container"; | ||
this._popupElement.onkeydown = function (e) { | ||
var element = document.createElement("div"); | ||
element.tabIndex = 0; | ||
element.className = "ms-ctrl ms-ctrl-popup-container"; | ||
element.onkeydown = function (e) { | ||
_this.keyDown(e); | ||
return !e.cancelBubble; | ||
}; | ||
this._popupElement.appendChild(this.renderContent()); | ||
return this._popupElement; | ||
element.appendChild(this.renderContent()); | ||
return element; | ||
}; | ||
@@ -55,2 +51,93 @@ PopupControl.prototype.focus = function () { | ||
}; | ||
PopupControl.prototype.popup = function (rootElement) { | ||
var _this = this; | ||
if (!this._isOpen) { | ||
this._overlayElement = document.createElement("div"); | ||
this._overlayElement.className = "ms-ctrl-overlay"; | ||
this._overlayElement.tabIndex = 0; | ||
this._overlayElement.style.width = document.documentElement.scrollWidth + "px"; | ||
this._overlayElement.style.height = document.documentElement.scrollHeight + "px"; | ||
this._overlayElement.onfocus = function (e) { _this.closePopup(true); }; | ||
document.body.appendChild(this._overlayElement); | ||
var rootElementBounds = rootElement.getBoundingClientRect(); | ||
this._popupElement = this.render(rootElementBounds); | ||
this._popupElement.classList.remove("ms-ctrl-slide", "ms-ctrl-slideLeftToRight", "ms-ctrl-slideRightToLeft", "ms-ctrl-slideTopToBottom", "ms-ctrl-slideRightToLeft"); | ||
this._overlayElement.appendChild(this._popupElement); | ||
var popupElementBounds = this._popupElement.getBoundingClientRect(); | ||
var availableSpaceBelow = window.innerHeight - rootElementBounds.bottom; | ||
var availableSpaceAbove = rootElementBounds.top; | ||
var availableSpaceRight = window.innerWidth - rootElementBounds.left; | ||
var availableSpaceRight = window.innerWidth - rootElementBounds.right; | ||
var availableSpaceLeft = rootElementBounds.left; | ||
var left = rootElementBounds.left + Utils.getScrollX(); | ||
var top; | ||
if (availableSpaceAbove < popupElementBounds.height && availableSpaceBelow < popupElementBounds.height) { | ||
// Not enough space above or below root element | ||
var actualPopupHeight = Math.min(popupElementBounds.height, window.innerHeight); | ||
this._popupElement.style.maxHeight = actualPopupHeight + "px"; | ||
if (actualPopupHeight < popupElementBounds.height) { | ||
top = Utils.getScrollY(); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top + (rootElementBounds.height - actualPopupHeight) / 2; | ||
} | ||
if (availableSpaceLeft < popupElementBounds.width && availableSpaceRight < popupElementBounds.width) { | ||
// Not enough space left or right of root element | ||
var actualPopupWidth = Math.min(popupElementBounds.width, window.innerWidth); | ||
this._popupElement.style.maxWidth = actualPopupWidth + "px"; | ||
if (actualPopupWidth < popupElementBounds.width) { | ||
left = Utils.getScrollX(); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left + (rootElementBounds.width - actualPopupWidth) / 2; | ||
} | ||
} | ||
else { | ||
// Enough space on the left or right of the root element | ||
if (availableSpaceRight >= popupElementBounds.width) { | ||
left = Utils.getScrollX() + rootElementBounds.right; | ||
this._popupElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideLeftToRight"); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left - popupElementBounds.width; | ||
this._popupElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideRightToLeft"); | ||
} | ||
} | ||
} | ||
else { | ||
// Enough space above or below root element | ||
if (availableSpaceBelow >= popupElementBounds.height) { | ||
top = Utils.getScrollY() + rootElementBounds.bottom; | ||
this._popupElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideTopToBottom"); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top - popupElementBounds.height; | ||
this._popupElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideBottomToTop"); | ||
} | ||
if (availableSpaceRight < popupElementBounds.width) { | ||
left = Utils.getScrollX() + rootElementBounds.right - popupElementBounds.width; | ||
} | ||
} | ||
this._popupElement.style.left = left + "px"; | ||
this._popupElement.style.top = top + "px"; | ||
this._popupElement.focus(); | ||
this._isOpen = true; | ||
} | ||
}; | ||
PopupControl.prototype.closePopup = function (wasCancelled) { | ||
if (this._isOpen) { | ||
document.body.removeChild(this._overlayElement); | ||
this._isOpen = false; | ||
if (this.onClose) { | ||
this.onClose(this, wasCancelled); | ||
} | ||
} | ||
}; | ||
Object.defineProperty(PopupControl.prototype, "isOpen", { | ||
get: function () { | ||
return this._isOpen; | ||
}, | ||
enumerable: true, | ||
configurable: true | ||
}); | ||
return PopupControl; | ||
@@ -106,6 +193,6 @@ }()); | ||
rootElement.className = this.getCssClassName(); | ||
window.addEventListener("resize", function (e) { _this.closePopup(); }); | ||
window.addEventListener("resize", function (e) { _this.closePopup(true); }); | ||
this.rootElement.onclick = function (e) { | ||
if (_this._isOpen) { | ||
_this.closePopup(); | ||
if (_this.isOpen) { | ||
_this.closePopup(true); | ||
} | ||
@@ -124,3 +211,2 @@ else { | ||
this._dropDownButtonElement.className = "ms-icon ms-ctrl-dropdown-button " + this.getButtonIconCssClassName(); | ||
; | ||
this.rootElement.appendChild(this._labelElement); | ||
@@ -132,80 +218,13 @@ this.rootElement.appendChild(this._dropDownButtonElement); | ||
var _this = this; | ||
if (!this._isOpen) { | ||
this._overlayElement = document.createElement("div"); | ||
this._overlayElement.className = "ms-ctrl-overlay"; | ||
this._overlayElement.tabIndex = 0; | ||
this._overlayElement.style.width = document.documentElement.scrollWidth + "px"; | ||
this._overlayElement.style.height = document.documentElement.scrollHeight + "px"; | ||
this._overlayElement.onfocus = function (e) { _this.closePopup(); }; | ||
document.body.appendChild(this._overlayElement); | ||
this._popupControl = this.createPopupControl(); | ||
this._popupControl.onClose = function (sender) { | ||
_this.closePopup(); | ||
_this.rootElement.focus(); | ||
}; | ||
var rootElementBounds = this.rootElement.getBoundingClientRect(); | ||
this._popupControlElement = this._popupControl.render(rootElementBounds); | ||
this._popupControlElement.classList.remove("ms-ctrl-slide", "ms-ctrl-slideLeftToRight", "ms-ctrl-slideRightToLeft", "ms-ctrl-slideTopToBottom", "ms-ctrl-slideRightToLeft"); | ||
this._overlayElement.appendChild(this._popupControlElement); | ||
var popupElementBounds = this._popupControlElement.getBoundingClientRect(); | ||
var availableSpaceBelow = window.innerHeight - rootElementBounds.bottom; | ||
var availableSpaceAbove = rootElementBounds.top; | ||
var left = rootElementBounds.left + Utils.getScrollX(); | ||
var top; | ||
if (availableSpaceAbove < popupElementBounds.height && availableSpaceBelow < popupElementBounds.height) { | ||
// Not enough space above or below root element | ||
var actualPopupHeight = Math.min(popupElementBounds.height, window.innerHeight); | ||
this._popupControlElement.style.maxHeight = actualPopupHeight + "px"; | ||
if (actualPopupHeight < popupElementBounds.height) { | ||
top = Utils.getScrollY(); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top + (rootElementBounds.height - actualPopupHeight) / 2; | ||
} | ||
var availableSpaceRight = window.innerWidth - rootElementBounds.right; | ||
var availableSpaceLeft = rootElementBounds.left; | ||
if (availableSpaceLeft < popupElementBounds.width && availableSpaceRight < popupElementBounds.width) { | ||
// Not enough space left or right of root element | ||
var actualPopupWidth = Math.min(popupElementBounds.width, window.innerWidth); | ||
this._popupControlElement.style.maxWidth = actualPopupWidth + "px"; | ||
if (actualPopupWidth < popupElementBounds.width) { | ||
left = Utils.getScrollX(); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left + (rootElementBounds.width - actualPopupWidth) / 2; | ||
} | ||
} | ||
else { | ||
// Enough space on the left or right of the root element | ||
if (availableSpaceRight >= popupElementBounds.width) { | ||
left = Utils.getScrollX() + rootElementBounds.right; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideLeftToRight"); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left - popupElementBounds.width; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideRightToLeft"); | ||
} | ||
} | ||
} | ||
else { | ||
// Enough space above or below root element | ||
if (availableSpaceBelow >= popupElementBounds.height) { | ||
top = Utils.getScrollY() + rootElementBounds.bottom; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideTopToBottom"); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top - popupElementBounds.height; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideBottomToTop"); | ||
} | ||
} | ||
this._popupControlElement.style.left = left + "px"; | ||
this._popupControlElement.style.top = top + "px"; | ||
this._popupControlElement.focus(); | ||
this._isOpen = true; | ||
} | ||
this._popupControl = this.createPopupControl(); | ||
this._popupControl = this.createPopupControl(); | ||
this._popupControl.onClose = function (sender, wasCancelled) { | ||
_this.closePopup(wasCancelled); | ||
_this.rootElement.focus(); | ||
}; | ||
this._popupControl.popup(this.rootElement); | ||
}; | ||
InputWithPopup.prototype.closePopup = function () { | ||
if (this._isOpen) { | ||
document.body.removeChild(this._overlayElement); | ||
this._isOpen = false; | ||
InputWithPopup.prototype.closePopup = function (wasCancelled) { | ||
if (this.popupControl) { | ||
this.popupControl.closePopup(wasCancelled); | ||
} | ||
@@ -215,3 +234,3 @@ }; | ||
get: function () { | ||
return this._isOpen; | ||
return this._popupControl ? this._popupControl.isOpen : false; | ||
}, | ||
@@ -218,0 +237,0 @@ enumerable: true, |
@@ -5,5 +5,2 @@ import { Collection } from "./collection"; | ||
export declare class PopupMenu extends PopupControl { | ||
private _overlayElement; | ||
private _popupControlElement; | ||
private _isOpen; | ||
private _items; | ||
@@ -15,7 +12,4 @@ private _renderedItems; | ||
keyDown(e: KeyboardEvent): void; | ||
popup(rootElement: HTMLElement): void; | ||
closePopup(): void; | ||
readonly isOpen: boolean; | ||
readonly items: Collection<DropDownItem>; | ||
selectedIndex: number; | ||
} |
@@ -18,3 +18,2 @@ "use strict"; | ||
// Licensed under the MIT License. | ||
var Utils = require("./utils"); | ||
var Constants = require("./constants"); | ||
@@ -51,3 +50,3 @@ var collection_1 = require("./collection"); | ||
case Constants.KEY_TAB: | ||
this.close(); | ||
this.closePopup(true); | ||
break; | ||
@@ -92,86 +91,2 @@ /* | ||
}; | ||
PopupMenu.prototype.popup = function (rootElement) { | ||
var _this = this; | ||
if (!this._isOpen) { | ||
this._overlayElement = document.createElement("div"); | ||
this._overlayElement.className = "ms-ctrl-overlay"; | ||
this._overlayElement.tabIndex = 0; | ||
this._overlayElement.style.width = document.documentElement.scrollWidth + "px"; | ||
this._overlayElement.style.height = document.documentElement.scrollHeight + "px"; | ||
this._overlayElement.onfocus = function (e) { _this.closePopup(); }; | ||
document.body.appendChild(this._overlayElement); | ||
var rootElementBounds = rootElement.getBoundingClientRect(); | ||
this._popupControlElement = this.render(rootElementBounds); | ||
this._popupControlElement.classList.remove("ms-ctrl-slide", "ms-ctrl-slideLeftToRight", "ms-ctrl-slideRightToLeft", "ms-ctrl-slideTopToBottom", "ms-ctrl-slideRightToLeft"); | ||
this._overlayElement.appendChild(this._popupControlElement); | ||
var popupElementBounds = this._popupControlElement.getBoundingClientRect(); | ||
var availableSpaceBelow = window.innerHeight - rootElementBounds.bottom; | ||
var availableSpaceAbove = rootElementBounds.top; | ||
var left = rootElementBounds.left + Utils.getScrollX(); | ||
var top; | ||
if (availableSpaceAbove < popupElementBounds.height && availableSpaceBelow < popupElementBounds.height) { | ||
// Not enough space above or below root element | ||
var maxPopupHeight = window.innerHeight; | ||
this._popupControlElement.style.maxHeight = maxPopupHeight + "px"; | ||
if (maxPopupHeight < popupElementBounds.height) { | ||
top = Utils.getScrollY(); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top + (rootElementBounds.height - maxPopupHeight) / 2; | ||
} | ||
var availableSpaceRight = window.innerWidth - rootElementBounds.right; | ||
var availableSpaceLeft = rootElementBounds.left; | ||
if (availableSpaceLeft < popupElementBounds.width && availableSpaceRight < popupElementBounds.width) { | ||
// Not enough space left or right of root element | ||
var maxPopupWidth = window.innerWidth; | ||
this._popupControlElement.style.maxWidth = maxPopupWidth + "px"; | ||
if (maxPopupWidth < popupElementBounds.width) { | ||
left = Utils.getScrollX(); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left + (rootElementBounds.width - maxPopupWidth) / 2; | ||
} | ||
} | ||
else { | ||
// Enough space on the left or right of the root element | ||
if (availableSpaceRight >= popupElementBounds.width) { | ||
left = Utils.getScrollX() + rootElementBounds.right; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideLeftToRight"); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left - popupElementBounds.width; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideRightToLeft"); | ||
} | ||
} | ||
} | ||
else { | ||
// Enough space above or below root element | ||
if (availableSpaceBelow >= popupElementBounds.height) { | ||
top = Utils.getScrollY() + rootElementBounds.bottom; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideTopToBottom"); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top - popupElementBounds.height; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideBottomToTop"); | ||
} | ||
} | ||
this._popupControlElement.style.left = left + "px"; | ||
this._popupControlElement.style.top = top + "px"; | ||
this._popupControlElement.focus(); | ||
this._isOpen = true; | ||
} | ||
}; | ||
PopupMenu.prototype.closePopup = function () { | ||
if (this._isOpen) { | ||
document.body.removeChild(this._overlayElement); | ||
this._isOpen = false; | ||
} | ||
}; | ||
Object.defineProperty(PopupMenu.prototype, "isOpen", { | ||
get: function () { | ||
return this._isOpen; | ||
}, | ||
enumerable: true, | ||
configurable: true | ||
}); | ||
Object.defineProperty(PopupMenu.prototype, "items", { | ||
@@ -178,0 +93,0 @@ get: function () { |
{ | ||
"name": "adaptivecards-controls", | ||
"version": "0.3.3", | ||
"version": "0.3.4", | ||
"description": "A library of pure JS/HTML controls designed for use with Adaptive Cards.", | ||
@@ -30,3 +30,3 @@ "author": "Microsoft", | ||
}, | ||
"gitHead": "ece6dc42107af589068cd3e5473193f1edcdae1c" | ||
"gitHead": "325ff63f4519d2ad6f72ad812d56b18320ff1de7" | ||
} |
@@ -25,3 +25,3 @@ // Copyright (c) Microsoft Corporation. All rights reserved. | ||
this.close(); | ||
this.closePopup(false); | ||
}; | ||
@@ -28,0 +28,0 @@ this._calendar.attach(element); |
@@ -94,3 +94,3 @@ // Copyright (c) Microsoft Corporation. All rights reserved. | ||
case Constants.KEY_TAB: | ||
this.close(); | ||
this.closePopup(true); | ||
@@ -102,3 +102,3 @@ break; | ||
this.close(); | ||
this.closePopup(false); | ||
} | ||
@@ -171,3 +171,3 @@ | ||
this.selectedItem = item; | ||
this.closePopup(); | ||
this.closePopup(false); | ||
@@ -174,0 +174,0 @@ this.rootElement.focus(); |
@@ -8,2 +8,4 @@ // Copyright (c) Microsoft Corporation. All rights reserved. | ||
export abstract class PopupControl { | ||
private _isOpen: boolean = false; | ||
private _overlayElement: HTMLElement; | ||
private _popupElement: HTMLElement; | ||
@@ -13,14 +15,8 @@ | ||
protected close() { | ||
if (this.onClose) { | ||
this.onClose(this); | ||
} | ||
} | ||
onClose: (popupControl: PopupControl, wasCancelled: boolean) => void; | ||
onClose: (popupControl: PopupControl) => void; | ||
keyDown(e: KeyboardEvent) { | ||
switch (e.keyCode) { | ||
case Constants.KEY_ESCAPE: | ||
this.close(); | ||
this.closePopup(true); | ||
@@ -32,6 +28,6 @@ break; | ||
render(rootElementBounds: ClientRect): HTMLElement { | ||
this._popupElement = document.createElement("div"); | ||
this._popupElement.tabIndex = 0; | ||
this._popupElement.className = "ms-ctrl ms-ctrl-popup-container"; | ||
this._popupElement.onkeydown = (e) => { | ||
let element = document.createElement("div"); | ||
element.tabIndex = 0; | ||
element.className = "ms-ctrl ms-ctrl-popup-container"; | ||
element.onkeydown = (e) => { | ||
this.keyDown(e); | ||
@@ -42,5 +38,5 @@ | ||
this._popupElement.appendChild(this.renderContent()); | ||
element.appendChild(this.renderContent()); | ||
return this._popupElement; | ||
return element; | ||
} | ||
@@ -53,11 +49,125 @@ | ||
} | ||
popup(rootElement: HTMLElement) { | ||
if (!this._isOpen) { | ||
this._overlayElement = document.createElement("div"); | ||
this._overlayElement.className = "ms-ctrl-overlay"; | ||
this._overlayElement.tabIndex = 0; | ||
this._overlayElement.style.width = document.documentElement.scrollWidth + "px"; | ||
this._overlayElement.style.height = document.documentElement.scrollHeight + "px"; | ||
this._overlayElement.onfocus = (e) => { this.closePopup(true); }; | ||
document.body.appendChild(this._overlayElement); | ||
var rootElementBounds = rootElement.getBoundingClientRect(); | ||
this._popupElement = this.render(rootElementBounds); | ||
this._popupElement.classList.remove( | ||
"ms-ctrl-slide", | ||
"ms-ctrl-slideLeftToRight", | ||
"ms-ctrl-slideRightToLeft", | ||
"ms-ctrl-slideTopToBottom", | ||
"ms-ctrl-slideRightToLeft"); | ||
this._overlayElement.appendChild(this._popupElement); | ||
var popupElementBounds = this._popupElement.getBoundingClientRect(); | ||
var availableSpaceBelow = window.innerHeight - rootElementBounds.bottom; | ||
var availableSpaceAbove = rootElementBounds.top; | ||
var availableSpaceRight = window.innerWidth - rootElementBounds.left; | ||
var availableSpaceRight = window.innerWidth - rootElementBounds.right; | ||
var availableSpaceLeft = rootElementBounds.left; | ||
var left = rootElementBounds.left + Utils.getScrollX(); | ||
var top; | ||
if (availableSpaceAbove < popupElementBounds.height && availableSpaceBelow < popupElementBounds.height) { | ||
// Not enough space above or below root element | ||
var actualPopupHeight = Math.min(popupElementBounds.height, window.innerHeight); | ||
this._popupElement.style.maxHeight = actualPopupHeight + "px"; | ||
if (actualPopupHeight < popupElementBounds.height) { | ||
top = Utils.getScrollY(); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top + (rootElementBounds.height - actualPopupHeight) /2; | ||
} | ||
if (availableSpaceLeft < popupElementBounds.width && availableSpaceRight < popupElementBounds.width) { | ||
// Not enough space left or right of root element | ||
var actualPopupWidth = Math.min(popupElementBounds.width, window.innerWidth); | ||
this._popupElement.style.maxWidth = actualPopupWidth + "px"; | ||
if (actualPopupWidth < popupElementBounds.width) { | ||
left = Utils.getScrollX(); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left + (rootElementBounds.width - actualPopupWidth) /2; | ||
} | ||
} | ||
else { | ||
// Enough space on the left or right of the root element | ||
if (availableSpaceRight >= popupElementBounds.width) { | ||
left = Utils.getScrollX() + rootElementBounds.right; | ||
this._popupElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideLeftToRight"); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left - popupElementBounds.width; | ||
this._popupElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideRightToLeft"); | ||
} | ||
} | ||
} | ||
else { | ||
// Enough space above or below root element | ||
if (availableSpaceBelow >= popupElementBounds.height) { | ||
top = Utils.getScrollY() + rootElementBounds.bottom; | ||
this._popupElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideTopToBottom"); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top - popupElementBounds.height | ||
this._popupElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideBottomToTop"); | ||
} | ||
if (availableSpaceRight < popupElementBounds.width) { | ||
left = Utils.getScrollX() + rootElementBounds.right - popupElementBounds.width; | ||
} | ||
} | ||
this._popupElement.style.left = left + "px"; | ||
this._popupElement.style.top = top + "px"; | ||
this._popupElement.focus(); | ||
this._isOpen = true; | ||
} | ||
} | ||
closePopup(wasCancelled: boolean) { | ||
if (this._isOpen) { | ||
document.body.removeChild(this._overlayElement); | ||
this._isOpen = false; | ||
if (this.onClose) { | ||
this.onClose(this, wasCancelled); | ||
} | ||
} | ||
} | ||
get isOpen(): boolean { | ||
return this._isOpen; | ||
} | ||
} | ||
export abstract class InputWithPopup<TPopupControl extends PopupControl, TValue> extends InputControl { | ||
private _isOpen: boolean; | ||
private _labelElement: HTMLElement; | ||
private _dropDownButtonElement: HTMLElement; | ||
private _overlayElement: HTMLElement; | ||
private _popupControl: TPopupControl; | ||
private _popupControlElement: HTMLElement; | ||
private _placeholderText: string; | ||
@@ -116,7 +226,7 @@ private _value: TValue; | ||
window.addEventListener("resize", (e) => { this.closePopup(); }); | ||
window.addEventListener("resize", (e) => { this.closePopup(true); }); | ||
this.rootElement.onclick = (e) => { | ||
if (this._isOpen) { | ||
this.closePopup(); | ||
if (this.isOpen) { | ||
this.closePopup(true); | ||
} | ||
@@ -138,3 +248,3 @@ else { | ||
this._dropDownButtonElement = document.createElement("i"); | ||
this._dropDownButtonElement.className = "ms-icon ms-ctrl-dropdown-button " + this.getButtonIconCssClassName();; | ||
this._dropDownButtonElement.className = "ms-icon ms-ctrl-dropdown-button " + this.getButtonIconCssClassName(); | ||
@@ -148,110 +258,16 @@ this.rootElement.appendChild(this._labelElement); | ||
popup() { | ||
if (!this._isOpen) { | ||
this._overlayElement = document.createElement("div"); | ||
this._overlayElement.className = "ms-ctrl-overlay"; | ||
this._overlayElement.tabIndex = 0; | ||
this._overlayElement.style.width = document.documentElement.scrollWidth + "px"; | ||
this._overlayElement.style.height = document.documentElement.scrollHeight + "px"; | ||
this._overlayElement.onfocus = (e) => { this.closePopup(); }; | ||
this._popupControl = this.createPopupControl(); | ||
this._popupControl = this.createPopupControl(); | ||
this._popupControl.onClose = (sender, wasCancelled) => { | ||
this.closePopup(wasCancelled); | ||
document.body.appendChild(this._overlayElement); | ||
this.rootElement.focus(); | ||
}; | ||
this._popupControl = this.createPopupControl(); | ||
this._popupControl.onClose = (sender) => { | ||
this.closePopup(); | ||
this.rootElement.focus(); | ||
}; | ||
var rootElementBounds = this.rootElement.getBoundingClientRect(); | ||
this._popupControlElement = this._popupControl.render(rootElementBounds); | ||
this._popupControlElement.classList.remove( | ||
"ms-ctrl-slide", | ||
"ms-ctrl-slideLeftToRight", | ||
"ms-ctrl-slideRightToLeft", | ||
"ms-ctrl-slideTopToBottom", | ||
"ms-ctrl-slideRightToLeft"); | ||
this._overlayElement.appendChild(this._popupControlElement); | ||
var popupElementBounds = this._popupControlElement.getBoundingClientRect(); | ||
var availableSpaceBelow = window.innerHeight - rootElementBounds.bottom; | ||
var availableSpaceAbove = rootElementBounds.top; | ||
var left = rootElementBounds.left + Utils.getScrollX(); | ||
var top; | ||
if (availableSpaceAbove < popupElementBounds.height && availableSpaceBelow < popupElementBounds.height) { | ||
// Not enough space above or below root element | ||
var actualPopupHeight = Math.min(popupElementBounds.height, window.innerHeight); | ||
this._popupControlElement.style.maxHeight = actualPopupHeight + "px"; | ||
if (actualPopupHeight < popupElementBounds.height) { | ||
top = Utils.getScrollY(); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top + (rootElementBounds.height - actualPopupHeight) /2; | ||
} | ||
var availableSpaceRight = window.innerWidth - rootElementBounds.right; | ||
var availableSpaceLeft = rootElementBounds.left; | ||
if (availableSpaceLeft < popupElementBounds.width && availableSpaceRight < popupElementBounds.width) { | ||
// Not enough space left or right of root element | ||
var actualPopupWidth = Math.min(popupElementBounds.width, window.innerWidth); | ||
this._popupControlElement.style.maxWidth = actualPopupWidth + "px"; | ||
if (actualPopupWidth < popupElementBounds.width) { | ||
left = Utils.getScrollX(); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left + (rootElementBounds.width - actualPopupWidth) /2; | ||
} | ||
} | ||
else { | ||
// Enough space on the left or right of the root element | ||
if (availableSpaceRight >= popupElementBounds.width) { | ||
left = Utils.getScrollX() + rootElementBounds.right; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideLeftToRight"); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left - popupElementBounds.width; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideRightToLeft"); | ||
} | ||
} | ||
} | ||
else { | ||
// Enough space above or below root element | ||
if (availableSpaceBelow >= popupElementBounds.height) { | ||
top = Utils.getScrollY() + rootElementBounds.bottom; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideTopToBottom"); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top - popupElementBounds.height | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideBottomToTop"); | ||
} | ||
} | ||
this._popupControlElement.style.left = left + "px"; | ||
this._popupControlElement.style.top = top + "px"; | ||
this._popupControlElement.focus(); | ||
this._isOpen = true; | ||
} | ||
this._popupControl.popup(this.rootElement); | ||
} | ||
closePopup() { | ||
if (this._isOpen) { | ||
document.body.removeChild(this._overlayElement); | ||
this._isOpen = false; | ||
closePopup(wasCancelled: boolean) { | ||
if (this.popupControl) { | ||
this.popupControl.closePopup(wasCancelled); | ||
} | ||
@@ -261,3 +277,3 @@ } | ||
get isOpen(): boolean { | ||
return this._isOpen; | ||
return this._popupControl ? this._popupControl.isOpen : false; | ||
} | ||
@@ -264,0 +280,0 @@ |
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
import * as Utils from "./utils"; | ||
import * as Constants from "./constants"; | ||
@@ -10,5 +9,2 @@ import { Collection } from "./collection"; | ||
export class PopupMenu extends PopupControl { | ||
private _overlayElement: HTMLElement; | ||
private _popupControlElement: HTMLElement; | ||
private _isOpen: boolean; | ||
private _items: Collection<DropDownItem> = new Collection<DropDownItem>(); | ||
@@ -49,3 +45,3 @@ private _renderedItems: Array<HTMLElement> = []; | ||
case Constants.KEY_TAB: | ||
this.close(); | ||
this.closePopup(true); | ||
@@ -100,111 +96,2 @@ break; | ||
popup(rootElement: HTMLElement) { | ||
if (!this._isOpen) { | ||
this._overlayElement = document.createElement("div"); | ||
this._overlayElement.className = "ms-ctrl-overlay"; | ||
this._overlayElement.tabIndex = 0; | ||
this._overlayElement.style.width = document.documentElement.scrollWidth + "px"; | ||
this._overlayElement.style.height = document.documentElement.scrollHeight + "px"; | ||
this._overlayElement.onfocus = (e) => { this.closePopup(); }; | ||
document.body.appendChild(this._overlayElement); | ||
var rootElementBounds = rootElement.getBoundingClientRect(); | ||
this._popupControlElement = this.render(rootElementBounds); | ||
this._popupControlElement.classList.remove( | ||
"ms-ctrl-slide", | ||
"ms-ctrl-slideLeftToRight", | ||
"ms-ctrl-slideRightToLeft", | ||
"ms-ctrl-slideTopToBottom", | ||
"ms-ctrl-slideRightToLeft"); | ||
this._overlayElement.appendChild(this._popupControlElement); | ||
var popupElementBounds = this._popupControlElement.getBoundingClientRect(); | ||
var availableSpaceBelow = window.innerHeight - rootElementBounds.bottom; | ||
var availableSpaceAbove = rootElementBounds.top; | ||
var left = rootElementBounds.left + Utils.getScrollX(); | ||
var top; | ||
if (availableSpaceAbove < popupElementBounds.height && availableSpaceBelow < popupElementBounds.height) { | ||
// Not enough space above or below root element | ||
var maxPopupHeight = window.innerHeight; | ||
this._popupControlElement.style.maxHeight = maxPopupHeight + "px"; | ||
if (maxPopupHeight < popupElementBounds.height) { | ||
top = Utils.getScrollY(); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top + (rootElementBounds.height - maxPopupHeight) /2; | ||
} | ||
var availableSpaceRight = window.innerWidth - rootElementBounds.right; | ||
var availableSpaceLeft = rootElementBounds.left; | ||
if (availableSpaceLeft < popupElementBounds.width && availableSpaceRight < popupElementBounds.width) { | ||
// Not enough space left or right of root element | ||
var maxPopupWidth = window.innerWidth; | ||
this._popupControlElement.style.maxWidth = maxPopupWidth + "px"; | ||
if (maxPopupWidth < popupElementBounds.width) { | ||
left = Utils.getScrollX(); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left + (rootElementBounds.width - maxPopupWidth) /2; | ||
} | ||
} | ||
else { | ||
// Enough space on the left or right of the root element | ||
if (availableSpaceRight >= popupElementBounds.width) { | ||
left = Utils.getScrollX() + rootElementBounds.right; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideLeftToRight"); | ||
} | ||
else { | ||
left = Utils.getScrollX() + rootElementBounds.left - popupElementBounds.width; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideRightToLeft"); | ||
} | ||
} | ||
} | ||
else { | ||
// Enough space above or below root element | ||
if (availableSpaceBelow >= popupElementBounds.height) { | ||
top = Utils.getScrollY() + rootElementBounds.bottom; | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideTopToBottom"); | ||
} | ||
else { | ||
top = Utils.getScrollY() + rootElementBounds.top - popupElementBounds.height | ||
this._popupControlElement.classList.add("ms-ctrl-slide", "ms-ctrl-slideBottomToTop"); | ||
} | ||
} | ||
this._popupControlElement.style.left = left + "px"; | ||
this._popupControlElement.style.top = top + "px"; | ||
this._popupControlElement.focus(); | ||
this._isOpen = true; | ||
} | ||
} | ||
closePopup() { | ||
if (this._isOpen) { | ||
document.body.removeChild(this._overlayElement); | ||
this._isOpen = false; | ||
} | ||
} | ||
get isOpen(): boolean { | ||
return this._isOpen; | ||
} | ||
get items(): Collection<DropDownItem> { | ||
@@ -211,0 +98,0 @@ return this._items; |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
534539
6573