2015-08-05 10:24:26 +03:00
'use strict' ;
2015-07-24 18:13:42 +03:00
var csrf ;
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-08-19 23:31:28 +03:00
$form . find ( '.tab.segment[data-tab="' + $tab _menu . data ( 'preview' ) + '"]' ) . html ( data ) ;
2015-08-10 13:57:57 +03:00
}
) ;
} ) ;
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' ) ) {
$ ( 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 {
$ ( 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' ) ;
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 ( ) {
var db _type = $ ( '#db_type' ) . val ( ) ;
if ( db _type === "SQLite3" ) {
$ ( '#sql_settings' ) . hide ( ) ;
$ ( '#pgsql_settings' ) . hide ( ) ;
$ ( '#sqlite_settings' ) . show ( ) ;
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-07-24 18:13:42 +03:00
function initRepository ( ) {
2015-07-24 16:02:49 +03:00
if ( $ ( '.repository' ) . length == 0 ) {
return ;
}
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 ( ) {
var color _hex = $ ( this ) . data ( 'color-hex' )
$ ( '.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-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 ) {
var $datepicker = $ ( '.milestone.datepicker' )
$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 ;
}
$ ( '#edit-title' ) . click ( editTitleToggle ) ;
$ ( '#cancel-edit-title' ) . click ( editTitleToggle ) ;
$ ( '#save-edit-title' ) . click ( editTitleToggle ) .
click ( function ( ) {
if ( $edit _input . val ( ) . length == 0 ||
$edit _input . val ( ) == $issue _title . text ( ) ) {
$edit _input . val ( $issue _title . text ( ) ) ;
return false ;
}
$ . 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 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 ) ;
}
} ) ;
} ) ;
} 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-08-20 19:18:30 +03:00
// Diff
if ( $ ( '.repository.diff' ) . length > 0 ) {
var $counter = $ ( '.diff-counter' ) ;
if ( $counter . length < 1 ) {
return ;
}
$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-08 17:43:14 +03:00
// Pull request
if ( $ ( '.repository.compare.pull' ) . length > 0 ) {
2015-08-09 20:04:23 +03:00
var $branch _dropdown = $ ( '.choose.branch .dropdown' )
$branch _dropdown . dropdown ( {
2015-08-08 17:43:14 +03:00
fullTextSearch : true ,
2015-08-08 18:12:23 +03:00
onChange : function ( text , value , $choice ) {
window . location . href = $choice . data ( 'url' ) ;
2015-08-09 20:04:23 +03:00
} ,
message : { noResults : $branch _dropdown . data ( 'no-results' ) }
2015-08-08 17:43:14 +03:00
} ) ;
2015-08-05 10:24:26 +03:00
}
2015-07-24 16:02:49 +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-08-14 19:42:43 +03:00
// Show exact time
$ ( '.time-since' ) . each ( function ( ) {
$ ( this ) . addClass ( 'poping up' ) .
attr ( 'data-content' , $ ( this ) . attr ( 'title' ) ) .
attr ( 'data-variation' , 'inverted tiny' ) .
attr ( 'title' , '' ) ;
} ) ;
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-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 ( ) ;
$ ( '.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' ) ,
acceptedFiles : $dropz . data ( 'accepts' ) ,
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-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-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-05 15:23:08 +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-03-07 23:12:13 +03:00
} ) ;