From 8b4b87afac55ce36f6f2acb939a3793e53f50714 Mon Sep 17 00:00:00 2001 From: OVSharova Date: Mon, 31 Jan 2022 22:09:05 +0300 Subject: [PATCH] Variand without dialog window --- apps/common/main/lib/component/InputField.js | 90 +++++++++- apps/common/main/lib/view/PasswordDialog.js | 164 ------------------- 2 files changed, 82 insertions(+), 172 deletions(-) delete mode 100644 apps/common/main/lib/view/PasswordDialog.js diff --git a/apps/common/main/lib/component/InputField.js b/apps/common/main/lib/component/InputField.js index 369ca965c..0b94d0617 100644 --- a/apps/common/main/lib/component/InputField.js +++ b/apps/common/main/lib/component/InputField.js @@ -676,29 +676,103 @@ define([ showPwdOnClick: true, date: null }, + initialize : function(options) { options = options || {}; Common.UI.InputField.prototype.initialize.call(this, options); this.date = this.options.date; + + }, render: function (parentEl) { + var me = this; + this.boxCalendar = this.$el.parent(); Common.UI.InputFieldBtn.prototype.render.call(this, parentEl); + this._button.on('click', _.bind(this.calendarClick, this)); + + this.boxCalendar.on('click', function(e) { + if (e.target.localName == 'canvas') { + if (me._preventClick) + me._preventClick = false; + else + me.boxCalendar.focus(); + } + }); + + this.boxCalendar.on('mousedown', function(e){ + if (e.target.localName == 'canvas') + Common.UI.Menu.Manager.hideAll(); + }); }, calendarClick: function (e){ var me = this; - (new Common.UI.CalendarDialog({ - date : this.date, - handler : function(result, value) { - if (result == 'ok') { - me.date = value.date; - me.setValue(value.date.toLocaleDateString()); + this.onShowDateActions(this.el.getBoundingClientRect()); + }, + + onShowDateActions: function(position) { + var controlsContainer = this.boxCalendar.find('#calendar-control-container'), + me = this; + + if (controlsContainer.length < 1) { + controlsContainer = $('
'); + this.boxCalendar.append(controlsContainer); + } + + controlsContainer.css({left: position.left, top : position.top}); + controlsContainer.show(); + + if (!this.cmpCalendar) { + this.cmpCalendar = new Common.UI.Calendar({ + el: this.boxCalendar.find('#id-document-calendar-control'), + enableKeyEvents: true, + firstday: 1 + }); + this.cmpCalendar.setDate(this.date); + this.cmpCalendar.on('date:click', function (cmp, date) { + + me.date = this.selectedDate; + me.setValue(this.selectedDate.toLocaleDateString()); + controlsContainer.hide(); + + }); + this.cmpCalendar.on('calendar:keydown', function (cmp, e) { + if (e.keyCode==Common.UI.Keys.ESC) { + controlsContainer.hide(); } - } - })).show(); + }); + $(document).on('mousedown', function(e) { + if (e.target.localName !== 'canvas' && controlsContainer.is(':visible') && controlsContainer.find(e.target).length==0) { + controlsContainer.hide(); + } + }); + + } + this.cmpCalendar.setDate(this.date); + + // align + var offset = controlsContainer.offset(), + docW = Common.Utils.innerWidth(), + docH = Common.Utils.innerHeight() - 10, // Yep, it's magic number + menuW = this.cmpCalendar.cmpEl.outerWidth(), + menuH = this.cmpCalendar.cmpEl.outerHeight(), + buttonOffset = 22, + left = offset.left - menuW, + top = offset.top - 1.5*menuH; + if (top + menuH > docH) { + top = docH - menuH; + left -= buttonOffset; + } + if (top < 0) + top = 0; + if (left + menuW > docW) + left = docW - menuW; + this.cmpCalendar.cmpEl.css({left: left, top : top}); + + this._preventClick = true; } } diff --git a/apps/common/main/lib/view/PasswordDialog.js b/apps/common/main/lib/view/PasswordDialog.js deleted file mode 100644 index e30b36921..000000000 --- a/apps/common/main/lib/view/PasswordDialog.js +++ /dev/null @@ -1,164 +0,0 @@ -/* - * - * (c) Copyright Ascensio System SIA 2010-2019 - * - * This program is a free software product. You can redistribute it and/or - * modify it under the terms of the GNU Affero General Public License (AGPL) - * version 3 as published by the Free Software Foundation. In accordance with - * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect - * that Ascensio System SIA expressly excludes the warranty of non-infringement - * of any third-party rights. - * - * This program is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For - * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html - * - * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha - * street, Riga, Latvia, EU, LV-1050. - * - * The interactive user interfaces in modified source and object code versions - * of the Program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU AGPL version 3. - * - * Pursuant to Section 7(b) of the License you must retain the original Product - * logo when distributing the program. Pursuant to Section 7(e) we decline to - * grant you any rights under trademark law for use of our trademarks. - * - * All the Product's GUI elements, including illustrations and icon sets, as - * well as technical writing content are licensed under the terms of the - * Creative Commons Attribution-ShareAlike 4.0 International. See the License - * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - * -*/ -/** - * OpenDialog.js - * - * Select Codepage for open CSV/TXT format file. - * - * Created by Alexey.Musinov on 29/04/14 - * Copyright (c) 2018 Ascensio System SIA. All rights reserved. - * - */ - -define([ - 'common/main/lib/component/Window' -], function () { - 'use strict'; - - Common.Views.PasswordDialog = Common.UI.Window.extend(_.extend({ - - applyFunction: undefined, - - initialize : function (options) { - var t = this, - _options = {}; - - _.extend(_options, { - width : 395, - height : 270, - header : true, - cls : 'modal-dlg', - contentTemplate : '', - title : t.txtTitle, - buttons: ['ok', 'cancel'] - - }, options); - - this.handler = options.handler; - - this.template = options.template || [ - '
', - '
', - '', - '
', - '
', - '', - '
', - '
', - '
', - '', - '
', - '
', - '', - '
' - ].join(''); - - _options.tpl = _.template(this.template)(_options); - - Common.UI.Window.prototype.initialize.call(this, _options); - }, - render: function () { - Common.UI.Window.prototype.render.call(this); - - if (this.$window) { - var me = this; - this.$window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); - - this.repeatPwd = new Common.UI.InputField({ - el: $('#id-repeat-txt'), - type: 'password', - allowBlank : false, - style : 'width: 100%;', - maxLength: 255, - validateOnBlur: false, - validation : function(value) { - return me.txtIncorrectPwd; - } - }); - this.inputPwd = new Common.UI.InputFieldBtnPassword({ - el: $('#id-password-txt'), - type: 'password', - allowBlank : false, - style : 'width: 100%;', - maxLength: 255, - validateOnBlur: false, - repeatInput: this.repeatPwd - }); - } - }, - - getFocusedComponents: function() { - return [this.inputPwd, this.repeatPwd]; - }, - - getDefaultFocusableComponent: function () { - return this.inputPwd; - }, - - onPrimary: function(event) { - this._handleInput('ok'); - return false; - }, - - onBtnClick: function(event) { - this._handleInput(event.currentTarget.attributes['result'].value); - }, - - _handleInput: function(state) { - if (this.handler) { - if (state == 'ok') { - if (this.inputPwd.checkValidate() !== true) { - this.inputPwd.focus(); - return; - } - if (this.inputPwd.getValue() !== this.repeatPwd.getValue()) { - this.repeatPwd.checkValidate(); - this.repeatPwd.focus(); - return; - } - } - this.handler.call(this, state, this.inputPwd.getValue()); - } - - this.close(); - }, - - txtTitle : "Set Password", - txtPassword : "Password", - txtDescription : "A Password is required to open this document", - txtRepeat: 'Repeat password', - txtIncorrectPwd: 'Confirmation password is not identical', - txtWarning: 'Warning: If you lose or forget the password, it cannot be recovered. Please keep it in a safe place.' - - }, Common.Views.PasswordDialog || {})); -}); \ No newline at end of file