branch develop updated (a116594 -> 9860c9e)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository scmwebeditor. See http://git.nuiton.org/scmwebeditor.git from a116594 Add the ScmWebEditor's version number to the bottom of the pages new 9860c9e Change the user interface for the editor The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 9860c9e8d0e0bf97151ef9c753bd4884b1e53324 Author: Hugo PIGEON <hpigeon@codelutin.com> Date: Thu Jun 11 18:23:17 2015 +0200 Change the user interface for the editor Summary of changes: swe-ui-web/pom.xml | 6 - .../i18n/scmwebeditor-ui-web_en_GB.properties | 18 +- .../i18n/scmwebeditor-ui-web_fr_FR.properties | 20 +- .../webapp/WEB-INF/content/badFileRedirect.jsp | 2 +- .../src/main/webapp/WEB-INF/content/badRstFile.jsp | 2 +- .../main/webapp/WEB-INF/content/badUseRedirect.jsp | 2 +- .../src/main/webapp/WEB-INF/content/browse.jsp | 131 ++++ .../src/main/webapp/WEB-INF/content/error.jsp | 2 +- .../src/main/webapp/WEB-INF/content/fileModify.jsp | 2 +- .../webapp/WEB-INF/content/fileNotEditable.jsp | 2 +- .../main/webapp/WEB-INF/content/imageViewer.jsp | 4 +- .../src/main/webapp/WEB-INF/content/logout.jsp | 2 +- .../webapp/WEB-INF/content/modificationViewer.jsp | 752 +++++++++++++-------- .../main/webapp/WEB-INF/content/outConnection.jsp | 3 +- .../WEB-INF/content/popups/createBranchForm.jsp | 2 +- .../WEB-INF/content/popups/createBranchSuccess.jsp | 2 +- .../WEB-INF/content/popups/createDirectoryForm.jsp | 2 +- .../content/popups/createDirectorySuccess.jsp | 2 +- .../webapp/WEB-INF/content/popups/moveFileForm.jsp | 2 +- .../WEB-INF/content/popups/moveFileSuccess.jsp | 2 +- .../WEB-INF/content/popups/removeDirectoryForm.jsp | 2 +- .../content/popups/removeDirectorySuccess.jsp | 2 +- .../WEB-INF/content/popups/removeFileForm.jsp | 2 +- .../WEB-INF/content/popups/removeFileSuccess.jsp | 2 +- .../WEB-INF/content/popups/uploadFileForm.jsp | 2 +- .../WEB-INF/content/popups/uploadFileSuccess.jsp | 2 +- .../src/main/webapp/WEB-INF/content/preview.jsp | 2 - .../webapp/WEB-INF/content/privateScmRedirect.jsp | 2 +- .../src/main/webapp/WEB-INF/content/redirect.jsp | 2 +- .../webapp/codemirror-ui/css/codemirror-ui.css | 18 +- .../main/webapp/codemirror-ui/js/codemirror-ui.js | 184 ++++- swe-ui-web/src/main/webapp/css/main.css | 442 +++++++----- swe-ui-web/src/main/webapp/img/edit-icon.png | Bin 0 -> 1068 bytes swe-ui-web/src/main/webapp/img/editor/floppy.png | Bin 0 -> 477 bytes swe-ui-web/src/main/webapp/js/editor.js | 62 +- swe-ui-web/src/main/webapp/js/preview.js | 140 ++-- 36 files changed, 1237 insertions(+), 587 deletions(-) create mode 100644 swe-ui-web/src/main/webapp/img/edit-icon.png create mode 100644 swe-ui-web/src/main/webapp/img/editor/floppy.png -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository scmwebeditor. See http://git.nuiton.org/scmwebeditor.git commit 9860c9e8d0e0bf97151ef9c753bd4884b1e53324 Author: Hugo PIGEON <hpigeon@codelutin.com> Date: Thu Jun 11 18:23:17 2015 +0200 Change the user interface for the editor --- swe-ui-web/pom.xml | 6 - .../i18n/scmwebeditor-ui-web_en_GB.properties | 18 +- .../i18n/scmwebeditor-ui-web_fr_FR.properties | 20 +- .../webapp/WEB-INF/content/badFileRedirect.jsp | 2 +- .../src/main/webapp/WEB-INF/content/badRstFile.jsp | 2 +- .../main/webapp/WEB-INF/content/badUseRedirect.jsp | 2 +- .../src/main/webapp/WEB-INF/content/browse.jsp | 131 ++++ .../src/main/webapp/WEB-INF/content/error.jsp | 2 +- .../src/main/webapp/WEB-INF/content/fileModify.jsp | 2 +- .../webapp/WEB-INF/content/fileNotEditable.jsp | 2 +- .../main/webapp/WEB-INF/content/imageViewer.jsp | 4 +- .../src/main/webapp/WEB-INF/content/logout.jsp | 2 +- .../webapp/WEB-INF/content/modificationViewer.jsp | 752 +++++++++++++-------- .../main/webapp/WEB-INF/content/outConnection.jsp | 3 +- .../WEB-INF/content/popups/createBranchForm.jsp | 2 +- .../WEB-INF/content/popups/createBranchSuccess.jsp | 2 +- .../WEB-INF/content/popups/createDirectoryForm.jsp | 2 +- .../content/popups/createDirectorySuccess.jsp | 2 +- .../webapp/WEB-INF/content/popups/moveFileForm.jsp | 2 +- .../WEB-INF/content/popups/moveFileSuccess.jsp | 2 +- .../WEB-INF/content/popups/removeDirectoryForm.jsp | 2 +- .../content/popups/removeDirectorySuccess.jsp | 2 +- .../WEB-INF/content/popups/removeFileForm.jsp | 2 +- .../WEB-INF/content/popups/removeFileSuccess.jsp | 2 +- .../WEB-INF/content/popups/uploadFileForm.jsp | 2 +- .../WEB-INF/content/popups/uploadFileSuccess.jsp | 2 +- .../src/main/webapp/WEB-INF/content/preview.jsp | 2 - .../webapp/WEB-INF/content/privateScmRedirect.jsp | 2 +- .../src/main/webapp/WEB-INF/content/redirect.jsp | 2 +- .../webapp/codemirror-ui/css/codemirror-ui.css | 18 +- .../main/webapp/codemirror-ui/js/codemirror-ui.js | 184 ++++- swe-ui-web/src/main/webapp/css/main.css | 442 +++++++----- swe-ui-web/src/main/webapp/img/edit-icon.png | Bin 0 -> 1068 bytes swe-ui-web/src/main/webapp/img/editor/floppy.png | Bin 0 -> 477 bytes swe-ui-web/src/main/webapp/js/editor.js | 62 +- swe-ui-web/src/main/webapp/js/preview.js | 140 ++-- 36 files changed, 1237 insertions(+), 587 deletions(-) diff --git a/swe-ui-web/pom.xml b/swe-ui-web/pom.xml index 0be33db..8f12d37 100644 --- a/swe-ui-web/pom.xml +++ b/swe-ui-web/pom.xml @@ -25,9 +25,6 @@ <directory>src/main/resources</directory> <includes> <include>scmwebeditor.properties</include> - <include>struts.properties</include> - <include>nuiton-js.properties</include> - <include>META-INF/nuiton-js/*</include> </includes> <filtering>true</filtering> </resource> @@ -35,9 +32,6 @@ <directory>src/main/resources</directory> <excludes> <exclude>scmwebeditor.properties</exclude> - <exclude>struts.properties</exclude> - <exclude>nuiton-js.properties</exclude> - <exclude>META-INF/nuiton-js/*</exclude> </excludes> </resource> </resources> diff --git a/swe-ui-web/src/main/resources/i18n/scmwebeditor-ui-web_en_GB.properties b/swe-ui-web/src/main/resources/i18n/scmwebeditor-ui-web_en_GB.properties index 4c160c6..54f84d0 100644 --- a/swe-ui-web/src/main/resources/i18n/scmwebeditor-ui-web_en_GB.properties +++ b/swe-ui-web/src/main/resources/i18n/scmwebeditor-ui-web_en_GB.properties @@ -1,4 +1,5 @@ -scm.FileInEditor=File in editor \: +scm.FileInEditor=File\: +scm.all=All scm.atRevision=at revision scm.back=You can also get back to scm.badPathOrFileName=Bad repository path or file name, or the file is not editable \! Please correct it. @@ -8,6 +9,7 @@ scm.by=By scm.canDownload=You can however download it, for this scm.cannotSave=Can't save modification. scm.cantFindRepo=Can't find the repository. +scm.caseSensitive=Case sensitive scm.clickHere=click here scm.close=Close scm.commitMessage=Message describing the changes\: @@ -22,8 +24,10 @@ scm.createDirectory=Create a directory scm.createDirectorySuccess=Directory created successfully scm.createDirectoryTitle=Create a new directory on the repository scm.destinationDirectory=Destination directory\: +scm.directories=Directories scm.directoryToRemove=Directory to remove\: scm.displayedImage=Displayed image\: +scm.edit=Edit scm.exit=Exit scm.exitJavascript=Exit ScmWebEditor? scm.exitJavascriptChanges=Exit ScmWebEditor without saving? All modification will be lost. @@ -33,12 +37,16 @@ scm.fileModify=File modify while editing. scm.fileNotEditable=File not editable scm.fileRevision=File revision\: scm.fileToMove=File to move\: +scm.files=Files +scm.find=Find scm.forceSave=Force save scm.formTransferred=You should be transferred automatically to the form page. If not please +scm.help=Help scm.homepage=the homepage scm.info.ProblemWithRst=For any problem with RestructuredText visit +scm.info.rstFile=Information about RST files scm.info.rstWebsite=RST documentation website -scm.language=Language +scm.language=Language\: scm.lastAutoSave=Last automatic save\: scm.lastChangeSave=Last change save scm.logAs=You are log as \: @@ -46,7 +54,7 @@ scm.loginAutoSaveFile=Login for the automatic save scm.loginButton=Login scm.logoutWait=Logout... scm.modificationViewer.betterUseJavascript=For a better use of SCMWebEditor please activate JavaScript. -scm.modificationViewer.branch=Working on branch\: +scm.modificationViewer.branch=Branch\: scm.modificationViewer.commitOnly=Make a commit only (no push) scm.modificationViewer.loadAutoSavedFile=This file has been edited without being saved.\\nIf you continue, the file with the unsaved content will be loaded.\\nOtherwise, the version of the repository will be used. scm.modificationViewer.noJavascript=Javascript is not activated. You can only use save and quit, quit, upload a file, remove a file, Create a directory, remove a directory or move a file. @@ -78,6 +86,7 @@ scm.pathError=Path error scm.preview=Preview scm.privateScmAccess=You try to access a Private SCM. Please login scm.redirection=Redirection... +scm.regularExpressions=Regular expressions scm.remove.file=Removing file\: scm.removeDirectory=Remove a directory scm.removeDirectoryConfirm=Are you sure that you want to remove the directory @@ -87,6 +96,8 @@ scm.removeFile=Remove a file scm.removeFileConfirm=Are you sure that you want to remove the file scm.removeFileTitle=Remove a file from the repository scm.removeSuccess=File removal successful +scm.replace=Replace +scm.replaceAll=Replace all scm.repoError=Error on repository scm.reset=Reset scm.resetTitle=Go back to the last revision of the file @@ -95,6 +106,7 @@ scm.saveAndContinue=Save and Continue Editing scm.saveAndContinueTitle=Commit modifications and continue editing the file. scm.saveAndQuit=Save and quit scm.saveAndQuitTitle=Save this file and go back to previous page. +scm.shortcuts=Shortcuts scm.showDiff=Show differences scm.stayLogin=Keep me logged scm.submit=Submit diff --git a/swe-ui-web/src/main/resources/i18n/scmwebeditor-ui-web_fr_FR.properties b/swe-ui-web/src/main/resources/i18n/scmwebeditor-ui-web_fr_FR.properties index 499e101..9325d84 100644 --- a/swe-ui-web/src/main/resources/i18n/scmwebeditor-ui-web_fr_FR.properties +++ b/swe-ui-web/src/main/resources/i18n/scmwebeditor-ui-web_fr_FR.properties @@ -1,4 +1,5 @@ -scm.FileInEditor=Fichier dans l'éditeur \: +scm.FileInEditor=Fichier \: +scm.all=Tout scm.atRevision=à la révision scm.back=Vous pouvez également retourner sur scm.badPathOrFileName=L'adresse du dépôt ou le nom du fichier est incorrect, ou le fichier n'est pas éditable \! @@ -8,11 +9,12 @@ scm.by=Par scm.canDownload=Vous pouvez cependant le télécharger, pour cela scm.cannotSave=Modification impossible scm.cantFindRepo=Impossible de trouver le dépôt. +scm.caseSensitive=Sensible à la casse scm.clickHere=cliquez ici scm.close=Fermer scm.commitMessage=Message associé aux modifications \: scm.commitMessageTitle=Laisser un message pour décrire les modifications -scm.commitWithoutMessage=Il est recommandé d'associer les modifications à un message les décrivant. Vous n'avez pas renseigné de message, êtes-vous sûr de vouloir enregistrer ? +scm.commitWithoutMessage=Il est recommandé d\\'associer les modifications à un message les décrivant. Vous n\\'avez pas renseigné de message, êtes-vous sûr de vouloir enregistrer ? scm.connection=Connexion scm.createBranch=Créer une nouvelle branche scm.createBranch.branchName=Nom de la nouvelle branche \: @@ -22,8 +24,10 @@ scm.createDirectory=Créer un répertoire scm.createDirectorySuccess=Répertoire créé avec succès scm.createDirectoryTitle=Créer un nouveau répertoire sur le dépôt scm.destinationDirectory=Répertoire de destination \: +scm.directories=Répertoires scm.directoryToRemove=Répertoire à supprimer \: scm.displayedImage=Image affichée \: +scm.edit=Édition scm.exit=Quitter scm.exitJavascript=Quitter ScmWebEditor ? scm.exitJavascriptChanges=Quitter ScmWebEditor sans sauvegarder ? Toutes les modifications seront perdues. @@ -33,12 +37,16 @@ scm.fileModify=Fichier modifié pendant l'édition. scm.fileNotEditable=Fichier non éditable scm.fileRevision=Révision du fichier \: scm.fileToMove=Fichier à déplacer \: +scm.files=Fichiers +scm.find=Chercher scm.forceSave=Forcer la sauvegarde scm.formTransferred=Vous devriez être redirigé vers la page du formulaire. si non +scm.help=Aide scm.homepage=la page d'accueil scm.info.ProblemWithRst=Si vous rencontrez des problèmes avec RestructuredText, visitez le +scm.info.rstFile=Information sur les fichiers RST scm.info.rstWebsite=site de la documentation RST -scm.language=Langage +scm.language=Langage \: scm.lastAutoSave=Dernière sauvegarde automatique \: scm.lastChangeSave=Dernière sauvegarde effectuée scm.logAs=Connecté en tant que \: @@ -46,7 +54,7 @@ scm.loginAutoSaveFile=Connexion pour la sauvegarde automatique scm.loginButton=Connexion scm.logoutWait=Déconnexion... scm.modificationViewer.betterUseJavascript=Activer Javascript pour accéder à toutes les fonctionnalités. -scm.modificationViewer.branch=Vous travaillez sur la branche \: +scm.modificationViewer.branch=Branche \: scm.modificationViewer.commitOnly=Faire un commit seulement (pas de push) scm.modificationViewer.loadAutoSavedFile=Ce fichier a été édité sans être sauvegardé.\\nSi vous continuez, le fichier avec les modifications non sauvegardées sera affiché.\\nSinon, la version du dépôt sera utilisée. scm.modificationViewer.noJavascript=Javascript est désactivé. Vous pouvez seulement utiliser les boutons sauvegarder et quitter, quitter, ajouter un fichier, supprimer un fichier, créer un répertoire, supprimer un répertoire ou déplacer un fichier. @@ -78,6 +86,7 @@ scm.pathError=Erreur dans le chemin scm.preview=Aperçu scm.privateScmAccess=Pour modifier ce fichier, veuillez vous connecter. scm.redirection=Redirection... +scm.regularExpressions=Expressions régulières scm.remove.file=Suppression du fichier \: scm.removeDirectory=Supprimer un répertoire scm.removeDirectoryConfirm=Êtes-vous sûr de vouloir supprimer le répertoire @@ -87,6 +96,8 @@ scm.removeFile=Supprimer un fichier scm.removeFileConfirm=Êtes-vous sûr de vouloir supprimer le fichier scm.removeFileTitle=Supprimer un fichier du dépôt scm.removeSuccess=Suppression effectuée avec succès +scm.replace=Remplacer +scm.replaceAll=Tout remplacer scm.repoError=Erreur sur le dépôt scm.reset=Réinitialiser scm.resetTitle=Retour à la dernière révision du fichier @@ -95,6 +106,7 @@ scm.saveAndContinue=Sauvegarder et continuer scm.saveAndContinueTitle=Enregistrer les modifications sur le dépôt et continuer d'éditer le fichier scm.saveAndQuit=Sauvegarder et quitter scm.saveAndQuitTitle=Sauvegarder le fichier sur le dépôt et retourner à la page précédente. +scm.shortcuts=Raccourcis scm.showDiff=Voir les differences scm.stayLogin=Rester connecté scm.submit=Envoyer diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/badFileRedirect.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/badFileRedirect.jsp index 477d1b6..4b7d60c 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/badFileRedirect.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/badFileRedirect.jsp @@ -30,7 +30,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="scm.titles.error"/></title> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> <% if (request.getAttribute("projectUrl") != null) { %> <meta http-equiv="Refresh" diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/badRstFile.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/badRstFile.jsp index b648991..830b9ad 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/badRstFile.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/badRstFile.jsp @@ -28,7 +28,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="scm.titles.badRstFile"/></title> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> <body> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/badUseRedirect.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/badUseRedirect.jsp index cdfd734..2b021f2 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/badUseRedirect.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/badUseRedirect.jsp @@ -29,7 +29,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="scm.title.error"/></title> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> <% if (request.getAttribute("projectUrl") != null) { %> <meta http-equiv="Refresh" diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/browse.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/browse.jsp index 6d255ee..189b066 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/browse.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/browse.jsp @@ -145,6 +145,7 @@ </s:if> <s:else> + <!-- <s:set id="scm.upload"> <s:text name="scm.upload"/> @@ -201,5 +202,135 @@ onClick="javascript:open_popup('doMoveFile.action', 'move file', scmAddress, '%{scmType}');"/> </center> + --> + + <ul id="sweBrowseMenu" class="buttonsGroup"> + + <li> + <!-- Buttons for the actions on the repository --> + + <s:set id="scm.upload"> + <s:text name="scm.upload"/> + </s:set> + <s:set id="scm.uploadTitle"> + <s:text name="scm.uploadTitle"/> + </s:set> + + <s:set id="scm.removeFile"> + <s:text name="scm.removeFile"/> + </s:set> + <s:set id="scm.removeFileTitle"> + <s:text name="scm.removeFileTitle"/> + </s:set> + + <s:set id="scm.createDirectory"> + <s:text name="scm.createDirectory"/> + </s:set> + <s:set id="scm.createDirectoryTitle"> + <s:text name="scm.createDirectoryTitle"/> + </s:set> + + <s:set id="scm.removeDirectory"> + <s:text name="scm.removeDirectory"/> + </s:set> + <s:set id="scm.removeDirectoryTitle"> + <s:text name="scm.removeDirectoryTitle"/> + </s:set> + + <s:set id="scm.moveFile"> + <s:text name="scm.moveFile"/> + </s:set> + <s:set id="scm.moveFileTitle"> + <s:text name="scm.moveFileTitle"/> + </s:set> + + <s:set name="address"> + <s:property value="address"/> + </s:set> + + <ul id="repositoryButtons" class="buttonsGroup"> + <li> + <s:a + href="#" + title="%{scm.uploadTitle}" + onClick="javascript:open_popup('doUploadFile.action', 'upload' , scmAddress, '%{scmType}' );" + name="uploadButton"> + + <span class="fa-stack fa-lg"> + <i class="fa fa-file fa-stack-2x"></i> + <i class="fa fa-plus fa-stack-1x fa-inverse"></i> + </span> + + </s:a> + </li> + <li> + <s:a + href="#" + title="%{scm.removeFileTitle}" + onClick="javascript:open_popup('doRemoveFile.action', 'remove' , scmAddress, '%{scmType}' );" + name="removeButton"> + + <span class="fa-stack fa-lg"> + <i class="fa fa-file fa-stack-2x"></i> + <i class="fa fa-minus fa-stack-1x fa-inverse"></i> + </span> + + </s:a> + </li> + <li> + <s:a + href="#" + title="%{scm.moveFileTitle}" + onClick="javascript:open_popup('doMoveFile.action', 'move file', scmAddress, '%{scmType}');" + name="moveFileButton"> + + <span class="fa-stack fa-lg"> + <i class="fa fa-file fa-stack-2x"></i> + <i class="fa fa-arrows fa-stack-1x fa-inverse"></i> + </span> + + </s:a> + </li> + </ul> + + </li> + + <li> + + <ul id="directoryButtons" class="buttonsGroup"> + <li> + <s:a + href="#" + title="%{scm.createDirectoryTitle}" + onClick="javascript:open_popup('doCreateDirectory.action', 'create directory',scmAddress,'%{scmType}');" + name="createDirectoryButton"> + + <span class="fa-stack fa-lg"> + <i class="fa fa-folder fa-stack-2x"></i> + <i class="fa fa-plus fa-stack-1x fa-inverse"></i> + </span> + + </s:a> + </li> + <li> + <s:a + href="#" + title="%{scm.removeDirectoryTitle}" + onClick="javascript:open_popup('doRemoveDirectory.action', 'remove directory',scmAddress,'%{scmType}');" + name="removeDirectoryButton"> + + <span class="fa-stack fa-lg"> + <i class="fa fa-folder fa-stack-2x"></i> + <i class="fa fa-minus fa-stack-1x fa-inverse"></i> + </span> + + </s:a> + </li> + </ul> + + </li> + + </ul> + </s:else> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/error.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/error.jsp index 02fa476..f54a816 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/error.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/error.jsp @@ -29,7 +29,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="scm.titles.error"/></title> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> <% if (request.getAttribute("projectUrl") != null) { %> <meta http-equiv="Refresh" diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/fileModify.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/fileModify.jsp index 0030a8b..afcee6f 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/fileModify.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/fileModify.jsp @@ -28,7 +28,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="scm.fileModify"/></title> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> <body> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/fileNotEditable.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/fileNotEditable.jsp index ba8a75c..8a2599c 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/fileNotEditable.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/fileNotEditable.jsp @@ -30,7 +30,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="scm.fileNotEditable"/></title> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> <body> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/imageViewer.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/imageViewer.jsp index c941b2e..7feb6f5 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/imageViewer.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/imageViewer.jsp @@ -37,7 +37,7 @@ <script src="js/cancelRedirect.js" type="text/javascript"></script> <script src="js/popup.js" type="text/javascript"></script> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> <script type="text/javascript" src="js/editor.js"></script> @@ -203,7 +203,7 @@ <s:property value="address"/> </s:set> - <ul id="repositoryButtonsImg"> + <ul id="repositoryButtonsImg" class="buttonsGroup"> <li> <s:submit name="uploadButton" value="%{scm.upload}" title="%{scm.uploadTitle}" onClick="javascript:open_popup('doUploadFile.action', 'upload', getElementById('address').value, '%{scmType}'); return false;"/> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/logout.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/logout.jsp index b980a22..926067d 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/logout.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/logout.jsp @@ -29,7 +29,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="scm.titles.logout"/></title> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/modificationViewer.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/modificationViewer.jsp index 206c38d..83f51dd 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/modificationViewer.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/modificationViewer.jsp @@ -32,8 +32,25 @@ <head> <title><s:text name="scm.titles.swe"/></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> - <script type="text/javascript" src="js/selectLanguage.js"></script> + <!-- languages support --> + <script type="text/javascript"> + + var i18n = { + "find" : '<s:text name="scm.find"/>', + "replace" : '<s:text name="scm.replace"/>', + "all" : '<s:text name="scm.all"/>', + "language" : '<s:text name="scm.language"/>', + "caseSensitive" : '<s:text name="scm.caseSensitive"/>', + "regularExpressions" : '<s:text name="scm.regularExpressions"/>', + "replaceAll" : '<s:text name="scm.replaceAll"/>', + "commitWithoutMessage" : '<s:text name="scm.commitWithoutMessage"/>', + "exitJavascript" : '<s:text name="scm.exitJavascript"/>' + }; + + </script> + + <script type="text/javascript" src="js/selectLanguage.js"></script> <!-- Code mirror --> <script src="webjars/codemirror/5.1/lib/codemirror.js" type="text/javascript"></script> @@ -52,54 +69,18 @@ <script src="codemirror-ui/js/codemirror-ui.js"></script> <link rel="stylesheet" href="codemirror-ui/css/codemirror-ui.css" type="text/css" media="screen"/> + <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> <script src="js/cancelRedirect.js" type="text/javascript"></script> <script src="js/popup.js" type="text/javascript"></script> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> - <script type="text/javascript"> - - /* Asks the user if he really wants to exit when changes are made */ - function confirmExit() { - var redirect = true; - - if (document.getElementById('newTextId').value == editor.getValue()) { - redirect = cancelRedirect('<s:text name="scm.exitJavascript"/>', document.getElementById('projectUrl')); - } else { - document.location.href = document.getElementById('projectUrl').value; - } - - return redirect; - } - - /* Asks the user if he really wants to close the page when changes are made */ - function confirmExitOnUnload() { - if (document.getElementById('newTextId').value != editor.getValue()) { - return '<s:text name="scm.exitJavascript"/>'; - } - } - - /* Commit form validation */ - $.subscribe("beforeCommit", function(event, data) { - var commitMessage = document.getElementById("commitMessage").value; - var continueProcess = true; - - if (commitMessage == "") { - continueProcess = confirm("<s:text name="scm.commitWithoutMessage"/>"); - } - - event.originalEvent.options.submit = continueProcess; + <script type="text/javascript" src="js/editor.js"></script> - if (continueProcess) { - var message = document.getElementById("htmlcontentCommit"); - message.innerHTML = '<img src="struts/js/jstree/themes/classic/throbber.gif" alt="loading"/>'; - loadChange(); - checkExit(); - } - }); + <script type="text/javascript"> // Opens the selected file in the tree $.subscribe('treeClicked', function(event, data) { @@ -120,7 +101,7 @@ } document.location.href = (actionFile + "?address=" + item.attr("id") + "&scmType=" + scmType - + '&selectedBranch=<s:property value="selectedBranch"/>&repositoryRoot=<s:property value="repositoryRoot"/>'); + + '&selectedBranch=<s:property value="selectedBranch"/>&repositoryRoot=<s:property value="repositoryRoot"/>'); } } @@ -130,8 +111,6 @@ </script> - <script type="text/javascript" src="js/editor.js"></script> - <s:if test="autoSaveInterval > 0"> <script type="text/javascript" src="js/autoSave.js"></script> @@ -146,7 +125,7 @@ </head> -<body> +<body id="editBody"> <div id="wrapper"> @@ -157,266 +136,461 @@ <div id="head"> -<div id="flagEdit"> + <div id="flagEdit"> - <ul class="flags"> - <li> - <s:if - test="%{#session['WW_TRANS_I18N_LOCALE'] != null && #session['WW_TRANS_I18N_LOCALE'].language == 'en'}"> - <img src="img/flag-i18n-uk.png"/> - </s:if> - <s:else> - <s:a action="edit.action" namespace="/"> - <s:param name="address"><s:property value="address"/></s:param> - <s:param name="scmType"><s:property value="scmType"/></s:param> - <s:param name="selectedBranch"><s:property value="selectedBranch"/></s:param> - <s:param name="repositoryRoot"><s:property value="repositoryRoot"/></s:param> - <s:param name="request_locale">en_GB</s:param> + <ul class="flags"> + <li> + <s:if + test="%{#session['WW_TRANS_I18N_LOCALE'] != null && #session['WW_TRANS_I18N_LOCALE'].language == 'en'}"> <img src="img/flag-i18n-uk.png"/> - </s:a> - </s:else> + </s:if> + <s:else> + <s:a action="edit.action" namespace="/"> + <s:param name="address"><s:property value="address"/></s:param> + <s:param name="scmType"><s:property value="scmType"/></s:param> + <s:param name="selectedBranch"><s:property value="selectedBranch"/></s:param> + <s:param name="repositoryRoot"><s:property value="repositoryRoot"/></s:param> + <s:param name="request_locale">en_GB</s:param> + <img src="img/flag-i18n-uk.png"/> + </s:a> + </s:else> + </li> + <li> + <s:if + test="%{#session['WW_TRANS_I18N_LOCALE'] == null || #session['WW_TRANS_I18N_LOCALE'].language == 'fr'}"> + <img src="img/flag-i18n-fr.png"/> + </s:if> + <s:else> + <s:a action="edit.action" namespace="/"> + <s:param name="address"><s:property value="address"/></s:param> + <s:param name="scmType"><s:property value="scmType"/></s:param> + <s:param name="selectedBranch"><s:property value="selectedBranch"/></s:param> + <s:param name="repositoryRoot"><s:property value="repositoryRoot"/></s:param> + <s:param name="request_locale">fr_FR</s:param> + <img src="img/flag-i18n-fr.png"/> + </s:a> + </s:else> + </li> + + </ul> + + </div> + + + <!-- <a title="ScmWebEditor Project Website" target="_blank" href="http://maven-site.nuiton.org/scmwebeditor/"><img width="200" height="160" src="img/editor/machine-a-ecrire.png" alt="ScmWebEditor logo"/></a> --> + + <h1 id="editorTitle">SCMWebEditor</h1> + + <p id="fileRevision"> + <s:text name="scm.FileInEditor"/> <s:property value="address"/> + <s:text name="scm.atRevision"/> <span id="numrevisionDiv"><s:property value="numRevision"/></span> + </p> + + <img src="struts/js/jstree/themes/classic/throbber.gif" alt="loading" class="indicator" id="resetIndicator"/> + + <s:if test="scmSupportsBranches"> + <p id="workingBranch"> + <s:text name="scm.modificationViewer.branch"/> <s:property value="selectedBranch"></s:property> + </p> + </s:if> + +</div> + +<div id="editBody"> + + <s:hidden key="format" label=''/> + <s:hidden key="mimeType" label=''/> + + <!-- BEGIN menu --> + <ul id="sweMenu" class="buttonsGroup"> + + <li> + + <div class="menuDescription"> + + <p><s:text name="scm.files"/></p> + + <!-- Buttons for the files operations --> + + <s:set id="scm.upload"> + <s:text name="scm.upload"/> + </s:set> + <s:set id="scm.uploadTitle"> + <s:text name="scm.uploadTitle"/> + </s:set> + + <s:set id="scm.removeFile"> + <s:text name="scm.removeFile"/> + </s:set> + <s:set id="scm.removeFileTitle"> + <s:text name="scm.removeFileTitle"/> + </s:set> + + <s:set id="scm.moveFile"> + <s:text name="scm.moveFile"/> + </s:set> + <s:set id="scm.moveFileTitle"> + <s:text name="scm.moveFileTitle"/> + </s:set> + + <s:set name="address"> + <s:property value="address"/> + </s:set> + + <ul id="repositoryButtons" class="buttonsGroup"> + <li> + <s:a + href="#" + title="%{scm.uploadTitle}" + onClick="javascript:open_popup('doUploadFile.action', 'upload', getElementById('address').value, '%{scmType}');" + name="uploadButton"> + + <span class="fa-stack fa-lg"> + <i class="fa fa-file fa-stack-2x"></i> + <i class="fa fa-plus fa-stack-1x fa-inverse"></i> + </span> + + </s:a> + </li> + <li> + <s:a + href="#" + title="%{scm.removeFileTitle}" + onClick="javascript:open_popup('doRemoveFile.action', 'remove', getElementById('address').value, '%{scmType}');" + name="removeButton"> + + <span class="fa-stack fa-lg"> + <i class="fa fa-file fa-stack-2x"></i> + <i class="fa fa-minus fa-stack-1x fa-inverse"></i> + </span> + + </s:a> + </li> + <li> + <s:a + href="#" + title="%{scm.moveFileTitle}" + onClick="javascript:open_popup('doMoveFile.action', 'move file',getElementById('address').value,'%{scmType}');" + name="moveFileButton"> + + <span class="fa-stack fa-lg"> + <i class="fa fa-file fa-stack-2x"></i> + <i class="fa fa-arrows fa-stack-1x fa-inverse"></i> + </span> + + </s:a> + </li> + </ul> + + </div> + </li> + <li> - <s:if - test="%{#session['WW_TRANS_I18N_LOCALE'] == null || #session['WW_TRANS_I18N_LOCALE'].language == 'fr'}"> - <img src="img/flag-i18n-fr.png"/> - </s:if> - <s:else> - <s:a action="edit.action" namespace="/"> - <s:param name="address"><s:property value="address"/></s:param> - <s:param name="scmType"><s:property value="scmType"/></s:param> - <s:param name="selectedBranch"><s:property value="selectedBranch"/></s:param> - <s:param name="repositoryRoot"><s:property value="repositoryRoot"/></s:param> - <s:param name="request_locale">fr_FR</s:param> - <img src="img/flag-i18n-fr.png"/> - </s:a> - </s:else> + + <div class="menuDescription"> + + <p><s:text name="scm.directories"/></p> + + <!-- Buttons for the directories operations --> + + <s:set id="scm.createDirectory"> + <s:text name="scm.createDirectory"/> + </s:set> + <s:set id="scm.createDirectoryTitle"> + <s:text name="scm.createDirectoryTitle"/> + </s:set> + + <s:set id="scm.removeDirectory"> + <s:text name="scm.removeDirectory"/> + </s:set> + <s:set id="scm.removeDirectoryTitle"> + <s:text name="scm.removeDirectoryTitle"/> + </s:set> + + <ul id="directoryButtons" class="buttonsGroup"> + <li> + <s:a + href="#" + title="%{scm.createDirectoryTitle}" + onClick="javascript:open_popup('doCreateDirectory.action', 'create directory',getElementById('address').value,'%{scmType}');" + name="createDirectoryButton"> + + <span class="fa-stack fa-lg"> + <i class="fa fa-folder fa-stack-2x"></i> + <i class="fa fa-plus fa-stack-1x fa-inverse"></i> + </span> + + </s:a> + </li> + <li> + <s:a + href="#" + title="%{scm.removeDirectoryTitle}" + onClick="javascript:open_popup('doRemoveDirectory.action', 'remove directory',getElementById('address').value,'%{scmType}');" + name="removeDirectoryButton"> + + <span class="fa-stack fa-lg"> + <i class="fa fa-folder fa-stack-2x"></i> + <i class="fa fa-minus fa-stack-1x fa-inverse"></i> + </span> + + </s:a> + </li> + </ul> + + </div> + </li> - </ul> + <li> -</div> + <div class="menuDescription"> + <p><s:text name="scm.shortcuts"/></p> -<!-- <a title="ScmWebEditor Project Website" target="_blank" href="http://maven-site.nuiton.org/scmwebeditor/"><img width="200" height="160" src="img/editor/machine-a-ecrire.png" alt="ScmWebEditor logo"/></a> --> + <ul id="fileViewButtons" class="buttonsGroup"> + <li> + <s:set id="openAnotherFile"> + <s:text name="scm.openAnotherFile"/> + </s:set> -<h1 id="editorTitle">SCMWebEditor</h1> + <s:a + id="openAnotherFile" + href="#" + title="%{openAnotherFile}" + onClick="javascript:openPopin('openFilePopin');"> -<s:set id="openAnotherFile"> - <s:text name="scm.openAnotherFile"/> -</s:set> + <span class="fa-stack fa-lg"> + <i class="fa fa-folder-open fa-2x"></i> + </span> -<s:submit id="openAnotherFile" value="%{openAnotherFile}" onclick="openPopin('openFilePopin'); return false;"/> + </s:a> + </li> -<s:set id="viewHistory"> - <s:text name="scm.viewHistory"/> -</s:set> + <li> + <s:set id="viewHistory"> + <s:text name="scm.viewHistory"/> + </s:set> -<s:submit id="viewHistory" value="%{viewHistory}" onclick="openPopin('fileHistoryPopin'); return false;"/> + <s:a + id="viewHistory" + href="#" + title="%{viewHistory}" + onClick="javascript:openPopin('fileHistoryPopin');"> - <div id="buttonList"> + <span class="fa-stack fa-lg"> + <i class="fa fa-history fa-2x"></i> + </span> - <!--BEGIN Save and continue --> - <s:url id="ajaxCommit" value="save.action"/> + </s:a> + </li> + </ul> - <s:set id="scm.saveAndContinueTitle"> - <s:text name="scm.saveAndContinueTitle"/> - </s:set> + </div> - <s:div id="saveButton" onclick="loadChange(); openPopin('commitPopin');" title="%{scm.saveAndContinueTitle}"></s:div> - <!--END Save and continue --> + </li> - <!--BEGIN preview --> + <s:if test="format == 'rst'"> - <s:if test="format=='rst'"> - <s:url id="ajaxPreview" value="preview.action"/> + <li> - <s:set id="scm.preview"> - <s:text name="scm.preview"/> - </s:set> - <sj:a onclick="loadChange()" - id="ajaxPreviewButton" - formIds="editForm" - targets="htmlcontentPreview" - href="%{ajaxPreview}" - title="%{scm.preview}" + <div class="menuDescription"> - > - <div id="previewButton"></div> - </sj:a> - </s:if> + <p><s:text name="scm.preview"/></p> - <!--END preview --> + <ul id="previewButtons" class="buttonsGroup"> + <li id="previewSideButton"> + <s:set id="previewSide"> + <s:text name="scm.modificationViewer.previewPosition.side"/> + </s:set> - <!--BEGIN reset --> + <s:a + href="javascript:changePreviewPos('side');" + title="%{previewSide}"> - <s:set id="scm.resetTitle"> - <s:text name="scm.resetTitle"/> - </s:set> - <sj:a - title="%{scm.resetTitle}" - formIds="editForm,commitForm" - id="resetButton" - targets="htmlcontentCommit" - href="reset.action" - onclick="document.getElementById('resetIndicator').style.display = 'inline';" - > - <div id="resetButton"></div> - </sj:a> + <span class="fa-stack fa-lg"> + <i class="fa fa-pause fa-stack-2x"></i> + </span> - <!--END reset --> + </s:a> + </li> - <!-- BEGIN save and exit --> - <s:set id="scm.saveAndQuitTitle"> - <s:text name="scm.saveAndQuitTitle"/> - </s:set> + <li id="previewBelowButton"> + <s:set id="previewBelow"> + <s:text name="scm.modificationViewer.previewPosition.below"/> + </s:set> - <s:a - href="javascript:exitAfterCommit = true; loadChange(); openCommitPopin();" - title="%{scm.saveAndQuitTitle}" - name="Save" - > - <div id="saveAndQuitButton"></div> - </s:a> + <s:a + href="javascript:changePreviewPos('below');" + title="%{previewBelow}"> - <!-- END save and exit --> + <span class="fa-stack fa-lg"> + <i class="fa fa-pause fa-stack-2x fa-rotate-90"></i> + </span> - <!-- BEGIN exit --> + </s:a> + </li> - <s:if test="projectUrl != null"> - <s:hidden key="projectUrl" label=''/> - </s:if> - <s:else> - <s:hidden id="projectUrl" value="checkout.action"/> - </s:else> + <li id="previewNoneButton"> + <s:set id="previewNone"> + <s:text name="scm.modificationViewer.previewPosition.none"/> + </s:set> + <s:a + href="javascript:changePreviewPos('none');" + title="%{previewNone}"> - <s:set id="scm.exitTitle"> - <s:text name="scm.exitTitle"/> - </s:set> - <s:set id="scm.exitJavascript"> - <s:text name="scm.exitJavascript"/> - </s:set> + <span class="fa-stack fa-lg"> + <i class="fa fa-eye-slash fa-2x"></i> + </span> - <s:a - href="#" - title="%{scm.exitTitle}" - value="%{scm.exit}" - name="Cancel" - onclick="confirmExit();"> - <div id="exitButton"></div> - </s:a> + </s:a> + </li> + </ul> - <!-- END exit --> + </div> - <img src="struts/js/jstree/themes/classic/throbber.gif" alt="loading" class="indicator" id="resetIndicator"/> + </li> - </div> + </s:if> - <!-- Buttons for the actions on the repository --> - - <s:set id="scm.upload"> - <s:text name="scm.upload"/> - </s:set> - <s:set id="scm.uploadTitle"> - <s:text name="scm.uploadTitle"/> - </s:set> - - <s:set id="scm.removeFile"> - <s:text name="scm.removeFile"/> - </s:set> - <s:set id="scm.removeFileTitle"> - <s:text name="scm.removeFileTitle"/> - </s:set> - - <s:set id="scm.createDirectory"> - <s:text name="scm.createDirectory"/> - </s:set> - <s:set id="scm.createDirectoryTitle"> - <s:text name="scm.createDirectoryTitle"/> - </s:set> - - <s:set id="scm.removeDirectory"> - <s:text name="scm.removeDirectory"/> - </s:set> - <s:set id="scm.removeDirectoryTitle"> - <s:text name="scm.removeDirectoryTitle"/> - </s:set> - - <s:set id="scm.moveFile"> - <s:text name="scm.moveFile"/> - </s:set> - <s:set id="scm.moveFileTitle"> - <s:text name="scm.moveFileTitle"/> - </s:set> - - <s:set name="address"> - <s:property value="address"/> - </s:set> - - <ul id="repositoryButtons"> <li> - <s:submit name="uploadButton" value="%{scm.upload}" title="%{scm.uploadTitle}" - onClick="javascript:open_popup('doUploadFile.action', 'upload', getElementById('address').value, '%{scmType}'); return false;"/> - </li> - <li> - <s:submit name="removeButton" value="%{scm.removeFile}" title="%{scm.removeFileTitle}" - onClick="javascript:open_popup('doRemoveFile.action', 'remove', getElementById('address').value, '%{scmType}'); return false;"/> - </li> - <li> - <s:submit name="createDirectoryButton" value="%{scm.createDirectory}" title="%{scm.createDirectoryTitle}" - onClick="javascript:open_popup('doCreateDirectory.action', 'create directory',getElementById('address').value,'%{scmType}'); return false;"/> - </li> - <li> - <s:submit name="removeDirectoryButton" value="%{scm.removeDirectory}" title="%{scm.removeDirectoryTitle}" - onClick="javascript:open_popup('doRemoveDirectory.action', 'remove directory',getElementById('address').value,'%{scmType}'); return false;"/> - </li> - <li> - <s:submit name="moveFileButton" value="%{scm.moveFile}" title="%{scm.moveFileTitle}" - onClick="javascript:open_popup('doMoveFile.action', 'move file',getElementById('address').value,'%{scmType}'); return false;"/> - </li> - </ul> -</div> + <div class="menuDescription"> + + <p><s:text name="scm.edit"/></p> + + <ul id="contentButtons" class="buttonsGroup"> + + <!--BEGIN Save and continue --> + <li> + <s:url id="ajaxCommit" value="save.action"/> + + <s:set id="scm.saveAndContinueTitle"> + <s:text name="scm.saveAndContinueTitle"/> + </s:set> + + <s:a + title="%{scm.saveAndContinueTitle}" + href="javascript:loadChange(); openPopin('commitPopin');" + > + <span id="saveContinueButton" class="fa-stack fa-lg"> + <i class="fa fa-floppy-o fa-2x"></i> + </span> + </s:a> + </li> + <!--END Save and continue --> + + <!--BEGIN reset --> + <li> + <s:set id="scm.resetTitle"> + <s:text name="scm.resetTitle"/> + </s:set> + <sj:a + title="%{scm.resetTitle}" + formIds="editForm,commitForm" + id="resetButton" + targets="htmlcontentCommit" + href="reset.action" + onclick="document.getElementById('resetIndicator').style.display = 'inline';" + > + <span id="resetButton" class="fa-stack fa-lg"> + <i class="fa fa-undo fa-2x"></i> + </span> + </sj:a> + </li> + + <!--END reset --> + + <!-- BEGIN save and exit --> + <li> + <s:set id="scm.saveAndQuitTitle"> + <s:text name="scm.saveAndQuitTitle"/> + </s:set> + + <s:a + href="javascript:exitAfterCommit = true; loadChange(); openPopin('commitPopin');" + title="%{scm.saveAndQuitTitle}" + name="Save" + > + <span class="fa-stack fa-lg save-exit"> + <i class="fa fa-floppy-o fa-2x"></i> + <i class="fa fa-times fa-1x"></i> + </span> + </s:a> + </li> + + <!-- END save and exit --> + + <!-- BEGIN exit --> + <li> + <s:if test="projectUrl != null"> + <s:hidden key="projectUrl" label=''/> + </s:if> + <s:else> + <s:hidden id="projectUrl" value="checkout.action"/> + </s:else> + + + <s:set id="scm.exitTitle"> + <s:text name="scm.exitTitle"/> + </s:set> + <s:set id="scm.exitJavascript"> + <s:text name="scm.exitJavascript"/> + </s:set> + + <s:a + href="#" + title="%{scm.exitTitle}" + value="%{scm.exit}" + name="Cancel" + onclick="confirmExit();"> + + <span id="exitButton" class="fa-stack fa-lg"> + <i class="fa fa-times fa-2x"></i> + </span> + </s:a> + </li> + <!-- END exit --> + + </ul> -<div id="editBody"> + </div> - <s:hidden key="format" label=''/> - <s:hidden key="mimeType" label=''/> + </li> - <s:if test="format=='rst'"> - <h4><s:text name="scm.info.ProblemWithRst"/> <a - href="http://docutils.sourceforge.net/docs/user/rst/quickref.html"><s:text - name="scm.info.rstWebsite"/></a>.</h4> - </s:if> + <li> + <s:if test="format=='rst'"> - <p> - <s:text name="scm.FileInEditor"/> <s:property value="address"/> - <s:text name="scm.atRevision"/> <span id="numrevisionDiv"><s:property - value="numRevision"/></span> + <div class="menuDescription"> - <s:if test="scmSupportsBranches"> - <br/> - <s:text name="scm.modificationViewer.branch"/> <s:property value="selectedBranch"></s:property> - </s:if> - </p> + <p><s:text name="scm.help"/></p> - <s:if test="format == 'rst'"> + <ul class="buttonsGroup"> + <li> - <label> - <s:text name="scm.modificationViewer.previewPosition"/> - <select id="previewPosition"> - <option value="side"><s:text name="scm.modificationViewer.previewPosition.side"/></option> - <option value="below"><s:text name="scm.modificationViewer.previewPosition.below"/></option> - <option value="none"><s:text name="scm.modificationViewer.previewPosition.none"/></option> - </select> - </label> + <s:a + id="infoRstButton" + href="#" + title="%{scm.info.rstFile}" + onClick="javascript:openPopin('rstInfoPopin');" + name="infoRstButton"> + <span class="fa-stack fa-lg"> + RST ? + </span> + </s:a> - <div id="largeEditor"> - <div id="largeEditorCode"> + </li> + </ul> - </s:if> + </div> + </s:if> + + </li> + </ul> + <!-- END menu --> <textarea id="newTextId" name="newText"><s:property escapeHtml="false" value="OrigText"/></textarea> @@ -438,33 +612,21 @@ <s:if test="format == 'rst'"> - </div> - <div id="largeEditorPreview"> - <div id="htmlcontentPreview"></div> - </div> - </div> - </s:if> + <script type="text/javascript"> - <s:if test="autoSaveInterval > 0"> - <div id="lastAutoSave"> - <s:text name="scm.lastAutoSave"/> <span id="lastAutoSaveTime"></span> - </div> - </s:if> + var htmlcontentPreview = document.createElement("div"); + htmlcontentPreview.id = "htmlcontentPreview"; + editor.mirror.getWrapperElement().appendChild(htmlcontentPreview); + + var vscrollbar = document.getElementsByClassName("CodeMirror-vscrollbar"); + vscrollbar[0].style.right = "50%"; - <label><s:text name="scm.language"/> - <select id="language" name="langageSelection" - onchange="changeModeBy(editor,this)"> - <option value="null"><s:text name="scm.text"/></option> - <option value="rst">ReStructuredText</option> - <option value="javascript">Javascript</option> - <option value="text/html">HTML</option> - <option value="xml">XML</option> - <option value="text/x-java">JAVA</option> - <option value="css">CSS</option> - <option value="stex">LaTeX</option> - </select> - </label> + var ed = document.getElementsByClassName("CodeMirror-scroll"); + ed[0].style.width = "50%"; + ed[0].style.float = "left"; + </script> + </s:if> <script type='text/javascript'> selectLanguage('<s:property value="mimeType"/>', '<s:property value="format"/>'); @@ -496,7 +658,16 @@ </div> </form> - <p>SCMWebEditor <s:property value="sweVersion"/><span class="align-right">©2004-2015 CodeLutin</span></p> + <div id="footer"> + <div id="sweVersion">SCMWebEditor <s:property value="sweVersion"/></div> + <div id="copyright">©2004-2015 CodeLutin</div> + + <s:if test="autoSaveInterval > 0"> + <div id="lastAutoSave"> + <s:text name="scm.lastAutoSave"/> <span id="lastAutoSaveTime"></span> + </div> + </s:if> + </div> </div> @@ -534,7 +705,9 @@ href="logout.action?address=%{addressDeco}&projectUrl=%{projectUrlDeco}&scmType=%{scmType}&selectedBranch=%{selectedBranch}&repositoryRoot=%{repositoryRoot}" title="Logout" > - <div id="logoutButton"></div> + <span class="fa-stack fa-lg signOutButton"> + <i class="fa fa-sign-out fa-2x"></i> + </span> </s:a> </div> </s:else> @@ -635,9 +808,26 @@ </div> +<s:if test="format=='rst'"> + <div id="rstInfoPopin" class="popin"> + <span class="closePopin" onclick="closePopin('rstInfoPopin')"> + X + </span> + + <h4><s:text name="scm.info.ProblemWithRst"/> <a + href="http://docutils.sourceforge.net/docs/user/rst/quickref.html"><s:text + name="scm.info.rstWebsite"/></a>.</h4> + </div> +</s:if> + <div id="popinBackground"></div> +<script type="text/javascript"> + resizeEditor(); + editor.mirror.refresh(); +</script> + <s:if test="autoSaveInterval > 0"> <script type="text/javascript"> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/outConnection.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/outConnection.jsp index 7943348..dc11ab9 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/outConnection.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/outConnection.jsp @@ -32,7 +32,8 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> + <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> <link rel="stylesheet" type="text/css" href="css/main.css"> <title><s:text name="scm.titles.swe"/></title> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createBranchForm.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createBranchForm.jsp index 117a1e2..5e21a24 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createBranchForm.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createBranchForm.jsp @@ -32,7 +32,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="scm.createBranch"/></title> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createBranchSuccess.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createBranchSuccess.jsp index 8e47156..05055e6 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createBranchSuccess.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createBranchSuccess.jsp @@ -28,7 +28,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="css/main.css"> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <script type="text/javascript" src="js/popup.js"></script> <title><s:text name="scm.titles.success"/></title> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createDirectoryForm.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createDirectoryForm.jsp index 8cefa84..c66a850 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createDirectoryForm.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createDirectoryForm.jsp @@ -34,7 +34,7 @@ <title><s:text name="scm.createDirectory"/></title> <link rel="stylesheet" type="text/css" href="css/main.css"> <link rel="stylesheet" type="text/css" href="css/uploadForm.css"> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> </head> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createDirectorySuccess.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createDirectorySuccess.jsp index 651b484..4e9dbda 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createDirectorySuccess.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/createDirectorySuccess.jsp @@ -28,7 +28,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="css/main.css"> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <script type="text/javascript" src="js/popup.js"></script> <title><s:text name="scm.titles.success"/></title> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/moveFileForm.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/moveFileForm.jsp index 94fea1b..330b169 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/moveFileForm.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/moveFileForm.jsp @@ -34,7 +34,7 @@ <title><s:text name="scm.moveFile"/></title> <link rel="stylesheet" type="text/css" href="css/main.css"> <link rel="stylesheet" type="text/css" href="css/uploadForm.css"> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> </head> <body> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/moveFileSuccess.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/moveFileSuccess.jsp index 585db6d..49d6f6e 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/moveFileSuccess.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/moveFileSuccess.jsp @@ -28,7 +28,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="css/main.css"> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <script type="text/javascript" src="js/popup.js"></script> <title><s:text name="scm.titles.success"/></title> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeDirectoryForm.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeDirectoryForm.jsp index 8232239..466323a 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeDirectoryForm.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeDirectoryForm.jsp @@ -34,7 +34,7 @@ <title><s:text name="scm.removeDirectory"/></title> <link rel="stylesheet" type="text/css" href="css/main.css"> <link rel="stylesheet" type="text/css" href="css/uploadForm.css"> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> </head> <body> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeDirectorySuccess.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeDirectorySuccess.jsp index d497c34..25b87f2 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeDirectorySuccess.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeDirectorySuccess.jsp @@ -28,7 +28,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="css/main.css"> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <script type="text/javascript" src="js/popup.js"></script> <title><s:text name="scm.titles.success"/></title> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeFileForm.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeFileForm.jsp index e0001b9..0478919 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeFileForm.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeFileForm.jsp @@ -32,7 +32,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="scm.removeFile"/></title> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeFileSuccess.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeFileSuccess.jsp index 1decc6a..f52a89d 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeFileSuccess.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/removeFileSuccess.jsp @@ -27,7 +27,7 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> <script type="text/javascript" src="js/popup.js"></script> <title><s:text name="scm.titles.success"/></title> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/uploadFileForm.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/uploadFileForm.jsp index 83b8da3..3b18a88 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/uploadFileForm.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/uploadFileForm.jsp @@ -34,7 +34,7 @@ <title><s:text name="scm.titles.upload"/></title> <link rel="stylesheet" type="text/css" href="css/main.css"> <link rel="stylesheet" type="text/css" href="css/uploadForm.css"> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> </head> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/uploadFileSuccess.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/uploadFileSuccess.jsp index 0168781..ef1c570 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/popups/uploadFileSuccess.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/popups/uploadFileSuccess.jsp @@ -28,7 +28,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="css/main.css"> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <script type="text/javascript" src="js/popup.js"></script> <title><s:text name="scm.titles.success"/></title> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/preview.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/preview.jsp index 7f26860..dd7ce71 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/preview.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/preview.jsp @@ -22,8 +22,6 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <%@page contentType="text/html" pageEncoding="UTF-8" %> -<%--Title and div for rst preview--%> -<h3 id="prevtitle"><s:text name="scm.preview"/> :</h3> <div id="prev" title="Preview"> <div id="preview"> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/privateScmRedirect.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/privateScmRedirect.jsp index 119a9f1..e01cf59 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/privateScmRedirect.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/privateScmRedirect.jsp @@ -30,7 +30,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="scm.titles.privateScm"/></title> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> <body> diff --git a/swe-ui-web/src/main/webapp/WEB-INF/content/redirect.jsp b/swe-ui-web/src/main/webapp/WEB-INF/content/redirect.jsp index 9341598..3e3301d 100644 --- a/swe-ui-web/src/main/webapp/WEB-INF/content/redirect.jsp +++ b/swe-ui-web/src/main/webapp/WEB-INF/content/redirect.jsp @@ -29,7 +29,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="scm.redirection"/></title> - <link rel="icon" href="img/machine-a-ecrire_little.png" type="image/png"> + <link rel="icon" href="img/edit-icon.png" type="image/png"> <link rel="stylesheet" type="text/css" href="css/main.css"> <% if (request.getAttribute("projectUrl") != null) { %> <meta http-equiv="Refresh" diff --git a/swe-ui-web/src/main/webapp/codemirror-ui/css/codemirror-ui.css b/swe-ui-web/src/main/webapp/codemirror-ui/css/codemirror-ui.css index 81ee758..491ff59 100644 --- a/swe-ui-web/src/main/webapp/codemirror-ui/css/codemirror-ui.css +++ b/swe-ui-web/src/main/webapp/codemirror-ui/css/codemirror-ui.css @@ -25,20 +25,6 @@ input.codemirror-ui-checkbox{ } -.codemirror-ui-button{ - display:block; - float:left; - padding:3px; - line-height:0; - margin:1px; - margin-right:0px; -} - -.codemirror-ui-button:hover{ - padding:2px; - border:1px solid #ccc; -} - .codemirror-ui-button img{ line-height:0; } @@ -69,7 +55,9 @@ iframe{ } .codemirror-ui-find-bar{ - text-align:center; + text-align:center; + padding: 0.5%; + display: inline-block; } .codemirror-ui-popup-find-wrap{ diff --git a/swe-ui-web/src/main/webapp/codemirror-ui/js/codemirror-ui.js b/swe-ui-web/src/main/webapp/codemirror-ui/js/codemirror-ui.js index 157d811..7673acd 100644 --- a/swe-ui-web/src/main/webapp/codemirror-ui/js/codemirror-ui.js +++ b/swe-ui-web/src/main/webapp/codemirror-ui/js/codemirror-ui.js @@ -37,6 +37,7 @@ CodeMirrorUI.prototype = { //place = CodeMirror.replace(place) this.home = document.createElement("div"); + this.home.id = "editorHeader"; this.textarea.parentNode.insertBefore(this.home, this.textarea); this.self = this; @@ -52,6 +53,7 @@ CodeMirrorUI.prototype = { mirrorOptions.onChange = onChange; } mir = CodeMirror.fromTextArea(this.textarea, mirrorOptions); + mir.on("change", mirrorOptions.onChange); this.mirror = mir; this.initButtons(); @@ -87,10 +89,37 @@ CodeMirrorUI.prototype = { this.buttonFrame = document.createElement("div"); this.buttonFrame.className = "codemirror-ui-clearfix codemirror-ui-button-frame"; this.home.appendChild(this.buttonFrame); + + this.buttonList = document.createElement("ul"); + this.buttonList.id = "editorMenu"; + this.buttonList.className = "buttonsGroup"; + this.buttonFrame.appendChild(this.buttonList); + + var undoRedoContainer = document.createElement("li"); + this.buttonList.appendChild(undoRedoContainer); + this.undoRedo = document.createElement("ul"); + this.undoRedo.className = "buttonsGroup"; + undoRedoContainer.appendChild(this.undoRedo); + this.buttonList.appendChild(undoRedoContainer); + + var jumpContainer = document.createElement("li"); + this.buttonList.appendChild(jumpContainer); + this.jump = document.createElement("ul"); + this.jump.className = "buttonsGroup"; + jumpContainer.appendChild(this.jump); + this.buttonList.appendChild(jumpContainer); + + var indentContainer = document.createElement("li"); + this.buttonList.appendChild(indentContainer); + this.indent = document.createElement("ul"); + this.indent.className = "buttonsGroup"; + indentContainer.appendChild(this.indent); + this.buttonList.appendChild(indentContainer); + for (var i = 0; i < this.options.buttons.length; i++) { var buttonId = this.options.buttons[i]; var buttonDef = this.buttonDefs[buttonId]; - this.addButton(buttonDef[0], buttonDef[1], buttonDef[2], buttonDef[3], this.buttonFrame); + this.addButton(buttonDef[0], buttonDef[1], buttonDef[2], buttonDef[3], this.buttonList); } }, createFindBar: function() { @@ -103,7 +132,7 @@ CodeMirrorUI.prototype = { this.findButton = document.createElement("input"); this.findButton.type = "button"; - this.findButton.value = "Find"; + this.findButton.value = i18n["find"]; this.findButton.onclick = function() { this.find(); }.cmuiBind(this); this.connect(this.findString, "keyup", function(e) { @@ -120,7 +149,7 @@ CodeMirrorUI.prototype = { }.cmuiBind(this) ); var regLabel = document.createElement("label"); - regLabel.title = "Regular Expressions"; + regLabel.title = i18n["regularExpressions"]; this.regex = document.createElement("input"); this.regex.type = "checkbox"; this.regex.className = "codemirror-ui-checkbox"; @@ -128,7 +157,7 @@ CodeMirrorUI.prototype = { regLabel.appendChild(document.createTextNode("RegEx")); var caseLabel = document.createElement("label"); - caseLabel.title = "Case Sensitive"; + caseLabel.title = i18n["caseSensitive"]; this.caseSensitive = document.createElement("input"); this.caseSensitive.type = "checkbox"; this.caseSensitive.className = "codemirror-ui-checkbox"; @@ -148,16 +177,16 @@ CodeMirrorUI.prototype = { this.replaceButton = document.createElement("input"); this.replaceButton.type = "button"; - this.replaceButton.value = "Replace"; + this.replaceButton.value = i18n["replace"]; this.replaceButton.onclick = this.replace.cmuiBind(this); var replaceAllLabel = document.createElement("label"); - replaceAllLabel.title = "Replace All"; + replaceAllLabel.title = i18n["replaceAll"]; this.replaceAll = document.createElement("input"); this.replaceAll.type = "checkbox"; this.replaceAll.className = "codemirror-ui-checkbox"; replaceAllLabel.appendChild(this.replaceAll); - replaceAllLabel.appendChild(document.createTextNode("All")); + replaceAllLabel.appendChild(document.createTextNode(i18n["all"])); findBar.appendChild(this.findString); findBar.appendChild(this.findButton); @@ -169,6 +198,75 @@ CodeMirrorUI.prototype = { findBar.appendChild(replaceAllLabel); return findBar; }, + createLanguageSelector: function() { + + var languageSelector = document.createElement("div"); + languageSelector.id = "languageSelector"; + + var label = document.createElement("label"); + languageSelector.appendChild(label); + + var text = document.createTextNode(i18n["language"] + " "); + label.appendChild(text); + + var select = document.createElement("select"); + select.id = "language"; + select.name = "langageSelection"; + select.onchange = function() { + changeModeBy(editor, this); + }; + label.appendChild(select); + + var optText = document.createElement("option"); + optText.value = "null"; + var optTextContent = document.createTextNode("Text"); + optText.appendChild(optTextContent); + select.appendChild(optText); + + var optRst = document.createElement("option"); + optRst.value = "rst"; + var optRstContent = document.createTextNode("ReStructuredText"); + optRst.appendChild(optRstContent); + select.appendChild(optRst); + + var optJs = document.createElement("option"); + optJs.value = "javascript"; + var optJsContent = document.createTextNode("Javascript"); + optJs.appendChild(optJsContent); + select.appendChild(optJs); + + var optHtml = document.createElement("option"); + optHtml.value = "text/html"; + var optHtmlContent = document.createTextNode("HTML"); + optHtml.appendChild(optHtmlContent); + select.appendChild(optHtml); + + var optXml = document.createElement("option"); + optXml.value = "xml"; + var optXmlContent = document.createTextNode("XML"); + optXml.appendChild(optXmlContent); + select.appendChild(optXml); + + var optJava = document.createElement("option"); + optJava.value = "text/x-java"; + var optJavaContent = document.createTextNode("JAVA"); + optJava.appendChild(optJavaContent); + select.appendChild(optJava); + + var optCss = document.createElement("option"); + optCss.value = "css"; + var optCssContent = document.createTextNode("CSS"); + optCss.appendChild(optCssContent); + select.appendChild(optCss); + + var optLatex = document.createElement("option"); + optLatex.value = "stex"; + var optLatexContent = document.createTextNode("LaTeX"); + optLatex.appendChild(optLatexContent); + select.appendChild(optLatex); + + return languageSelector; + }, initPopupFindControl: function() { var findBar = this.createFindBar(); @@ -186,6 +284,9 @@ CodeMirrorUI.prototype = { initFindControl: function() { var findBar = this.createFindBar(); this.buttonFrame.appendChild(findBar); + + var languageSelector = this.createLanguageSelector(); + this.buttonFrame.appendChild(languageSelector); }, find: function( start ) { var isCaseSensitive = this.caseSensitive.checked; @@ -274,24 +375,67 @@ CodeMirrorUI.prototype = { } else { var target = event.target; } - target.func(); + target.parentElement.func(); return false; } .cmuiBind(this, func); - var img = document.createElement("img"); - img.src = image; - img.border = 0; - img.func = func.cmuiBind(this); - button.appendChild(img); - frame.appendChild(button); + + var li = document.createElement("li"); + + var span = document.createElement("span"); + span.className = "fa-stack fa-lg"; + span.func = func.cmuiBind(this); + button.appendChild(span); + li.appendChild(button); + if (action === 'save') { this.saveButton = button; - } - if (action === 'undo') { + + } else if (action === 'undo') { + this.undoButton = button; - } - if (action === 'redo') { + var i = document.createElement("i"); + i.className = "fa fa-undo fa-2x"; + span.appendChild(i); + this.undoRedo.appendChild(li); + + } else if (action === 'redo') { + this.redoButton = button; + var i = document.createElement("i"); + i.className = "fa fa-repeat fa-2x"; + span.appendChild(i); + this.undoRedo.appendChild(li); + + } else if (action === 'jump') { + + var i = document.createElement("i"); + i.className = "fa fa-file fa-stack-2x"; + span.appendChild(i); + + var i2 = document.createElement("i"); + i2.className = "fa fa-arrow-right fa-stack-1x fa-inverse"; + span.appendChild(i2); + this.jump.appendChild(li); + + } else if (action === 'reindentSelect') { + + var i = document.createElement("i"); + i.className = "fa fa-indent fa-stack-2x"; + span.appendChild(i); + this.indent.appendChild(li); + + } else if (action === 'reindent') { + + var i = document.createElement("i"); + i.className = "fa fa-file fa-stack-2x"; + span.appendChild(i); + + var i2 = document.createElement("i"); + i2.className = "fa fa-refresh fa-stack-1x fa-inverse"; + span.appendChild(i2); + this.indent.appendChild(li); + } }, classNameRegex: function(className) { @@ -317,10 +461,10 @@ CodeMirrorUI.prototype = { } var his = this.mirror.historySize(); if (his['undo'] > 0) { - this.removeClass(this.saveButton, 'inactive'); +// this.removeClass(this.saveButton, 'inactive'); this.removeClass(this.undoButton, 'inactive'); } else { - this.addClass(this.saveButton, 'inactive'); +// this.addClass(this.saveButton, 'inactive'); this.addClass(this.undoButton, 'inactive'); } if (his['redo'] > 0) { diff --git a/swe-ui-web/src/main/webapp/css/main.css b/swe-ui-web/src/main/webapp/css/main.css index e40c062..cff9134 100644 --- a/swe-ui-web/src/main/webapp/css/main.css +++ b/swe-ui-web/src/main/webapp/css/main.css @@ -27,6 +27,14 @@ body { margin:auto; } +#editBody { + width: 100%; +} + +#editForm { + margin-bottom: 0; +} + img { border:none; @@ -103,7 +111,7 @@ ul.flags li { #form { width:70%; margin:auto; - display:block; + display:none; padding:1%; text-align:center; } @@ -177,39 +185,15 @@ ul.flags li { width:285px; } - -#wrapper { - margin-top: 150px; -} - - #head { - margin:auto; - height:125px; - background: url("../img/editor/machine-a-ecrire-head.png") no-repeat 8% top, - url("../img/editor/head.png") repeat-x; - position: fixed; - width: 90%; - top: 0; - z-index: 9; -} - -#headLogin { - position: absolute; - background-image:url("../img/editor/post-it.png"); - background-repeat:no-repeat; - width:468px; - height:190px; - right: 4%; - top: 0; -} - -#authDiv { - color:white; - float:right; - margin-right:30px; - text-align:center; - width:270px; + background-color: white; + width: 100%; + padding: 10px; + padding-left: 0; + padding-right: 0; + color: #4EAD49; + text-align: center; + min-height: 32px; } #htmlcontentCommit { @@ -220,24 +204,15 @@ ul.flags li { margin-top: 10px; } - -#buttonList { - width:200px; - height:32px; - position:relative; - bottom:30px; - left: 72%; -} - - #flagHome { float:right; margin-right : 10px; } #flagEdit { - float:left; - margin-left : 10px; + float: right; + position: relative; + right: 20px; } #commitMessage { @@ -246,82 +221,13 @@ ul.flags li { display: block; } -/* Button */ - -#saveButton { - float:left; - background-image:url("../img/editor/save.png"); - height:33px; - width:33px; -} - -#saveButton:hover { - background-image:url("../img/editor/save-hover.png"); - cursor: pointer; -} - -#previewButton { - float:left; - background-image:url("../img/editor/screen.png"); - height:33px; - width:33px; -} - -#previewButton:hover { - background-image:url("../img/editor/screen-hover.png"); -} - -#resetButton { - float:left; - background-image:url("../img/editor/recycle.png"); - height:33px; - width:33px; -} - -#resetButton:hover { - background-image:url("../img/editor/recycle-hover.png"); -} - -#saveAndQuitButton { - float:left; - background-image:url("../img/editor/save-quit.png"); - height:33px; - width:33px; -} - -#saveAndQuitButton:hover { - background-image:url("../img/editor/save-quit-hover.png"); -} - -#exitButton { - float:left; - background-image:url("../img/editor/shut-down.png"); - height:33px; - width:33px; -} - -#exitButton:hover { - background-image:url("../img/editor/shut-down-hover.png"); -} - -#logoutButton { - background-image:url("../img/editor/shut-down-hover.png"); - background-repeat:no-repeat; - height:33px; - width:33px; - background-position: 0px -4px; - float: right; -} - - -/* END Button */ - #editorTitle { - margin:auto; - width:198px; - position:relative; - top:10px; - right:10px; + margin:0; + text-align: left; + display: inline; + position: relative; + left: 3%; + float: left; } #uploadFormId { @@ -337,11 +243,8 @@ ul.flags li { } #preview { - width:95%; margin:auto; display:block; - padding:1%; - border : solid 3px black; } #searchTree { @@ -359,42 +262,21 @@ ul.flags li { display: inline; } -#largeEditor { - width: 100%; - margin: auto; - height: 600px; -} - -#largeEditorCode { - width: 49%; - display: inline-block; - vertical-align: top; - height: 600px; -} - -#largeEditorPreview { - width: 49%; - display: inline-block; - float: right; - height: 600px; -} - -#language { - margin-top: 20px; -} - #preview { overflow: auto; - height: 568px; + padding: 10px; } -.CodeMirror { - height: 500px; +#previewPosition { + font-size: 1em; } -#previewPosition { - margin-top: 14px; - margin-bottom: 14px; +#htmlcontentPreview { + width: 50%; + height: 100%; + float: right; + overflow: auto; + font-family: Verdana, Arial, Helvetica, sans-serif; } #wwctrl_submitPrivateScm { @@ -432,6 +314,15 @@ ul.flags li { width: 90%; } +#rstInfoPopin { + height: 50%; + top: 25%; + left: 25%; + overflow: auto; + width: 50%; + text-align: center; +} + #popinBackground { position: fixed; width: 100%; @@ -460,42 +351,85 @@ ul.flags li { display: none; } -#openAnotherFile, #openAnotherFileImg { - position: relative; - top: 20px; - right: 10%; + +ul.buttonsGroup { + display: table; + list-style: none; + margin: auto; + padding: 0; +} + +ul.buttonsGroup li { + display: table-cell; +} + +#sweMenu { + padding: 5px; + padding-left: 0; + padding-right: 0; + width: 100%; + border-top: 1px solid #CCC; + background-color: #4EAD49; + font-size: 0.8em; } -#openAnotherFileImg { - right: 0; +#sweMenu li ul li:hover { + background-color: #FFF; } -#wwctrl_openAnotherFile, #wwctrl_openAnotherFileImg, #wwctrl_viewHistory { +#sweMenu li ul li:hover .fa-stack { + color: #4EAD49; + background-color: #FFF; +} + +#sweMenu li ul li:hover .fa-plus, #sweMenu li ul li:hover .fa-minus, #sweMenu li ul li:hover .fa-arrows, + #sweMenu li ul li:hover .fa-refresh { + color: #FFF; +} + +#sweMenu li ul li, #sweBrowseMenu li ul li, #editorMenu li ul li { + float: left; text-align: center; + border: 1px solid rgb(180, 180, 180); + background-color: rgba(255, 255, 255, 0.5); } -#viewHistory { - position: relative; - bottom: 5px; - left: 10%; +#sweMenu li ul li:first-child, #sweBrowseMenu li ul li:first-child, #editorMenu li ul li:first-child { + -webkit-border-top-left-radius: 5px; + -webkit-border-bottom-left-radius: 5px; + -moz-border-radius-topleft: 5px; + -moz-border-radius-bottomleft: 5px; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; } -ul#repositoryButtons, ul#repositoryButtonsImg { - display: table; - list-style: none; - border-spacing: 10px; - position: relative; - bottom: 30px; - margin: auto; +#sweMenu li ul li:last-child, #sweBrowseMenu li ul li:last-child, #editorMenu li ul li:last-child { + -webkit-border-top-right-radius: 5px; + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-topright: 5px; + -moz-border-radius-bottomright: 5px; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; } -ul#repositoryButtonsImg { - bottom: 10px; - left: 5%; +#sweMenu li ul li:not(:first-child), #sweBrowseMenu li ul li:not(:first-child), #editorMenu li ul li:not(:first-child) { + border-left: 1px solid rgb(180, 180, 180); + margin-left: -1px; } -ul#repositoryButtons li, ul#repositoryButtonsImg li { - display: table-cell; +#sweBrowseMenu { + padding: 5px 0; + border-spacing: 20px 0; +} + +#editorMenu { + padding: 0.2% 5px; + float: left; + font-size: 0.6em; +} + +#editorMenu > li { + border-spacing: 10px 0; } .jstree { @@ -531,4 +465,160 @@ ul#repositoryButtons li, ul#repositoryButtonsImg li { .align-right { float: right; +} + +#sweMenu .fa-stack { + color: #FFF; + width: 22px; + height: 22px; +} + +#editorHeader .fa-stack { + color: #888; + width: 16px; + height: 16px; +} + +#sweBrowseMenu .fa-stack { + color: #888; +} + +.save-exit i.fa-times { + position: relative; + font-size: 1.25em; + bottom: 10px; + left: 5px; + color: #4EAD49; +} + +.fa-plus, .fa-minus, .fa-arrows, .fa-arrow-right, .fa-refresh { + position: relative; + left: 3px; + top: 4px; + color: #4EAD49; +} + +#sweBrowseMenu .fa-plus, #sweBrowseMenu .fa-minus, #sweBrowseMenu .fa-arrows { + position: relative; + left: 4px; + top: 6px; + color: #FFF; +} + +#editorHeader .fa-arrow-right, #editorHeader .fa-refresh { + color: #FFF; + left: 2px; + top: 3px; +} + +.fa-folder, .fa-folder-open { + font-size: 22px; +} + +#sweBrowseMenu .fa-folder { + font-size: 32px; +} + +.fa-stack { + display: inline-block; + font-size: 0.8em; + padding: 5px 8px; +} + +.fa-stack:hover { + background-color: rgba(180, 180, 180, 0.5); + cursor: pointer; +} + +#fileRevision { + width: 50%; + text-align: center; + display: inline-block; +} + +#workingBranch { + width: 20%; + text-align: center; + display: inline-block; + position: relative; + bottom: 10px; +} + +#infoRstButton { + font-weight: bold; + text-align: center; + text-decoration: none; +} + +#infoRstButton span.fa-stack { + width: 30px; +} + +#editorButtons { + float: left; + position: relative; + left: 20px; +} + +#languageSelector, #previewPosSelector { + display: inline-block; + margin-left: 1%; +} + +#language { + font-size: 1em; +} + +#footer { + padding: 5px; + font-size: 12px; + text-align: center; +} + +#sweVersion { + float: left; +} + +#copyright { + float: right; +} + +#lastAutoSave { + width: 100%; +} + +#resetIndicator { + float: right; + position: relative; + right: 2%; + top: 25px; +} + +.CodeMirror-scroll { + padding: 0; + margin: 0; +} + +.signOutButton { + color: #AAA; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + padding: 5px; +} + +div.menuDescription { + display: table; + width: 100%; + text-align: center; +} + +div.menuDescription p, div.menuDescription ul { + display: table-cell; + vertical-align: middle; + color: #FFF; +} + +ul#previewButtons li#previewSideButton { + background-color: rgba(255, 255, 255, 0.25); } \ No newline at end of file diff --git a/swe-ui-web/src/main/webapp/img/edit-icon.png b/swe-ui-web/src/main/webapp/img/edit-icon.png new file mode 100644 index 0000000..2779061 Binary files /dev/null and b/swe-ui-web/src/main/webapp/img/edit-icon.png differ diff --git a/swe-ui-web/src/main/webapp/img/editor/floppy.png b/swe-ui-web/src/main/webapp/img/editor/floppy.png new file mode 100644 index 0000000..c1cadd8 Binary files /dev/null and b/swe-ui-web/src/main/webapp/img/editor/floppy.png differ diff --git a/swe-ui-web/src/main/webapp/js/editor.js b/swe-ui-web/src/main/webapp/js/editor.js index 0515f72..b1f4a8b 100644 --- a/swe-ui-web/src/main/webapp/js/editor.js +++ b/swe-ui-web/src/main/webapp/js/editor.js @@ -21,6 +21,7 @@ */ var exitAfterCommit = false; +window.onresize = resizeEditor; /* Changes the value of the new text */ function loadChange() { @@ -46,10 +47,69 @@ function checkExit() { } } +/* Resizes the editor to use all the available height */ +function resizeEditor() { + var windowHeight = window.innerHeight; + var headHeight = document.getElementById("head").offsetHeight; + var sweMenuHeight = document.getElementById("sweMenu").offsetHeight; + var editorHeaderHeight = document.getElementById("editorHeader").offsetHeight; + var footerHeight = document.getElementById("footer").offsetHeight; + + var lastAutoSave = document.getElementById("lastAutoSave"); + if (lastAutoSave !== null) { + if (lastAutoSave.style.display === "" || lastAutoSave.style.display === "none") { + footerHeight += document.getElementById("sweVersion").offsetHeight; + } + } + + var newHeight = windowHeight - headHeight - sweMenuHeight - editorHeaderHeight - footerHeight - 5; + + editor.mirror.getWrapperElement().style.height = newHeight + "px"; +} + +/* Asks the user if he really wants to exit when changes are made */ +function confirmExit() { + var redirect = true; + + if (document.getElementById('newTextId').value == editor.getValue()) { + redirect = cancelRedirect(i18n["exitJavascript"], document.getElementById('projectUrl')); + } else { + document.location.href = document.getElementById('projectUrl').value; + } + + return redirect; +} + +/* Asks the user if he really wants to close the page when changes are made */ +function confirmExitOnUnload() { + if (document.getElementById('newTextId').value != editor.getValue()) { + return i18n["exitJavascript"]; + } +} + +/* Commit form validation */ +$.subscribe("beforeCommit", function(event, data) { + var commitMessage = document.getElementById("commitMessage").value; + var continueProcess = true; + + if (commitMessage == "") { + continueProcess = confirm(i18n["commitWithoutMessage"]); + } + + event.originalEvent.options.submit = continueProcess; + + if (continueProcess) { + var message = document.getElementById("htmlcontentCommit"); + message.innerHTML = '<img src="struts/js/jstree/themes/classic/throbber.gif" alt="loading"/>'; + loadChange(); + checkExit(); + } +}); + // automatically expand the directory when there is no other file $.subscribe('treeChanged', function(event, data) { - var json = event.originalEvent.data.responseJSON; + var json = event.originalEvent.data.responseJSON; if (json.length == 1) { var object = json[0]; diff --git a/swe-ui-web/src/main/webapp/js/preview.js b/swe-ui-web/src/main/webapp/js/preview.js index 93db99d..c8d333d 100644 --- a/swe-ui-web/src/main/webapp/js/preview.js +++ b/swe-ui-web/src/main/webapp/js/preview.js @@ -20,6 +20,91 @@ * #L% */ + +// preview +var lastValue = ""; + +function updatePreview() { + + if (lastValue !== editor.getValue()) { + + lastValue = editor.getValue(); + + $.post("preview.action", { + scmType: $("#scmType").val(), + username: $("#username").val(), + pw: $("#pw").val(), + projectUrl: $("#projectUrl").val(), + commitMessage: $("#commitMessage").val(), + format: $("#format").val(), + mimeType: $("#mimeType").val(), + newText: lastValue, + langageSelection: $("#language").val(), + address: $("#address").val(), + origText: $("#origText").val(), + scmEditorUrl: $("#scmEditorUrl").val() + }, function(data) { + $("#htmlcontentPreview").html(data); + resizeEditor(); + }); + } +} + +// change the preview's position +function changePreviewPos(selectedPos) { + + var $editor = $(".CodeMirror-scroll"); + var $preview = $("#htmlcontentPreview"); + var $scrollbar = $(".CodeMirror-vscrollbar"); + var sideButton = document.getElementById("previewSideButton"); + var belowButton = document.getElementById("previewBelowButton"); + var noneButton = document.getElementById("previewNoneButton"); + + if (selectedPos === "none") { + $editor.css("width", "100%"); + $editor.css("height", "100%"); + + $preview.hide(); + + $scrollbar.css("right", "0"); + $scrollbar.css("height", "100%"); + + sideButton.style.backgroundColor = "rgba(255, 255, 255, 0.5)"; + belowButton.style.backgroundColor = "rgba(255, 255, 255, 0.5)"; + noneButton.style.backgroundColor = "rgba(255, 255, 255, 0.25)"; + } else { + $preview.show(); + + if (selectedPos === "side") { + $editor.css("width", "50%"); + $editor.css("height", "100%"); + + $preview.css("width", "50%"); + $preview.css("height", "100%"); + + $scrollbar.css("right", "50%"); + $scrollbar.css("height", "100%"); + + sideButton.style.backgroundColor = "rgba(255, 255, 255, 0.25)"; + belowButton.style.backgroundColor = "rgba(255, 255, 255, 0.5)"; + noneButton.style.backgroundColor = "rgba(255, 255, 255, 0.5)"; + } else { + $editor.css("width", "100%"); + $editor.css("height", "50%"); + + $preview.css("width", "100%"); + $preview.css("height", "50%"); + + $scrollbar.css("right", "0"); + $scrollbar.css("height", "50%"); + + sideButton.style.backgroundColor = "rgba(255, 255, 255, 0.5)"; + belowButton.style.backgroundColor = "rgba(255, 255, 255, 0.25)"; + noneButton.style.backgroundColor = "rgba(255, 255, 255, 0.5)"; + } + } +} + $(document).ready(function() { // setting the editor's height relative to the button's bar height @@ -36,64 +121,9 @@ $(document).ready(function() { } } - // preview - - var lastValue = ""; - - function updatePreview() { - - if (lastValue !== editor.getValue()) { - - lastValue = editor.getValue(); - loadChange(); - - $.post("preview.action", { - scmType: $("#scmType").val(), - username: $("#username").val(), - pw: $("#pw").val(), - projectUrl: $("#projectUrl").val(), - commitMessage: $("#commitMessage").val(), - format: $("#format").val(), - mimeType: $("#mimeType").val(), - newText: $("#newTextId").val(), - langageSelection: $("#language").val(), - address: $("#address").val(), - origText: $("#origText").val(), - scmEditorUrl: $("#scmEditorUrl").val() - }, function(data) { - $("#htmlcontentPreview").html(data); - }); - } - } - // the preview is updated every 2 seconds if something was changed since last update window.setInterval(updatePreview, 2000); updatePreview(); - // listeners to change the preview's position - $("#previewPosition").on("change", function() { - - var $editor = $("#largeEditorCode"); - var $preview = $("#largeEditorPreview"); - var selectedPos = $(this).val(); - - if (selectedPos === "none") { - $editor.css("width", "100%"); - $preview.hide(); - } else { - $preview.show(); - - if (selectedPos === "side") { - $editor.css("width", "49%"); - $preview.css("width", "49%"); - $preview.css("margin-top", "0px"); - } else { - $editor.css("width", "100%"); - $preview.css("width", "100%"); - $preview.css("margin-top", "20px"); - } - } - }); - }); \ No newline at end of file -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm