diff -r 000000000000 -r 40c8f766c9b8 src/cm/media/js/client/c_addcomment_form.js --- /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