src/cm/media/js/client/c_addcomment_form.js
author rbernard
Mon, 22 Feb 2010 22:30:38 +0100
changeset 190 faf3a87a7d73
parent 0 40c8f766c9b8
child 341 053551f213fb
permissions -rw-r--r--
minor FIX : export dialog : wrong 'choose file format' label

gICommentForm = null ;

instanciateICommentForm = function() {
	gICommentForm = {
			'position':[CY.WidgetPositionExt.LC, CY.WidgetPositionExt.LC],
			'formId':CY.guid(),
			'formTitleId':CY.guid(),
			'titleInputId':CY.guid(),
			'contentInputId':CY.guid(),
			'tagsInputId':CY.guid(),
			'formatInputId':CY.guid(),
			'startWrapperInputId':CY.guid(),
			'endWrapperInputId':CY.guid(),
			'startOffsetInputId':CY.guid(),
			'endOffsetInputId':CY.guid(),
			'selectionPlaceId':CY.guid(),
			'keyId':CY.guid(),
			'currentSelId':CY.guid(),
			'currentSelIdI':CY.guid(),
			'addBtnId':CY.guid(),
			'cancelBtnId':CY.guid(),
			'closeBtnId':CY.guid()
	} ;
	
	if (!sv_loggedIn) {
		gICommentForm ['nameInputId'] = CY.guid() ;
		gICommentForm ['emailInputId'] = CY.guid() ;
	}
	
	var overlayHtml = getHtml(gICommentForm) ;
	
	var width = gLayout.getTopICommentsWidth() ;
	
	var overlay = new CY.Overlay( {
		zIndex :3,
		shim :false, // until we really need it, no shim 
		visible :false,
		headerContent :overlayHtml['headerContent'],
		bodyContent :overlayHtml['bodyContent'],
		xy :[10,10],
		width : width
	});
	overlay.get('contentBox').addClass("c-newcomment") ;
	
	// attach to DOM
	overlay.render('#leftcolumn');
	
	if (!sv_loggedIn) {
		CY.get("#"+gICommentForm['nameInputId']).set('value',gPrefs.get("user","name")) ;
		CY.get("#"+gICommentForm['emailInputId']).set('value',gPrefs.get("user","email")) ;
	}
		
	CY.get("#"+gICommentForm['formTitleId']).set('innerHTML', gettext('New comment')) ;
	CY.get("#"+gICommentForm['formatInputId']).set('value',gConf['defaultCommentFormat']) ;
	
	CY.on("click", onSubmitICommentFormClick, "#"+gICommentForm['addBtnId']);
	CY.on("click", onCancelICommentFormClick, "#"+gICommentForm['cancelBtnId']);
	CY.on("click", onCancelICommentFormClick, "#"+gICommentForm['closeBtnId']);
	
	gICommentForm['overlay'] = overlay ;
	
	var animationHide = null ;
	animationHide = new CY.Anim({
        node: overlay.get('boundingBox'),
        duration: .3, //gPrefs['general']['animduration'],
        easing: CY.Easing.easeOut
    });		
	gICommentForm['animationHide'] = animationHide ; 
	animationHide.set('to', { opacity: 0});// height : 0 doesn't work
	gICommentForm['animationHide-handle'] = animationHide.on('end', onICommentFormHideAnimEnd, gICommentForm);

	var animationShow = null ;
	animationShow = new CY.Anim({
        node: overlay.get('boundingBox'),
        duration: .3, //gPrefs['general']['animduration'],
        easing: CY.Easing.easeOut
    });		
	gICommentForm['animationShow'] = animationShow ; 
	animationShow.set('to', { opacity: 1});
	gICommentForm['animationShow-handle'] = animationShow.on('end', onICommentFormShowAnimEnd, gICommentForm);
	
	changeFormFieldsWidth(gICommentForm['formId'], width) ;
}

cleanICommentForm = function() {
	CY.get("#"+gICommentForm['currentSelIdI']).set('innerHTML', gNoSelectionYet) ;

    var hostNode = gICommentForm['overlay'].getStdModNode(CY.WidgetStdMod.BODY) ;
    hostNode.queryAll(".comment_input").set('value', "") ;
	
	CY.get("#"+gICommentForm['formatInputId']).set('value',gConf['defaultCommentFormat']) ;// for now ...
	
	if (!sv_loggedIn) {
		hostNode.queryAll(".user_input").set('value', "") ;
	}
}

onICommentFormHideAnimEnd = function() {
//	iComment['overlay'].blur() ;
	this.overlay.hide() ;
	gSync.resume() ; 		
}

onICommentFormShowAnimEnd = function() {
	gSync.resume() ; 		
}

onSubmitICommentFormClick = function() {
	if (!sv_loggedIn) {
		var name = CY.get("#"+gICommentForm['nameInputId']).get('value') ;
		gPrefs.persist("user", "name", name) ;	
	
		var email = CY.get("#"+gICommentForm['emailInputId']).get('value') ;
		gPrefs.persist("user", "email", email) ;
	}
	gSync.saveComment(gICommentForm['formId']) ;
}

onCancelICommentFormClick = function() {
	gSync.cancelICommentForm() ;
}

// record selection info in hidden form fields
_updateICommentFormSelection = function(ids, displayedText, csStartSelection, csEndSelection) {
	var node = CY.Node.get('#'+ids['currentSelIdI']) ;
	if (node != null)
		node.set('innerHTML', displayedText) ;
	
    node = CY.get('#'+ids['startWrapperInputId']) ;
	if (node != null)
		node.set('value', csStartSelection['elt'].id.substring("sv_".length)) ;
    node = CY.get('#'+ids['startOffsetInputId']) ;
	if (node != null)
		node.set('value', csStartSelection['offset']) ;
    node = CY.get('#'+ids['endWrapperInputId']) ;
	if (node != null)
		node.set('value', csEndSelection['elt'].id.substring("sv_".length)) ;
    node = CY.get('#'+ids['endOffsetInputId']) ;
	if (node != null)
		node.set('value', csEndSelection['offset']) ;
}

updateICommentFormSelection = function(selection) {
	var text = (selection == null) ? "" : selection['text'] ;
	if (text != "") {
		// display text to be commented 
		var displayedText = text ; 
		var maxLength = 100 ; // even number only
		if (text.length > maxLength ) {
			var start = text.substring(0, (text.substring(0, maxLength/2)).lastIndexOf(" ")) ;
			var endPart = text.substring(text.length - maxLength/2) ;
			var end = endPart.substring(endPart.indexOf(" ")) ;
			displayedText = start + " ... " + end ;
		}
        var csStartSelection = _convertSelectionFromCCToCS(selection['start']) ;
        var csEndSelection = _convertSelectionFromCCToCS(selection['end']) ;

        _updateICommentFormSelection(gICommentForm, displayedText, csStartSelection, csEndSelection);
        if (gEdit != null)
        	_updateICommentFormSelection(gEdit['ids'], displayedText, csStartSelection, csEndSelection);
    	positionICommentForm() ;
	}
}

showICommentForm= function () {
	removeFormErrMsg(gICommentForm['formId']) ;
	if (!sv_loggedIn) {
		if (CY.get("#"+gICommentForm['nameInputId']).get('value') == '') 
			CY.get("#"+gICommentForm['nameInputId']).set('value', gPrefs.get('user','name')) ;
		if (CY.get("#"+gICommentForm['emailInputId']).get('value') == '') 
			CY.get("#"+gICommentForm['emailInputId']).set('value', gPrefs.get('user','email')) ;
	}
	gIComments.hide() ;
	positionICommentForm() ;
	gICommentForm['overlay'].show() ;
	CY.get("#"+gICommentForm['titleInputId']).focus() ;
}

isICommentFormVisible = function () {
	if (gICommentForm != null)
		return gICommentForm['overlay'].get('visible') ;
	return false ;
}

positionICommentForm = function () {
	if (gICommentForm != null) { 
		var overlay = gICommentForm['overlay'] ;
		var boundingBox = overlay.get('boundingBox') ;

		var commentFormHeight = boundingBox.get('offsetHeight') ;
		var windowHeight = boundingBox.get('winHeight') ;

		var pos = gICommentForm['position'] ;
		if (commentFormHeight > windowHeight) // trying to have save comment visible ... :
			pos = [CY.WidgetPositionExt.BL, CY.WidgetPositionExt.BL] ;
		
		overlay.set("align", {points:pos});
		boundingBox.setX(boundingBox.getX() + gConf['iCommentLeftPadding']);
	}
}