2015-08-05 10:24:26 +03:00
'use strict' ;
2015-07-24 18:13:42 +03:00
var csrf ;
2015-09-06 13:57:25 +03:00
var suburl ;
2015-07-24 18:13:42 +03:00
2015-08-19 23:31:28 +03:00
function initCommentPreviewTab ( $form ) {
var $tab _menu = $form . find ( '.tabular.menu' ) ;
$tab _menu . find ( '.item' ) . tab ( ) ;
$tab _menu . find ( '.item[data-tab="' + $tab _menu . data ( 'preview' ) + '"]' ) . click ( function ( ) {
2015-08-10 13:57:57 +03:00
var $this = $ ( this ) ;
$ . post ( $this . data ( 'url' ) , {
"_csrf" : csrf ,
"mode" : "gfm" ,
"context" : $this . data ( 'context' ) ,
2015-08-19 23:31:28 +03:00
"text" : $form . find ( '.tab.segment[data-tab="' + $tab _menu . data ( 'write' ) + '"] textarea' ) . val ( )
2015-08-10 13:57:57 +03:00
} ,
function ( data ) {
2015-09-05 21:11:05 +03:00
var $preview _tab = $form . find ( '.tab.segment[data-tab="' + $tab _menu . data ( 'preview' ) + '"]' ) ;
$preview _tab . html ( data ) ;
emojify . run ( $preview _tab [ 0 ] ) ;
2015-08-10 13:57:57 +03:00
}
) ;
} ) ;
2015-11-12 00:19:28 +03:00
buttonsClickOnEnter ( ) ;
2015-08-19 23:31:28 +03:00
}
function initCommentForm ( ) {
if ( $ ( '.comment.form' ) . length == 0 ) {
return
}
initCommentPreviewTab ( $ ( '.comment.form' ) ) ;
2015-08-10 13:57:57 +03:00
// Labels
var $list = $ ( '.ui.labels.list' ) ;
var $no _select = $list . find ( '.no-select' ) ;
2015-08-14 19:42:43 +03:00
var $label _menu = $ ( '.select-label .menu' ) ;
var has _label _update _action = $label _menu . data ( 'action' ) == 'update' ;
function updateIssueMeta ( url , action , id ) {
$ . post ( url , {
"_csrf" : csrf ,
"action" : action ,
"id" : id
} ) ;
}
$label _menu . find ( '.item:not(.no-select)' ) . click ( function ( ) {
2015-08-10 13:57:57 +03:00
if ( $ ( this ) . hasClass ( 'checked' ) ) {
2015-09-05 21:11:05 +03:00
$ ( this ) . removeClass ( 'checked' ) ;
$ ( this ) . find ( '.octicon' ) . removeClass ( 'octicon-check' ) ;
2015-08-14 19:42:43 +03:00
if ( has _label _update _action ) {
updateIssueMeta ( $label _menu . data ( 'update-url' ) , "detach" , $ ( this ) . data ( 'id' ) ) ;
}
2015-08-10 13:57:57 +03:00
} else {
2015-09-05 21:11:05 +03:00
$ ( this ) . addClass ( 'checked' ) ;
$ ( this ) . find ( '.octicon' ) . addClass ( 'octicon-check' ) ;
2015-08-14 19:42:43 +03:00
if ( has _label _update _action ) {
updateIssueMeta ( $label _menu . data ( 'update-url' ) , "attach" , $ ( this ) . data ( 'id' ) ) ;
}
2015-08-10 13:57:57 +03:00
}
var label _ids = "" ;
$ ( this ) . parent ( ) . find ( '.item' ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'checked' ) ) {
label _ids += $ ( this ) . data ( 'id' ) + "," ;
$ ( $ ( this ) . data ( 'id-selector' ) ) . removeClass ( 'hide' ) ;
} else {
$ ( $ ( this ) . data ( 'id-selector' ) ) . addClass ( 'hide' ) ;
}
} ) ;
if ( label _ids . length == 0 ) {
$no _select . removeClass ( 'hide' ) ;
} else {
$no _select . addClass ( 'hide' ) ;
}
$ ( $ ( this ) . parent ( ) . data ( 'id' ) ) . val ( label _ids ) ;
return false ;
} ) ;
2015-08-14 19:42:43 +03:00
$label _menu . find ( '.no-select.item' ) . click ( function ( ) {
if ( has _label _update _action ) {
updateIssueMeta ( $label _menu . data ( 'update-url' ) , "clear" , '' ) ;
}
2015-08-10 13:57:57 +03:00
$ ( this ) . parent ( ) . find ( '.item' ) . each ( function ( ) {
$ ( this ) . removeClass ( 'checked' ) ;
$ ( this ) . find ( '.octicon' ) . removeClass ( 'octicon-check' ) ;
} ) ;
$list . find ( '.item' ) . each ( function ( ) {
$ ( this ) . addClass ( 'hide' ) ;
} ) ;
$no _select . removeClass ( 'hide' ) ;
$ ( $ ( this ) . parent ( ) . data ( 'id' ) ) . val ( '' ) ;
} ) ;
2015-08-10 16:47:23 +03:00
function selectItem ( select _id , input _id ) {
var $menu = $ ( select _id + ' .menu' ) ;
2015-09-05 21:11:05 +03:00
var $list = $ ( '.ui' + select _id + '.list' ) ;
2015-08-14 19:42:43 +03:00
var has _update _action = $menu . data ( 'action' ) == 'update' ;
2015-08-10 16:47:23 +03:00
$menu . find ( '.item:not(.no-select)' ) . click ( function ( ) {
$ ( this ) . parent ( ) . find ( '.item' ) . each ( function ( ) {
$ ( this ) . removeClass ( 'selected active' )
} ) ;
$ ( this ) . addClass ( 'selected active' ) ;
2015-08-14 19:42:43 +03:00
if ( has _update _action ) {
updateIssueMeta ( $menu . data ( 'update-url' ) , '' , $ ( this ) . data ( 'id' ) ) ;
}
2015-08-10 16:47:23 +03:00
switch ( input _id ) {
case '#milestone_id' :
$list . find ( '.selected' ) . html ( '<a class="item" href=' + $ ( this ) . data ( 'href' ) + '>' +
$ ( this ) . text ( ) + '</a>' ) ;
break ;
case '#assignee_id' :
$list . find ( '.selected' ) . html ( '<a class="item" href=' + $ ( this ) . data ( 'href' ) + '>' +
'<img class="ui avatar image" src=' + $ ( this ) . data ( 'avatar' ) + '>' +
$ ( this ) . text ( ) + '</a>' ) ;
}
$ ( '.ui' + select _id + '.list .no-select' ) . addClass ( 'hide' ) ;
$ ( input _id ) . val ( $ ( this ) . data ( 'id' ) ) ;
2015-08-10 13:57:57 +03:00
} ) ;
2015-08-10 16:47:23 +03:00
$menu . find ( '.no-select.item' ) . click ( function ( ) {
$ ( this ) . parent ( ) . find ( '.item:not(.no-select)' ) . each ( function ( ) {
$ ( this ) . removeClass ( 'selected active' )
} ) ;
2015-08-10 13:57:57 +03:00
2015-08-14 19:42:43 +03:00
if ( has _update _action ) {
updateIssueMeta ( $menu . data ( 'update-url' ) , '' , '' ) ;
}
2015-08-10 16:47:23 +03:00
$list . find ( '.selected' ) . html ( '' ) ;
$list . find ( '.no-select' ) . removeClass ( 'hide' ) ;
$ ( input _id ) . val ( '' ) ;
2015-08-10 13:57:57 +03:00
} ) ;
2015-08-10 16:47:23 +03:00
}
2015-08-10 13:57:57 +03:00
2015-08-10 16:47:23 +03:00
// Milestone and assignee
selectItem ( '.select-milestone' , '#milestone_id' ) ;
selectItem ( '.select-assignee' , '#assignee_id' ) ;
2015-08-10 13:57:57 +03:00
}
2015-07-07 20:09:03 +03:00
function initInstall ( ) {
if ( $ ( '.install' ) . length == 0 ) {
return ;
}
// Database type change detection.
$ ( "#db_type" ) . change ( function ( ) {
2015-09-13 16:51:51 +03:00
var sqlite _default = 'data/gogs.db' ;
var tidb _default = 'data/gogs_tidb' ;
2015-09-11 00:11:41 +03:00
var db _type = $ ( this ) . val ( ) ;
2015-09-06 23:31:22 +03:00
if ( db _type === "SQLite3" || db _type === "TiDB" ) {
2015-07-07 20:09:03 +03:00
$ ( '#sql_settings' ) . hide ( ) ;
$ ( '#pgsql_settings' ) . hide ( ) ;
$ ( '#sqlite_settings' ) . show ( ) ;
2015-09-13 16:51:51 +03:00
if ( db _type === "SQLite3" && $ ( '#db_path' ) . val ( ) == tidb _default ) {
$ ( '#db_path' ) . val ( sqlite _default ) ;
} else if ( db _type === "TiDB" && $ ( '#db_path' ) . val ( ) == sqlite _default ) {
$ ( '#db_path' ) . val ( tidb _default ) ;
}
2015-07-07 20:09:03 +03:00
return ;
}
var mysql _default = '127.0.0.1:3306' ;
var postgres _default = '127.0.0.1:5432' ;
$ ( '#sqlite_settings' ) . hide ( ) ;
$ ( '#sql_settings' ) . show ( ) ;
if ( db _type === "PostgreSQL" ) {
$ ( '#pgsql_settings' ) . show ( ) ;
if ( $ ( '#db_host' ) . val ( ) == mysql _default ) {
$ ( '#db_host' ) . val ( postgres _default ) ;
}
} else {
$ ( '#pgsql_settings' ) . hide ( ) ;
if ( $ ( '#db_host' ) . val ( ) == postgres _default ) {
$ ( '#db_host' ) . val ( mysql _default ) ;
}
}
} ) ;
2015-08-29 19:22:26 +03:00
$ ( '#offline-mode input' ) . change ( function ( ) {
if ( $ ( this ) . is ( ':checked' ) ) {
$ ( '#disable-gravatar' ) . checkbox ( 'check' ) ;
}
} ) ;
2015-09-13 19:14:32 +03:00
$ ( '#disable-registration input' ) . change ( function ( ) {
if ( $ ( this ) . is ( ':checked' ) ) {
$ ( '#enable-captcha' ) . checkbox ( 'uncheck' ) ;
}
} ) ;
$ ( '#enable-captcha input' ) . change ( function ( ) {
if ( $ ( this ) . is ( ':checked' ) ) {
$ ( '#disable-registration' ) . checkbox ( 'uncheck' ) ;
}
} ) ;
2015-09-05 21:11:05 +03:00
}
2015-07-07 20:09:03 +03:00
2015-07-24 18:13:42 +03:00
function initRepository ( ) {
2015-07-24 16:02:49 +03:00
if ( $ ( '.repository' ) . length == 0 ) {
return ;
}
2015-11-14 12:34:01 +03:00
function initFilterSearchDropdown ( selector ) {
var $dropdown = $ ( selector ) ;
$dropdown . dropdown ( {
fullTextSearch : true ,
onChange : function ( text , value , $choice ) {
window . location . href = $choice . data ( 'url' ) ;
console . log ( $choice . data ( 'url' ) )
} ,
message : { noResults : $dropdown . data ( 'no-results' ) }
} ) ;
}
2015-12-09 08:14:54 +03:00
// File list and commits
if ( $ ( '.repository.file.list' ) . length > 0 ||
2015-12-11 03:52:06 +03:00
( '.repository.commits' ) . length > 0 ) {
2015-11-14 12:34:01 +03:00
initFilterSearchDropdown ( '.choose.reference .dropdown' ) ;
$ ( '.reference.column' ) . click ( function ( ) {
$ ( '.choose.reference .scrolling.menu' ) . css ( 'display' , 'none' ) ;
$ ( '.choose.reference .text' ) . removeClass ( 'black' ) ;
$ ( $ ( this ) . data ( 'target' ) ) . css ( 'display' , 'block' ) ;
$ ( this ) . find ( '.text' ) . addClass ( 'black' ) ;
return false ;
} ) ;
}
2015-11-27 09:50:38 +03:00
// Wiki
if ( $ ( '.repository.wiki.view' ) . length > 0 ) {
initFilterSearchDropdown ( '.choose.page .dropdown' ) ;
}
2015-08-31 08:36:31 +03:00
// Options
if ( $ ( '.repository.settings.options' ) . length > 0 ) {
$ ( '#repo_name' ) . keyup ( function ( ) {
var $prompt _span = $ ( '#repo-name-change-prompt' ) ;
2015-09-01 16:37:41 +03:00
if ( $ ( this ) . val ( ) . toString ( ) . toLowerCase ( ) != $ ( this ) . data ( 'repo-name' ) . toString ( ) . toLowerCase ( ) ) {
2015-08-31 08:36:31 +03:00
$prompt _span . show ( ) ;
2015-08-31 11:10:28 +03:00
} else {
2015-08-31 08:36:31 +03:00
$prompt _span . hide ( ) ;
}
} ) ;
}
2015-07-24 18:13:42 +03:00
// Labels
2015-08-05 10:24:26 +03:00
if ( $ ( '.repository.labels' ) . length > 0 ) {
2015-08-09 17:45:38 +03:00
// Create label
var $new _label _panel = $ ( '.new-label.segment' ) ;
$ ( '.new-label.button' ) . click ( function ( ) {
$new _label _panel . show ( ) ;
} ) ;
$ ( '.new-label.segment .cancel' ) . click ( function ( ) {
$new _label _panel . hide ( ) ;
} ) ;
2015-08-05 10:24:26 +03:00
$ ( '.color-picker' ) . each ( function ( ) {
$ ( this ) . minicolors ( ) ;
} ) ;
$ ( '.precolors .color' ) . click ( function ( ) {
2015-09-05 21:11:05 +03:00
var color _hex = $ ( this ) . data ( 'color-hex' ) ;
2015-08-05 10:24:26 +03:00
$ ( '.color-picker' ) . val ( color _hex ) ;
$ ( '.minicolors-swatch-color' ) . css ( "background-color" , color _hex ) ;
} ) ;
$ ( '.edit-label-button' ) . click ( function ( ) {
$ ( '#label-modal-id' ) . val ( $ ( this ) . data ( 'id' ) ) ;
2015-08-09 17:45:38 +03:00
$ ( '.edit-label .new-label-input' ) . val ( $ ( this ) . data ( 'title' ) ) ;
2015-09-18 13:18:31 +03:00
$ ( '.edit-label .color-picker' ) . val ( $ ( this ) . data ( 'color' ) ) ;
2015-08-05 10:24:26 +03:00
$ ( '.minicolors-swatch-color' ) . css ( "background-color" , $ ( this ) . data ( 'color' ) ) ;
$ ( '.edit-label.modal' ) . modal ( {
onApprove : function ( ) {
$ ( '.edit-label.form' ) . submit ( ) ;
}
} ) . modal ( 'show' ) ;
return false ;
} ) ;
2015-07-24 16:02:49 +03:00
}
2015-08-05 10:24:26 +03:00
// Milestones
2015-08-05 15:23:08 +03:00
if ( $ ( '.repository.milestones' ) . length > 0 ) {
}
2015-08-05 10:24:26 +03:00
if ( $ ( '.repository.new.milestone' ) . length > 0 ) {
2015-09-05 21:11:05 +03:00
var $datepicker = $ ( '.milestone.datepicker' ) ;
2015-08-05 10:24:26 +03:00
$datepicker . datetimepicker ( {
lang : $datepicker . data ( 'lang' ) ,
inline : true ,
timepicker : false ,
startDate : $datepicker . data ( 'start-date' ) ,
2015-08-05 13:26:18 +03:00
formatDate : 'Y-m-d' ,
2015-08-05 10:24:26 +03:00
onSelectDate : function ( ct ) {
2015-08-05 13:26:18 +03:00
$ ( '#deadline' ) . val ( ct . dateFormat ( 'Y-m-d' ) ) ;
2015-07-24 18:13:42 +03:00
}
2015-08-05 10:24:26 +03:00
} ) ;
$ ( '#clear-date' ) . click ( function ( ) {
$ ( '#deadline' ) . val ( '' ) ;
return false ;
} ) ;
2015-08-06 17:48:11 +03:00
}
2015-08-13 18:21:43 +03:00
// Issues
if ( $ ( '.repository.view.issue' ) . length > 0 ) {
2015-08-19 18:14:57 +03:00
// Edit issue title
var $issue _title = $ ( '#issue-title' ) ;
var $edit _input = $ ( '#edit-title-input input' ) ;
var editTitleToggle = function ( ) {
$issue _title . toggle ( ) ;
$ ( '.not-in-edit' ) . toggle ( ) ;
$ ( '#edit-title-input' ) . toggle ( ) ;
$ ( '.in-edit' ) . toggle ( ) ;
$edit _input . focus ( ) ;
return false ;
2015-09-05 21:11:05 +03:00
} ;
2015-08-19 18:14:57 +03:00
$ ( '#edit-title' ) . click ( editTitleToggle ) ;
$ ( '#cancel-edit-title' ) . click ( editTitleToggle ) ;
$ ( '#save-edit-title' ) . click ( editTitleToggle ) .
2015-12-05 09:09:14 +03:00
click ( function ( ) {
if ( $edit _input . val ( ) . length == 0 ||
$edit _input . val ( ) == $issue _title . text ( ) ) {
$edit _input . val ( $issue _title . text ( ) ) ;
2015-11-27 09:50:38 +03:00
return false ;
2015-12-05 09:09:14 +03:00
}
$ . post ( $ ( this ) . data ( 'update-url' ) , {
"_csrf" : csrf ,
"title" : $edit _input . val ( )
} ,
function ( data ) {
$edit _input . val ( data . title ) ;
$issue _title . text ( data . title ) ;
} ) ;
return false ;
} ) ;
2015-08-19 18:14:57 +03:00
2015-08-19 23:31:28 +03:00
// Edit issue or comment content
$ ( '.edit-content' ) . click ( function ( ) {
var $segment = $ ( this ) . parent ( ) . parent ( ) . next ( ) ;
var $edit _content _zone = $segment . find ( '.edit-content-zone' ) ;
var $render _content = $segment . find ( '.render-content' ) ;
var $raw _content = $segment . find ( '.raw-content' ) ;
var $textarea ;
// Setup new form
if ( $edit _content _zone . html ( ) . length == 0 ) {
$edit _content _zone . html ( $ ( '#edit-content-form' ) . html ( ) ) ;
$textarea = $segment . find ( 'textarea' ) ;
// Give new write/preview data-tab name to distinguish from others
var $edit _content _form = $edit _content _zone . find ( '.ui.comment.form' ) ;
var $tabular _menu = $edit _content _form . find ( '.tabular.menu' ) ;
$tabular _menu . attr ( 'data-write' , $edit _content _zone . data ( 'write' ) ) ;
$tabular _menu . attr ( 'data-preview' , $edit _content _zone . data ( 'preview' ) ) ;
$tabular _menu . find ( '.write.item' ) . attr ( 'data-tab' , $edit _content _zone . data ( 'write' ) ) ;
$tabular _menu . find ( '.preview.item' ) . attr ( 'data-tab' , $edit _content _zone . data ( 'preview' ) ) ;
$edit _content _form . find ( '.write.segment' ) . attr ( 'data-tab' , $edit _content _zone . data ( 'write' ) ) ;
$edit _content _form . find ( '.preview.segment' ) . attr ( 'data-tab' , $edit _content _zone . data ( 'preview' ) ) ;
initCommentPreviewTab ( $edit _content _form ) ;
$edit _content _zone . find ( '.cancel.button' ) . click ( function ( ) {
$render _content . show ( ) ;
$edit _content _zone . hide ( ) ;
} ) ;
$edit _content _zone . find ( '.save.button' ) . click ( function ( ) {
$render _content . show ( ) ;
$edit _content _zone . hide ( ) ;
$ . post ( $edit _content _zone . data ( 'update-url' ) , {
"_csrf" : csrf ,
"content" : $textarea . val ( ) ,
"context" : $edit _content _zone . data ( 'context' )
} ,
function ( data ) {
if ( data . length == 0 ) {
$render _content . html ( $ ( '#no-content' ) . html ( ) ) ;
} else {
$render _content . html ( data . content ) ;
2015-09-05 21:18:02 +03:00
emojify . run ( $render _content [ 0 ] ) ;
2015-08-19 23:31:28 +03:00
}
} ) ;
} ) ;
} else {
$textarea = $segment . find ( 'textarea' ) ;
}
// Show write/preview tab and copy raw content as needed
$edit _content _zone . show ( ) ;
$render _content . hide ( ) ;
if ( $textarea . val ( ) . length == 0 ) {
$textarea . val ( $raw _content . text ( ) ) ;
}
$textarea . focus ( ) ;
return false ;
} ) ;
2015-08-19 18:14:57 +03:00
// Change status
2015-08-13 18:21:43 +03:00
var $status _btn = $ ( '#status-button' ) ;
$ ( '#content' ) . keyup ( function ( ) {
if ( $ ( this ) . val ( ) . length == 0 ) {
$status _btn . text ( $status _btn . data ( 'status' ) )
} else {
$status _btn . text ( $status _btn . data ( 'status-and-comment' ) )
}
} ) ;
$status _btn . click ( function ( ) {
$ ( '#status' ) . val ( $status _btn . data ( 'status-val' ) ) ;
$ ( '#comment-form' ) . submit ( ) ;
2015-12-11 03:52:06 +03:00
} ) ;
2015-08-13 18:21:43 +03:00
}
2015-08-20 19:18:30 +03:00
// Diff
if ( $ ( '.repository.diff' ) . length > 0 ) {
var $counter = $ ( '.diff-counter' ) ;
2015-10-30 04:09:48 +03:00
if ( $counter . length >= 1 ) {
$counter . each ( function ( i , item ) {
var $item = $ ( item ) ;
var addLine = $item . find ( 'span[data-line].add' ) . data ( "line" ) ;
var delLine = $item . find ( 'span[data-line].del' ) . data ( "line" ) ;
var addPercent = parseFloat ( addLine ) / ( parseFloat ( addLine ) + parseFloat ( delLine ) ) * 100 ;
$item . find ( ".bar .add" ) . css ( "width" , addPercent + "%" ) ;
} ) ;
2015-08-20 19:18:30 +03:00
}
}
2015-11-14 12:34:01 +03:00
// Quick start and repository home
$ ( '#repo-clone-ssh' ) . click ( function ( ) {
$ ( '.clone-url' ) . text ( $ ( this ) . data ( 'link' ) ) ;
$ ( '#repo-clone-url' ) . val ( $ ( this ) . data ( 'link' ) ) ;
$ ( this ) . addClass ( 'blue' ) ;
$ ( '#repo-clone-https' ) . removeClass ( 'blue' ) ;
} ) ;
$ ( '#repo-clone-https' ) . click ( function ( ) {
$ ( '.clone-url' ) . text ( $ ( this ) . data ( 'link' ) ) ;
$ ( '#repo-clone-url' ) . val ( $ ( this ) . data ( 'link' ) ) ;
$ ( this ) . addClass ( 'blue' ) ;
$ ( '#repo-clone-ssh' ) . removeClass ( 'blue' ) ;
} ) ;
$ ( '#repo-clone-url' ) . click ( function ( ) {
$ ( this ) . select ( ) ;
} ) ;
2015-10-03 02:58:36 +03:00
2015-08-08 17:43:14 +03:00
// Pull request
if ( $ ( '.repository.compare.pull' ) . length > 0 ) {
2015-11-14 12:34:01 +03:00
initFilterSearchDropdown ( '.choose.branch .dropdown' ) ;
2015-08-05 10:24:26 +03:00
}
2015-09-05 21:11:05 +03:00
}
2015-07-24 16:02:49 +03:00
2015-11-26 04:10:25 +03:00
function initWiki ( ) {
if ( $ ( '.repository.wiki' ) . length == 0 ) {
return ;
}
if ( $ ( '.repository.wiki.new' ) . length > 0 ) {
var $edit _area = $ ( '#edit-area' ) ;
var simplemde = new SimpleMDE ( {
autoDownloadFontAwesome : false ,
element : $edit _area [ 0 ] ,
previewRender : function ( plainText , preview ) { // Async method
setTimeout ( function ( ) {
2015-12-14 01:55:13 +03:00
// FIXME: still send render request when return back to edit mode
2015-11-26 04:10:25 +03:00
$ . post ( $edit _area . data ( 'url' ) , {
"_csrf" : csrf ,
"mode" : "gfm" ,
"context" : $edit _area . data ( 'context' ) ,
"text" : plainText
} ,
function ( data ) {
preview . innerHTML = '<div class="markdown">' + data + '</div>' ;
emojify . run ( $ ( '.editor-preview' ) [ 0 ] ) ;
}
) ;
} , 0 ) ;
return "Loading..." ;
} ,
renderingConfig : {
singleLineBreaks : false
} ,
spellChecker : false ,
tabSize : 4 ,
toolbar : [ "bold" , "italic" , "strikethrough" , "|" ,
"heading" , "heading-1" , "heading-2" , "heading-3" , "|" ,
"code" , "quote" , "|" ,
"unordered-list" , "ordered-list" , "|" ,
"link" , "image" , "horizontal-rule" , "|" ,
"preview" , "fullscreen" ]
} )
}
}
2015-09-06 23:31:22 +03:00
function initOrganization ( ) {
2015-09-06 17:56:31 +03:00
if ( $ ( '.organization' ) . length == 0 ) {
return ;
}
// Options
if ( $ ( '.organization.settings.options' ) . length > 0 ) {
$ ( '#org_name' ) . keyup ( function ( ) {
var $prompt _span = $ ( '#org-name-change-prompt' ) ;
if ( $ ( this ) . val ( ) . toString ( ) . toLowerCase ( ) != $ ( this ) . data ( 'org-name' ) . toString ( ) . toLowerCase ( ) ) {
$prompt _span . show ( ) ;
} else {
$prompt _span . hide ( ) ;
}
} ) ;
}
2015-09-06 23:31:22 +03:00
}
2015-09-06 17:56:31 +03:00
2015-09-06 23:31:22 +03:00
function initUser ( ) {
if ( $ ( '.user' ) . length == 0 ) {
return ;
}
2015-09-06 17:56:31 +03:00
2015-09-06 23:31:22 +03:00
// Options
if ( $ ( '.user.settings.profile' ) . length > 0 ) {
$ ( '#username' ) . keyup ( function ( ) {
var $prompt _span = $ ( '#name-change-prompt' ) ;
if ( $ ( this ) . val ( ) . toString ( ) . toLowerCase ( ) != $ ( this ) . data ( 'name' ) . toString ( ) . toLowerCase ( ) ) {
$prompt _span . show ( ) ;
} else {
$prompt _span . hide ( ) ;
}
} ) ;
}
2015-09-06 17:56:31 +03:00
}
2015-08-28 18:36:13 +03:00
function initWebhook ( ) {
if ( $ ( '.new.webhook' ) . length == 0 ) {
return ;
}
$ ( '.events.checkbox input' ) . change ( function ( ) {
if ( $ ( this ) . is ( ':checked' ) ) {
$ ( '.events.fields' ) . show ( ) ;
}
} ) ;
$ ( '.non-events.checkbox input' ) . change ( function ( ) {
if ( $ ( this ) . is ( ':checked' ) ) {
$ ( '.events.fields' ) . hide ( ) ;
}
} ) ;
2015-12-05 21:24:13 +03:00
// Test delivery
$ ( '#test-delivery' ) . click ( function ( ) {
var $this = $ ( this ) ;
$this . addClass ( 'loading disabled' ) ;
$ . post ( $this . data ( 'link' ) , {
"_csrf" : csrf
} ) . done (
setTimeout ( function ( ) {
window . location . href = $this . data ( 'redirect' ) ;
} , 5000 )
)
} ) ;
2015-08-28 18:36:13 +03:00
}
2015-09-11 00:11:41 +03:00
function initAdmin ( ) {
if ( $ ( '.admin' ) . length == 0 ) {
return ;
}
2015-09-13 16:51:51 +03:00
// New user
2015-09-13 18:07:21 +03:00
if ( $ ( '.admin.new.user' ) . length > 0 ||
$ ( '.admin.edit.user' ) . length > 0 ) {
2015-09-13 16:51:51 +03:00
$ ( '#login_type' ) . change ( function ( ) {
if ( $ ( this ) . val ( ) . substring ( 0 , 1 ) == '0' ) {
$ ( '#login_name' ) . removeAttr ( 'required' ) ;
$ ( '.non-local' ) . hide ( ) ;
$ ( '.local' ) . show ( ) ;
$ ( '#user_name' ) . focus ( ) ;
2015-09-13 18:07:21 +03:00
2015-10-03 02:58:36 +03:00
if ( $ ( this ) . data ( 'password' ) == "required" ) {
2015-09-13 18:07:21 +03:00
$ ( '#password' ) . attr ( 'required' , 'required' ) ;
}
2015-09-13 16:51:51 +03:00
} else {
$ ( '#login_name' ) . attr ( 'required' , 'required' ) ;
$ ( '.non-local' ) . show ( ) ;
$ ( '.local' ) . hide ( ) ;
$ ( '#login_name' ) . focus ( ) ;
2015-09-13 18:07:21 +03:00
$ ( '#password' ) . removeAttr ( 'required' ) ;
2015-09-13 16:51:51 +03:00
}
} ) ;
}
2015-09-11 00:11:41 +03:00
// New authentication
if ( $ ( '.admin.new.authentication' ) . length > 0 ) {
$ ( '#auth_type' ) . change ( function ( ) {
2015-09-13 16:51:51 +03:00
$ ( '.ldap' ) . hide ( ) ;
$ ( '.dldap' ) . hide ( ) ;
$ ( '.smtp' ) . hide ( ) ;
$ ( '.pam' ) . hide ( ) ;
2015-09-11 00:11:41 +03:00
var auth _type = $ ( this ) . val ( ) ;
switch ( auth _type ) {
case '2' : // LDAP
$ ( '.ldap' ) . show ( ) ;
break ;
case '3' : // SMTP
$ ( '.smtp' ) . show ( ) ;
break ;
case '4' : // PAM
$ ( '.pam' ) . show ( ) ;
break ;
case '5' : // LDAP
$ ( '.dldap' ) . show ( ) ;
break ;
}
} ) ;
}
2015-12-05 09:09:14 +03:00
// Notice
if ( $ ( '.admin.notice' ) ) {
var $detail _modal = $ ( '#detail-modal' ) ;
// Attach view detail modals
$ ( '.view-detail' ) . click ( function ( ) {
$detail _modal . find ( '.content p' ) . text ( $ ( this ) . data ( 'content' ) ) ;
$detail _modal . modal ( 'show' ) ;
return false ;
} ) ;
// Select actions
var $checkboxes = $ ( '.select.table .ui.checkbox' ) ;
$ ( '.select.action' ) . click ( function ( ) {
switch ( $ ( this ) . data ( 'action' ) ) {
case 'select-all' :
$checkboxes . checkbox ( 'check' ) ;
break ;
case 'deselect-all' :
$checkboxes . checkbox ( 'uncheck' ) ;
break ;
case 'inverse' :
$checkboxes . checkbox ( 'toggle' ) ;
break ;
}
} ) ;
$ ( '#delete-selection' ) . click ( function ( ) {
var $this = $ ( this ) ;
$this . addClass ( "loading disabled" ) ;
var ids = [ ] ;
$checkboxes . each ( function ( ) {
if ( $ ( this ) . checkbox ( 'is checked' ) ) {
ids . push ( $ ( this ) . data ( 'id' ) ) ;
}
} ) ;
$ . post ( $this . data ( 'link' ) , {
"_csrf" : csrf ,
"ids" : ids
} ) . done ( function ( ) {
window . location . href = $this . data ( 'redirect' ) ;
} ) ;
} ) ;
}
2015-09-11 00:11:41 +03:00
}
2015-11-12 00:19:28 +03:00
function buttonsClickOnEnter ( ) {
2015-11-14 12:34:01 +03:00
$ ( '.ui.button' ) . keypress ( function ( e ) {
2015-11-12 02:44:39 +03:00
if ( e . keyCode == 13 || e . keyCode == 32 ) // enter key or space bar
2015-11-12 00:19:28 +03:00
$ ( this ) . click ( ) ;
} ) ;
}
2015-11-22 09:32:09 +03:00
function hideWhenLostFocus ( body , parent ) {
$ ( document ) . click ( function ( e ) {
var target = e . target ;
if ( ! $ ( target ) . is ( body ) && ! $ ( target ) . parents ( ) . is ( parent ) ) {
$ ( body ) . hide ( ) ;
}
} ) ;
}
2015-11-17 10:18:05 +03:00
function searchUsers ( ) {
if ( ! $ ( '#search-user-box .results' ) . length ) {
return ;
}
var $search _user _box = $ ( '#search-user-box' ) ;
var $result _list = $search _user _box . find ( '.results' ) ;
$search _user _box . keyup ( function ( ) {
var $this = $ ( this ) ;
var keyword = $this . find ( 'input' ) . val ( ) ;
if ( keyword . length < 2 ) {
$result _list . hide ( ) ;
return ;
}
$ . ajax ( {
url : suburl + '/api/v1/users/search?q=' + keyword ,
dataType : "json" ,
success : function ( response ) {
var notEmpty = function ( str ) {
return str && str . length > 0 ;
} ;
$result _list . html ( '' ) ;
if ( response . ok && response . data . length ) {
var html = '' ;
$ . each ( response . data , function ( i , item ) {
html += '<div class="item"><img class="ui avatar image" src="' + item . avatar _url + '"><span class="username">' + item . username + '</span>' ;
if ( notEmpty ( item . full _name ) ) {
html += ' (' + item . full _name + ')' ;
}
html += '</div>' ;
} ) ;
$result _list . html ( html ) ;
$this . find ( '.results .item' ) . click ( function ( ) {
$this . find ( 'input' ) . val ( $ ( this ) . find ( '.username' ) . text ( ) ) ;
$result _list . hide ( ) ;
} ) ;
$result _list . show ( ) ;
} else {
$result _list . hide ( ) ;
}
}
} ) ;
} ) ;
$search _user _box . find ( 'input' ) . focus ( function ( ) {
$search _user _box . keyup ( ) ;
} ) ;
2015-11-22 09:32:09 +03:00
hideWhenLostFocus ( '#search-user-box .results' , '#search-user-box' ) ;
}
2015-11-22 10:29:20 +03:00
// FIXME: merge common parts in two functions
2015-11-22 09:32:09 +03:00
function searchRepositories ( ) {
if ( ! $ ( '#search-repo-box .results' ) . length ) {
return ;
}
2015-11-17 10:18:05 +03:00
2015-11-22 09:32:09 +03:00
var $search _repo _box = $ ( '#search-repo-box' ) ;
var $result _list = $search _repo _box . find ( '.results' ) ;
$search _repo _box . keyup ( function ( ) {
var $this = $ ( this ) ;
var keyword = $this . find ( 'input' ) . val ( ) ;
if ( keyword . length < 2 ) {
$result _list . hide ( ) ;
return ;
2015-11-17 10:18:05 +03:00
}
2015-11-22 09:32:09 +03:00
$ . ajax ( {
url : suburl + '/api/v1/repos/search?q=' + keyword + "&uid=" + $search _repo _box . data ( 'uid' ) ,
dataType : "json" ,
success : function ( response ) {
var notEmpty = function ( str ) {
return str && str . length > 0 ;
} ;
$result _list . html ( '' ) ;
if ( response . ok && response . data . length ) {
var html = '' ;
$ . each ( response . data , function ( i , item ) {
html += '<div class="item"><i class="icon octicon octicon-repo"></i> <span class="fullname">' + item . full _name + '</span></div>' ;
} ) ;
$result _list . html ( html ) ;
$this . find ( '.results .item' ) . click ( function ( ) {
$this . find ( 'input' ) . val ( $ ( this ) . find ( '.fullname' ) . text ( ) . split ( "/" ) [ 1 ] ) ;
$result _list . hide ( ) ;
} ) ;
$result _list . show ( ) ;
} else {
$result _list . hide ( ) ;
}
}
} ) ;
} ) ;
$search _repo _box . find ( 'input' ) . focus ( function ( ) {
$search _repo _box . keyup ( ) ;
2015-11-17 10:18:05 +03:00
} ) ;
2015-11-22 10:29:20 +03:00
hideWhenLostFocus ( '#search-repo-box .results' , '#search-repo-box' ) ;
2015-11-17 10:18:05 +03:00
}
2015-03-07 23:12:13 +03:00
$ ( document ) . ready ( function ( ) {
2015-07-24 18:13:42 +03:00
csrf = $ ( 'meta[name=_csrf]' ) . attr ( "content" ) ;
2015-09-06 13:57:25 +03:00
suburl = $ ( 'meta[name=_suburl]' ) . attr ( "content" ) ;
2015-07-24 18:13:42 +03:00
2015-08-14 19:42:43 +03:00
// Show exact time
$ ( '.time-since' ) . each ( function ( ) {
$ ( this ) . addClass ( 'poping up' ) .
2015-12-05 09:09:14 +03:00
attr ( 'data-content' , $ ( this ) . attr ( 'title' ) ) .
attr ( 'data-variation' , 'inverted tiny' ) .
attr ( 'title' , '' ) ;
2015-08-14 19:42:43 +03:00
} ) ;
2015-07-07 20:09:03 +03:00
// Semantic UI modules.
$ ( '.dropdown' ) . dropdown ( ) ;
2015-07-24 11:42:47 +03:00
$ ( '.jump.dropdown' ) . dropdown ( {
2015-08-10 17:38:21 +03:00
action : 'hide' ,
2015-08-11 07:44:14 +03:00
onShow : function ( ) {
2015-08-10 17:38:21 +03:00
$ ( '.poping.up' ) . popup ( 'hide' ) ;
}
2015-07-23 23:50:05 +03:00
} ) ;
2015-07-07 20:09:03 +03:00
$ ( '.slide.up.dropdown' ) . dropdown ( {
2015-03-07 23:12:13 +03:00
transition : 'slide up'
} ) ;
2015-12-05 09:09:14 +03:00
$ ( '.upward.dropdown' ) . dropdown ( {
direction : 'upward'
} ) ;
2015-07-08 14:47:56 +03:00
$ ( '.ui.accordion' ) . accordion ( ) ;
$ ( '.ui.checkbox' ) . checkbox ( ) ;
2015-08-03 12:42:09 +03:00
$ ( '.ui.progress' ) . progress ( {
showActivity : false
} ) ;
2015-07-09 08:17:48 +03:00
$ ( '.poping.up' ) . popup ( ) ;
2015-08-10 17:38:21 +03:00
$ ( '.top.menu .poping.up' ) . popup ( {
2015-08-11 07:44:14 +03:00
onShow : function ( ) {
if ( $ ( '.top.menu .menu.transition' ) . hasClass ( 'visible' ) ) {
2015-08-10 17:38:21 +03:00
return false ;
}
}
} ) ;
2015-08-27 18:06:14 +03:00
$ ( '.tabular.menu .item' ) . tab ( ) ;
2015-11-13 20:05:48 +03:00
$ ( '.tabable.menu .item' ) . tab ( ) ;
2015-08-27 18:06:14 +03:00
$ ( '.toggle.button' ) . click ( function ( ) {
$ ( $ ( this ) . data ( 'target' ) ) . slideToggle ( 100 ) ;
} ) ;
2015-07-07 20:09:03 +03:00
2015-08-27 18:58:50 +03:00
// Highlight JS
2015-08-28 09:24:05 +03:00
if ( typeof hljs != 'undefined' ) {
hljs . initHighlightingOnLoad ( ) ;
}
2015-08-27 18:58:50 +03:00
2015-08-11 12:54:00 +03:00
// Dropzone
if ( $ ( '#dropzone' ) . length > 0 ) {
// Disable auto discover for all elements:
Dropzone . autoDiscover = false ;
var filenameDict = { } ;
var $dropz = $ ( '#dropzone' ) ;
$dropz . dropzone ( {
url : $dropz . data ( 'upload-url' ) ,
headers : { "X-Csrf-Token" : csrf } ,
2015-08-11 18:24:40 +03:00
maxFiles : $dropz . data ( 'max-file' ) ,
2015-08-11 12:54:00 +03:00
maxFilesize : $dropz . data ( 'max-size' ) ,
2015-11-23 18:46:58 +03:00
acceptedFiles : ( $dropz . data ( 'accepts' ) === '*/*' ) ? null : $dropz . data ( 'accepts' ) ,
2015-08-11 12:54:00 +03:00
addRemoveLinks : true ,
dictDefaultMessage : $dropz . data ( 'default-message' ) ,
dictInvalidFileType : $dropz . data ( 'invalid-input-type' ) ,
dictFileTooBig : $dropz . data ( 'file-too-big' ) ,
dictRemoveFile : $dropz . data ( 'remove-file' ) ,
init : function ( ) {
this . on ( "success" , function ( file , data ) {
filenameDict [ file . name ] = data . uuid ;
2015-08-11 18:24:40 +03:00
$ ( '.attachments' ) . append ( '<input id="' + data . uuid + '" name="attachments" type="hidden" value="' + data . uuid + '">' ) ;
2015-09-05 21:11:05 +03:00
} ) ;
2015-08-11 12:54:00 +03:00
this . on ( "removedfile" , function ( file ) {
2015-08-11 18:24:40 +03:00
if ( file . name in filenameDict ) {
$ ( '#' + filenameDict [ file . name ] ) . remove ( ) ;
}
2015-08-11 12:54:00 +03:00
} )
}
} ) ;
}
2015-08-09 10:23:02 +03:00
2015-09-05 21:11:05 +03:00
// Emojify
emojify . setConfig ( {
2015-12-14 14:04:24 +03:00
img _dir : suburl + '/img/emoji' ,
ignore _emoticons : true
2015-09-05 21:11:05 +03:00
} ) ;
2015-11-13 20:11:45 +03:00
emojify . run ( ) ;
2015-09-05 21:11:05 +03:00
2015-10-03 02:58:36 +03:00
// Clipboard JS
var clipboard = new Clipboard ( '.clipboard' ) ;
clipboard . on ( 'success' , function ( e ) {
e . clearSelection ( ) ;
$ ( '#' + e . trigger . getAttribute ( 'id' ) ) . popup ( 'destroy' ) ;
e . trigger . setAttribute ( 'data-content' , e . trigger . getAttribute ( 'data-success' ) )
$ ( '#' + e . trigger . getAttribute ( 'id' ) ) . popup ( 'show' ) ;
e . trigger . setAttribute ( 'data-content' , e . trigger . getAttribute ( 'data-original' ) )
} ) ;
clipboard . on ( 'error' , function ( e ) {
$ ( '#' + e . trigger . getAttribute ( 'id' ) ) . popup ( 'destroy' ) ;
e . trigger . setAttribute ( 'data-content' , e . trigger . getAttribute ( 'data-error' ) )
$ ( '#' + e . trigger . getAttribute ( 'id' ) ) . popup ( 'show' ) ;
e . trigger . setAttribute ( 'data-content' , e . trigger . getAttribute ( 'data-original' ) )
} ) ;
2015-08-05 15:23:08 +03:00
// Helpers.
$ ( '.delete-button' ) . click ( function ( ) {
var $this = $ ( this ) ;
$ ( '.delete.modal' ) . modal ( {
closable : false ,
onApprove : function ( ) {
2015-08-18 21:49:44 +03:00
if ( $this . data ( 'type' ) == "form" ) {
$ ( $this . data ( 'form' ) ) . submit ( ) ;
return ;
}
2015-08-05 15:23:08 +03:00
$ . post ( $this . data ( 'url' ) , {
"_csrf" : csrf ,
"id" : $this . data ( "id" )
} ) . done ( function ( data ) {
window . location . href = data . redirect ;
} ) ;
}
} ) . modal ( 'show' ) ;
return false ;
} ) ;
2015-08-18 22:36:16 +03:00
$ ( '.show-panel.button' ) . click ( function ( ) {
$ ( $ ( this ) . data ( 'panel' ) ) . show ( ) ;
} ) ;
2015-08-29 22:21:59 +03:00
$ ( '.show-modal.button' ) . click ( function ( ) {
$ ( $ ( this ) . data ( 'modal' ) ) . modal ( 'show' ) ;
} ) ;
2015-08-05 15:23:08 +03:00
2015-11-14 12:34:01 +03:00
// Set anchor.
$ ( '.markdown' ) . each ( function ( ) {
var headers = { } ;
$ ( this ) . find ( 'h1, h2, h3, h4, h5, h6' ) . each ( function ( ) {
var node = $ ( this ) ;
var val = encodeURIComponent ( node . text ( ) . toLowerCase ( ) . replace ( /[^\w\- ]/g , '' ) . replace ( /[ ]/g , '-' ) ) ;
var name = val ;
if ( headers [ val ] > 0 ) {
name = val + '-' + headers [ val ] ;
}
if ( headers [ val ] == undefined ) {
headers [ val ] = 1 ;
} else {
headers [ val ] += 1 ;
}
node = node . wrap ( '<div id="' + name + '" class="anchor-wrap" ></div>' ) ;
node . append ( '<a class="anchor" href="#' + name + '"><span class="octicon octicon-link"></span></a>' ) ;
} ) ;
} ) ;
2015-11-12 00:19:28 +03:00
buttonsClickOnEnter ( ) ;
2015-11-17 10:18:05 +03:00
searchUsers ( ) ;
2015-11-22 09:32:09 +03:00
searchRepositories ( ) ;
2015-11-17 10:18:05 +03:00
2015-11-12 00:19:28 +03:00
2015-08-10 13:57:57 +03:00
initCommentForm ( ) ;
2015-07-07 20:09:03 +03:00
initInstall ( ) ;
2015-07-24 16:02:49 +03:00
initRepository ( ) ;
2015-11-26 04:10:25 +03:00
initWiki ( ) ;
2015-09-06 17:56:31 +03:00
initOrganization ( ) ;
2015-09-06 23:31:22 +03:00
initUser ( ) ;
2015-08-28 18:36:13 +03:00
initWebhook ( ) ;
2015-09-11 00:11:41 +03:00
initAdmin ( ) ;
2015-11-14 12:34:01 +03:00
} ) ;
$ ( window ) . load ( function ( ) {
function changeHash ( hash ) {
if ( history . pushState ) {
history . pushState ( null , null , hash ) ;
}
else {
location . hash = hash ;
}
}
function deSelect ( ) {
if ( window . getSelection ) {
window . getSelection ( ) . removeAllRanges ( ) ;
} else {
document . selection . empty ( ) ;
}
}
function selectRange ( $list , $select , $from ) {
$list . removeClass ( 'active' ) ;
if ( $from ) {
var a = parseInt ( $select . attr ( 'rel' ) . substr ( 1 ) ) ;
var b = parseInt ( $from . attr ( 'rel' ) . substr ( 1 ) ) ;
var c ;
if ( a != b ) {
if ( a > b ) {
c = a ;
a = b ;
b = c ;
}
var classes = [ ] ;
for ( i = a ; i <= b ; i ++ ) {
classes . push ( '.L' + i ) ;
}
$list . filter ( classes . join ( ',' ) ) . addClass ( 'active' ) ;
changeHash ( '#L' + a + '-' + 'L' + b ) ;
return
}
}
$select . addClass ( 'active' ) ;
changeHash ( '#' + $select . attr ( 'rel' ) ) ;
}
// Code view.
2015-12-03 23:01:15 +03:00
if ( $ ( '.code-view .linenums' ) . length > 0 ) {
2015-11-14 12:34:01 +03:00
var $block = $ ( '.code-view .linenums' ) ;
var lines = $block . html ( ) . split ( "\n" ) ;
$block . html ( '' ) ;
var $num _list = $ ( '.code-view .lines-num' ) ;
// Building blocks.
for ( var i = 0 ; i < lines . length ; i ++ ) {
$block . append ( '<li class="L' + ( i + 1 ) + '" rel="L' + ( i + 1 ) + '">' + lines [ i ] + '</li>' ) ;
$num _list . append ( '<span id="L' + ( i + 1 ) + '">' + ( i + 1 ) + '</span>' ) ;
}
$ ( document ) . on ( 'click' , '.lines-num span' , function ( e ) {
var $select = $ ( this ) ;
var $list = $select . parent ( ) . siblings ( '.lines-code' ) . find ( 'ol.linenums > li' ) ;
selectRange ( $list , $list . filter ( '[rel=' + $select . attr ( 'id' ) + ']' ) , ( e . shiftKey ? $list . filter ( '.active' ) . eq ( 0 ) : null ) ) ;
deSelect ( ) ;
} ) ;
$ ( window ) . on ( 'hashchange' , function ( e ) {
var m = window . location . hash . match ( /^#(L\d+)\-(L\d+)$/ ) ;
var $list = $ ( '.code-view ol.linenums > li' ) ;
var $first ;
if ( m ) {
$first = $list . filter ( '.' + m [ 1 ] ) ;
selectRange ( $list , $first , $list . filter ( '.' + m [ 2 ] ) ) ;
$ ( "html, body" ) . scrollTop ( $first . offset ( ) . top - 200 ) ;
return ;
}
m = window . location . hash . match ( /^#(L\d+)$/ ) ;
if ( m ) {
$first = $list . filter ( '.' + m [ 1 ] ) ;
selectRange ( $list , $first ) ;
$ ( "html, body" ) . scrollTop ( $first . offset ( ) . top - 200 ) ;
}
} ) . trigger ( 'hashchange' ) ;
}
2015-12-09 08:14:54 +03:00
} ) ;