/*global define*/ /*jslint browser:true*/ define( [ 'jquery', 'knockout', './bindingHandler', './utils', 'jquery-ui/dialog' ], function ($, ko, BindingHandler, utils) { 'use strict'; var Dialog = function () { /// Constructor. BindingHandler.call(this, 'dialog'); if (utils.uiVersion.major === 1 && utils.uiVersion.minor === 8) { this.options = ['autoOpen', 'buttons', 'closeOnEscape', 'closeText', 'dialogClass', 'disabled', 'draggable', 'height', 'maxHeight', 'maxWidth', 'minHeight', 'minWidth', 'modal', 'position', 'resizable', 'show', 'stack', 'title', 'width', 'zIndex']; this.events = ['beforeClose', 'create', 'open', 'focus', 'dragStart', 'drag', 'dragStop', 'resizeStart', 'resize', 'resizeStop', 'close']; } else if (utils.uiVersion.major === 1 && utils.uiVersion.minor === 9) { this.options = ['autoOpen', 'buttons', 'closeOnEscape', 'closeText', 'dialogClass', 'draggable', 'height', 'hide', 'maxHeight', 'maxWidth', 'minHeight', 'minWidth', 'modal', 'position', 'resizable', 'show', 'stack', 'title', 'width', 'zIndex']; this.events = ['beforeClose', 'create', 'open', 'focus', 'dragStart', 'drag', 'dragStop', 'resizeStart', 'resize', 'resizeStop', 'close']; } else { this.options = ['appendTo', 'autoOpen', 'buttons', 'closeOnEscape', 'closeText', 'dialogClass', 'draggable', 'height', 'hide', 'maxHeight', 'maxWidth', 'minHeight', 'minWidth', 'modal', 'position', 'resizable', 'show', 'title', 'width']; this.events = ['beforeClose', 'create', 'open', 'focus', 'dragStart', 'drag', 'dragStop', 'resizeStart', 'resize', 'resizeStop', 'close']; } }; Dialog.prototype = utils.createObject(BindingHandler.prototype); Dialog.prototype.constructor = Dialog; Dialog.prototype.init = function (element, valueAccessor) { /// Creates a hidden div before the element. This helps in disposing /// the binding if the element is moved from its original location. /// Keeps the isOpen binding property in sync with the dialog's state. // /// /// /// var marker, result, value; /// sets up the correct disposal marker = document.createElement('DIV'); marker.style.display = 'none'; element.parentNode.insertBefore(marker, element); ko.utils.domNodeDisposal.addDisposeCallback(marker, function () { ko.removeNode(element); }); /// invokes the prototype's init() method result = BindingHandler.prototype.init.apply(this, arguments); /// sets up handling of the isOpen option value = valueAccessor(); if (value.isOpen) { ko.computed({ read: function () { if (ko.utils.unwrapObservable(value.isOpen)) { $(element)[this.widgetName]('open'); } else { $(element)[this.widgetName]('close'); } }, disposeWhenNodeIsRemoved: element, owner: this }); } if (ko.isWriteableObservable(value.isOpen)) { this.on(element, 'open', function () { value.isOpen(true); }); this.on(element, 'close', function () { value.isOpen(false); }); } // make the width option two-way if (ko.isWriteableObservable(value.width)) { /*jslint unparam:true*/ this.on(element, 'resizestop', function (ev, ui) { value.width(Math.round(ui.size.width)); }); /*jslint unparam:false*/ } // make the height option two-way if (ko.isWriteableObservable(value.height)) { /*jslint unparam:true*/ this.on(element, 'resizestop', function (ev, ui) { value.height(Math.round(ui.size.height)); }); /*jslint unparam:false*/ } return result; }; utils.register(Dialog); return Dialog; } );