2015-01-20 10:25:10 +00:00
define ( [
'jquery' ,
'underscore' ,
'backbone' ,
2015-01-31 05:17:47 +00:00
'common' ,
2015-12-27 14:09:52 +00:00
'app/views/share' ,
2016-02-23 11:54:33 +00:00
'app/views/dialogs/repo-change-password' ,
2016-01-28 06:33:17 +00:00
'app/views/dialogs/repo-history-settings' ,
2016-02-07 09:29:49 +00:00
'app/views/dialogs/repo-share-link-admin' ,
2016-03-22 03:47:52 +00:00
'app/views/dialogs/repo-folder-perm-admin' ,
2016-03-22 10:32:42 +00:00
'app/views/widgets/hl-item-view' ,
'app/views/widgets/dropdown'
2016-02-23 11:54:33 +00:00
] , function ( $ , _ , Backbone , Common , ShareView , RepoChangePasswordDialog ,
2016-03-22 03:47:52 +00:00
HistorySettingsDialog , RepoShareLinkAdminDialog , RepoFolderPermAdminDialog ,
2016-03-22 10:32:42 +00:00
HLItemView , DropdownView ) {
2015-01-20 10:25:10 +00:00
'use strict' ;
2016-03-22 03:47:52 +00:00
var RepoView = HLItemView . extend ( {
2015-01-20 10:25:10 +00:00
tagName : 'tr' ,
2015-04-03 04:15:41 +00:00
template : _ . template ( $ ( '#repo-tmpl' ) . html ( ) ) ,
2016-11-29 07:03:13 +00:00
mobileTemplate : _ . template ( $ ( '#repo-mobile-tmpl' ) . html ( ) ) , // for extra small devices (phones, less than 768px)
2015-12-27 14:09:52 +00:00
renameTemplate : _ . template ( $ ( "#repo-rename-form-template" ) . html ( ) ) ,
2016-01-14 03:56:01 +00:00
transferTemplate : _ . template ( $ ( '#repo-transfer-form-tmpl' ) . html ( ) ) ,
2015-01-20 10:25:10 +00:00
2015-01-31 05:17:47 +00:00
events : {
2015-03-31 04:15:47 +00:00
'click .repo-delete-btn' : 'del' ,
2015-12-27 14:09:52 +00:00
'click .repo-share-btn' : 'share' ,
'click .js-repo-rename' : 'rename' ,
2016-01-14 03:56:01 +00:00
'click .js-repo-transfer' : 'transfer' ,
2016-02-23 11:54:33 +00:00
'click .js-repo-change-password' : 'changePassword' ,
2016-02-07 09:29:49 +00:00
'click .js-popup-history-setting' : 'popupHistorySetting' ,
'click .js-popup-share-link-admin' : 'popupShareLinkAdmin' ,
'click .js-popup-folder-perm-admin' : 'popupFolderPermAdmin'
2015-01-31 05:17:47 +00:00
} ,
2015-02-04 13:57:26 +00:00
2015-01-20 10:25:10 +00:00
initialize : function ( ) {
2016-03-22 03:47:52 +00:00
HLItemView . prototype . initialize . call ( this ) ;
2016-01-11 09:16:21 +00:00
this . listenTo ( this . model , "change" , this . render ) ;
2015-01-20 10:25:10 +00:00
} ,
render : function ( ) {
2016-03-11 04:10:55 +00:00
var obj = this . model . toJSON ( ) ;
var icon _size = Common . isHiDPI ( ) ? 96 : 24 ;
var icon _url = this . model . getIconUrl ( icon _size ) ;
2016-11-29 07:03:13 +00:00
var tmpl , dropdownOptions = { } ;
if ( $ ( window ) . width ( ) >= 768 ) {
tmpl = this . template ;
} else {
tmpl = this . mobileTemplate ;
dropdownOptions = { 'right' : 0 } ;
}
2016-03-14 04:15:28 +00:00
_ . extend ( obj , {
'icon_url' : icon _url ,
2016-08-22 03:20:08 +00:00
'icon_title' : this . model . getIconTitle ( ) ,
'can_generate_share_link' : app . pageOptions . can _generate _share _link ,
'can_generate_upload_link' : app . pageOptions . can _generate _upload _link
2016-03-14 04:15:28 +00:00
} ) ;
2016-11-29 07:03:13 +00:00
this . $el . html ( tmpl ( obj ) ) ;
this . dropdown = new DropdownView ( $ . extend ( {
2016-04-01 09:53:41 +00:00
el : this . $ ( '.sf-dropdown' )
2016-11-29 07:03:13 +00:00
} , dropdownOptions ) ) ;
2015-01-20 10:25:10 +00:00
return this ;
2015-01-31 05:17:47 +00:00
} ,
2015-03-31 04:15:47 +00:00
del : function ( ) {
var _this = this ;
2016-06-14 03:06:20 +00:00
var repo _name = this . model . get ( 'name' ) ;
var popupTitle = gettext ( "Delete Library" ) ;
var popupContent = gettext ( "Are you sure you want to delete %s ?" ) . replace ( '%s' , '<span class="op-target ellipsis ellipsis-op-target">' + Common . HTMLescape ( repo _name ) + '</span>' ) ;
2016-08-22 03:20:08 +00:00
var yesCallback = function ( ) {
2015-03-31 04:15:47 +00:00
$ . ajax ( {
2016-06-20 10:34:30 +00:00
url : Common . getUrl ( { 'name' : 'repo' , 'repo_id' : _this . model . get ( 'id' ) } ) ,
type : 'DELETE' ,
2016-06-14 03:06:20 +00:00
cache : false ,
dataType : 'json' ,
2016-06-20 10:34:30 +00:00
beforeSend : Common . prepareCSRFToken ,
2016-06-14 03:06:20 +00:00
success : function ( ) {
_this . $el . remove ( ) ;
Common . feedback ( gettext ( "Successfully deleted." ) , 'success' ) ;
2015-01-31 05:17:47 +00:00
} ,
2016-06-14 03:06:20 +00:00
error : function ( xhr , textStatus , errorThrown ) {
Common . ajaxErrorHandler ( xhr , textStatus , errorThrown ) ;
} ,
complete : function ( ) {
$ . modal . close ( ) ;
2015-01-31 05:17:47 +00:00
}
} ) ;
2016-06-14 03:06:20 +00:00
} ;
Common . showConfirm ( popupTitle , popupContent , yesCallback ) ;
this . togglePopup ( ) ;
2016-04-12 03:17:27 +00:00
return false ;
2015-01-31 05:17:47 +00:00
} ,
share : function ( ) {
2015-02-26 06:39:35 +00:00
var options = {
2015-03-18 02:45:13 +00:00
'is_repo_owner' : true ,
'is_virtual' : this . model . get ( 'virtual' ) ,
2015-05-27 09:58:21 +00:00
'user_perm' : 'rw' ,
2015-03-18 02:45:13 +00:00
'repo_id' : this . model . get ( 'id' ) ,
2015-05-13 09:35:14 +00:00
'repo_encrypted' : this . model . get ( 'encrypted' ) ,
2015-03-18 02:45:13 +00:00
'is_dir' : true ,
'dirent_path' : '/' ,
'obj_name' : this . model . get ( 'name' )
} ;
new ShareView ( options ) ;
2016-04-12 03:17:27 +00:00
return false ;
2015-12-27 14:09:52 +00:00
} ,
togglePopup : function ( ) {
2016-03-22 10:32:42 +00:00
this . dropdown . hide ( ) ;
2015-12-27 14:09:52 +00:00
} ,
rename : function ( ) {
var repo _name = this . model . get ( 'name' ) ;
var form = $ ( this . renameTemplate ( {
repo _name : repo _name
} ) ) ;
var $name _span = this . $ ( '.repo-name-span' ) ,
$op _td = this . $ ( '.repo-op-td' ) ,
$name _td = $name _span . closest ( 'td' ) ;
$name _td . attr ( 'colspan' , 2 ) . css ( {
'width' : $name _span . width ( ) + $op _td . outerWidth ( ) ,
'height' : $name _span . height ( )
} ) . append ( form ) ;
$op _td . hide ( ) ;
$name _span . hide ( ) ;
2016-08-12 11:10:49 +00:00
$ ( '[name="newname"]' , form ) . select ( ) ;
2015-12-27 14:09:52 +00:00
this . togglePopup ( ) ;
2016-03-22 03:47:52 +00:00
app . ui . freezeItemHightlight = true ;
2015-12-27 14:09:52 +00:00
var cancelRename = function ( ) {
2016-03-22 03:47:52 +00:00
app . ui . freezeItemHightlight = false ;
2015-12-27 14:09:52 +00:00
form . remove ( ) ;
$op _td . show ( ) ;
$name _span . show ( ) ;
$name _td . attr ( 'colspan' , 1 ) . css ( {
'width' : $name _span . width ( )
} ) ;
return false ; // stop bubbling (to 'doc click to hide .hidden-op')
} ;
$ ( '.cancel' , form ) . click ( cancelRename ) ;
2016-01-11 09:16:21 +00:00
var form _id = form . attr ( 'id' ) ;
var _this = this ;
form . submit ( function ( ) {
var new _name = $ . trim ( $ ( '[name="newname"]' , form ) . val ( ) ) ;
if ( ! new _name ) {
return false ;
}
if ( new _name == repo _name ) {
cancelRename ( ) ;
return false ;
}
var post _data = {
'repo_name' : new _name
} ;
var post _url = Common . getUrl ( {
2016-01-28 06:33:17 +00:00
name : 'repo' ,
2016-01-11 09:16:21 +00:00
repo _id : _this . model . get ( 'id' )
2016-01-28 06:33:17 +00:00
} ) + '?op=rename' ;
2016-01-11 09:16:21 +00:00
var after _op _success = function ( data ) {
2016-03-22 03:47:52 +00:00
app . ui . freezeItemHightlight = false ;
2016-01-11 09:16:21 +00:00
_this . model . set ( { 'name' : new _name } ) ; // it will trigger 'change' event
} ;
var after _op _error = function ( xhr ) {
var err _msg ;
if ( xhr . responseText ) {
err _msg = $ . parseJSON ( xhr . responseText ) . error ;
} else {
err _msg = gettext ( "Failed. Please check the network." ) ;
}
Common . feedback ( err _msg , 'error' ) ;
Common . enableButton ( submit _btn ) ;
} ;
var submit _btn = $ ( '[type="submit"]' , form ) ;
Common . disableButton ( submit _btn ) ;
$ . ajax ( {
url : post _url ,
type : 'POST' ,
dataType : 'json' ,
beforeSend : Common . prepareCSRFToken ,
data : post _data ,
success : after _op _success ,
error : after _op _error
} ) ;
return false ;
} ) ;
2015-12-27 14:09:52 +00:00
return false ;
2016-01-14 03:56:01 +00:00
} ,
transfer : function ( ) {
var _this = this ;
this . togglePopup ( ) ; // Close the popup
2016-01-28 06:33:17 +00:00
var repo _name = this . model . get ( 'name' ) ;
var $form = $ ( this . transferTemplate ( {
title : gettext ( "Transfer Library {library_name} To" ) . replace ( '{library_name}' ,
'<span class="op-target ellipsis ellipsis-op-target" title="' + Common . HTMLescape ( repo _name ) + '">' + Common . HTMLescape ( repo _name ) + '</span>' )
} ) ) ;
2016-01-14 03:56:01 +00:00
$form . modal ( { focus : false } ) ;
$ ( '#simplemodal-container' ) . css ( { 'width' : 'auto' , 'height' : 'auto' } ) ;
$ ( '[name="email"]' , $form ) . select2 ( $ . extend (
Common . contactInputOptionsForSelect2 ( ) , {
width : '300px' ,
maximumSelectionSize : 1 ,
placeholder : gettext ( "Search user or enter email and press Enter" ) , // to override 'placeholder' returned by `Common.conta...`
formatSelectionTooBig : gettext ( "You cannot select any more choices" )
} ) ) ;
$form . submit ( function ( ) {
var email = $ . trim ( $ ( '[name="email"]' , $ ( this ) ) . val ( ) ) ;
if ( ! email ) {
return false ;
}
if ( email == _this . model . get ( 'owner' ) ) {
return false ;
}
var $submitBtn = $ ( '[type="submit"]' , $ ( this ) ) ;
Common . disableButton ( $submitBtn ) ;
$ . ajax ( {
url : Common . getUrl ( {
2016-01-28 06:33:17 +00:00
'name' : 'repo_owner' ,
2016-01-14 03:56:01 +00:00
'repo_id' : _this . model . get ( 'id' )
} ) ,
type : 'put' ,
dataType : 'json' ,
beforeSend : Common . prepareCSRFToken ,
data : {
'owner' : email
} ,
success : function ( ) {
$ . modal . close ( ) ;
_this . remove ( ) ;
2016-01-28 06:33:17 +00:00
Common . feedback ( gettext ( "Successfully transferred the library." ) , 'success' ) ;
2016-01-14 03:56:01 +00:00
} ,
error : function ( xhr ) {
var error _msg ;
if ( xhr . responseText ) {
error _msg = $ . parseJSON ( xhr . responseText ) . error _msg ;
} else {
error _msg = gettext ( "Failed. Please check the network." ) ;
}
$ ( '.error' , $form ) . html ( error _msg ) . show ( ) ;
Common . enableButton ( $submitBtn ) ;
}
} ) ;
return false ;
} ) ;
2015-12-27 14:09:52 +00:00
} ,
2016-02-07 09:29:49 +00:00
popupHistorySetting : function ( ) {
2015-12-27 14:09:52 +00:00
var options = {
'repo_name' : this . model . get ( 'name' ) ,
'repo_id' : this . model . get ( 'id' )
} ;
this . togglePopup ( ) ; // close the popup
new HistorySettingsDialog ( options ) ;
return false ;
} ,
2015-12-28 03:17:26 +00:00
popupShareLinkAdmin : function ( ) {
var options = {
'repo_name' : this . model . get ( 'name' ) ,
'repo_id' : this . model . get ( 'id' )
} ;
this . togglePopup ( ) ; // close the popup
new RepoShareLinkAdminDialog ( options ) ;
2015-12-27 14:09:52 +00:00
return false ;
2016-02-07 09:29:49 +00:00
} ,
popupFolderPermAdmin : function ( ) {
var options = {
'repo_name' : this . model . get ( 'name' ) ,
'repo_id' : this . model . get ( 'id' )
} ;
this . togglePopup ( ) ; // close the popup
new RepoFolderPermAdminDialog ( options ) ;
return false ;
2016-02-23 11:54:33 +00:00
} ,
changePassword : function ( ) {
var options = {
'repo_name' : this . model . get ( 'name' ) ,
'repo_id' : this . model . get ( 'id' )
} ;
this . togglePopup ( ) ; // close the popup
new RepoChangePasswordDialog ( options ) ;
return false ;
2015-01-20 10:25:10 +00:00
}
} ) ;
return RepoView ;
} ) ;