Changeset 19630
- Timestamp:
- 02/02/12 17:55:56 (4 months ago)
- Location:
- trunk
- Files:
-
- 3 added
- 4 edited
-
Wsp_Modeling/spaces/gen/modelBuilder/bs/sm_simpleTask/mainview.xul.xsl (modified) (1 diff)
-
Xul_Wsp/content/Collab/widgets/taskBox/ico16 (added)
-
Xul_Wsp/content/Collab/widgets/taskBox/ico16/reset.png (added)
-
Xul_Wsp/content/Collab/widgets/taskBox/ico16/save.png (added)
-
Xul_Wsp/content/Collab/widgets/taskBox/taskBox.css (modified) (3 diffs)
-
Xul_Wsp/content/Collab/widgets/taskBox/taskBox.xbl.xml (modified) (2 diffs)
-
Xul_Wsp/content/Collab/windows/contentView/mainview.tasks.css (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Wsp_Modeling/spaces/gen/modelBuilder/bs/sm_simpleTask/mainview.xul.xsl
r19574 r19630 57 57 <xsl:processing-instruction name="xml-stylesheet">href="chrome://scenariWsp/content/widgets/xed/libUiWsp/UiCms.css" type="text/css"</xsl:processing-instruction> 58 58 59 <window onload="onLoadPage();">59 <window> 60 60 <script src="chrome://scenariWsp/content/windows/contentView/mainview.init.js"/> 61 61 <script src="chrome://scenariXedLib/content/core/xed.js"/> 62 <script> 63 Components.utils.import("chrome://scenariCollab/content/utils/task.jsm"); 64 var vUriObject, vDomContent, vJsForm, vBtnCancel, vBtnSave, vNotifBox; 65 var vIsEditorInited = false; 66 var vKeyEditor = ""; 67 68 function onLoadPage(){ 69 try { 70 vUriObject = uriObj.searchUriObject(document); 71 vJsForm = document.getElementById("jsForm"); 72 vBtnSave = document.getElementById("saveBtn"); 73 vBtnCancel = document.getElementById("cancelBtn"); 74 vNotifBox = document.getElementById("notifBox"); 75 vJsForm.addEventListener("inputDirty", onInputDirty, false); 76 initPage(); 77 }catch(e){log.debug("task.onLoadPage::"+e);} 78 } 79 function onInputDirty(){ 80 if(vIsEditorInited) { 81 vBtnSave.disabled = false; 82 vBtnCancel.disabled = false; 83 var vEvent = document.createEvent("Events"); 84 vEvent.initEvent("XEDStatusDirty", true, false); 85 vJsForm.dispatchEvent(vEvent); 86 fNeedSave = true; 87 } 88 } 89 function onInputClean(){ 90 vBtnSave.disabled = true; 91 vBtnCancel.disabled = true; 92 if(fNeedSave) { 93 var vEvent = document.createEvent("Events"); 94 vEvent.initEvent("XEDStatusNotDirty", true, false); 95 vJsForm.dispatchEvent(vEvent); 96 fNeedSave = false; 97 } 98 } 99 100 function initPage(){ 101 vIsEditorInited = false; 102 onInputClean(); 103 if(src.isNewSrcUri(vUriObject.getSrcUri())) { 104 vBtnSave.setAttribute("label", "@.jsStr?uri=sc:sm:;Créer"); 105 launchEditor(); 106 } else { 107 vBtnSave.setAttribute("label", "@.jsStr?uri=sc:sm:;Modifier"); 108 vBtnCancel.hidden = false; 109 vUriObject.loadDomContent(null, onContentLoaded, onContentLoaded); 110 } 111 } 112 function onContentLoaded(pEvent){ 113 try { 114 vDomContent = pEvent.target.responseXML; 115 launchEditor(); 116 }catch(e){"task.onContentLoaded::"+log.debug(e);} 117 } 118 function launchEditor(){ 119 var vModelExtPoints = scWsp.getModelExtPoints(vUriObject.getPack(), vUriObject.getModel()); 120 var vIsCreation = src.isNewSrcUri(vUriObject.getSrcUri()); 121 var vContext = { 122 window: window, 123 uriObject: vUriObject, 124 shortDesc: vUriObject.getShortDesc(), 125 domContent: vDomContent, 126 //Données modifiées au cours de l'initialisation et nécessiteront un enregistrement. 127 dirtyFields:{} 128 }; 129 130 //TODO Recherche de l'éditor à ouvrir... 131 //var vEditorSelectors = vModelExtPoints.getList("formEditor:selectors"); 132 // 133 134 if(vIsCreation) { 135 //OnCreate 136 vModelExtPoints.callFunctionsFromList("formEditor:onCreate:"+vKeyEditor, 0, window, [vContext]); 137 } else { 138 //OnLoad 139 vModelExtPoints.callFunctionsFromList("formEditor:onLoad:"+vKeyEditor, 0, window, [vContext]); 140 } 141 142 //Construction des widgets. 143 vListWidgets = vModelExtPoints.getList("formEditor:widgets:"+vKeyEditor); 144 vJsForm.buildInputs(vContext, vListWidgets, false); 145 vJsForm.extractValue(vContext); 146 147 // Fin d'init, passage en dirty si des champs on été volonatirement modifiés 148 vIsEditorInited = true; 149 if(! vIsCreation) for(var vDirty in vContext.dirtyFields) { 150 onInputDirty(); 151 break; 152 } 153 } 154 function save(){ 155 try { 156 if( ! vJsForm.isValid()) { 157 ui.setTemporaryNotif(vNotifBox, "@.jsStr?uri=sc:sm:;Saisissez les champs obligatoires ou rectifiez les données erronées avant d'enregistrer.", "notValid", 4); 158 return; 159 } 160 var vUpdates = new DOMParser().parseFromString('<stk:updateTask xmlns:stk="scenari.eu:task:1.0"/>', "text/xml").documentElement; 161 vJsForm.fillValue(vUpdates); 162 //log.info("vUpdates:::::::::::::\n"+dom.getXml(vUpdates)); 163 if( ! vUpdates.firstElementChild) { 164 ui.setTemporaryNotif(vNotifBox, "@.jsStr?uri=sc:sm:;Aucune modification réalisée.", "noUpdates", 1); 165 onInputClean(); 166 return; 167 } 168 if(task.saveTask(vUriObject, "<xsl:value-of select="resultatAgent('//codeTask')"/>.tk", dom.getXml(vUpdates))) { 169 //Dispatch locale de l'info : si une tache a été modifiée, il est fort probable que l'utilisateur courant soit concerné. 170 //On dispatch donc cet event pour donner une chance aux views de tasks de s'auto-rafraichir avec une task en plus ou en moins... 171 //var vDeskInfo = { 172 // type : "taskLocallyUpdated", 173 // uriObject : vUriObject 174 //} 175 //desk.dispatchDeskInfo(vDeskInfo); 176 initPage(); 177 } 178 } catch(e){ 179 log.debug(e); 180 } 181 } 182 183 function cancel(){ 184 if(ui.confirm("?uri=sc:sm:;Souhaitez-vous vraiment abandonner vos modifications ?", "?uri=sc:sm:;Abandon des modifications", "?uri=sc:sm:;Abandonner", "?uri=sc:sm:;Ne pas abandonner")) { 185 initPage(); 186 } 187 } 188 </script> 189 <taskBox title="{resultatAgent('//nameTask')}"> 190 <notificationbox id="notifBox" flex="1" dir="reverse"> 191 <box id="jsForm" orient="vertical" flex="1" style="-moz-binding: url(chrome://scenariCore/content/widgets/jsForm/jsForm.xbl.xml#jsForm); overflow:auto;" xmlns:sal="scenari.eu:areaLayout:1.0"> 192 <vbox sal:areaIds="*"/> 193 </box> 194 </notificationbox> 195 <toolbarbutton oncommand="initPage()" id="reloadBtn" label="?uri=sc:sm:;Recharger"/> 196 <toolbarbutton id="cancelBtn" hidden="true" label="?uri=sc:sm:;Abandonner" oncommand="cancel()"/> 197 <toolbarbutton id="saveBtn" oncommand="save()"/> 198 </taskBox> 62 <script>Components.utils.import("chrome://scenariCollab/content/utils/task.jsm");</script> 63 <taskBox title="{resultatAgent('//nameTask')}" 64 taskCode="{resultatAgent('//codeTask')}" 65 editorKey=""/> 199 66 <script src="chrome://scenariWsp/content/windows/contentView/mainview.launch.js"/> 200 67 </window> -
trunk/Xul_Wsp/content/Collab/widgets/taskBox/taskBox.css
r19574 r19630 43 43 .startBox{ 44 44 background-color : #d4dbed; 45 width : 40px;45 width : 30px; 46 46 box-shadow: 0px 0px 5px 0px #777777; 47 47 margin-right : 5px; … … 56 56 } 57 57 58 . monoBlock{58 .taskBox{ 59 59 border-top : #d4dbed solid 1px; 60 60 } … … 78 78 width : 50px; 79 79 } 80 81 box[anonid=jsForm]{ 82 -moz-padding-end : 10px; 83 } 84 85 /* boutons d'action */ 86 87 toolbarbutton[disabled=true]{ 88 opacity : 0.5; 89 } 90 91 toolbarbutton[anonid=reloadBtn]{ 92 list-style-image: url("chrome://scenariWsp/content/res/ico16/refresh.png"); 93 } 94 toolbarbutton[anonid=cancelBtn]{ 95 list-style-image:url("chrome://scenariCollab/content/widgets/taskBox/ico16/reset.png"); 96 } 97 toolbarbutton[anonid=saveBtn]{ 98 list-style-image:url("chrome://scenariCollab/content/widgets/taskBox/ico16/save.png"); 99 } -
trunk/Xul_Wsp/content/Collab/widgets/taskBox/taskBox.xbl.xml
r19574 r19630 44 44 xmlns:html="http://www.w3.org/1999/xhtml" 45 45 xmlns:svg="http://www.w3.org/2000/svg"> 46 <binding id="monoBlock"> 46 47 <!-- @params : 48 - title 49 - taskCode 50 - editorKey [optionnel] 51 --> 52 <binding id="taskBox"> 47 53 <resources> 48 54 <stylesheet src="chrome://scenariCollab/content/widgets/taskBox/taskBox.css"/> 49 55 </resources> 50 <content orient="horizontal" class=" monoBlock">56 <content orient="horizontal" class="taskBox"> 51 57 <xul:vbox class="startBox"> 52 <xul:toolbar orient="vertical"> 58 <xul:toolbar orient="vertical" align="center"> 59 <xul:toolbarbutton anonid="reloadBtn" tooltiptext="Recharger" oncommand="document.getBindingParent(this).reload()"/> 60 <xul:toolbarseparator/> 61 <xul:toolbarbutton anonid="cancelBtn" tooltiptext="Abandonner" hidden="true" oncommand="document.getBindingParent(this).cancel()"/> 62 <xul:toolbarbutton anonid="saveBtn" oncommand="document.getBindingParent(this).save()"/> 53 63 <xbl:children includes="toolbarbutton"/> 54 64 </xul:toolbar> … … 60 70 <xul:spacer/> 61 71 </xul:hbox> 72 <xul:notificationbox anonid="notifBox" flex="1" dir="reverse"> 73 <xul:box anonid="jsForm" orient="vertical" flex="1" style="-moz-binding: url(chrome://scenariCore/content/widgets/jsForm/jsForm.xbl.xml#jsForm); overflow:auto;" xmlns:sal="scenari.eu:areaLayout:1.0"> 74 <xul:vbox sal:areaIds="*"/> 75 </xul:box> 76 </xul:notificationbox> 62 77 <children/> 63 78 </xul:vbox> 64 <xul:vbox class="endBox"> 65 66 </xul:vbox> 79 <xul:vbox class="endBox"/> 67 80 </content> 68 81 <implementation> 82 <constructor> 83 try{ 84 this._IsEditorInited = false; 85 this.reload(); 86 //Reception des events externes 87 window.setRequestHandler(this); 88 }catch(e){log.debug(e)} 89 </constructor> 90 91 <field name="uriObject">uriObj.searchUriObject(this);</field> 92 93 <field name="fJsForm">document.getAnonymousElementByAttribute(this, "anonid", "jsForm")</field> 94 <field name="fNotifBox">document.getAnonymousElementByAttribute(this, "anonid", "notifBox")</field> 95 <field name="fSaveBtn">document.getAnonymousElementByAttribute(this, "anonid", "saveBtn")</field> 96 <field name="fCancelBtn">document.getAnonymousElementByAttribute(this, "anonid", "cancelBtn")</field> 97 <field name="fReloadBtn">document.getAnonymousElementByAttribute(this, "anonid", "reloadBtn")</field> 98 99 <!-- Mode création ou édition --> 100 <property name="isCreation" onget="return src.isNewSrcUri(this.uriObject.getSrcUri())" readonly="true"/> 101 102 <!-- Mode création ou édition --> 103 <property name="taskCode" onget="return this.getAttribute('taskCode')" readonly="true"/> 104 105 <!-- Identifiant de l'éditeur --> 106 <property name="editorKey" onget="return this.hasAttribute('editorKey') ? this.getAttribute('editorKey') : ''" readonly="true"/> 107 108 109 <!-- Chargement/recharement de la box --> 110 <method name="reload"> 111 <body><![CDATA[@xmlCdata.jsStr 112 this._IsEditorInited = false; 113 this.xOnInputClean(); 114 if(src.isNewSrcUri(this.uriObject.getSrcUri())) { 115 this.fSaveBtn.setAttribute("tooltiptext", "Créer"); 116 this.xLaunchEditor(); 117 } else { 118 this.fSaveBtn.setAttribute("tooltiptext", "Modifier"); 119 this.fCancelBtn.hidden = false; 120 function onContentLoaded(pEvent){ 121 try { 122 this._DomContent = pEvent.target.responseXML; 123 this.xLaunchEditor(); 124 }catch(e){log.debug(e);} 125 } 126 127 this.uriObject.loadDomContent(null, onContentLoaded.bind(this)); 128 } 129 ]]></body> 130 </method> 131 132 <!-- Enregistrement --> 133 <method name="save"> 134 <body><![CDATA[@xmlCdata.jsStr 135 try { 136 if( ! this.fJsForm.isValid()) { 137 ui.setTemporaryNotif(this.fNotifBox, "Saisissez les champs obligatoires ou rectifiez les données erronées avant d'enregistrer.", "notValid", 4); 138 return; 139 } 140 var vParser = new DOMParser(); 141 var vUpdates = vParser.parseFromString('<stk:updateTask xmlns:stk="scenari.eu:task:1.0"/>', "text/xml").documentElement; 142 this.fJsForm.fillValue(vUpdates); 143 //log.info("vUpdates:::::::::::::\n"+dom.getXml(vUpdates)); 144 if( ! vUpdates.firstElementChild) { 145 ui.setTemporaryNotif(this.fNotifBox, "Aucune modification réalisée.", "noUpdates", 1); 146 this.xOnInputClean(); 147 return; 148 } 149 if(task.saveTask(this.uriObject, this.taskCode+".tk", dom.getXml(vUpdates))) { 150 //Dispatch locale de l'info : si une tache a été modifiée, il est fort probable que l'utilisateur courant soit concerné. 151 //On dispatch donc cet event pour donner une chance aux views de tasks de s'auto-rafraichir avec une task en plus ou en moins... 152 //var vDeskInfo = { 153 // type : "taskLocallyUpdated", 154 // uriObject : this.uriObject 155 //} 156 //desk.dispatchDeskInfo(vDeskInfo); 157 this.reload(); 158 } 159 } catch(e){log.debug(e);} 160 ]]></body> 161 </method> 162 163 <!-- Annulation des modifications + init de l'éditeur --> 164 <method name="cancel"> 165 <body><![CDATA[ 166 if(ui.confirm("Souhaitez-vous vraiment abandonner vos modifications ?", "Abandon des modifications", "Abandonner", "Ne pas abandonner")) { 167 this.reload(); 168 } 169 ]]></body> 170 </method> 171 172 <!-- @API : Transfert des requêtes externe au xed. --> 173 <method name="handleRequest"> 174 <parameter name="pRequest"/> 175 <body><![CDATA[ 176 this.save(); 177 ]]></body> 178 </method> 179 180 <!-- Chargement du jsForm --> 181 <method name="xLaunchEditor"> 182 <body><![CDATA[ 183 var vModelExtPoints = window.scWsp.getModelExtPoints(this.uriObject.getPack(), this.uriObject.getModel()); 184 var vContext = { 185 window: window, 186 uriObject: this.uriObject, 187 shortDesc: this.uriObject.getShortDesc(), 188 domContent: this._DomContent, 189 //Données modifiées au cours de l'initialisation et nécessiteront un enregistrement. 190 dirtyFields:{} 191 }; 192 193 //TODO Recherche de l'éditor à ouvrir... 194 //var vEditorSelectors = vModelExtPoints.getList("formEditor:selectors"); 195 196 if(this.isCreation) { 197 //OnCreate 198 vModelExtPoints.callFunctionsFromList("formEditor:onCreate:"+this.editorKey, 0, window, [vContext]); 199 } else { 200 //OnLoad 201 vModelExtPoints.callFunctionsFromList("formEditor:onLoad:"+this.editorKey, 0, window, [vContext]); 202 } 203 204 //Construction des widgets. 205 var vListWidgets = vModelExtPoints.getList("formEditor:widgets:"+this.editorKey); 206 this.fJsForm.buildInputs(vContext, vListWidgets, false); 207 this.fJsForm.extractValue(vContext); 208 209 // Fin d'init, passage en dirty si des champs on été volonatirement modifiés 210 this._IsEditorInited = true; 211 if(! this.isCreation) for(var vDirty in vContext.dirtyFields) { 212 thid.xOnInputDirty(); 213 break; 214 } 215 ]]></body> 216 </method> 217 218 <!-- --> 219 <method name="xOnInputClean"> 220 <body><![CDATA[ 221 this.fSaveBtn.disabled = true; 222 this.fCancelBtn.disabled = true; 223 this.fReloadBtn.disabled = false; 224 if(this._NeedSave) { 225 var vEvent = document.createEvent("Events"); 226 vEvent.initEvent("XEDStatusNotDirty", true, false); 227 this.fJsForm.dispatchEvent(vEvent); 228 this._NeedSave = false; 229 } 230 ]]></body> 231 </method> 232 233 <!-- Dispatch l'event dirty : transformation en event générique XEDStatusDirty --> 234 <method name="xOnInputDirty"> 235 <body><![CDATA[ 236 if(this._IsEditorInited) { 237 this.fSaveBtn.disabled = false; 238 this.fCancelBtn.disabled = false; 239 this.fReloadBtn.disabled = true; 240 var vEvent = document.createEvent("Events"); 241 vEvent.initEvent("XEDStatusDirty", true, false); 242 this.fJsForm.dispatchEvent(vEvent); 243 this._NeedSave = true; 244 } 245 ]]></body> 246 </method> 247 248 </implementation> 69 249 70 </implementation> 250 <handlers> 251 <handler event="inputDirty"> 252 this.xOnInputDirty(); 253 </handler> 254 <handler event="XEDStatusDirty"><![CDATA[ 255 window.fNeedSave = true; 256 ]]></handler> 257 <handler event="XEDStatusNotDirty"><![CDATA[ 258 window.fNeedSave = false; 259 ]]></handler> 260 </handlers> 71 261 </binding> 72 262 </bindings> -
trunk/Xul_Wsp/content/Collab/windows/contentView/mainview.tasks.css
r19573 r19630 46 46 47 47 taskBox{ 48 -moz-binding: url(chrome://scenariCollab/content/widgets/taskBox/taskBox.xbl.xml# monoBlock);48 -moz-binding: url(chrome://scenariCollab/content/widgets/taskBox/taskBox.xbl.xml#taskBox); 49 49 -moz-box-flex: 1; 50 50 }
Note: See TracChangeset
for help on using the changeset viewer.