src/cm/media/js/client/c_addcomment_form.js
changeset 0 40c8f766c9b8
child 341 053551f213fb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cm/media/js/client/c_addcomment_form.js	Mon Nov 23 15:14:29 2009 +0100
@@ -0,0 +1,200 @@
+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']);
+	}
+}
\ No newline at end of file