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>.