2016-10-19 23:44:19 +08:00
/ * *
* Nextcloud - passman
*
* @ copyright Copyright ( c ) 2016 , Sander Brand ( brantje @ gmail . com )
* @ copyright Copyright ( c ) 2016 , Marcos Zuriaga Miguel ( wolfi @ wolfi . es )
* @ license GNU AGPL version 3 or any later version
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
*
* /
2016-10-08 01:56:29 +08:00
( function ( ) {
'use strict' ;
/ * *
* @ ngdoc directive
* @ name passmanApp . directive : passwordGen
* @ description
* # passwordGen
* /
2016-09-15 04:50:14 +08:00
2016-10-08 01:56:29 +08:00
angular . module ( 'passmanApp' )
2016-12-21 21:06:29 +08:00
. directive ( 'credentialField' , [ '$timeout' , '$translate' , function ( $timeout , $translate ) {
2016-10-08 01:56:29 +08:00
return {
scope : {
value : '=value' ,
secret : '=secret'
} ,
restrict : 'A' ,
replace : 'true' ,
template : "" +
'<span class="credential_field">' +
'<div class="value" ng-class="{\'ellipsis\': isLink}">' +
'<span ng-repeat="n in [] | range:value.length" ng-if="!valueVisible">*</span>' +
'<span ng-if="valueVisible">{{value}}</span>' +
'</div>' +
'<div class="tools">' +
2016-12-21 21:06:29 +08:00
'<div class="cell" ng-if="toggle" tooltip="tggltxt" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': !valueVisible, \'fa-eye-slash\': valueVisible }"></i></div>' +
2016-10-08 01:56:29 +08:00
'<div class="cell" ng-if="isLink"><a ng-href="{{value}}" target="_blank"><i tooltip="\'Open in new window\'" class="link fa fa-external-link"></i></a></div>' +
'<div class="cell" ngclipboard-success="onSuccess(e);" ngclipboard-error="onError(e);" ngclipboard data-clipboard-text="{{value}}"><i tooltip="copy_msg" class="fa fa-clipboard"></i></div>' +
'</div></span>' ,
2016-10-13 02:12:28 +08:00
link : function ( scope ) {
2016-10-08 01:56:29 +08:00
var expression = /(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/gi ;
var regex = new RegExp ( expression ) ;
2016-12-21 21:06:29 +08:00
$translate ( [ 'toggle.visibility' , 'copy' , 'copied' ] ) . then ( function ( translations ) {
scope . tggltxt = translations [ 'toggle.visibility' ] ;
scope . copy _msg = translations [ 'copy' ] ;
} ) ;
2016-09-15 04:50:14 +08:00
2016-10-08 01:56:29 +08:00
scope . $watch ( "value" , function ( ) {
if ( scope . value ) {
if ( scope . secret ) {
scope . valueVisible = false ;
}
if ( scope . value . match ( regex ) ) {
scope . isLink = true ;
2016-10-07 18:09:54 +08:00
2016-10-08 01:56:29 +08:00
}
2016-10-07 18:09:54 +08:00
}
2016-10-08 01:56:29 +08:00
} ) ;
if ( ! scope . toggle ) {
if ( scope . secret ) {
scope . toggle = true ;
2016-10-07 18:09:54 +08:00
}
2016-09-15 04:50:14 +08:00
}
2016-12-21 21:06:29 +08:00
2016-10-08 01:56:29 +08:00
var timer ;
scope . onSuccess = function ( ) {
2016-12-21 21:06:29 +08:00
scope . copy _msg = $translate . instant ( 'copied' ) ;
2016-10-08 01:56:29 +08:00
$timeout . cancel ( timer ) ;
timer = $timeout ( function ( ) {
2016-12-21 21:06:29 +08:00
scope . copy _msg = $translate . instant ( 'copy' ) ;
2016-10-08 01:56:29 +08:00
} , 5000 ) ;
} ;
scope . valueVisible = true ;
scope . toggleVisibility = function ( ) {
scope . valueVisible = ! scope . valueVisible ;
} ;
2016-09-15 04:50:14 +08:00
}
2016-10-08 01:56:29 +08:00
} ;
} ] ) ;
} ( ) ) ;