2016-03-14 15:18:56 +08:00
//= require_directory ./rateable
//= require jquery.min
//= require jquery.infinitescroll
/ * R e d m i n e - p r o j e c t m a n a g e m e n t s o f t w a r e
Copyright ( C ) 2006 - 2013 Jean - Philippe Lang * /
//动态高度控制
function description _show _hide ( id ) {
showNormalImage ( 'activity_description_' + id ) ;
if ( $ ( "#intro_content_" + id ) . height ( ) > 810 ) {
$ ( "#intro_content_show_" + id ) . show ( ) ;
}
$ ( "#intro_content_show_" + id ) . click ( function ( ) {
$ ( "#activity_description_" + id ) . toggleClass ( "maxh360" ) ;
$ ( "#intro_content_show_" + id ) . hide ( ) ;
$ ( "#intro_content_hide_" + id ) . show ( ) ;
} ) ;
$ ( "#intro_content_hide_" + id ) . click ( function ( ) {
$ ( "#activity_description_" + id ) . toggleClass ( "maxh360" ) ;
$ ( "#intro_content_hide_" + id ) . hide ( ) ;
$ ( "#intro_content_show_" + id ) . show ( ) ;
} ) ;
}
2016-05-03 17:11:30 +08:00
//名片的显示
function user _card _show _hide ( ) {
$ ( ".homepagePostPortrait" ) . mouseover ( function ( ) {
2016-05-03 17:23:56 +08:00
$ ( ".userCard" ) . css ( "display" , "none" ) ;
2016-05-03 17:11:30 +08:00
onImage = true ;
$ ( this ) . children ( ".userCard" ) . css ( "display" , "block" ) ;
} ) ;
$ ( ".homepagePostPortrait" ) . mouseout ( function ( ) {
var cur = $ ( this ) ;
onImage = false ;
setTimeout ( function ( ) {
if ( onUserCard == false && onImage == false ) {
$ ( cur ) . children ( ".userCard" ) . css ( "display" , "none" ) ;
}
} , 500 ) ;
} ) ;
$ ( ".userCard" ) . mouseover ( function ( ) {
onUserCard = true ;
$ ( this ) . css ( "display" , "block" ) ;
} ) ;
$ ( ".userCard" ) . mouseout ( function ( ) {
onUserCard = false ;
$ ( this ) . css ( "display" , "none" ) ;
} ) ;
}
2016-03-14 15:18:56 +08:00
function cleanArray ( actual ) {
var newArray = new Array ( ) ;
for ( var i = 0 ; i < actual . length ; i ++ ) {
if ( actual [ i ] ) {
newArray . push ( actual [ i ] ) ;
}
}
return newArray ;
}
function checkAll ( id , checked ) {
if ( checked ) {
$ ( '#' + id ) . find ( 'input[type=checkbox]' ) . attr ( 'checked' , true ) ;
} else {
$ ( '#' + id ) . find ( 'input[type=checkbox]' ) . removeAttr ( 'checked' ) ;
}
}
function toggleCheckboxesBySelector ( selector ) {
var all _checked = true ;
$ ( selector ) . each ( function ( index ) {
if ( ! $ ( this ) . is ( ':checked' ) ) { all _checked = false ; }
} ) ;
$ ( selector ) . attr ( 'checked' , ! all _checked ) ;
}
function showAndScrollTo ( id , focus ) {
$ ( '#' + id ) . show ( ) ;
if ( focus !== null ) {
$ ( '#' + focus ) . focus ( ) ;
}
$ ( 'html, body' ) . animate ( { scrollTop : $ ( '#' + id ) . offset ( ) . top } , 400 ) ;
}
function toggleRowGroup ( el ) {
var tr = $ ( el ) . parents ( 'tr' ) . first ( ) ;
var n = tr . next ( ) ;
tr . toggleClass ( 'open' ) ;
while ( n . length && ! n . hasClass ( 'group' ) ) {
n . toggle ( ) ;
n = n . next ( 'tr' ) ;
}
}
function collapseAllRowGroups ( el ) {
var tbody = $ ( el ) . parents ( 'tbody' ) . first ( ) ;
tbody . children ( 'tr' ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( 'group' ) ) {
$ ( this ) . removeClass ( 'open' ) ;
} else {
$ ( this ) . hide ( ) ;
}
} ) ;
}
function expandAllRowGroups ( el ) {
var tbody = $ ( el ) . parents ( 'tbody' ) . first ( ) ;
tbody . children ( 'tr' ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( 'group' ) ) {
$ ( this ) . addClass ( 'open' ) ;
} else {
$ ( this ) . show ( ) ;
}
} ) ;
}
function toggleAllRowGroups ( el ) {
var tr = $ ( el ) . parents ( 'tr' ) . first ( ) ;
if ( tr . hasClass ( 'open' ) ) {
collapseAllRowGroups ( el ) ;
} else {
expandAllRowGroups ( el ) ;
}
}
function toggleFieldset ( el ) {
var fieldset = $ ( el ) . parents ( 'fieldset' ) . first ( ) ;
fieldset . toggleClass ( 'collapsed' ) ;
fieldset . children ( 'div' ) . toggle ( ) ;
}
function hideFieldset ( el ) {
var fieldset = $ ( el ) . parents ( 'fieldset' ) . first ( ) ;
fieldset . toggleClass ( 'collapsed' ) ;
fieldset . children ( 'div' ) . hide ( ) ;
}
function initFilters ( ) {
$ ( '#add_filter_select' ) . change ( function ( ) {
addFilter ( $ ( this ) . val ( ) , '' , [ ] ) ;
} ) ;
$ ( '#filters-table td.field input[type=checkbox]' ) . each ( function ( ) {
toggleFilter ( $ ( this ) . val ( ) ) ;
} ) ;
$ ( '#filters-table td.field input[type=checkbox]' ) . on ( 'click' , function ( ) {
toggleFilter ( $ ( this ) . val ( ) ) ;
} ) ;
$ ( '#filters-table .toggle-multiselect' ) . on ( 'click' , function ( ) {
toggleMultiSelect ( $ ( this ) . siblings ( 'select' ) ) ;
} ) ;
$ ( '#filters-table input[type=text]' ) . on ( 'keypress' , function ( e ) {
if ( e . keyCode == 13 ) submit _query _form ( "query_form" ) ;
} ) ;
}
function addFilter ( field , operator , values ) {
var fieldId = field . replace ( '.' , '_' ) ;
var tr = $ ( '#tr_' + fieldId ) ;
if ( tr . length > 0 ) {
tr . show ( ) ;
} else {
buildFilterRow ( field , operator , values ) ;
}
$ ( '#cb_' + fieldId ) . attr ( 'checked' , true ) ;
toggleFilter ( field ) ;
$ ( '#add_filter_select' ) . val ( '' ) . children ( 'option' ) . each ( function ( ) {
if ( $ ( this ) . attr ( 'value' ) == field ) {
$ ( this ) . attr ( 'disabled' , true ) ;
}
} ) ;
}
function buildFilterRow ( field , operator , values ) {
var fieldId = field . replace ( '.' , '_' ) ;
var filterTable = $ ( "#filters-table" ) ;
var filterOptions = availableFilters [ field ] ;
var operators = operatorByType [ filterOptions [ 'type' ] ] ;
var filterValues = filterOptions [ 'values' ] ;
var i , select ;
var tr = $ ( '<tr class="filter">' ) . attr ( 'id' , 'tr_' + fieldId ) . html (
'<td class="field"><input checked="checked" id="cb_' + fieldId + '" name="f[]" value="' + field + '" type="checkbox"><label for="cb_' + fieldId + '"> ' + filterOptions [ 'name' ] + '</label></td>' +
'<td class="operator"><select id="operators_' + fieldId + '" name="op[' + field + ']"></td>' +
'<td class="values"></td>'
) ;
filterTable . append ( tr ) ;
select = tr . find ( 'td.operator select' ) ;
for ( i = 0 ; i < operators . length ; i ++ ) {
var option = $ ( '<option>' ) . val ( operators [ i ] ) . text ( operatorLabels [ operators [ i ] ] ) ;
if ( operators [ i ] == operator ) { option . attr ( 'selected' , true ) ; }
select . append ( option ) ;
}
select . change ( function ( ) { toggleOperator ( field ) ; } ) ;
switch ( filterOptions [ 'type' ] ) {
case "list" :
case "list_optional" :
case "list_status" :
case "list_subprojects" :
tr . find ( 'td.values' ) . append (
'<span style="display:none;"><select class="value" id="values_' + fieldId + '_1" name="v[' + field + '][]"></select>' +
' <span class="toggle-multiselect"><a>复选/multi-select</a></span></span>'
) ;
select = tr . find ( 'td.values select' ) ;
if ( values . length > 1 ) { select . attr ( 'multiple' , true ) ; }
for ( i = 0 ; i < filterValues . length ; i ++ ) {
var filterValue = filterValues [ i ] ;
var option = $ ( '<option>' ) ;
if ( $ . isArray ( filterValue ) ) {
option . val ( filterValue [ 1 ] ) . text ( filterValue [ 0 ] ) ;
if ( $ . inArray ( filterValue [ 1 ] , values ) > - 1 ) { option . attr ( 'selected' , true ) ; }
} else {
option . val ( filterValue ) . text ( filterValue ) ;
if ( $ . inArray ( filterValue , values ) > - 1 ) { option . attr ( 'selected' , true ) ; }
}
select . append ( option ) ;
}
break ;
case "date" :
case "date_past" :
tr . find ( 'td.values' ) . append (
'<span style="display:none;"><input type="text" name="v[' + field + '][]" id="values_' + fieldId + '_1" size="10" class="value date_value" /></span>' +
' <span style="display:none;"><input type="text" name="v[' + field + '][]" id="values_' + fieldId + '_2" size="10" class="value date_value" /></span>' +
' <span style="display:none;"><input type="text" name="v[' + field + '][]" id="values_' + fieldId + '" size="3" class="value" /> ' + labelDayPlural + '</span>'
) ;
$ ( '#values_' + fieldId + '_1' ) . val ( values [ 0 ] ) . datepicker ( datepickerOptions ) ;
$ ( '#values_' + fieldId + '_2' ) . val ( values [ 1 ] ) . datepicker ( datepickerOptions ) ;
$ ( '#values_' + fieldId ) . val ( values [ 0 ] ) ;
break ;
case "string" :
case "text" :
tr . find ( 'td.values' ) . append (
'<span style="display:none;"><input type="text" name="v[' + field + '][]" id="values_' + fieldId + '" size="30" class="value" /></span>'
) ;
$ ( '#values_' + fieldId ) . val ( values [ 0 ] ) ;
break ;
case "relation" :
tr . find ( 'td.values' ) . append (
'<span style="display:none;"><input type="text" name="v[' + field + '][]" id="values_' + fieldId + '" size="6" class="value" /></span>' +
'<span style="display:none;"><select class="value" name="v[' + field + '][]" id="values_' + fieldId + '_1"></select></span>'
) ;
$ ( '#values_' + fieldId ) . val ( values [ 0 ] ) ;
select = tr . find ( 'td.values select' ) ;
for ( i = 0 ; i < allProjects . length ; i ++ ) {
var filterValue = allProjects [ i ] ;
var option = $ ( '<option>' ) ;
option . val ( filterValue [ 1 ] ) . text ( filterValue [ 0 ] ) ;
if ( values [ 0 ] == filterValue [ 1 ] ) { option . attr ( 'selected' , true ) ; }
select . append ( option ) ;
}
case "integer" :
case "float" :
tr . find ( 'td.values' ) . append (
'<span style="display:none;"><input type="text" name="v[' + field + '][]" id="values_' + fieldId + '_1" size="6" class="value" /></span>' +
' <span style="display:none;"><input type="text" name="v[' + field + '][]" id="values_' + fieldId + '_2" size="6" class="value" /></span>'
) ;
$ ( '#values_' + fieldId + '_1' ) . val ( values [ 0 ] ) ;
$ ( '#values_' + fieldId + '_2' ) . val ( values [ 1 ] ) ;
break ;
}
}
function toggleFilter ( field ) {
var fieldId = field . replace ( '.' , '_' ) ;
if ( $ ( '#cb_' + fieldId ) . is ( ':checked' ) ) {
$ ( "#operators_" + fieldId ) . show ( ) . removeAttr ( 'disabled' ) ;
toggleOperator ( field ) ;
} else {
$ ( "#operators_" + fieldId ) . hide ( ) . attr ( 'disabled' , true ) ;
enableValues ( field , [ ] ) ;
}
}
function enableValues ( field , indexes ) {
var fieldId = field . replace ( '.' , '_' ) ;
$ ( '#tr_' + fieldId + ' td.values .value' ) . each ( function ( index ) {
if ( $ . inArray ( index , indexes ) >= 0 ) {
$ ( this ) . removeAttr ( 'disabled' ) ;
$ ( this ) . parents ( 'span' ) . first ( ) . show ( ) ;
} else {
$ ( this ) . val ( '' ) ;
$ ( this ) . attr ( 'disabled' , true ) ;
$ ( this ) . parents ( 'span' ) . first ( ) . hide ( ) ;
}
if ( $ ( this ) . hasClass ( 'group' ) ) {
$ ( this ) . addClass ( 'open' ) ;
} else {
$ ( this ) . show ( ) ;
}
} ) ;
}
function toggleOperator ( field ) {
var fieldId = field . replace ( '.' , '_' ) ;
var operator = $ ( "#operators_" + fieldId ) ;
switch ( operator . val ( ) ) {
case "!*" :
case "*" :
case "t" :
case "ld" :
case "w" :
case "lw" :
case "l2w" :
case "m" :
case "lm" :
case "y" :
case "o" :
case "c" :
enableValues ( field , [ ] ) ;
break ;
case "><" :
enableValues ( field , [ 0 , 1 ] ) ;
break ;
case "<t+" :
case ">t+" :
case "><t+" :
case "t+" :
case ">t-" :
case "<t-" :
case "><t-" :
case "t-" :
enableValues ( field , [ 2 ] ) ;
break ;
case "=p" :
case "=!p" :
case "!p" :
enableValues ( field , [ 1 ] ) ;
break ;
default :
enableValues ( field , [ 0 ] ) ;
break ;
}
}
function toggleMultiSelect ( el ) {
if ( el . attr ( 'multiple' ) ) {
el . removeAttr ( 'multiple' ) ;
} else {
el . attr ( 'multiple' , true ) ;
}
}
function submit _query _form ( id ) {
selectAllOptions ( "selected_columns" ) ;
$ ( '#' + id ) . submit ( ) ;
}
function showTab ( name ) {
$ ( 'div#content .tab-content' ) . hide ( ) ;
$ ( 'div.tabs a' ) . removeClass ( 'selected' ) ;
$ ( '#tab-content-' + name ) . show ( ) ;
$ ( '#tab-' + name ) . addClass ( 'selected' ) ;
return false ;
}
function moveTabRight ( el ) {
var lis = $ ( el ) . parents ( 'div.tabs' ) . first ( ) . find ( 'ul' ) . children ( ) ;
var tabsWidth = 0 ;
var i = 0 ;
lis . each ( function ( ) {
if ( $ ( this ) . is ( ':visible' ) ) {
tabsWidth += $ ( this ) . width ( ) + 6 ;
}
} ) ;
if ( tabsWidth < $ ( el ) . parents ( 'div.tabs' ) . first ( ) . width ( ) - 60 ) { return ; }
while ( i < lis . length && ! lis . eq ( i ) . is ( ':visible' ) ) { i ++ ; }
lis . eq ( i ) . hide ( ) ;
}
function moveTabLeft ( el ) {
var lis = $ ( el ) . parents ( 'div.tabs' ) . first ( ) . find ( 'ul' ) . children ( ) ;
var i = 0 ;
while ( i < lis . length && ! lis . eq ( i ) . is ( ':visible' ) ) { i ++ ; }
if ( i > 0 ) {
lis . eq ( i - 1 ) . show ( ) ;
}
}
function displayTabsButtons ( ) {
var lis ;
var tabsWidth = 0 ;
var el ;
$ ( 'div.tabs' ) . each ( function ( ) {
el = $ ( this ) ;
lis = el . find ( 'ul' ) . children ( ) ;
lis . each ( function ( ) {
if ( $ ( this ) . is ( ':visible' ) ) {
tabsWidth += $ ( this ) . width ( ) + 6 ;
}
} ) ;
if ( ( tabsWidth < el . width ( ) - 60 ) && ( lis . first ( ) . is ( ':visible' ) ) ) {
el . find ( 'div.tabs-buttons' ) . hide ( ) ;
} else {
el . find ( 'div.tabs-buttons' ) . show ( ) ;
}
} ) ;
}
function setPredecessorFieldsVisibility ( ) {
var relationType = $ ( '#relation_relation_type' ) ;
if ( relationType . val ( ) == "precedes" || relationType . val ( ) == "follows" ) {
$ ( '#predecessor_fields' ) . show ( ) ;
} else {
$ ( '#predecessor_fields' ) . hide ( ) ;
}
}
function showModal ( id , width ) {
var el = $ ( '#' + id ) . first ( ) ;
if ( el . length === 0 || el . is ( ':visible' ) ) { return ; }
var title = el . find ( 'h3.title' ) . text ( ) ;
el . dialog ( {
width : width ,
modal : true ,
resizable : false ,
dialogClass : 'modal' ,
title : title
} ) ;
el . find ( "input[type=text], input[type=submit]" ) . first ( ) . focus ( ) ;
}
function hideModal ( el ) {
var modal ;
if ( el ) {
modal = $ ( el ) . parents ( '.ui-dialog-content' ) ;
} else {
modal = $ ( '#ajax-modal' ) ;
}
modal . dialog ( "close" ) ;
}
function submitPreview ( url , form , target ) {
$ . ajax ( {
url : url ,
type : 'post' ,
data : $ ( '#' + form ) . serialize ( ) ,
success : function ( data ) {
$ ( '#' + target ) . html ( data ) ;
}
} ) ;
}
function collapseScmEntry ( id ) {
$ ( '.' + id ) . each ( function ( ) {
if ( $ ( this ) . hasClass ( 'open' ) ) {
collapseScmEntry ( $ ( this ) . attr ( 'id' ) ) ;
}
$ ( this ) . hide ( ) ;
} ) ;
$ ( '#' + id ) . removeClass ( 'open' ) ;
}
function expandScmEntry ( id ) {
$ ( '.' + id ) . each ( function ( ) {
$ ( this ) . show ( ) ;
if ( $ ( this ) . hasClass ( 'loaded' ) && ! $ ( this ) . hasClass ( 'collapsed' ) ) {
expandScmEntry ( $ ( this ) . attr ( 'id' ) ) ;
}
} ) ;
$ ( '#' + id ) . addClass ( 'open' ) ;
}
function scmEntryClick ( id , url ) {
el = $ ( '#' + id ) ;
if ( el . hasClass ( 'open' ) ) {
collapseScmEntry ( id ) ;
el . addClass ( 'collapsed' ) ;
return false ;
} else if ( el . hasClass ( 'loaded' ) ) {
expandScmEntry ( id ) ;
el . removeClass ( 'collapsed' ) ;
return false ;
}
if ( el . hasClass ( 'loading' ) ) {
return false ;
}
el . addClass ( 'loading' ) ;
$ . ajax ( {
url : url ,
success : function ( data ) {
el . after ( data ) ;
el . addClass ( 'open' ) . addClass ( 'loaded' ) . removeClass ( 'loading' ) ;
}
} ) ;
return true ;
}
function randomKey ( size ) {
var chars = new Array ( '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , 'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' ) ;
var key = '' ;
for ( i = 0 ; i < size ; i ++ ) {
key += chars [ Math . floor ( Math . random ( ) * chars . length ) ] ;
}
return key ;
}
// Can't use Rails' remote select because we need the form data
function updateIssueFrom ( url ) {
$ . ajax ( {
url : url ,
type : 'post' ,
data : $ ( '#issue-form' ) . serialize ( )
} ) ;
}
function updateBulkEditFrom ( url ) {
$ . ajax ( {
url : url ,
type : 'post' ,
data : $ ( '#bulk_edit_form' ) . serialize ( )
} ) ;
}
function clearMessage ( id ) {
$ ( '#' + id ) . val ( "" ) ;
}
function observeAutocompleteField ( fieldId , url , options ) {
$ ( document ) . ready ( function ( ) {
$ ( '#' + fieldId ) . autocomplete ( $ . extend ( {
source : url ,
select : function ( e , ui ) { self . location = "/issues/" + ui . item . value ; } ,
minLength : 1 ,
search : function ( ) { $ ( '#' + fieldId ) . addClass ( 'ajax-loading' ) ; } ,
response : function ( ) { $ ( '#' + fieldId ) . removeClass ( 'ajax-loading' ) ;
}
} , options ) ) ;
$ ( '#' + fieldId ) . addClass ( 'autocomplete' ) ;
} ) ;
}
function observeSearchfield ( fieldId , targetId , url ) {
$ ( '#' + fieldId ) . each ( function ( ) {
var $this = $ ( this ) ;
$this . addClass ( 'autocomplete' ) ;
$this . attr ( 'data-value-was' , $this . val ( ) ) ;
var check = function ( ) {
var val = $this . val ( ) ;
if ( $this . attr ( 'data-value-was' ) != val ) {
$this . attr ( 'data-value-was' , val ) ;
$ . ajax ( {
url : url ,
type : 'get' ,
2016-06-24 14:16:39 +08:00
dataType : 'jsonp' ,
2016-03-14 15:18:56 +08:00
data : { q : $this . val ( ) } ,
success : function ( data ) { if ( targetId ) $ ( '#' + targetId ) . html ( data ) ; } ,
beforeSend : function ( ) { $this . addClass ( 'ajax-loading' ) ; } ,
complete : function ( ) { $this . removeClass ( 'ajax-loading' ) ; }
} ) ;
}
} ;
var reset = function ( ) {
if ( timer ) {
clearInterval ( timer ) ;
timer = setInterval ( check , 300 ) ;
}
} ;
var timer = setInterval ( check , 300 ) ;
$this . bind ( 'keyup click mousemove' , reset ) ;
} ) ;
}
function observeProjectModules ( ) {
var f = function ( ) {
/* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */
if ( $ ( '#project_enabled_module_names_issue_tracking' ) . attr ( 'checked' ) ) {
$ ( '#project_trackers' ) . show ( ) ;
} else {
$ ( '#project_trackers' ) . hide ( ) ;
}
} ;
$ ( window ) . load ( f ) ;
$ ( '#project_enabled_module_names_issue_tracking' ) . change ( f ) ;
}
function initMyPageSortable ( list , url ) {
$ ( '#list-' + list ) . sortable ( {
connectWith : '.block-receiver' ,
tolerance : 'pointer' ,
update : function ( ) {
$ . ajax ( {
url : url ,
type : 'post' ,
data : { 'blocks' : $ . map ( $ ( '#list-' + list ) . children ( ) , function ( el ) { return $ ( el ) . attr ( 'id' ) ; } ) }
} ) ;
}
} ) ;
$ ( "#list-top, #list-left, #list-right" ) . disableSelection ( ) ;
}
var warnLeavingUnsavedMessage ;
function warnLeavingUnsaved ( message ) {
warnLeavingUnsavedMessage = message ;
$ ( 'form' ) . submit ( function ( ) {
$ ( 'textarea' ) . removeData ( 'changed' ) ;
} ) ;
$ ( 'textarea' ) . change ( function ( ) {
$ ( this ) . data ( 'changed' , 'changed' ) ;
} ) ;
window . onbeforeunload = function ( ) {
var warn = false ;
$ ( 'textarea' ) . blur ( ) . each ( function ( ) {
if ( $ ( this ) . data ( 'changed' ) ) {
warn = true ;
}
} ) ;
if ( warn ) { return warnLeavingUnsavedMessage ; }
} ;
}
function setupHeartBeat ( ) {
var time = 60 * 1000 * 30 ; // 30 mins
setInterval ( function ( ) { $ . getJSON ( '/account/heartbeat' ) ; } , time ) ;
}
function setupAjaxIndicator ( ) {
$ ( '#ajax-indicator' ) . bind ( 'ajaxSend' , function ( event , xhr , settings ) {
if ( settings && settings . url && settings . url . match ( /account\/heartbeat$/ ) ) {
return ;
}
if ( $ ( '.ajax-loading' ) . length === 0 && settings . contentType != 'application/octet-stream' ) {
$ ( '#ajax-indicator' ) . show ( ) ;
}
} ) ;
$ ( '#ajax-indicator' ) . bind ( 'ajaxStop' , function ( ) {
$ ( '#ajax-indicator' ) . hide ( ) ;
if ( MathJax && MathJax . Hub )
MathJax . Hub . Queue ( [ 'Typeset' , MathJax . Hub ] ) ; //如果是ajax刷新页面的话, 手动执行MathJax的公式显示
try {
prettyPrint ( ) ; //如果刷新出来的页面如果存在代码行的话,也需要美化
} catch ( e ) {
}
} ) ;
}
function hideOnLoad ( ) {
$ ( '.hol' ) . hide ( ) ;
}
function addFormObserversForDoubleSubmit ( ) {
$ ( 'form[method=post]' ) . each ( function ( ) {
if ( ! $ ( this ) . hasClass ( 'multiple-submit' ) ) {
$ ( this ) . submit ( function ( form _submission ) {
if ( $ ( form _submission . target ) . attr ( 'data-submitted' ) ) {
form _submission . preventDefault ( ) ;
} else {
$ ( form _submission . target ) . attr ( 'data-submitted' , true ) ;
}
} ) ;
}
} ) ;
}
function blockEventPropagation ( event ) {
event . stopPropagation ( ) ;
event . preventDefault ( ) ;
}
function toggleAndSettingWordsVal ( parent _widget , text _widget , value ) {
text _widget . val ( value )
parent _widget . slideToggle ( 400 )
}
function transpotUrl ( scope ) {
$ ( scope ) . each ( function ( ) {
var tmpContent = $ ( this ) . html ( ) ;
tmpContent = tmpContent . replace ( /(^|[^\"\'])(http|ftp|mms|rstp|news|https)(\:\/\/[^<\s\+,, ]+)/gi , "$1<a href='$2$3' target='_blank'>$2$3<\/a>" ) ;
// tmpContent = tmpContent.replace(/(^|[^\/])(www\.[^<\s\+,, ]+)/gi,"$1<a href='http:\/\/$2' style='color:blue' target='_blank'>$2</a>");
$ ( this ) . html ( tmpContent ) ;
} ) ;
}
$ ( document ) . ready ( setupAjaxIndicator ) ;
$ ( document ) . ready ( setupHeartBeat ) ;
$ ( document ) . ready ( hideOnLoad ) ;
$ ( document ) . ready ( addFormObserversForDoubleSubmit ) ;
function img _thumbnails ( ) {
$ ( '.thumbnails a' ) . colorbox ( { rel : 'nofollow' } ) ;
$ ( '.attachments' ) . find ( 'a' ) . each ( function ( index , element ) {
var href _value = $ ( element ) . attr ( 'href' ) ;
if ( /\.(jpg|png|gif|bmp|jpeg|PNG|BMP|GIF|JPG|JPEG)$/ . test ( href _value ) ) {
$ ( element ) . colorbox ( { rel : 'nofollow' } ) ;
}
} ) ;
$ ( '.for_img_thumbnails' ) . find ( 'a' ) . each ( function ( index , element ) {
var href _value = $ ( element ) . attr ( 'href' ) ;
if ( /\.(jpg|png|gif|bmp|jpeg|PNG|BMP|GIF|JPG|JPEG)$/ . test ( href _value ) ) {
$ ( element ) . colorbox ( { rel : 'nofollow' } ) ;
}
} ) ;
}
$ ( document ) . ready ( img _thumbnails ) ;
function TimeClose ( dateText , inst ) {
if ( inst . id == "issue_start_date" ) {
time = dateText ;
}
}
var time = new Date ( ) ;
function TimeBeforeShow ( input ) {
if ( input . id == "issue_due_date" ) {
//var minDate = $(input).datepicker('option', 'minDate');
var tempdata = $ ( "#issue_start_date" ) . attr ( "value" ) ;
$ ( input ) . datepicker ( 'option' , 'minDate' , new Date ( tempdata . replace ( /-/g , "/" ) ) ) ;
//$('.selector').datepicker('option', 'minDate', '12/25/2012');
}
}
function SetMinValue ( ) {
/// var tempdata=$("#issue_start_date").attr("value");
//$('.selector').datepicker('option', 'minDate', '12/25/2012');
//alert(tempdata);
//$("#issue_due_date").datepicker({
// minDate: new Date(2014,08,23)
//var datepickerOptions=
//{dateFormat: 'yy-mm-dd',minDate: new Date(2014,08,23), showOn: 'button', buttonImageOnly: true, buttonImage: "path_to_image('/images/calendar.png')", showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true};
//alert( $('.issue_due_date').length);
//$('.selector')[1].datepicker('option', 'minDate', new Date(2014, 0 - 8, 23));
//$("#issue_due_date").datepicker(datepickerOptions);
//$("##{issue_due_date}").datepicker(datepickerOptions);
//$("#issue_due_date").datepicker(
// {dateFormat: 'yy-mm-dd',minDate: new Date(2014,08,23), showOn: 'button', buttonImageOnly: true, buttonImage: "path_to_image('/images/calendar.png')", showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true}
//)
//});
}
function PrecentChange ( obj ) {
var _v = obj ;
if ( _v == 100 )
{
//var select=$("select[id='issue_status_id']");
$ ( "select[id='issue_status_id']" ) . find ( "option[value='3']" ) . attr ( "selected" , "selected" ) ;
}
else if ( _v == 0 )
{
//alert(1);
$ ( "select[id='issue_status_id']" ) . find ( "option[value='1']" ) . attr ( "selected" , "selected" ) ;
}
else if ( _v != 100 && _v != 0 )
{
// alert(2);
$ ( "select[id='issue_status_id']" ) . find ( "option[value='2']" ) . attr ( "selected" , "selected" ) ;
}
}
//added by lizanle 日期選擇js
function HS _DateAdd ( interval , number , date ) {
number = parseInt ( number ) ;
if ( typeof ( date ) == "string" ) { var date = new Date ( date . split ( "-" ) [ 0 ] , date . split ( "-" ) [ 1 ] , date . split ( "-" ) [ 2 ] ) }
if ( typeof ( date ) == "object" ) { var date = date }
switch ( interval ) {
case "y" : return new Date ( date . getFullYear ( ) + number , date . getMonth ( ) , date . getDate ( ) ) ; break ;
case "m" : return new Date ( date . getFullYear ( ) , date . getMonth ( ) + number , checkDate ( date . getFullYear ( ) , date . getMonth ( ) + number , date . getDate ( ) ) ) ; break ;
case "d" : return new Date ( date . getFullYear ( ) , date . getMonth ( ) , date . getDate ( ) + number ) ; break ;
case "w" : return new Date ( date . getFullYear ( ) , date . getMonth ( ) , 7 * number + date . getDate ( ) ) ; break ;
}
}
function checkDate ( year , month , date ) {
var enddate = [ "31" , "28" , "31" , "30" , "31" , "30" , "31" , "31" , "30" , "31" , "30" , "31" ] ;
var returnDate = "" ;
if ( year % 4 == 0 ) { enddate [ 1 ] = "29" }
if ( date > enddate [ month ] ) { returnDate = enddate [ month ] } else { returnDate = date }
return returnDate ;
}
function WeekDay ( date ) {
var theDate ;
if ( typeof ( date ) == "string" ) { theDate = new Date ( date . split ( "-" ) [ 0 ] , date . split ( "-" ) [ 1 ] , date . split ( "-" ) [ 2 ] ) ; }
if ( typeof ( date ) == "object" ) { theDate = date }
return theDate . getDay ( ) ;
}
function HS _calender ( ) {
var lis = "" ;
var style = "" ;
/*可以把下面的css剪切出去独立一个css文件*/
style += "<style type='text/css'>" ;
style += ".calender { width:170px; height:auto; font-size:12px; margin-right:14px; background:url(calenderbg.gif) no-repeat right center #fff; border:1px solid #397EAE; padding:1px}" ;
style += ".calender ul {list-style-type:none; margin:0; padding:0;}" ;
style += ".calender .day { background-color:#EDF5FF; height:20px;}" ;
style += ".calender li { list-style-type: none; float: left; margin: 0 0px; padding: 0 !important; background: #ffffff; background-image: none !important;}" ;
style += ".calender .day li,.calender .date li{ float:left; width:14%; height:20px; line-height:20px; text-align:center}" ;
style += ".calender li a { text-decoration:none; font-family:Tahoma; font-size:11px; color:#333}" ;
style += ".calender li a:hover { color:#f30; text-decoration:underline}" ;
style += ".calender li a.hasArticle {font-weight:bold; color:#f60 !important}" ;
style += ".lastMonthDate, .nextMonthDate {color:#bbb;font-size:11px}" ;
style += ".selectThisYear a, .selectThisMonth a{text-decoration:none; margin:0 2px; color:#000; font-weight:bold}" ;
style += ".calender .LastMonth, .calender .NextMonth{ text-decoration:none; color:#000; font-size:18px; font-weight:bold; line-height:16px;}" ;
style += ".calender .LastMonth { float:left;}" ;
style += ".calender .NextMonth { float:right;}" ;
style += ".calenderBody {clear:both}" ;
style += ".calenderTitle {text-align:center;height:20px; line-height:20px; clear:both}" ;
style += ".today { background-color:#ffffaa;border:1px solid #f60; padding:2px}" ;
style += ".today a { color:#f30; }" ;
style += ".calenderBottom {clear:both; border-top:1px solid #ddd; padding: 3px 0; text-align:left}" ;
style += ".calenderBottom a {text-decoration:none; margin:2px !important; font-weight:bold; color:#000}" ;
style += ".calenderBottom a.closeCalender{float:right}" ;
style += ".closeCalenderBox {float:right; border:1px solid #000; background:#fff; font-size:9px; width:11px; height:11px; line-height:11px; text-align:center;overflow:hidden; font-weight:normal !important}" ;
style += "</style>" ;
var now ;
if ( typeof ( arguments [ 0 ] ) == "string" ) {
selectDate = arguments [ 0 ] . split ( "-" ) ;
var year = selectDate [ 0 ] ;
var month = parseInt ( selectDate [ 1 ] ) - 1 + "" ;
var date = selectDate [ 2 ] ;
now = new Date ( year , month , date ) ;
} else if ( typeof ( arguments [ 0 ] ) == "object" ) {
now = arguments [ 0 ] ;
}
var lastMonthEndDate = HS _DateAdd ( "d" , "-1" , now . getFullYear ( ) + "-" + now . getMonth ( ) + "-01" ) . getDate ( ) ;
var lastMonthDate = WeekDay ( now . getFullYear ( ) + "-" + now . getMonth ( ) + "-01" ) ;
var thisMonthLastDate = HS _DateAdd ( "d" , "-1" , now . getFullYear ( ) + "-" + ( parseInt ( now . getMonth ( ) ) + 1 ) . toString ( ) + "-01" ) ;
var thisMonthEndDate = thisMonthLastDate . getDate ( ) ;
var thisMonthEndDay = thisMonthLastDate . getDay ( ) ;
var todayObj = new Date ( ) ;
today = todayObj . getFullYear ( ) + "-" + todayObj . getMonth ( ) + "-" + todayObj . getDate ( ) ;
for ( i = 0 ; i < lastMonthDate ; i ++ ) { // Last Month's Date
lis = "<li class='lastMonthDate'>" + lastMonthEndDate + "</li>" + lis ;
lastMonthEndDate -- ;
}
for ( i = 1 ; i <= thisMonthEndDate ; i ++ ) { // Current Month's Date
if ( today == now . getFullYear ( ) + "-" + now . getMonth ( ) + "-" + i ) {
var todayString = now . getFullYear ( ) + "-" + ( parseInt ( now . getMonth ( ) ) + 1 ) . toString ( ) + "-" + i ;
lis += "<li><a href=javascript:void(0) class='today' onclick='_selectThisDay(this)' title='" + now . getFullYear ( ) + "-" + ( parseInt ( now . getMonth ( ) ) + 1 ) + "-" + i + "'>" + i + "</a></li>" ;
} else {
lis += "<li><a href=javascript:void(0) onclick='_selectThisDay(this)' title='" + now . getFullYear ( ) + "-" + ( parseInt ( now . getMonth ( ) ) + 1 ) + "-" + i + "'>" + i + "</a></li>" ;
}
}
var j = 1 ;
for ( i = thisMonthEndDay ; i < 6 ; i ++ ) { // Next Month's Date
lis += "<li class='nextMonthDate'>" + j + "</li>" ;
j ++ ;
}
lis += style ;
var CalenderTitle = "<a href='javascript:void(0)' class='NextMonth' onclick=HS_calender(HS_DateAdd('m',1,'" + now . getFullYear ( ) + "-" + now . getMonth ( ) + "-" + now . getDate ( ) + "'),this) title='Next Month'>»</a>" ;
CalenderTitle += "<a href='javascript:void(0)' class='LastMonth' onclick=HS_calender(HS_DateAdd('m',-1,'" + now . getFullYear ( ) + "-" + now . getMonth ( ) + "-" + now . getDate ( ) + "'),this) title='Previous Month'>«</a>" ;
CalenderTitle += "<span class='selectThisYear'><a href='javascript:void(0)' onclick='CalenderselectYear(this)' title='Click here to select other year' >" + now . getFullYear ( ) + "</a></span>年<span class='selectThisMonth'><a href='javascript:void(0)' onclick='CalenderselectMonth(this)' title='Click here to select other month'>" + ( parseInt ( now . getMonth ( ) ) + 1 ) . toString ( ) + "</a></span>月" ;
if ( arguments . length > 1 ) {
arguments [ 1 ] . parentNode . parentNode . getElementsByTagName ( "ul" ) [ 1 ] . innerHTML = lis ;
arguments [ 1 ] . parentNode . innerHTML = CalenderTitle ;
} else {
var CalenderBox = style + "<div class='calender'><div class='calenderTitle'>" + CalenderTitle + "</div><div class='calenderBody'><ul class='day'><li>日</li><li>一</li><li>二</li><li>三</li><li>四</li><li>五</li><li>六</li></ul><ul class='date' id='thisMonthDate'>" + lis + "</ul></div><div class='calenderBottom'><a href='javascript:void(0)' class='closeCalender' onclick='closeCalender(this)'>×</a><span><span><a href=javascript:void(0) onclick='_selectThisDay(this)' title='" + todayString + "'>Today</a></span></span></div></div>" ;
return CalenderBox ;
}
}
function _selectThisDay ( d ) {
var boxObj = d . parentNode . parentNode . parentNode . parentNode . parentNode ;
boxObj . targetObj . value = d . title ;
boxObj . parentNode . removeChild ( boxObj ) ;
}
function closeCalender ( d ) {
var boxObj = d . parentNode . parentNode . parentNode ;
boxObj . parentNode . removeChild ( boxObj ) ;
}
function CalenderselectYear ( obj ) {
var opt = "" ;
var thisYear = obj . innerHTML ;
for ( i = 1970 ; i <= 2020 ; i ++ ) {
if ( i == thisYear ) {
opt += "<option value=" + i + " selected>" + i + "</option>" ;
} else {
opt += "<option value=" + i + ">" + i + "</option>" ;
}
}
opt = "<select onblur='selectThisYear(this)' onchange='selectThisYear(this)' style='font-size:11px'>" + opt + "</select>" ;
obj . parentNode . innerHTML = opt ;
}
function selectThisYear ( obj ) {
HS _calender ( obj . value + "-" + obj . parentNode . parentNode . getElementsByTagName ( "span" ) [ 1 ] . getElementsByTagName ( "a" ) [ 0 ] . innerHTML + "-1" , obj . parentNode ) ;
}
function CalenderselectMonth ( obj ) {
var opt = "" ;
var thisMonth = obj . innerHTML ;
for ( i = 1 ; i <= 12 ; i ++ ) {
if ( i == thisMonth ) {
opt += "<option value=" + i + " selected>" + i + "</option>" ;
} else {
opt += "<option value=" + i + ">" + i + "</option>" ;
}
}
opt = "<select onblur='selectThisMonth(this)' onchange='selectThisMonth(this)' style='font-size:11px'>" + opt + "</select>" ;
obj . parentNode . innerHTML = opt ;
}
function selectThisMonth ( obj ) {
HS _calender ( obj . parentNode . parentNode . getElementsByTagName ( "span" ) [ 0 ] . getElementsByTagName ( "a" ) [ 0 ] . innerHTML + "-" + obj . value + "-1" , obj . parentNode ) ;
}
function HS _setDate ( inputObj ) {
var calenderObj = document . createElement ( "span" ) ;
calenderObj . innerHTML = HS _calender ( new Date ( ) ) ;
calenderObj . style . position = "absolute" ;
calenderObj . targetObj = inputObj ;
inputObj . parentNode . insertBefore ( calenderObj , inputObj . nextSibling ) ;
}
//lizanle 刷新函数
function redo ( ) {
window . location . reload ( )
}
function encodeHomeworkUrl ( url , is _base64 ) {
if ( typeof is _base64 === 'boolean' && is _base64 ) {
return '/zipdown/download?base64file=' + url ;
}
var file = encodeURI ( url ) . replace ( /\+/g , '%2B' ) ;
return '/zipdown/download?file=' + file ;
}
//// 作业附件删除
$ ( function ( ) {
$ ( '.attachments a.delete-homework-icon' ) . bind ( 'ajax:complete' , //this will work
function ( event , data , status , xhr ) { //note parametes
$ ( this ) . parent ( 'p' ) . remove ( ) ;
console . log ( "delete complete." ) ;
} ) ;
$ ( 'a.tb_all' ) . bind ( 'ajax:complete' , function ( event , data , status , xhr ) {
if ( status == 'success' ) {
var res = JSON . parse ( data . responseText ) ;
if ( res . length < 1 ) {
return ;
}
if ( res . length == 1 ) {
if ( res [ 0 ] . base64file ) {
location . href = encodeHomeworkUrl ( res [ 0 ] . base64file , true ) ; return ;
}
location . href = encodeHomeworkUrl ( res [ 0 ] . file ) ; return ;
}
document . getElementById ( 'light' ) . style . display = 'block' ;
$container = $ ( '#light .upload_box_ul' ) ;
$container . empty ( ) ;
for ( var i = 0 ; i < res . length ; ++ i ) {
var des = '' ;
if ( res . count > 1 ) {
des = '第' + res [ i ] . index + '-' + ( res [ i ] . count + res [ i ] . index - 1 ) + '个学生的作品下载' ;
} else {
des = '第' + res [ i ] . index + '个学生的作品下载' ;
}
if ( res [ i ] . base64file ) {
$ ( '<li><span class="upload_box_span" >' + ( i + 1 ) + '.</span> <a href="' + encodeHomeworkUrl ( res [ i ] . base64file , true ) + '">' + des + '</a><span class="c_grey"> (共' + res [ i ] . size + 'M) </span> </li>' ) . appendTo ( $container ) ;
} else {
$ ( '<li><span class="upload_box_span" >' + ( i + 1 ) + '.</span> <a href="' + encodeHomeworkUrl ( res [ i ] . file ) + '">' + des + '</a><span class="c_grey"> (共' + res [ i ] . size + 'M) </span> </li>' ) . appendTo ( $container ) ;
}
}
}
} ) ;
$ ( '#download_homework_attachments' ) . bind ( 'ajax:complete' , function ( event , data , status , xhr ) {
if ( status == 'success' ) {
var res = JSON . parse ( data . responseText ) ;
if ( res . length == null ) {
alert ( "该作业没有任何附件可下载" ) ;
}
else if ( res . length < 1 ) {
return ;
}
else
{
if ( res . length == 1 ) {
if ( res [ 0 ] . base64file ) {
location . href = encodeHomeworkUrl ( res [ 0 ] . base64file , true ) ; return ;
}
location . href = encodeHomeworkUrl ( res [ 0 ] . file ) ; return ;
}
document . getElementById ( 'light' ) . style . display = 'block' ;
$container = $ ( '#light .upload_box_ul' ) ;
$container . empty ( ) ;
for ( var i = 0 ; i < res . length ; ++ i ) {
var des = '' ;
if ( res . count > 1 ) {
des = '第' + res [ i ] . index + '-' + ( res [ i ] . count + res [ i ] . index - 1 ) + '个学生的作品下载' ;
} else {
des = '第' + res [ i ] . index + '个学生的作品下载' ;
}
if ( res [ i ] . base64file ) {
$ ( '<li><span class="upload_box_span" >' + ( i + 1 ) + '.</span> <a href="' + encodeHomeworkUrl ( res [ i ] . base64file , true ) + '">' + des + '</a><span class="c_grey"> (共' + res [ i ] . size + 'M) </span> </li>' ) . appendTo ( $container ) ;
} else {
$ ( '<li><span class="upload_box_span" >' + ( i + 1 ) + '.</span> <a href="' + encodeHomeworkUrl ( res [ i ] . file ) + '">' + des + '</a><span class="c_grey"> (共' + res [ i ] . size + 'M) </span> </li>' ) . appendTo ( $container ) ;
}
}
}
}
} ) ;
} ) ;
//firefox的pre标签换行
$ ( document ) . ready ( function ( ) {
var userAgent = navigator . userAgent . toLowerCase ( ) ;
var browser = {
version : ( userAgent . match ( /.+(?:rv|it|ra|ie)[/: ]([d.]+)/ ) || [ ] ) [ 1 ] ,
safari : /webkit/ . test ( userAgent ) ,
opera : /opera/ . test ( userAgent ) ,
msie : /msie/ . test ( userAgent ) && ! /opera/ . test ( userAgent ) ,
mozilla : /mozilla/ . test ( userAgent ) && ! /(compatible|webkit)/ . test ( userAgent )
} ;
if ( browser . mozilla || browser . opera ) {
$ ( "pre" ) . addClass ( "break_word_firefox" ) ;
}
else {
$ ( "pre" ) . addClass ( "break_word" ) ;
}
} ) ;
//点击发送资源弹出框中的组织,要更改选择栏目中的内容
//@dom 选中的radio, 值为org_id
function change _org _subfield ( url ) {
$ . ajax ( {
type : 'get' ,
url : url
} )
}
//点击图片即显示大图
function showNormalImage ( id ) {
var description _images = $ ( 'div#' + id ) . find ( "img" ) ;
if ( description _images . length > 0 ) {
for ( var i = 0 ; i < description _images . length ; i ++ ) {
var image = $ ( description _images [ i ] ) ;
2016-03-14 17:16:11 +08:00
var _path = getRootPath ( ) ;
2016-03-14 15:18:56 +08:00
//如果图片是视频图片,不处理。
2016-05-13 16:09:26 +08:00
2016-03-14 15:18:56 +08:00
if ( $ ( image ) . hasClass ( "mediaIco" ) ) {
2016-03-14 17:16:11 +08:00
var _src = _path + "/" + $ ( image ) . attr ( 'src' ) ;
$ ( image ) . attr ( 'src' , _src ) ;
2016-03-14 15:18:56 +08:00
return ;
}
2016-06-17 11:23:49 +08:00
//已被加链接则不处理
if ( $ ( image ) . parent ( ) && $ ( image ) . parent ( ) . attr ( 'href' ) ) {
return ;
}
2016-05-13 16:59:59 +08:00
//无格式的图片不让点击显示大图,显示的话会有问题
2016-05-13 16:09:26 +08:00
var tmpsrc = image . attr ( 'src' ) ;
if ( tmpsrc . indexOf ( '.gif' ) >= 0 || tmpsrc . indexOf ( '.jpg' ) >= 0 || tmpsrc . indexOf ( '.jpeg' ) >= 0 || tmpsrc . indexOf ( '.png' ) >= 0 || tmpsrc . indexOf ( '.bmp' ) >= 0 || tmpsrc . indexOf ( '.png' ) >= 0 || tmpsrc . indexOf ( '.BMP' ) >= 0 || tmpsrc . indexOf ( '.JPEG' ) >= 0 || tmpsrc . indexOf ( '.JPG' ) >= 0 || tmpsrc . indexOf ( '.PNG' ) >= 0 || tmpsrc . indexOf ( '.GIF' ) >= 0 ) {
var element = $ ( "<a></a>" ) . attr ( "href" , image . attr ( 'src' ) ) ;
image . wrap ( element ) ;
$ ( image ) . parent ( ) . colorbox ( { rel : 'nofollow' , close : "关闭" , returnFocus : false } ) ;
}
2016-03-14 15:18:56 +08:00
}
//$('#'+id+' a').colorbox({rel:'nofollow', close: "关闭", returnFocus: false}); //有图片才将链接变为弹出框
}
}
2016-03-14 17:16:11 +08:00
2016-03-14 15:18:56 +08:00
//文件、帖子、通知分享
function org _id _click ( ) {
var sendText = $ ( "input[name='org_id']:checked" ) . next ( ) . text ( ) ;
var orgDirection = "目标地址:" ;
$ ( ".orgDirection" ) . text ( orgDirection + sendText ) ;
}
function subfield _click ( ) {
var sendText = $ ( "input[name='org_id']:checked" ) . next ( ) . text ( ) ;
var orgDirection = "目标地址:" ;
var sendColumn = $ ( "input[name='subfield']:checked" ) . next ( ) . text ( ) ;
$ ( ".orgDirection" ) . text ( orgDirection + sendText + " / " + sendColumn ) ;
}
//send_type:发送的类型, file对应文件, message对应帖子, news对应通知或新闻
function observeSearchfieldOnInput ( fieldId , url , send _id , send _ids , send _type ) {
$ ( '#' + fieldId ) . each ( function ( ) {
var $this = $ ( this ) ;
$this . addClass ( 'autocomplete' ) ;
$this . attr ( 'data-value-was' , $this . val ( ) ) ;
var check = function ( ) {
var val = $this . val ( ) ;
if ( $this . attr ( 'data-value-was' ) != val ) {
$this . attr ( 'data-value-was' , val ) ;
$ . ajax ( {
url : url ,
type : 'get' ,
2016-03-28 19:20:09 +08:00
data : { search : $this . val ( ) , send _id : send _id , send _ids : send _ids , send _type : send _type , is _observe : true } ,
2016-03-14 15:18:56 +08:00
success : function ( data ) { } ,
beforeSend : function ( ) { $this . addClass ( 'ajax-loading' ) ; } ,
complete : function ( ) { $this . removeClass ( 'ajax-loading' ) ; }
} ) ;
}
} ;
var reset = function ( ) {
if ( timer ) {
clearInterval ( timer ) ;
2016-03-28 19:20:09 +08:00
timer = setInterval ( check , 500 ) ;
2016-03-14 15:18:56 +08:00
}
} ;
2016-03-28 19:20:09 +08:00
var timer = setInterval ( check , 500 ) ;
2016-03-14 15:18:56 +08:00
$this . bind ( 'keyup click mousemove' , reset ) ;
} ) ;
}
function check _des ( event ) {
if ( $ ( ".sectionContent" ) . find ( 'input[type="radio"]:checked' ) . length <= 0 ) {
event . preventDefault ( ) ;
$ ( ".orgDirection" ) . text ( '目标地址组织不能为空' ) ;
return false ;
} else if ( $ ( ".columnContent" ) . find ( 'input[type="radio"]:checked' ) . length <= 0 ) {
event . preventDefault ( ) ;
$ ( ".orgDirection" ) . text ( '目标地址栏目不能为空' ) ;
return false ;
} else {
return true ;
}
}
var sendType = '1' ;
var lastSendType ; //初始为发送到我的课程
function show _send ( id , user _id , send _type ) {
if ( lastSendType === '2' ) { //如果已经发送过一次了,那么就应该沿用上次发送的类型。
$ . ajax ( {
type : 'get' ,
url : '/users/' + user _id + '/search_user_project' ,
data : { send _id : id , send _type : send _type }
} ) ;
} else if ( lastSendType == '1' ) {
$ . ajax ( {
type : 'get' ,
url : '/users/' + user _id + '/search_user_course' ,
data : { send _id : id , send _type : send _type }
} ) ;
} else if ( lastSendType == '3' ) { //组织
$ . ajax ( {
type : 'get' ,
url : '/users/' + user _id + '/search_user_org' ,
data : { send _id : id , send _type : send _type }
} ) ;
} else {
$ . ajax ( {
type : 'get' ,
url : '/users/' + user _id + '/search_user_course' ,
data : { send _id : id , send _type : send _type }
} ) ;
}
}
//id 发送的id
//发送的id数组
//send_type:发送的类型, file对应文件, message对应帖子, news对应通知或新闻
function chooseSendType ( res _id , res _ids , user _id , send _type ) {
sendType = $ ( ".resourcesSendType" ) . val ( ) ;
if ( sendType === lastSendType ) {
return ;
} else if ( lastSendType != null ) { //不是第一次点击的时候
if ( sendType == '1' ) {
$ . ajax ( {
type : 'get' ,
url : '/users/' + user _id + '/search_user_course' ,
data : { send _id : res _id , send _type : send _type }
} ) ;
} else if ( sendType == '2' ) {
$ . ajax ( {
type : 'get' ,
url : '/users/' + user _id + '/search_user_project' ,
data : { send _id : res _id , send _type : send _type }
} ) ;
} else if ( sendType == '3' ) {
$ . ajax ( {
type : 'get' ,
url : '/users/' + user _id + '/search_user_org' ,
data : { send _id : res _id , send _type : send _type }
} ) ;
}
}
lastSendType = sendType ;
}
2016-05-25 17:54:53 +08:00
function chooseSendType2 ( res _id , res _ids , user _id , send _type , type ) {
console . log ( res _ids ) ;
sendType = $ ( ".resourcesSendType" ) . val ( ) ;
if ( sendType === lastSendType ) {
return ;
} else if ( lastSendType != null ) { //不是第一次点击的时候
if ( sendType == '1' ) {
$ . ajax ( {
type : 'get' ,
url : '/users/' + user _id + '/search_user_course' + '?' + "&type=" + type ,
data : { send _id : res _id , send _ids : res _ids , send _type : send _type }
} ) ;
} else if ( sendType == '2' ) {
2016-05-27 09:32:24 +08:00
console . log ( res _ids ) ;
2016-05-25 17:54:53 +08:00
$ . ajax ( {
type : 'get' ,
url : '/users/' + user _id + '/search_user_project' + '?' + "&type=" + type ,
data : { send _id : res _id , send _ids : res _ids , send _type : send _type }
} ) ;
} else if ( sendType == '3' ) {
$ . ajax ( {
type : 'get' ,
url : '/users/' + user _id + '/search_user_org' + '?' + "&type=" + type ,
data : { send _id : res _id , send _ids : res _ids , send _type : send _type }
} ) ;
}
}
lastSendType = sendType ;
}
2016-03-14 15:18:56 +08:00
//组织新建和配置中, 选择组织为私有后, disbled掉允许游客下载选项
function disable _down ( source , des , hint ) {
if ( source . attr ( "checked" ) ) {
des . attr ( "disabled" , false ) ;
hint . html ( "" ) ;
}
else {
des . attr ( "checked" , false ) ;
des . attr ( "disabled" , true ) ;
hint . html ( "(私有组织不允许游客下载资源)" ) ;
}
}
2016-03-14 17:16:11 +08:00
function getRootPath ( ) {
//获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp
var curWwwPath = window . document . location . href ;
//获取主机地址之后的目录,如: uimcardprj/share/meun.jsp
var pathName = window . document . location . pathname ;
var pos = curWwwPath . indexOf ( pathName ) ;
//获取主机地址,如: http://localhost:8083
var localhostPaht = curWwwPath . substring ( 0 , pos ) ;
//获取带"/"的项目名,如:/uimcardprj
2016-03-14 18:19:23 +08:00
// var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1);
var projectName = "" ;
2016-03-14 17:16:11 +08:00
return ( localhostPaht + projectName ) ;
2016-03-25 14:58:17 +08:00
}
//自动保存草稿
var editor2 ;
function elocalStorage ( editor , mdu ) {
if ( window . sessionStorage ) {
editor2 = editor ;
var oc = window . sessionStorage . getItem ( 'content' + mdu ) ;
if ( oc !== null ) {
var h = '您上次有已保存的数据,是否<a onclick="rec_data(\'content\',\'' + mdu + '\')">恢复</a> ? / <a onclick="clear_data(\'content\',\'' + mdu + '\')">不恢复</a>' ;
$ ( '#e_tips' ) . html ( h ) ;
}
setInterval ( function ( ) {
d = new Date ( ) ;
var h = d . getHours ( ) ;
var m = d . getMinutes ( ) ;
var s = d . getSeconds ( ) ;
h = h < 10 ? '0' + h : h ;
m = m < 10 ? '0' + m : m ;
s = s < 10 ? '0' + s : s ;
if ( ! editor . isEmpty ( ) ) {
add _data ( "content" , mdu , editor . html ( ) ) ;
$ ( '#e_tip' ) . html ( " 数据已于 " + h + ':' + m + ':' + s + " 保存 " ) ;
$ ( '#e_tips' ) . html ( "" ) ;
}
} , 10000 ) ;
} else {
$ ( '.ke-edit' ) . after ( '您的浏览器不支持localStorage.无法开启自动保存草稿服务,请升级浏览器!' ) ;
}
}
function add _data ( k , mdu , d ) {
window . sessionStorage . setItem ( k + mdu , d ) ;
}
function rec _data ( k , mdu ) {
if ( window . sessionStorage . getItem ( k + mdu ) !== null ) {
editor2 . html ( window . sessionStorage . getItem ( k + mdu ) ) ;
clear _data ( k , mdu ) ;
}
}
function clear _data ( k , mdu ) {
window . sessionStorage . removeItem ( k + mdu ) ;
if ( k == 'content' ) {
$ ( "#e_tips" ) . html ( "" ) ;
} else {
$ ( "#e_tip" ) . html ( "" ) ;
}
}
2016-03-29 15:47:05 +08:00
2016-06-24 17:58:50 +08:00
function expand _reply ( container , btnid ) {
var target = $ ( container ) . children ( ) ;
var btn = $ ( btnid ) ;
if ( btn . data ( 'init' ) == '0' ) {
btn . data ( 'init' , 1 ) ;
btn . html ( '收起回复' ) ;
target . show ( ) ;
} else {
btn . data ( 'init' , 0 ) ;
btn . html ( '展开更多' ) ;
target . hide ( ) ;
target . eq ( 0 ) . show ( ) ;
target . eq ( 1 ) . show ( ) ;
target . eq ( 2 ) . show ( ) ;
}
}
function expand _all _reply ( container , btnid , id , type , div _id ) {
2016-06-24 16:38:36 +08:00
var target = $ ( container ) ;
var btn = $ ( btnid ) ;
if ( btn . data ( 'init' ) == '0' ) {
btn . data ( 'init' , 1 ) ;
$ . get (
'/users/all_journals' ,
{
type : type ,
id : id ,
div _id : div _id
} ,
function ( data ) {
}
) ;
btn . html ( '收起回复' ) ;
//target.show();
} else if ( btn . data ( 'init' ) == '1' ) {
btn . data ( 'init' , 3 ) ;
btn . html ( '展开更多' ) ;
target . hide ( ) ;
target . eq ( 0 ) . show ( ) ;
target . eq ( 1 ) . show ( ) ;
target . eq ( 2 ) . show ( ) ;
}
else {
btn . data ( 'init' , 1 ) ;
btn . html ( '收起回复' ) ;
target . show ( ) ;
}
}
function expand _journal _reply ( container , btnid , id , type , div _id , allow _delete ) {
2016-06-07 16:02:00 +08:00
var target = $ ( container ) ;
var btn = $ ( btnid ) ;
if ( btn . data ( 'init' ) == '0' ) {
btn . data ( 'init' , 1 ) ;
$ . get (
'/users/all_journals' ,
{
type : type ,
id : id ,
2016-06-23 14:47:22 +08:00
div _id : div _id ,
allow _delete : allow _delete
2016-06-07 16:02:00 +08:00
} ,
function ( data ) {
}
) ;
btn . html ( '收起回复' ) ;
//target.show();
} else if ( btn . data ( 'init' ) == '1' ) {
btn . data ( 'init' , 3 ) ;
btn . html ( '展开更多' ) ;
target . hide ( ) ;
target . eq ( 0 ) . show ( ) ;
target . eq ( 1 ) . show ( ) ;
target . eq ( 2 ) . show ( ) ;
}
else {
btn . data ( 'init' , 1 ) ;
btn . html ( '收起回复' ) ;
target . show ( ) ;
}
}
function expand _reply _homework ( container , btnid , id , type , div _id , is _in _course , course _activity , user _activity _id ) {
var target = $ ( container ) ;
var btn = $ ( btnid ) ;
if ( btn . data ( 'init' ) == '0' ) {
btn . data ( 'init' , 1 ) ;
$ . get (
'/users/all_journals' ,
{
type : type ,
id : id ,
div _id : div _id ,
is _in _course : is _in _course ,
course _activity : course _activity ,
user _activity _id : user _activity _id
} ,
function ( data ) {
}
) ;
btn . html ( '收起回复' ) ;
//target.show();
} else if ( btn . data ( 'init' ) == '1' ) {
btn . data ( 'init' , 3 ) ;
btn . html ( '展开更多' ) ;
target . hide ( ) ;
target . eq ( 0 ) . show ( ) ;
target . eq ( 1 ) . show ( ) ;
target . eq ( 2 ) . show ( ) ;
}
else {
btn . data ( 'init' , 1 ) ;
btn . html ( '收起回复' ) ;
target . show ( ) ;
}
2016-03-29 15:47:05 +08:00
}
2016-04-29 13:42:58 +08:00
//by yk 列表描述将文字和起来去掉空格多于100就显示省略号
2016-05-06 17:59:27 +08:00
function description _showwords _ellipsis ( id , num ) {
2016-04-29 13:42:58 +08:00
var str = "" ;
$ ( "#intro_content_" + id ) . each ( function ( ) {
str = str + $ ( this ) . text ( ) ;
} ) ;
2016-04-29 15:07:46 +08:00
//去掉空格
str = str . replace ( /\s/gi , '' ) ;
2016-05-06 17:59:27 +08:00
if ( str . length > num ) {
str = str . substring ( 0 , num ) + "..." ;
2016-04-29 13:42:58 +08:00
}
$ ( "#intro_content_" + id ) . html ( str ) ;
$ ( "#intro_content_" + id ) . show ( ) ;
}
2016-05-16 16:57:18 +08:00
2016-05-16 17:02:18 +08:00
//by yk 弹框 value: html代码或跳转其他页面代码 tWidth = 580 tTop=30 tLeft=50
2016-05-16 16:57:18 +08:00
function pop _up _box ( value , tWidth , tTop , tLeft ) {
if ( ! tWidth ) {
var tWidth = 580 ;
}
if ( ! tTop ) {
var tTop = 30 ;
}
if ( ! tLeft ) {
var tLeft = 50 ;
}
$ ( "#ajax-modal" ) . html ( value ) ;
showModal ( 'ajax-modal' , tWidth + "px" ) ;
$ ( '#ajax-modal' ) . siblings ( ) . remove ( ) ;
$ ( '#ajax-modal' ) . before ( "<a href='javascript:void(0)' onclick='hideModal();' style='margin-right: 5px; margin-top:-10px;right:0;' class='resourceClose'></a>" ) ;
$ ( '#ajax-modal' ) . parent ( ) . css ( "top" , tTop + "%" ) . css ( "left" , tLeft + "%" ) . css ( "padding-top" , "10px" ) . css ( "position" , "fixed" ) ;
$ ( '#ajax-modal' ) . parent ( ) . addClass ( "resourceUploadPopup" ) ;
$ ( '#ajax-modal' ) . css ( "padding-left" , "16px" ) . css ( "padding-bottom" , "16px" ) ;
function hideModal ( ) {
$ ( '#ajax-modal' ) . hide ( ) ;
}
}
2016-06-06 09:34:45 +08:00
//显示的时候根据当前网址是http 还是https 选择视频显示方式直接显示还是弹框
function autoMedia ( id ) {
var rootPath = getRootPath ( ) ;
function _mediaType ( src ) {
if ( /\.(rm|rmvb)(\?|$)/i . test ( src ) ) {
return 'audio/x-pn-realaudio-plugin' ;
}
if ( /\.(swf|flv)(\?|$)/i . test ( src ) ) {
return 'application/x-shockwave-flash' ;
}
return 'video/x-ms-asf-plugin' ;
}
if ( rootPath . indexOf ( "https" ) < 0 ) {
$ ( "#" + id + " img" ) . each ( function ( ) {
if ( $ ( this ) . attr ( "class" ) == "mediaIco" ) {
var href = $ ( this ) . parent ( ) . attr ( "href" ) ;
//正则取地址
if ( href ) {
var url = href . split ( "open('" ) [ 1 ] . split ( "'," ) [ 0 ] ;
if ( url != "" ) {
var type = _mediaType ( url ) ;
//1.video/x-ms-asf-plugin 类型的视频播放不了,2.audio/x-pn-realaudio-plugin没试过3.application/x-shockwave-flash可以播放
if ( type != "video/x-ms-asf-plugin" ) {
var width = 550 ;
var height = 400 ;
var html = '<embed src="' + url + '" allowFullScreen="true" quality="high" width="' + width + '" height="' + height + '" align="middle" allowScriptAccess="always" type="' + type + '"></embed>' ;
$ ( this ) . parent ( ) . replaceWith ( html ) ;
}
}
}
}
} ) ;
}
}
2016-05-19 16:24:57 +08:00
//yk 自动识别URL 并加上链接
function autoUrl ( id ) {
if ( $ ( "#" + id ) . children ( ) . length > 0 ) {
$ ( "#" + id + " p,#" + id + " span,#" + id + " em,#" + id + " h1,#" + id + " h2,#" + id + " h3,#" + id + " h4,#" + id + " strong,#" + id + " b,#" + id + " font,#" + id + " i" ) . each ( function ( ) {
if ( $ ( this ) . children ( ) . length == 0 ) {
2016-05-20 17:02:43 +08:00
var html = $ ( this ) . text ( ) ;
2016-06-02 13:55:40 +08:00
html = html . replace ( /((https?|ftp|news):\/\/)?([a-z]([a-z0-9\-]*[\.。])+(aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|cn)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[A-Za-z0-9_\-\.~]+)*(\?[A-Za-z0-9+_\-\.%=&]*)?(\/([A-Za-z0-9_\-\.]*)(\?[A-Za-z0-9+_\-\.%=&]*)?)?(#[a-z][a-z0-9_]*)?/g , function ( full ) {
2016-05-19 16:24:57 +08:00
//没有://的都加上http://
2016-05-20 15:30:25 +08:00
var reStr = full ;
if ( full . length > 0 ) {
if ( full . indexOf ( "://" ) >= 0 ) {
2016-06-02 15:27:16 +08:00
reStr = "<a style='color:#136ec2' target='_Blank' href=" + "'" + full + "'" + ">" + full + "</a>" ;
2016-05-20 15:30:25 +08:00
}
else {
2016-06-02 15:27:16 +08:00
reStr = "<a style='color:#136ec2' target='_Blank' href=" + "'http://" + full + "'" + ">" + full + "</a>" ;
2016-05-20 15:30:25 +08:00
}
2016-05-19 16:24:57 +08:00
}
2016-05-20 15:30:25 +08:00
return reStr ;
2016-05-19 16:24:57 +08:00
} ) ;
$ ( this ) . html ( html ) ;
}
} ) ;
}
else {
2016-05-20 17:02:43 +08:00
var html = $ ( "#" + id ) . text ( ) ;
2016-06-02 13:55:40 +08:00
html = html . replace ( /((https?|ftp|news):\/\/)?([a-z]([a-z0-9\-]*[\.。])+(aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|cn)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[A-Za-z0-9_\-\.~]+)*(\?[A-Za-z0-9+_\-\.%=&]*)?(\/([A-Za-z0-9_\-\.]*)(\?[A-Za-z0-9+_\-\.%=&]*)?)?(#[a-z][a-z0-9_]*)?/g , function ( full ) {
2016-05-20 17:02:43 +08:00
//没有://的都加上http://
2016-05-20 15:30:25 +08:00
var reStr = full ;
if ( full . length > 0 ) {
if ( full . indexOf ( "://" ) >= 0 ) {
2016-06-02 15:27:16 +08:00
reStr = "<a style='color:#136ec2' target='_Blank' href=" + "'" + full + "'" + ">" + full + "</a>" ;
2016-05-20 15:30:25 +08:00
}
else {
2016-06-02 15:27:16 +08:00
reStr = "<a style='color:#136ec2' target='_Blank' href=" + "'http://" + full + "'" + ">" + full + "</a>" ;
2016-05-20 15:30:25 +08:00
}
2016-05-19 16:24:57 +08:00
}
2016-05-20 15:30:25 +08:00
return reStr ;
2016-05-19 16:24:57 +08:00
} ) ;
$ ( "#" + id ) . html ( html ) ;
}
2016-06-08 09:02:00 +08:00
if ( ! ( ! ! window . ActiveXObject || "ActiveXObject" in window ) ) {
autoMedia ( id ) ;
}
2016-05-19 16:24:57 +08:00
}
2016-06-16 14:04:12 +08:00
//编辑资源描述
function show _edit _file _description ( id ) {
$ ( "#file_description_show_" + id ) . hide ( ) ;
$ ( "#file_description_edit_" + id ) . show ( ) ;
$ ( "#file_description_edit_" + id ) . focus ( ) ;
}
2016-06-30 15:36:46 +08:00
//展开课程大纲列表中的班级
function expand _course _list ( id , target , btnid , count ) {
var target = $ ( target ) ;
var btn = $ ( btnid ) ;
if ( btn . data ( 'init' ) == '0' ) {
btn . data ( 'init' , 1 ) ;
btn . html ( '点击收起' ) ;
target . show ( ) ;
} else {
btn . data ( 'init' , 0 ) ;
btn . html ( '共' + count + '个课程,点击全部展开' ) ;
target . hide ( ) ;
target . eq ( 0 ) . show ( ) ;
target . eq ( 1 ) . show ( ) ;
target . eq ( 2 ) . show ( ) ;
btn . parent ( ) . show ( ) ;
}
}