Changeset 19630


Ignore:
Timestamp:
02/02/12 17:55:56 (4 months ago)
Author:
anp
Message:

edit task : debug controle dirty lors de la fermeture du wspDesk + restruct

Location:
trunk
Files:
3 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Wsp_Modeling/spaces/gen/modelBuilder/bs/sm_simpleTask/mainview.xul.xsl

    r19574 r19630  
    5757                <xsl:processing-instruction name="xml-stylesheet">href="chrome://scenariWsp/content/widgets/xed/libUiWsp/UiCms.css" type="text/css"</xsl:processing-instruction> 
    5858 
    59                 <window onload="onLoadPage();"> 
     59                <window> 
    6060                        <script src="chrome://scenariWsp/content/windows/contentView/mainview.init.js"/> 
    6161                        <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('&lt;stk:updateTask xmlns:stk="scenari.eu:task:1.0"/&gt;', "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=""/> 
    19966                        <script src="chrome://scenariWsp/content/windows/contentView/mainview.launch.js"/> 
    20067                </window> 
  • trunk/Xul_Wsp/content/Collab/widgets/taskBox/taskBox.css

    r19574 r19630  
    4343.startBox{ 
    4444        background-color : #d4dbed; 
    45         width : 40px; 
     45        width : 30px; 
    4646        box-shadow: 0px 0px 5px 0px #777777; 
    4747        margin-right : 5px; 
     
    5656} 
    5757 
    58 .monoBlock{ 
     58.taskBox{ 
    5959        border-top : #d4dbed solid 1px; 
    6060} 
     
    7878        width : 50px;    
    7979} 
     80 
     81box[anonid=jsForm]{ 
     82        -moz-padding-end : 10px;         
     83} 
     84 
     85/* boutons d'action */ 
     86 
     87toolbarbutton[disabled=true]{ 
     88        opacity : 0.5;   
     89} 
     90 
     91toolbarbutton[anonid=reloadBtn]{ 
     92        list-style-image: url("chrome://scenariWsp/content/res/ico16/refresh.png"); 
     93} 
     94toolbarbutton[anonid=cancelBtn]{ 
     95        list-style-image:url("chrome://scenariCollab/content/widgets/taskBox/ico16/reset.png"); 
     96} 
     97toolbarbutton[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  
    4444                  xmlns:html="http://www.w3.org/1999/xhtml"  
    4545                  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"> 
    4753                <resources> 
    4854                        <stylesheet src="chrome://scenariCollab/content/widgets/taskBox/taskBox.css"/> 
    4955                </resources> 
    50                 <content orient="horizontal" class="monoBlock"> 
     56                <content orient="horizontal" class="taskBox"> 
    5157                        <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()"/> 
    5363                                        <xbl:children includes="toolbarbutton"/> 
    5464                                </xul:toolbar> 
     
    6070                                        <xul:spacer/> 
    6171                                </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> 
    6277                                <children/> 
    6378                        </xul:vbox> 
    64                         <xul:vbox class="endBox"> 
    65                                  
    66                         </xul:vbox> 
     79                        <xul:vbox class="endBox"/> 
    6780                </content> 
    6881                <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> 
    69249                 
    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> 
    71261        </binding> 
    72262</bindings> 
  • trunk/Xul_Wsp/content/Collab/windows/contentView/mainview.tasks.css

    r19573 r19630  
    4646 
    4747taskBox{ 
    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); 
    4949        -moz-box-flex: 1; 
    5050} 
Note: See TracChangeset for help on using the changeset viewer.