mirror of
				https://github.com/telekom-security/tpotce.git
				synced 2025-07-02 01:27:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			189 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2015
 | |
|  *
 | |
|  * This file is licensed under the Affero General Public License version 3
 | |
|  * or later.
 | |
|  *
 | |
|  * See the COPYING-README file.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| /* global moment */
 | |
| 
 | |
| (function() {
 | |
| 	if (!OC.Share) {
 | |
| 		OC.Share = {};
 | |
| 	}
 | |
| 
 | |
| 	var TEMPLATE =
 | |
| 		'<div id="linkPass-{{cid}}" class="public-link-modal--item">' +
 | |
| 			'<label class="public-link-modal--label" for="expirationDate-{{cid}}" value="{{expirationDate}}">{{expirationLabel}} {{#if isExpirationEnforced}}<span class="required-indicator">*</span>{{/if}}</label>' +
 | |
| 			'<input class="public-link-modal--input datepicker expirationDate" id="linkPassText-{{cid}}" type="text" placeholder="{{expirationDatePlaceholder}}" value="{{expirationValue}}" />' +
 | |
| 			'<span class="error-message hidden"></span>' +
 | |
| 			'{{#if isExpirationEnforced}}' +
 | |
| 			// originally the expire message was shown when a default date was set, however it never had text
 | |
| 			'<em id="defaultExpireMessage" class="defaultExpireMessage">{{defaultExpireMessage}}</em>' +
 | |
| 			'{{/if}}' +
 | |
| 		'</div>'
 | |
| 		;
 | |
| 
 | |
| 	/**
 | |
| 	 * @class OCA.Share.ShareDialogExpirationView
 | |
| 	 * @member {OC.Share.ShareItemModel} model
 | |
| 	 * @member {jQuery} $el
 | |
| 	 * @memberof OCA.Sharing
 | |
| 	 * @classdesc
 | |
| 	 *
 | |
| 	 * Represents the expiration part in the GUI of the share dialogue
 | |
| 	 *
 | |
| 	 */
 | |
| 	var ShareDialogExpirationView = OC.Backbone.View.extend({
 | |
| 		/** @type {string} **/
 | |
| 		id: 'shareDialogExpirationView',
 | |
| 
 | |
| 		/** @type {OC.Share.ShareConfigModel} **/
 | |
| 		configModel: undefined,
 | |
| 
 | |
| 		/** @type {Function} **/
 | |
| 		_template: undefined,
 | |
| 
 | |
| 		className: 'shareDialogExpirationView',
 | |
| 
 | |
| 		events: {
 | |
| 			'change .expirationCheckbox': '_onToggleExpiration',
 | |
| 			'change .datepicker': '_onChangeExpirationDate'
 | |
| 		},
 | |
| 
 | |
| 		initialize: function(options) {
 | |
| 			if(!_.isUndefined(options.itemModel)) {
 | |
| 				this.itemModel = options.itemModel;
 | |
| 				this.configModel = this.itemModel.configModel;
 | |
| 			} else {
 | |
| 				throw 'missing OC.Share.ShareItemModel';
 | |
| 			}
 | |
| 
 | |
| 			var view = this;
 | |
| 			this.configModel.on('change:isDefaultExpireDateEnforced', function() {
 | |
| 				view.render();
 | |
| 			});
 | |
| 		},
 | |
| 
 | |
| 		_onToggleExpiration: function(event) {
 | |
| 			var $checkbox = $(event.target);
 | |
| 			var state = $checkbox.prop('checked');
 | |
| 			// TODO: slide animation
 | |
| 			this.$el.find('.expirationDateContainer').toggleClass('hidden', !state);
 | |
| 			if (!state) {
 | |
| 				// discard expiration date
 | |
| 				this.model.unset('expireDate');
 | |
| 			}
 | |
| 		},
 | |
| 
 | |
| 		_onChangeExpirationDate: function(event) {
 | |
| 			var $target = $(event.target);
 | |
| 			$target.tooltip('hide');
 | |
| 			$target.removeClass('error');
 | |
| 
 | |
| 			var expiration = moment($target.val(), 'DD-MM-YYYY').format('YYYY-MM-DD');
 | |
| 			this.model.set('expireDate', expiration);
 | |
| 		},
 | |
| 
 | |
| 		render: function() {
 | |
| 			var defaultExpireMessage = '';
 | |
| 			var defaultExpireDays = this.configModel.get('defaultExpireDate');
 | |
| 			var isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced');
 | |
| 
 | |
| 			if(    (this.itemModel.isFolder() || this.itemModel.isFile())
 | |
| 				&& isExpirationEnforced) {
 | |
| 				defaultExpireMessage = t(
 | |
| 					'core',
 | |
| 					'The public link will expire no later than {days} days after it is created',
 | |
| 					{'days': defaultExpireDays }
 | |
| 				);
 | |
| 			}
 | |
| 
 | |
| 			var isExpirationSet = !!this.model.get('expireDate') || isExpirationEnforced;
 | |
| 
 | |
| 			var expiration;
 | |
| 			if (isExpirationSet) {
 | |
| 				expiration = moment(this.model.get('expireDate'), 'YYYY-MM-DD').format('DD-MM-YYYY');
 | |
| 			}
 | |
| 
 | |
| 			this.$el.html(this.template({
 | |
| 				cid: this.cid,
 | |
| 				setExpirationLabel: t('core', 'Set expiration date'),
 | |
| 				expirationLabel: t('core', 'Expiration'),
 | |
| 				expirationDatePlaceholder: t('core', 'Choose an expiration date'),
 | |
| 				defaultExpireMessage: defaultExpireMessage,
 | |
| 				isExpirationSet: isExpirationSet,
 | |
| 				isExpirationEnforced: isExpirationEnforced,
 | |
| 				disableCheckbox: isExpirationEnforced && isExpirationSet,
 | |
| 				expirationValue: expiration
 | |
| 			}));
 | |
| 
 | |
| 			// what if there is another date picker on that page?
 | |
| 			var minDate = new Date();
 | |
| 			var maxDate = null;
 | |
| 			// min date should always be the next day
 | |
| 			minDate.setDate(minDate.getDate()+1);
 | |
| 
 | |
| 			if(isExpirationSet) {
 | |
| 				if(isExpirationEnforced) {
 | |
| 					// TODO: hack: backend returns string instead of integer
 | |
| 					var shareTime = this.model.get('stime');
 | |
| 					if (_.isNumber(shareTime)) {
 | |
| 						shareTime = new Date(shareTime * 1000);
 | |
| 					}
 | |
| 					if (!shareTime) {
 | |
| 						shareTime = new Date(); // now
 | |
| 					}
 | |
| 					shareTime = OC.Util.stripTime(shareTime).getTime();
 | |
| 					maxDate = new Date(shareTime + defaultExpireDays * 24 * 3600 * 1000);
 | |
| 				}
 | |
| 			}
 | |
| 			$.datepicker.setDefaults({
 | |
| 				minDate: minDate,
 | |
| 				maxDate: maxDate
 | |
| 			});
 | |
| 
 | |
| 			this.$('.datepicker').datepicker({dateFormat : 'dd-mm-yy'});
 | |
| 
 | |
| 			this.$field = this.$('.expirationDate');
 | |
| 
 | |
| 			this.delegateEvents();
 | |
| 
 | |
| 			return this;
 | |
| 		},
 | |
| 
 | |
| 		getValue: function() {
 | |
| 			return this.$field.val().trim();
 | |
| 		},
 | |
| 
 | |
| 		validate: function() {
 | |
| 			this.$field.removeClass('error');
 | |
| 			this.$field.next('.error-message').addClass('hidden');
 | |
| 			if (this.configModel.get('isDefaultExpireDateEnforced') && !this.getValue()) {
 | |
| 				this.$field.addClass('error');
 | |
| 				this.$field.next('.error-message').removeClass('hidden').text(t('core', 'Expiration date is required'));
 | |
| 				return false;
 | |
| 			}
 | |
| 			return true;
 | |
| 		},
 | |
| 
 | |
| 		/**
 | |
| 		 * @returns {Function} from Handlebars
 | |
| 		 * @private
 | |
| 		 */
 | |
| 		template: function (data) {
 | |
| 			if (!this._template) {
 | |
| 				this._template = Handlebars.compile(TEMPLATE);
 | |
| 			}
 | |
| 			return this._template(data);
 | |
| 		}
 | |
| 
 | |
| 	});
 | |
| 
 | |
| 	OC.Share.ShareDialogExpirationView = ShareDialogExpirationView;
 | |
| 
 | |
| })();
 | 
