From d58ab405326d6e42de69429b7c4c3265df105b75 Mon Sep 17 00:00:00 2001 From: SilverYoCha <yohann.chastagnier@silverpeas.com> Date: Tue, 2 May 2023 19:38:07 +0200 Subject: [PATCH 001/228] The jackrabbit development branch is set to 6.4-JR-SNAPSHOT. --- mobile-configuration/pom.xml | 2 +- mobile-war/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mobile-configuration/pom.xml b/mobile-configuration/pom.xml index 839a4a162..6134753ed 100644 --- a/mobile-configuration/pom.xml +++ b/mobile-configuration/pom.xml @@ -28,7 +28,7 @@ <parent> <groupId>org.silverpeas.components</groupId> <artifactId>mobile</artifactId> - <version>6.4-SNAPSHOT</version> + <version>6.4-JR-SNAPSHOT</version> </parent> <groupId>org.silverpeas.components.mobile</groupId> diff --git a/mobile-war/pom.xml b/mobile-war/pom.xml index c03b6410b..f5e088b3b 100644 --- a/mobile-war/pom.xml +++ b/mobile-war/pom.xml @@ -30,7 +30,7 @@ <parent> <groupId>org.silverpeas.components</groupId> <artifactId>mobile</artifactId> - <version>6.4-SNAPSHOT</version> + <version>6.4-JR-SNAPSHOT</version> </parent> <groupId>org.silverpeas.components.mobile</groupId> diff --git a/pom.xml b/pom.xml index 6f142784e..468480383 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ <groupId>org.silverpeas.components</groupId> <artifactId>mobile</artifactId> <packaging>pom</packaging> - <version>6.4-SNAPSHOT</version> + <version>6.4-JR-SNAPSHOT</version> <name>Silverpeas Mobile component</name> <properties> From 97a72309d4531b0da1312057197f4490d5cf916c Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Fri, 5 May 2023 14:34:25 +0200 Subject: [PATCH 002/228] Update dependency on Silverpeas to version 6.4-JR-build230505 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 468480383..6d3fa2c44 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-build230430</silverpeas.version> + <silverpeas.version>6.4-JR-build230505</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4</next.release> From 53f85b047cbef03c90b1e3541c06cf0bd9f3c6b3 Mon Sep 17 00:00:00 2001 From: Miguel Moquillon <miguel.moquillon@silverpeas.com> Date: Fri, 5 May 2023 14:52:05 +0200 Subject: [PATCH 003/228] Fix the property next.release in pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6d3fa2c44..904fbd88c 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ <silverpeas.version>6.4-JR-build230505</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> - <next.release>6.4</next.release> + <next.release>6.4-JR</next.release> </properties> <repositories> From 85af527cfb5b8b6bb43cfc3c3c422619e0438ef0 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 7 May 2023 23:24:06 +0200 Subject: [PATCH 004/228] Update dependency on Silverpeas to version 6.4-JR-build230507 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 904fbd88c..9218b3d14 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230505</silverpeas.version> + <silverpeas.version>6.4-JR-build230507</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 374ac0f154b0186c2a399be25b3bc4c1e6f22cf4 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 15 May 2023 16:01:47 +0200 Subject: [PATCH 005/228] Feature #13590 --- .../src/main/webapp/WEB-INF/manifest.json.template | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template index 64fdf79e0..728e6efab 100644 --- a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template +++ b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template @@ -1,18 +1,23 @@ { "name": "Silverpeas Mobile", "short_name": "SpMobile", - "background_color": "white", + "background_color": "#FFFFFF", "description": "Version mobile de Silverpeas", "orientation": "portrait-primary", "scope": "/silverpeas/spmobile/", "start_url": "/silverpeas/spmobile/spmobil.jsp", "display": "standalone", - "theme_color": "green", + "theme_color": "#00FF00", "icons": [ { "src" : "icon.png", "type" : "image/png", "sizes" : "144x144" } + { + "src" : "iconh.png", + "type" : "image/png", + "sizes" : "512x512" + } ] } \ No newline at end of file From 454f8a3720c46a34b6cd682b212658cb9e77c75a Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 16 May 2023 14:26:10 +0200 Subject: [PATCH 006/228] Feature #13590 --- mobile-war/src/main/webapp/spmobile/iconh.png | Bin 0 -> 70443 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 mobile-war/src/main/webapp/spmobile/iconh.png diff --git a/mobile-war/src/main/webapp/spmobile/iconh.png b/mobile-war/src/main/webapp/spmobile/iconh.png new file mode 100644 index 0000000000000000000000000000000000000000..3d65a520a6dff3725248b31e37b04853b5256d0a GIT binary patch literal 70443 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 literal 0 HcmV?d00001 From 1b89528fb013bdcf34479a52de834c58dcf08ac1 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 16 May 2023 14:37:59 +0200 Subject: [PATCH 007/228] Feature #13590 --- mobile-war/src/main/webapp/WEB-INF/manifest.json.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template index 728e6efab..66f37f344 100644 --- a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template +++ b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template @@ -13,7 +13,7 @@ "src" : "icon.png", "type" : "image/png", "sizes" : "144x144" - } + }, { "src" : "iconh.png", "type" : "image/png", From 0b227fac76993dcb8889e8584ac1fe5590d11200 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Mon, 22 May 2023 10:51:11 +0200 Subject: [PATCH 008/228] Update dependency on Silverpeas to version 6.4-JR-build230522 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9218b3d14..bf68ab30f 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230507</silverpeas.version> + <silverpeas.version>6.4-JR-build230522</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From e270e4e093f688c8bd85312579b9a698233ea59e Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 24 May 2023 23:36:06 +0200 Subject: [PATCH 009/228] Update dependency on Silverpeas to version 6.4-JR-build230524 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bf68ab30f..03c02ccb0 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230522</silverpeas.version> + <silverpeas.version>6.4-JR-build230524</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From d75314c08a429796819bffb618cf48978f075792 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Tue, 30 May 2023 18:04:20 +0200 Subject: [PATCH 010/228] Update dependency on Silverpeas to version 6.4-JR-build230530 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 03c02ccb0..6bade2691 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230524</silverpeas.version> + <silverpeas.version>6.4-JR-build230530</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From b080b847a20cc3b7bf48650065b6806ef632c54c Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 31 May 2023 23:34:38 +0200 Subject: [PATCH 011/228] Update dependency on Silverpeas to version 6.4-JR-build230531 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6bade2691..cd16e3741 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230530</silverpeas.version> + <silverpeas.version>6.4-JR-build230531</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From d8d4347f5834797b7aaaa01e453db3f7556dd8f1 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 4 Jun 2023 23:34:37 +0200 Subject: [PATCH 012/228] Update dependency on Silverpeas to version 6.4-JR-build230604 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cd16e3741..423b63779 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230531</silverpeas.version> + <silverpeas.version>6.4-JR-build230604</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 2335692d8f9c916a48e5c4b4077e1b03faa9da2a Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Fri, 9 Jun 2023 19:30:25 +0200 Subject: [PATCH 013/228] Update dependency on Silverpeas to version 6.4-JR-build230609 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 423b63779..1feece30b 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230604</silverpeas.version> + <silverpeas.version>6.4-JR-build230609</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 80bc9105aa3e142e56381077058b03d01c9df9aa Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 11 Jun 2023 23:34:37 +0200 Subject: [PATCH 014/228] Update dependency on Silverpeas to version 6.4-JR-build230611 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1feece30b..7f2583baf 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230609</silverpeas.version> + <silverpeas.version>6.4-JR-build230611</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 8743a9cde73392f5daa26896ba124b07941b3343 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 14 Jun 2023 23:37:37 +0200 Subject: [PATCH 015/228] Update dependency on Silverpeas to version 6.4-JR-build230614 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7f2583baf..efa7b01df 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230611</silverpeas.version> + <silverpeas.version>6.4-JR-build230614</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From cbb261359f1ca985aefc203f213ba8da9fff39d6 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Mon, 19 Jun 2023 13:06:33 +0200 Subject: [PATCH 016/228] Update dependency on Silverpeas to version 6.4-JR-build230619 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index efa7b01df..ef8b0dd41 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230614</silverpeas.version> + <silverpeas.version>6.4-JR-build230619</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 1da0f23fbe1e164df7ff09c8d0c2bdb49435c58d Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Tue, 20 Jun 2023 20:37:58 +0200 Subject: [PATCH 017/228] Update dependency on Silverpeas to version 6.4-JR-build230620 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ef8b0dd41..e6646df5a 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230619</silverpeas.version> + <silverpeas.version>6.4-JR-build230620</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 2c6ed06cee0f2f0726183f6df20103afc86efe63 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Fri, 23 Jun 2023 17:29:45 +0200 Subject: [PATCH 018/228] Update dependency on Silverpeas to version 6.4-JR-build230623 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e6646df5a..fdc04e417 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230620</silverpeas.version> + <silverpeas.version>6.4-JR-build230623</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From d3f01c54962ea542e4bbe0c92aca139b3d66cf22 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Mon, 26 Jun 2023 18:28:25 +0200 Subject: [PATCH 019/228] Update dependency on Silverpeas to version 6.4-JR-build230626 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fdc04e417..133fffaee 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230623</silverpeas.version> + <silverpeas.version>6.4-JR-build230626</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 58e384fb739c0fcd70430132e2a1436fa507350a Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Tue, 27 Jun 2023 15:30:58 +0200 Subject: [PATCH 020/228] Update dependency on Silverpeas to version 6.4-JR-build230627 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 133fffaee..2b756d326 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230626</silverpeas.version> + <silverpeas.version>6.4-JR-build230627</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From cbe00f3c0533250b9367541021ba08c0ff6495b7 Mon Sep 17 00:00:00 2001 From: SilverYoCha <yohann.chastagnier@silverpeas.com> Date: Wed, 28 Jun 2023 15:47:49 +0200 Subject: [PATCH 021/228] MobilFilter is exposed on all Silverpeas's HTTP requests. But in some cases, the HTTP requests performed MUST not induice the creation of an HTTP session (and so a JSESSIONID). That is why the filter has evolved in order to avoid creating an HTTP session when it is not necessary. --- .../org/silverpeas/bridge/MobilFilter.java | 54 ++++---- .../silverpeas/bridge/SafeSessionManager.java | 121 ++++++++++++++++++ 2 files changed, 145 insertions(+), 30 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/bridge/SafeSessionManager.java diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java index 5a7232db8..dd9af6aeb 100644 --- a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java +++ b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java @@ -52,7 +52,6 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -72,31 +71,35 @@ public void destroy() { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { - String url = ((HttpServletRequest) req).getRequestURL().toString(); + final HttpServletRequest request = (HttpServletRequest) req; + final HttpServletResponse response = (HttpServletResponse) res; + String url = request.getRequestURL().toString(); if (url.contains("spmobile") && res != null) { - String csp = ((HttpServletResponse) res).getHeader("Content-Security-Policy"); + String csp = response.getHeader("Content-Security-Policy"); if (csp != null && !csp.contains("img-src")) { csp += "; img-src * data: blob:;"; - ((HttpServletResponse) res).setHeader("Content-Security-Policy", csp); + response.setHeader("Content-Security-Policy", csp); } } - Boolean mob = (Boolean) ((HttpServletRequest) req).getSession().getAttribute("isMobile"); - if (mob != null && !mob) { + // the session could not exist + final SafeSessionManager session = new SafeSessionManager(request); + + final Boolean mobileAlreadyDetected = session.getAttribute("isMobile", Boolean.class); + if (mobileAlreadyDetected != null && !mobileAlreadyDetected) { chain.doFilter(req, res); return; } - String userAgent = ((HttpServletRequest) req).getHeader("User-Agent"); + final String userAgent = request.getHeader("User-Agent"); if (userAgent != null) { - boolean isMobile = userAgent.contains("Android") || userAgent.contains("iPhone"); - ((HttpServletRequest) req).getSession().setAttribute("isMobile", Boolean.valueOf(isMobile)); + final boolean isMobile = Boolean.TRUE.equals(mobileAlreadyDetected) + || userAgent.contains("Android") + || userAgent.contains("iPhone"); + session.setAttribute("isMobile", isMobile); - Boolean tablet = (Boolean) ((HttpServletRequest) req).getSession().getAttribute("tablet"); - if (tablet == null) { - tablet = Boolean.valueOf(false); - } + final boolean tablet = session.getAttribute("tablet", Boolean.class, false); boolean redirect = isRedirect(url); @@ -187,10 +190,9 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) return; } - HttpSession session = ((HttpServletRequest) req).getSession(false); - SynchronizerToken token = (SynchronizerToken) session.getAttribute(SESSION_TOKEN_KEY); - MainSessionController controller = (MainSessionController) session.getAttribute( - MainSessionController.MAIN_SESSION_CONTROLLER_ATT); + SynchronizerToken token = session.getAttribute(SESSION_TOKEN_KEY, SynchronizerToken.class); + MainSessionController controller = session.getAttribute( + MainSessionController.MAIN_SESSION_CONTROLLER_ATT, MainSessionController.class); if (controller != null && token == null) { //logger.warn("security.web.protection.token is disable"); // generate fake token for auto login without token security @@ -200,26 +202,18 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) session.setAttribute(SESSION_TOKEN_KEY, token); } - if (session.getAttribute(SESSION_PARAMS_KEY) != null && params.isEmpty()) { - params = (String) session.getAttribute(SESSION_PARAMS_KEY); - session.removeAttribute(SESSION_PARAMS_KEY); + if (session.getAttribute(SESSION_PARAMS_KEY, String.class) != null && params.isEmpty()) { + params = session.removeAttribute(SESSION_PARAMS_KEY, String.class); } String aDestinationPage = "/silverpeas/spmobile/spmobil.jsp" + params; session.setAttribute(SESSION_PARAMS_KEY, params); - String urlWithSessionID = - ((HttpServletResponse) res).encodeRedirectURL(aDestinationPage.toString()); - ((HttpServletResponse) res).sendRedirect(urlWithSessionID); - return; - - } else { - chain.doFilter(req, res); + String urlWithSessionID = response.encodeRedirectURL(aDestinationPage); + response.sendRedirect(urlWithSessionID); return; } - } else { - chain.doFilter(req, res); - return; } + chain.doFilter(req, res); } private String extractSurveyParameters(final ServletRequest req) { diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/SafeSessionManager.java b/mobile-war/src/main/java/org/silverpeas/bridge/SafeSessionManager.java new file mode 100644 index 000000000..2792a13fb --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/bridge/SafeSessionManager.java @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2000 - 2023 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.bridge; + +import javax.servlet.http.HttpServletRequest; + +import static java.util.Optional.ofNullable; + +/** + * This class allows handling a session safely against the different request calls. + * <p> + * Some synchronized access are performed around session creation and session attribute accesses. + * </p> + * @author silveryocha + */ +public class SafeSessionManager { + private static final Object MUTEX = new Object(); + + private final HttpServletRequest request; + + public SafeSessionManager(final HttpServletRequest request) { + this.request = request; + } + + /** + * Gets the specified attribute value from the session. + * <p> + * If the session does not exists, it is not created. + * </p> + * <p> + * If no value exists, null is returned. + * </p> + * @param attributeName the name of the attribute to fetch. + * @param aClass the class of the value fetched. + * @return the value if any, null otherwise. + * @param <T> the type of the value. + */ + public <T> T getAttribute(final String attributeName, final Class<T> aClass) { + return getAttribute(attributeName, aClass, null); + } + + /** + * Gets the specified attribute value from the session. + * <p> + * If the session does not exists, it is not created. + * </p> + * <p> + * If no value exists, default one is returned. + * </p> + * @param attributeName the name of the attribute to fetch. + * @param aClass the class of the value fetched. + * @param defaultValue default value of no value fetched from session. + * @return the value if any, default value otherwise. + * @param <T> the type of the value. + */ + public <T> T getAttribute(final String attributeName, final Class<T> aClass, + final T defaultValue) { + synchronized (MUTEX) { + return ofNullable(request.getSession(false)) + .map(s -> s.getAttribute(attributeName)) + .map(aClass::cast) + .orElse(defaultValue); + } + } + + /** + * Sets the specified attribute value into the session. + * <p> + * If the session does not exist, it is created. + * </p> + * @param attributeName the name of the attribute to fetch. + * @param value the value to put. + * @param <T> the type of the value. + */ + public <T> void setAttribute(final String attributeName, final T value) { + synchronized (MUTEX) { + request.getSession().setAttribute(attributeName, value); + } + } + + /** + * Removes from the session the specified attribute. + * <p> + * If the session does not exist, nothing is performed. + * </p> + * @param attributeName the name of the attribute to fetch. + * @param aClass the class of the value fetched. + * @return the removed value if any, null otherwise. + * @param <T> the type of the value. + */ + public <T> T removeAttribute(final String attributeName, final Class<T> aClass) { + synchronized (MUTEX) { + final T value = getAttribute(attributeName, aClass); + ofNullable(request.getSession(false)) + .ifPresent(s -> s.removeAttribute(attributeName)); + return value; + } + } +} From 5d9f021c431359b7660e498dc3d247cecfd42bb8 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Thu, 29 Jun 2023 17:33:41 +0200 Subject: [PATCH 022/228] Update dependency on Silverpeas to version 6.4-JR-build230629 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2b756d326..b6e2f8348 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230627</silverpeas.version> + <silverpeas.version>6.4-JR-build230629</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From cfbcebc74bf35e5f73c528684e97f570f449a01e Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 2 Jul 2023 23:31:01 +0200 Subject: [PATCH 023/228] Update dependency on Silverpeas to version 6.4-JR-build230702 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b6e2f8348..88d951512 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230629</silverpeas.version> + <silverpeas.version>6.4-JR-build230702</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From d26eb74b4717482f1427bc704b66d322be91a52c Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Mon, 3 Jul 2023 20:03:59 +0200 Subject: [PATCH 024/228] Update dependency on Silverpeas to version 6.4-JR-build230703 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 88d951512..c877916d6 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230702</silverpeas.version> + <silverpeas.version>6.4-JR-build230703</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 3089dbcc8eeee35d7ad9998700cb461f55a41acb Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Thu, 6 Jul 2023 19:43:50 +0200 Subject: [PATCH 025/228] Update dependency on Silverpeas to version 6.4-JR-build230706 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c877916d6..f704407a3 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230703</silverpeas.version> + <silverpeas.version>6.4-JR-build230706</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 1ed90f101667d6923bd5b321891a04554c6107bf Mon Sep 17 00:00:00 2001 From: SilverYoCha <yohann.chastagnier@silverpeas.com> Date: Fri, 7 Jul 2023 18:18:21 +0200 Subject: [PATCH 026/228] Bug #13605: fixing the comments that were not rendered --- .../mobile/client/apps/comments/CommentsApp.java | 1 - .../silverpeas/mobile/shared/dto/comments/CommentDTO.java | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/CommentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/CommentsApp.java index 4720da6ed..2c03d528f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/CommentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/CommentsApp.java @@ -97,7 +97,6 @@ public void addComment(final AddCommentEvent event) { dto.setComponentId(event.getInstanceId()); dto.setResourceId(event.getContentId()); dto.setResourceType(event.getContentType()); - dto.setTextForHtml(event.getMessage()); MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<CommentDTO>() { @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/comments/CommentDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/comments/CommentDTO.java index b742b9643..59264111a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/comments/CommentDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/comments/CommentDTO.java @@ -98,16 +98,16 @@ public String getText() { public void setText(final String text) { this.text = text; + this.textForHtml = ""; } public String getTextForHtml() { + if (textForHtml.isEmpty()) { + textForHtml = text; + } return textForHtml; } - public void setTextForHtml(final String textForHtml) { - this.textForHtml = textForHtml; - } - public UserProfileDTO getAuthor() { return author; } From 50dbbf757c43bb16a201272ae7e2acc61e8cc6b8 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 9 Jul 2023 23:30:05 +0200 Subject: [PATCH 027/228] Update dependency on Silverpeas to version 6.4-JR-build230709 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f704407a3..1482c36a2 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230706</silverpeas.version> + <silverpeas.version>6.4-JR-build230709</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 8bd69781a9f189f67221b84f96d3d391febf2143 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 16 Jul 2023 23:31:00 +0200 Subject: [PATCH 028/228] Update dependency on Silverpeas to version 6.4-JR-build230716 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1482c36a2..9035f7d14 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230709</silverpeas.version> + <silverpeas.version>6.4-JR-build230716</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From e079e111302648a5ece4d53824bcafef1c3571bf Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Thu, 20 Jul 2023 20:03:47 +0200 Subject: [PATCH 029/228] Update dependency on Silverpeas to version 6.4-JR-build230720 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9035f7d14..e368d1ee9 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230716</silverpeas.version> + <silverpeas.version>6.4-JR-build230720</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From c144b18fc165e06900c07722acfcc99cf8aa20c1 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Mon, 24 Jul 2023 17:05:41 +0200 Subject: [PATCH 030/228] Update dependency on Silverpeas to version 6.4-JR-build230724 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e368d1ee9..87a400154 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230720</silverpeas.version> + <silverpeas.version>6.4-JR-build230724</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 626e8531d5e5c253c3e8a09212ff233b66f6d161 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 26 Jul 2023 23:28:49 +0200 Subject: [PATCH 031/228] Update dependency on Silverpeas to version 6.4-JR-build230726 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 87a400154..040955363 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230724</silverpeas.version> + <silverpeas.version>6.4-JR-build230726</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 749a51317f67f35b348a0f6ba98b0d68469aab9e Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 30 Jul 2023 23:28:33 +0200 Subject: [PATCH 032/228] Update dependency on Silverpeas to version 6.4-JR-build230730 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 040955363..ebc096ced 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230726</silverpeas.version> + <silverpeas.version>6.4-JR-build230730</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From b233f18878211e6390ea5d992329d3b505859c30 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 2 Aug 2023 23:29:48 +0200 Subject: [PATCH 033/228] Update dependency on Silverpeas to version 6.4-JR-build230802 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ebc096ced..5b484328f 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230730</silverpeas.version> + <silverpeas.version>6.4-JR-build230802</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From ccd192238c8c1ff43e0f762cb23a35867211dc25 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 3 Aug 2023 09:44:18 +0200 Subject: [PATCH 034/228] Feature #13676 --- .../shared/dto/hyperlink/HyperLinkDTO.java | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/hyperlink/HyperLinkDTO.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/hyperlink/HyperLinkDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/hyperlink/HyperLinkDTO.java new file mode 100644 index 000000000..1477b9232 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/hyperlink/HyperLinkDTO.java @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.shared.dto.hyperlink; + +import org.silverpeas.mobile.shared.dto.BaseDTO; + +import java.io.Serializable; + +public class HyperLinkDTO extends BaseDTO implements Serializable { + + private static final long serialVersionUID = 2921606984249560882L; + + private String title; + private String description; + private String categoryId; + private String categoryName; + private String creatorName; + private String dateEvent; + private String creationDate; + private String instanceId; + + public HyperLinkDTO() { + } + + @Override + public boolean equals(Object obj) { + return ((HyperLinkDTO) obj).getId().equals(getId()); + } + + public String getTitle() { + return title; + } + + public void setTitle(final String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(final String description) { + this.description = description; + } + + public void setCategoryId(final String categoryId) { + this.categoryId = categoryId; + } + + public void setCategoryName(final String categoryName) { + this.categoryName = categoryName; + } + + public String getCategoryId() { + return categoryId; + } + + public String getCategoryName() { + return categoryName; + } + + public void setCreatorName(final String creatorName) { + this.creatorName = creatorName; + } + + public String getCreatorName() { + return creatorName; + } + + public void setDateEvent(final String dateEvent) { + this.dateEvent = dateEvent; + } + + public void setCreationDate(final String creationDate) { + this.creationDate = creationDate; + } + + public String getDateEvent() { + return dateEvent; + } + + public String getCreationDate() { + return creationDate; + } + + public String getInstanceId() { + return instanceId; + } + + public void setInstanceId(final String instanceId) { + this.instanceId = instanceId; + } +} From e2ad7a22113ae2a7431159213a0f42d919458816 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 3 Aug 2023 11:45:47 +0200 Subject: [PATCH 035/228] Feature #13676 --- .../client/apps/hyperlink/HyperLinkApp.java | 10 ++- .../pages/widgets/FavoriteItem.java | 7 +- .../pages/widgets/ShortCutItem.java | 7 +- .../common/navigation/LinksManager.java | 41 ++++++--- .../mobile/client/components/IframePage.java | 3 +- .../server/services/ServiceHyperLink.java | 15 ++-- .../shared/dto/hyperlink/HyperLinkDTO.java | 86 ++++--------------- .../services/rest/ServiceHyperLink.java | 5 +- 8 files changed, 77 insertions(+), 97 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/hyperlink/HyperLinkApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/hyperlink/HyperLinkApp.java index be4f2a28a..d4a061a0a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/hyperlink/HyperLinkApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/hyperlink/HyperLinkApp.java @@ -25,6 +25,7 @@ package org.silverpeas.mobile.client.apps.hyperlink; import org.fusesource.restygwt.client.Method; +import org.fusesource.restygwt.client.MethodCallback; import org.fusesource.restygwt.client.TextCallback; import org.silverpeas.mobile.client.apps.navigation.events.app.external.AbstractNavigationEvent; import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationAppInstanceChangedEvent; @@ -37,6 +38,7 @@ import org.silverpeas.mobile.client.common.event.ErrorEvent; import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.common.network.NetworkHelper; +import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO; import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; import org.silverpeas.mobile.shared.dto.navigation.Apps; @@ -64,21 +66,21 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { if (event.getInstance().getType().equals(Apps.hyperlink.name())) { this.instance = event.getInstance(); - ServicesLocator.getServiceHyperLink().getUrl(instance.getId(), new TextCallback() { + ServicesLocator.getServiceHyperLink().getUrl(instance.getId(), new MethodCallback<HyperLinkDTO>() { @Override public void onFailure(final Method method, final Throwable t) { EventBus.getInstance().fireEvent(new ErrorEvent(t)); } @Override - public void onSuccess(final Method method, final String url) { - openLink(url); + public void onSuccess(Method method, HyperLinkDTO hyperLinkDTO) { + openLink(hyperLinkDTO); } }); } } - private void openLink(String url) { + private void openLink(HyperLinkDTO url) { Notification.activityStop(); NetworkHelper.hideOfflineIndicator(); LinksManager.processLink(url); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java index 098d63234..270482ac5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java @@ -35,6 +35,7 @@ import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.MyLinkDTO; +import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO; public class FavoriteItem extends Composite { @@ -68,7 +69,9 @@ public void setData(MyLinkDTO data) { @UiHandler("link") protected void onClick(ClickEvent event) { - LinksManager.processLink(data.getUrl()); + HyperLinkDTO link = new HyperLinkDTO(); + link.setUrl(data.getUrl()); + LinksManager.processLink(link); } -} +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.java index cc255de5f..2c5e6c61f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.java @@ -36,6 +36,7 @@ import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.ShortCutLinkDTO; +import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO; public class ShortCutItem extends Composite { @@ -71,11 +72,13 @@ public void setData(ShortCutLinkDTO data) { @UiHandler("link") protected void onClick(ClickEvent event) { - LinksManager.processLink(data.getUrl()); + HyperLinkDTO link = new HyperLinkDTO(); + link.setUrl(data.getUrl()); + LinksManager.processLink(link); } public void setCssId(String id) { this.getElement().setId(id); } -} +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java index 6de2ed037..9c8bcafcb 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java @@ -35,6 +35,7 @@ import org.silverpeas.mobile.client.components.IframePage; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.contact.ContactScope; +import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO; /** * @author svu @@ -43,7 +44,8 @@ public class LinksManager { private static Boolean iosShowIframe = Boolean.parseBoolean(ResourcesManager.getParam("ios.link.open.in.iframe")); - public static void processLink(String url) { + public static void processLink(HyperLinkDTO hyperLinkDTO) { + String url = hyperLinkDTO.getUrl(); if(sameContext(url)) { String shortcutContentType = ""; String shortcutAppId = null; @@ -91,15 +93,15 @@ public static void processLink(String url) { } EventBus.getInstance().fireEvent(new ContactsFilteredLoadEvent(type, filter)); } else { - openExternalLink(url); + openExternalLink(url, hyperLinkDTO.getOpenNewWindow(), hyperLinkDTO.getInternalLink()); return; } ShortCutRouter - .route(SpMobil.getUser(), shortcutAppId, shortcutContentType, shortcutContentId, null, null); + .route(SpMobil.getUser(), shortcutAppId, shortcutContentType, shortcutContentId, null, null); return; } - openExternalLink(url); + openExternalLink(url, hyperLinkDTO.getOpenNewWindow(), hyperLinkDTO.getInternalLink()); } private static boolean sameContext(String url) { @@ -113,19 +115,34 @@ private static boolean sameContext(String url) { return ((url.startsWith("/") || url.startsWith(context))); } - public static void openExternalLink(String url) { + public static void openExternalLink(String url, boolean openNewWindow, boolean internalLink) { if (MobilUtils.isIOS()) { if (iosShowIframe) { - IframePage page = new IframePage(url); - page.setPageTitle(""); - page.show(); + openIframePage(url); } else { - //Window.Location.assign(url); - Window.open(url, "_self", ""); + openExternalLinkStandard(url, openNewWindow, internalLink); } } else { - Window.open(url, "_blank", ""); + openExternalLinkStandard(url, openNewWindow, internalLink); + } + } + + private static void openIframePage(String url) { + IframePage page = new IframePage(url); + page.setPageTitle(""); + page.show(); + } + + private static void openExternalLinkStandard(String url, boolean openNewWindow, boolean internalLink) { + if (internalLink) { + openIframePage(url); + } else { + if (openNewWindow) { + Window.open(url, "_blank", ""); + } else { + Window.open(url, "_self", ""); + } } } -} +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/IframePage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/IframePage.java index 8acefe203..f27f1a095 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/IframePage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/IframePage.java @@ -55,6 +55,7 @@ private void init() { frame.getElement().getStyle().setTop(SpMobil.getMainPage().getHeaderHeight(), Style.Unit.PX); setViewport(); initWidget(frame); + setSize("100vw", "100vh"); EventBus.getInstance().addHandler(AbstractWindowEvent.TYPE, this); } @@ -115,4 +116,4 @@ public void onOrientationChange(final OrientationChangeEvent event) { } } -} +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceHyperLink.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceHyperLink.java index 416b167ae..186e7f6e5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceHyperLink.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceHyperLink.java @@ -29,6 +29,7 @@ import org.silverpeas.core.admin.service.Administration; import org.silverpeas.core.annotation.WebService; import org.silverpeas.core.web.rs.annotation.Authorized; +import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.GET; @@ -53,17 +54,21 @@ public class ServiceHyperLink extends AbstractRestWebService { static final String PATH = "mobile/hyperlink"; @GET - @Produces(MediaType.TEXT_PLAIN) + @Produces(MediaType.APPLICATION_JSON) @Path("/") - public String getUrl() { - String url = ""; + public HyperLinkDTO getUrl() { + HyperLinkDTO dto = new HyperLinkDTO(); try { ComponentInstLight app = Administration.get().getComponentInstLight(componentId); - url = app.getParameterValue("URL"); + dto.setUrl(app.getParameterValue("URL")); + String v = app.getParameterValue("openNewWindow"); + dto.setOpenNewWindow(v.equalsIgnoreCase("yes")); + v = app.getParameterValue("isInternalLink"); + dto.setInternalLink(v.equalsIgnoreCase("yes")); } catch (AdminException e) { throw new WebApplicationException(e); } - return url; + return dto; } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/hyperlink/HyperLinkDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/hyperlink/HyperLinkDTO.java index 1477b9232..7a928e6b2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/hyperlink/HyperLinkDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/hyperlink/HyperLinkDTO.java @@ -28,88 +28,36 @@ import java.io.Serializable; -public class HyperLinkDTO extends BaseDTO implements Serializable { +public class HyperLinkDTO implements Serializable { - private static final long serialVersionUID = 2921606984249560882L; - - private String title; - private String description; - private String categoryId; - private String categoryName; - private String creatorName; - private String dateEvent; - private String creationDate; - private String instanceId; + private String url; + private boolean openNewWindow; + private boolean internalLink; public HyperLinkDTO() { } - @Override - public boolean equals(Object obj) { - return ((HyperLinkDTO) obj).getId().equals(getId()); - } - - public String getTitle() { - return title; - } - - public void setTitle(final String title) { - this.title = title; - } - - public String getDescription() { - return description; - } - - public void setDescription(final String description) { - this.description = description; - } - - public void setCategoryId(final String categoryId) { - this.categoryId = categoryId; - } - - public void setCategoryName(final String categoryName) { - this.categoryName = categoryName; - } - - public String getCategoryId() { - return categoryId; - } - - public String getCategoryName() { - return categoryName; - } - - public void setCreatorName(final String creatorName) { - this.creatorName = creatorName; - } - - public String getCreatorName() { - return creatorName; - } - - public void setDateEvent(final String dateEvent) { - this.dateEvent = dateEvent; + public String getUrl() { + return url; } - public void setCreationDate(final String creationDate) { - this.creationDate = creationDate; + public void setUrl(String url) { + this.url = url; } - public String getDateEvent() { - return dateEvent; + public boolean getOpenNewWindow() { + return openNewWindow; } - public String getCreationDate() { - return creationDate; + public void setOpenNewWindow(boolean openNewWindow) { + this.openNewWindow = openNewWindow; } - public String getInstanceId() { - return instanceId; + public boolean getInternalLink() { + return internalLink; } - public void setInstanceId(final String instanceId) { - this.instanceId = instanceId; + public void setInternalLink(boolean internalLink) { + this.internalLink = internalLink; } -} +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceHyperLink.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceHyperLink.java index e08837d6d..1000c1ada 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceHyperLink.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceHyperLink.java @@ -24,8 +24,9 @@ package org.silverpeas.mobile.shared.services.rest; +import org.fusesource.restygwt.client.MethodCallback; import org.fusesource.restygwt.client.RestService; -import org.fusesource.restygwt.client.TextCallback; +import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO; import javax.ws.rs.GET; import javax.ws.rs.Path; @@ -39,5 +40,5 @@ public interface ServiceHyperLink extends RestService { @GET @Path("{appId}/") - public void getUrl(@PathParam("appId") String appId, TextCallback callback); + public void getUrl(@PathParam("appId") String appId, MethodCallback<HyperLinkDTO> callback); } From 1a96d21c8d8cbbb709ccbcf6cf39c1ef6695f147 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 3 Aug 2023 16:36:15 +0200 Subject: [PATCH 036/228] Feature #13677 --- .../org/silverpeas/mobile/mobileSettings.properties | 2 ++ .../mobile/server/services/ServiceNavigation.java | 7 +++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties index 645652fd9..b8d0277dc 100644 --- a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties +++ b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties @@ -34,6 +34,8 @@ spacehomepage.lastpublications=true # display last events or not on spaces home page spacehomepage.lastevents=true +spacehomepage.displayUrlType=true + # home page zones order homepage.zone.changeorder=false homepage.spaces.order=2 diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index 6e7accd5c..d3e08343a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -400,11 +400,10 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { } } else if (spaceId != null) { SpaceInst space = Administration.get().getSpaceInstById(spaceId); - if (space.getFirstPageType() == HomePages.URL.getValue()) { + if (space.getFirstPageType() == HomePages.URL.getValue() && + getSettings().getBoolean("spacehomepage.displayUrlType")) { String html = - "<iframe frameborder='0' onLoad='javaScript:this.height = this.contentWindow" + - ".document.body" + - ".scrollHeight ;' style='width:100%;' src='" + space.getFirstPageExtraParam() + + "<iframe frameborder='0' style='width:100vw;height:100vh' src='" + space.getFirstPageExtraParam() + "'></iframe>"; data.setHtmlFreeZone(html); } From 4888443fea8bd3bb517e77ba549ca43eaf00f418 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 6 Aug 2023 23:27:36 +0200 Subject: [PATCH 037/228] Update dependency on Silverpeas to version 6.4-JR-build230806 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5b484328f..ed5a3c638 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230802</silverpeas.version> + <silverpeas.version>6.4-JR-build230806</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 01416169f395095533515e3fd69110188be13640 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 13 Aug 2023 23:28:22 +0200 Subject: [PATCH 038/228] Update dependency on Silverpeas to version 6.4-JR-build230813 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ed5a3c638..4614cb070 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230806</silverpeas.version> + <silverpeas.version>6.4-JR-build230813</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 4d3ec9eb398a2ea935220ee314b616d6c5ef63af Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 16 Aug 2023 23:28:43 +0200 Subject: [PATCH 039/228] Update dependency on Silverpeas to version 6.4-JR-build230816 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4614cb070..015dd84e0 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230813</silverpeas.version> + <silverpeas.version>6.4-JR-build230816</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 2cac814824a716374e27fcbb5c2b1d9b2d173548 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Mon, 21 Aug 2023 12:35:47 +0200 Subject: [PATCH 040/228] Update dependency on Silverpeas to version 6.4-JR-build230821 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 015dd84e0..53e8d660d 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230816</silverpeas.version> + <silverpeas.version>6.4-JR-build230821</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From d813f82cf7aba17080e01661163656f8e9e4ff83 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 23 Aug 2023 23:28:37 +0200 Subject: [PATCH 041/228] Update dependency on Silverpeas to version 6.4-JR-build230823 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 53e8d660d..807a5bfad 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230821</silverpeas.version> + <silverpeas.version>6.4-JR-build230823</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From d413cdbe966065d20f58acddcef3f31188b43fab Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Mon, 28 Aug 2023 16:08:24 +0200 Subject: [PATCH 042/228] Update dependency on Silverpeas to version 6.4-JR-build230828 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 807a5bfad..432d9fbff 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230823</silverpeas.version> + <silverpeas.version>6.4-JR-build230828</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From cb45b3394fcc854f94d3c2cf13098a0f389d92ab Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 3 Sep 2023 23:28:57 +0200 Subject: [PATCH 043/228] Update dependency on Silverpeas to version 6.4-JR-build230903 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 432d9fbff..ed9d36f7d 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230828</silverpeas.version> + <silverpeas.version>6.4-JR-build230903</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From ab55868257d9e6e0a586dea3620665019cfa9ec3 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Thu, 7 Sep 2023 20:59:44 +0200 Subject: [PATCH 044/228] Update dependency on Silverpeas to version 6.4-JR-build230907 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ed9d36f7d..34a28a837 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230903</silverpeas.version> + <silverpeas.version>6.4-JR-build230907</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From ece21ac4a49eba9df694973205620a89f50732b9 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 10 Sep 2023 23:29:35 +0200 Subject: [PATCH 045/228] Update dependency on Silverpeas to version 6.4-JR-build230910 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 34a28a837..ca752f54f 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230907</silverpeas.version> + <silverpeas.version>6.4-JR-build230910</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 2acb054211c7b052b5c484a3c3289186c9838683 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 13 Sep 2023 23:29:16 +0200 Subject: [PATCH 046/228] Update dependency on Silverpeas to version 6.4-JR-build230913 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ca752f54f..a0360f91e 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230910</silverpeas.version> + <silverpeas.version>6.4-JR-build230913</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 985cebb23aaf9b1af8c167cb793242baca148727 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 14 Sep 2023 10:52:44 +0200 Subject: [PATCH 047/228] Add current spaceid in http session --- .../org/silverpeas/mobile/server/services/ServiceNavigation.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index d3e08343a..2bc0a3fef 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -235,6 +235,7 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { if (spaceId.equals("null")) spaceId = null; initSilverpeasSession(); + request.getSession().setAttribute("Silverpeas_Portlet_SpaceId", spaceId); String look = ""; try { From 2f91baf3a4400f619a3d38ec76386a00521ca73f Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 15 Sep 2023 15:20:17 +0200 Subject: [PATCH 048/228] Fix #13747 --- .../client/resources/ApplicationMessages.java | 2 +- .../resources/ApplicationMessages_en.properties | 2 +- .../resources/ApplicationMessages_fr.properties | 4 ++-- .../server/services/helpers/NewsHelper.java | 17 +++++++---------- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java index ad8912eb8..7dd15b073 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java @@ -45,7 +45,7 @@ public interface ApplicationMessages extends Messages { @DefaultMessage("Corriger") String correctBtnLabel(); - @DefaultMessage("© 2001-2020 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - Tous droits réservés") + @DefaultMessage("© 2001-2023 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - Tous droits réservés") SafeHtml copyright(); @DefaultMessage("Parcourir la plateforme") diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties index a767e209a..3948f3666 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties @@ -30,7 +30,7 @@ confirmBtnLabel=Confirm cancelBtnLabel=Cancel correctBtnLabel=Correct -copyright=© 2001-2016 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - All rights reserved +copyright=© 2001-2023 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - All rights reserved infoTitle=Information ok=OK diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties index f996678fa..2b050fc99 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties @@ -29,7 +29,7 @@ confirmBtnLabel=Confirmer cancelBtnLabel=Annuler correctBtnLabel=Corriger -copyright=© 2001-2016 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - Tous droits réservés +copyright=© 2001-2023 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - Tous droits réservés infoTitle=Information ok=OK @@ -85,4 +85,4 @@ hidePwd=Masquer le mot de passe received=Reçues sended=Envoyées -notfoundError=Ressource non trouv�e \ No newline at end of file +notfoundError=Ressource non trouv�e \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java index 988e1f1b6..8e2c2336c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java @@ -36,6 +36,7 @@ import org.silverpeas.core.admin.service.AdminException; import org.silverpeas.core.admin.service.Administration; import org.silverpeas.core.admin.service.OrganizationController; +import org.silverpeas.core.admin.user.model.UserDetail; import org.silverpeas.core.contribution.publication.model.PublicationDetail; import org.silverpeas.core.contribution.publication.service.PublicationService; import org.silverpeas.core.io.file.ImageResizingProcessor; @@ -55,12 +56,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.MissingResourceException; +import java.util.*; /** * @author: svu @@ -126,12 +122,13 @@ private boolean isVisibleNews(PublicationDetail news) { private List<News> getDelegatedNews(String userId) throws Exception { List<News> news = new ArrayList(); List<DelegatedNews> delegatedNews = DelegatedNewsServiceProvider.getDelegatedNewsService().getAllValidDelegatedNews(); - + UserDetail u = Administration.get().getUserDetail(userId); + Date now = new Date(); for (DelegatedNews delegated : delegatedNews) { - PublicationDetail pub = delegated.getPublicationDetail(); - if (pub.canBeAccessedBy(Administration.get().getUserDetail(userId))) { + if (delegated.isValidated() && (delegated.getBeginDate() != null && now.after(delegated.getBeginDate())) + && (delegated.getEndDate() != null && now.before(delegated.getEndDate()))) { News aNews = QuickInfoService.get().getNewsByForeignId(delegated.getPubId()); - news.add(aNews); + if (aNews.canBeAccessedBy(u)) news.add(aNews); } } From e28740a2e775b90ed6cbe4de4de5c05eb2eb3226 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 15 Sep 2023 16:57:25 +0200 Subject: [PATCH 049/228] Fix https://tracker.silverpeas.org/issues/13677#note-4 --- .../mobile/server/services/ServiceNavigation.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index 2bc0a3fef..904efb12f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -403,9 +403,11 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { SpaceInst space = Administration.get().getSpaceInstById(spaceId); if (space.getFirstPageType() == HomePages.URL.getValue() && getSettings().getBoolean("spacehomepage.displayUrlType")) { + String url = space.getFirstPageExtraParam(); + if (url.startsWith("/") && !url.startsWith("/silverpeas") && !url.startsWith("$")) url = "/silverpeas" + url; String html = - "<iframe frameborder='0' style='width:100vw;height:100vh' src='" + space.getFirstPageExtraParam() + - "'></iframe>"; + "<iframe frameborder='0' style='width:100vw;height:100vh' src='" + url + + "'></iframe>"; data.setHtmlFreeZone(html); } } From b6b84cb934458bd7e0c4127674d2e285fe0c0ccc Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 17 Sep 2023 23:29:51 +0200 Subject: [PATCH 050/228] Update dependency on Silverpeas to version 6.4-JR-build230917 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a0360f91e..7558de1e4 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230913</silverpeas.version> + <silverpeas.version>6.4-JR-build230917</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 7cb2dbcc13dce433e334be4ce91a63699c5b1bb6 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 18 Sep 2023 16:43:48 +0200 Subject: [PATCH 051/228] Feature #13677 : space permalink --- .../src/main/java/org/silverpeas/bridge/MobilFilter.java | 3 +++ .../src/main/java/org/silverpeas/mobile/client/SpMobil.java | 6 +++--- .../mobile/client/apps/navigation/NavigationApp.java | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java index dd9af6aeb..aaa6e9d54 100644 --- a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java +++ b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java @@ -177,6 +177,9 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) } else if (url.contains("Contribution")) { String contributionId = url.substring(url.lastIndexOf("/") + 1); params = "?shortcutContentType=Event&shortcutContributionId=" + contributionId; + } else if (url.contains("Space")) { + String spaceId = url.substring(url.lastIndexOf("/") + 1); + params = "?shortcutContentType=Space&shortcutAppId=" + spaceId; } else if (url.contains("Component")) { String appId = url.substring(url.lastIndexOf("/") + 1); params = "?shortcutContentType=Component&shortcutAppId=" + appId; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index 93283e058..fc8ba0d9e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -267,9 +267,9 @@ public static void displayMainPage() { PageHistory.getInstance().goTo(new HomePage()); if ((shortcutAppId != null && shortcutContentType != null && shortcutContentId != null) || - shortcutContributionId != null || - (shortcutContentType != null && shortcutContentType.equals("Component") && - shortcutAppId != null)) { + shortcutContributionId != null || + (shortcutContentType != null && (shortcutContentType.equals("Component") || shortcutContentType.equals("Space")) && + shortcutAppId != null)) { ShortCutRouter.route(user, shortcutAppId, shortcutContentType, shortcutContentId, shortcutContributionId, shortcutRole); } else { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java index 941fc22b5..d2a4fad8a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java @@ -102,7 +102,7 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { public void showContent(final NavigationShowContentEvent event) { if (event.getContent().getType().equals(ContentsTypes.Space.name())) { NavigationPage page = new NavigationPage(); - page.setRootSpaceId(event.getContent().getId()); + page.setRootSpaceId(event.getContent().getInstanceId()); page.show(); } } From c56bcb9b73b8029057d748d731681c5256c0293a Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 20 Sep 2023 19:01:47 +0200 Subject: [PATCH 052/228] Fix gallery permalink --- .../mobile/client/apps/media/MediaApp.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java index c9c280286..ff28dc6a2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java @@ -215,10 +215,28 @@ public void appInstanceChanged(NavigationAppInstanceChangedEvent event) { } } + private void loadAppInstance(final ContentDTO content) { + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<ApplicationInstanceDTO>() { + @Override + public void attempt() { + ServicesLocator.getServiceNavigation() + .getApp(content.getInstanceId(), content.getId(), content.getType(), this); + } + @Override + public void onSuccess(final Method method, + final ApplicationInstanceDTO app) { + super.onSuccess(method, app); + setApplicationInstance(app); + appInstanceChanged(new NavigationAppInstanceChangedEvent(app)); + } + }; + action.attempt(); + } + @Override public void showContent(final NavigationShowContentEvent event) { if (event.getContent().getType().equals("Component") && event.getContent().getInstanceId().startsWith(Apps.gallery.name())) { - super.showContent(event); + loadAppInstance(event.getContent()); } else if (event.getContent().getType().equals(ContentsTypes.Media.name()) || event.getContent().getType().equals(ContentsTypes.Photo.name()) || event.getContent().getType().equals(ContentsTypes.Sound.name()) || From d045c7fa535bb5bad40b0d957500d9e0f023a725 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 20 Sep 2023 23:29:22 +0200 Subject: [PATCH 053/228] Update dependency on Silverpeas to version 6.4-JR-build230920 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7558de1e4..49f541b57 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230917</silverpeas.version> + <silverpeas.version>6.4-JR-build230920</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 1a60b46700161e77d6f459e7a1e3dd77481a2249 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 21 Sep 2023 16:33:49 +0200 Subject: [PATCH 054/228] Fix permalink quickinfo app --- .../mobile/client/apps/news/NewsApp.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/NewsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/NewsApp.java index bdd87828a..5eafb3130 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/NewsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/NewsApp.java @@ -40,6 +40,7 @@ import org.silverpeas.mobile.client.common.ServicesLocator; import org.silverpeas.mobile.client.common.app.App; import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly; +import org.silverpeas.mobile.shared.dto.ContentDTO; import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; import org.silverpeas.mobile.shared.dto.navigation.Apps; import org.silverpeas.mobile.shared.dto.news.NewsDTO; @@ -99,6 +100,25 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { } } + private void loadAppInstance(final ContentDTO content) { + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<ApplicationInstanceDTO>() { + + @Override + public void attempt() { + ServicesLocator.getServiceNavigation() + .getApp(content.getInstanceId(), content.getId(), content.getType(), this); + } + + @Override + public void onSuccess(final Method method, + final ApplicationInstanceDTO app) { + super.onSuccess(method, app); + setApplicationInstance(app); + appInstanceChanged(new NavigationAppInstanceChangedEvent(app)); + } + }; + action.attempt(); + } @Override public void showContent(final NavigationShowContentEvent event) { From a587fa2f3a6b3b32d52b2878a15fe6be0ec18529 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 21 Sep 2023 17:39:04 +0200 Subject: [PATCH 055/228] Fix permalink on topic --- .../src/main/java/org/silverpeas/bridge/MobilFilter.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java index aaa6e9d54..9698ac45a 100644 --- a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java +++ b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java @@ -116,6 +116,11 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) String appId = pub.getInstanceId(); params = "?shortcutContentType=Publication&shortcutContentId=" + id + "&shortcutAppId=" + appId; + } else if (url.contains("/Topic/")) { + // sample : /silverpeas/Topic/6278?ComponentId=kmelia2431 + String id = url.substring(url.lastIndexOf("/")+1); + String appId = ((HttpServletRequest) req).getParameter("ComponentId"); + params = "?shortcutContentType=Folder&shortcutContentId=" + id + "&shortcutAppId=" + appId; } else if (url.contains("Form")) { // sample : /silverpeas/Form/1?ComponentId=formsOnline1 String id = url.substring(url.lastIndexOf("/") + 1); From 00cbb19dc87a0102b6fe254c5ad3950a80aef1b3 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 22 Sep 2023 18:47:25 +0200 Subject: [PATCH 056/228] Fix loop on relogin --- .../main/java/org/silverpeas/mobile/client/SpMobil.java | 5 ++++- mobile-war/src/main/webapp/spmobile/spmobil.jsp | 9 ++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index fc8ba0d9e..86cc0f5ff 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -77,6 +77,7 @@ import org.silverpeas.mobile.client.common.navigation.PageHistory; import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly; import org.silverpeas.mobile.client.common.network.NetworkHelper; +import org.silverpeas.mobile.client.common.resources.ResourcesManager; import org.silverpeas.mobile.client.common.storage.CacheStorageHelper; import org.silverpeas.mobile.client.common.storage.LocalStorageHelper; import org.silverpeas.mobile.client.components.base.Page; @@ -177,6 +178,8 @@ public void onModuleLoad() { EventBus.getInstance().addHandler(ExceptionEvent.TYPE, new ErrorManager()); EventBus.getInstance().addHandler(AbstractAuthenticationErrorEvent.TYPE, this); + SSO = !ResourcesManager.getSSOPath().isEmpty(); + loadIds(null); NodeList<Element> tags = Document.get().getElementsByTagName("meta"); @@ -370,7 +373,6 @@ public void onFailure(final Method method, final Throwable t) { tryToRelogin(attempt); } }; - SSO = true; action.attempt(); } else { //Login @@ -446,6 +448,7 @@ public static void displayLoginPage(AuthenticationException error) { ConnexionPage connexionPage = new ConnexionPage(); connexionPage.setAuthenticateError(error); RootPanel.get().clear(); + PageHistory.getInstance().clear(); RootPanel.get().add(connexionPage); } diff --git a/mobile-war/src/main/webapp/spmobile/spmobil.jsp b/mobile-war/src/main/webapp/spmobile/spmobil.jsp index 4ef5e0867..0fd2140b2 100644 --- a/mobile-war/src/main/webapp/spmobile/spmobil.jsp +++ b/mobile-war/src/main/webapp/spmobile/spmobil.jsp @@ -157,9 +157,12 @@ </head> <body class="ui-panel-wrapper ui-page-theme-a csspinner traditional" onload="resize();"> <% - String fullSsoPath = request.getRequestURL().toString(); - fullSsoPath = fullSsoPath.replace("/spmobile/spmobil.jsp",""); - fullSsoPath = fullSsoPath + ssoPath; + String fullSsoPath = ""; + if (!ssoPath.trim().isEmpty()) { + fullSsoPath = request.getRequestURL().toString(); + fullSsoPath = fullSsoPath.replace("/spmobile/spmobil.jsp", ""); + fullSsoPath = fullSsoPath + ssoPath; + } %> <input type="hidden" id="ssoPath" value="<%=fullSsoPath%>"> <div id="oneinch" From ac2f73153fae5b34753378bf919490a8d9609e05 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 24 Sep 2023 23:30:44 +0200 Subject: [PATCH 057/228] Update dependency on Silverpeas to version 6.4-JR-build230924 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 49f541b57..2371c468b 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230920</silverpeas.version> + <silverpeas.version>6.4-JR-build230924</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 404c25575508a6a9a4dbe32b700c5cc960afac5e Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 1 Oct 2023 23:29:08 +0200 Subject: [PATCH 058/228] Update dependency on Silverpeas to version 6.4-JR-build231001 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2371c468b..c68fb8eac 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build230924</silverpeas.version> + <silverpeas.version>6.4-JR-build231001</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 7189e60e49499c6e82489e2c2202fbd53d5235e3 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Tue, 3 Oct 2023 15:58:09 +0200 Subject: [PATCH 059/228] Update dependency on Silverpeas to version 6.4-JR-build231003 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c68fb8eac..4e68dc5d9 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231001</silverpeas.version> + <silverpeas.version>6.4-JR-build231003</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From f1c3bcad97e2d20afd03eb4f9e1540c2623e6560 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 4 Oct 2023 20:34:24 +0200 Subject: [PATCH 060/228] Allow external access for specific jsp --- .../org/silverpeas/bridge/MobilFilter.java | 3 ++ .../org/silverpeas/mobile/client/SpMobil.java | 3 ++ .../common/navigation/LinksManager.java | 2 +- .../services/AbstractRestWebService.java | 32 +++++++++++++++++++ .../server/services/ServiceConnection.java | 2 ++ .../server/services/ServiceNavigation.java | 30 +---------------- 6 files changed, 42 insertions(+), 30 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java index 9698ac45a..b6a36f871 100644 --- a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java +++ b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java @@ -188,6 +188,9 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) } else if (url.contains("Component")) { String appId = url.substring(url.lastIndexOf("/") + 1); params = "?shortcutContentType=Component&shortcutAppId=" + appId; + } else if (url.contains("/needSession")) { + String appId = url.replaceAll("/needSession",""); + params = "?shortcutContentType=Url&shortcutAppId=" + appId; } else if (!url.contains("AuthenticationServlet") && (url.endsWith("silverpeas") || url.endsWith("silverpeas/") || url.contains("/silverpeas/"))) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index 86cc0f5ff..2576e504e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -74,6 +74,7 @@ import org.silverpeas.mobile.client.common.event.authentication.AuthenticationEventHandler; import org.silverpeas.mobile.client.common.mobil.MobilUtils; import org.silverpeas.mobile.client.common.mobil.Orientation; +import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.common.navigation.PageHistory; import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly; import org.silverpeas.mobile.client.common.network.NetworkHelper; @@ -275,6 +276,8 @@ public static void displayMainPage() { shortcutAppId != null)) { ShortCutRouter.route(user, shortcutAppId, shortcutContentType, shortcutContentId, shortcutContributionId, shortcutRole); + } else if (shortcutContentType != null && shortcutContentType.equalsIgnoreCase("Url") && shortcutAppId != null) { + LinksManager.openIframePage(shortcutAppId); } else { MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<HomePageDTO>() { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java index 9c8bcafcb..9bb409b64 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java @@ -127,7 +127,7 @@ public static void openExternalLink(String url, boolean openNewWindow, boolean i } } - private static void openIframePage(String url) { + public static void openIframePage(String url) { IframePage page = new IframePage(url); page.setPageTitle(""); page.show(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java index 0c3940eb8..fb02aa517 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java @@ -4,10 +4,15 @@ import org.silverpeas.core.security.authentication.AuthenticationCredential; import org.silverpeas.core.security.authentication.AuthenticationService; import org.silverpeas.core.security.authentication.AuthenticationServiceProvider; +import org.silverpeas.core.security.session.SessionInfo; +import org.silverpeas.core.security.session.SessionManagement; +import org.silverpeas.core.security.session.SessionManagementProvider; import org.silverpeas.core.util.ResourceLocator; import org.silverpeas.core.util.SettingBundle; +import org.silverpeas.core.util.logging.SilverLogger; import org.silverpeas.core.web.mvc.controller.MainSessionController; import org.silverpeas.core.web.rs.RESTWebService; +import org.silverpeas.core.web.util.viewgenerator.html.GraphicElementFactory; import org.silverpeas.mobile.server.common.CommandCreateList; import org.silverpeas.mobile.shared.StreamingList; import org.silverpeas.mobile.shared.dto.BaseDTO; @@ -43,6 +48,33 @@ protected void setMainsessioncontroller(String login, String password, String do new MainSessionController(key, getHttpRequest().getSession()); } + protected void initSilverpeasSession(HttpServletRequest request) { + MainSessionController controller = (MainSessionController) request.getSession() + .getAttribute(MainSessionController.MAIN_SESSION_CONTROLLER_ATT); + if (controller == null) { + SessionManagement sessionManagement = SessionManagementProvider.getSessionManagement(); + SessionInfo sessionInfo = sessionManagement.validateSession(request.getSession().getId()); + if (sessionInfo.getSessionId() == null) { + sessionInfo = sessionManagement.openSession(getUser(), request); + } + + try { + controller = new MainSessionController(sessionInfo, request.getSession()); + } catch (SilverpeasException e) { + SilverLogger.getLogger(this).error(e); + } + request.getSession() + .setAttribute(MainSessionController.MAIN_SESSION_CONTROLLER_ATT, controller); + } + + GraphicElementFactory gef = (GraphicElementFactory) request.getSession() + .getAttribute(GraphicElementFactory.GE_FACTORY_SESSION_ATT); + if (gef == null && controller != null) { + gef = new GraphicElementFactory(controller); + request.getSession().setAttribute(GraphicElementFactory.GE_FACTORY_SESSION_ATT, gef); + } + } + protected StreamingList createStreamingList(CommandCreateList command, int callNumber, int callSize, String cacheKey) throws Exception { List list; if (callNumber == 0) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceConnection.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceConnection.java index 4f03332f3..cfef071d9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceConnection.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceConnection.java @@ -137,6 +137,8 @@ public DetailUserDTO login(List<String> ids) { throw new WebApplicationException(AuthenticationError.CanCreateMainSessionController.name()); } + initSilverpeasSession(request); + DetailUserDTO userDTO = new DetailUserDTO(); userDTO = UserHelper.getInstance().populate(user); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index 904efb12f..fea109d7b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -192,34 +192,6 @@ private DetailUserDTO initSession(DetailUserDTO user) { return null; } } - - private void initSilverpeasSession() { - MainSessionController controller = (MainSessionController) request.getSession() - .getAttribute(MainSessionController.MAIN_SESSION_CONTROLLER_ATT); - if (controller == null) { - SessionManagement sessionManagement = SessionManagementProvider.getSessionManagement(); - SessionInfo sessionInfo = sessionManagement.validateSession(request.getSession().getId()); - if (sessionInfo.getSessionId() == null) { - sessionInfo = sessionManagement.openSession(getUser(), request); - } - - try { - controller = new MainSessionController(sessionInfo, request.getSession()); - } catch (SilverpeasException e) { - SilverLogger.getLogger(this).error(e); - } - request.getSession() - .setAttribute(MainSessionController.MAIN_SESSION_CONTROLLER_ATT, controller); - } - - GraphicElementFactory gef = (GraphicElementFactory) request.getSession() - .getAttribute(GraphicElementFactory.GE_FACTORY_SESSION_ATT); - if (gef == null && controller != null) { - gef = new GraphicElementFactory(controller); - request.getSession().setAttribute(GraphicElementFactory.GE_FACTORY_SESSION_ATT, gef); - } - } - protected void setUserInSession(UserDetail user) { request.getSession().setAttribute(AbstractAuthenticateService.USER_ATTRIBUT_NAME, user); } @@ -234,7 +206,7 @@ protected UserDetail getUserInSession() { public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { if (spaceId.equals("null")) spaceId = null; - initSilverpeasSession(); + initSilverpeasSession(request); request.getSession().setAttribute("Silverpeas_Portlet_SpaceId", spaceId); String look = ""; From a850f4c676fb7c6af4af1c979cb5f286c18abfb3 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 8 Oct 2023 23:31:28 +0200 Subject: [PATCH 061/228] Update dependency on Silverpeas to version 6.4-JR-build231008 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4e68dc5d9..b48048300 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231003</silverpeas.version> + <silverpeas.version>6.4-JR-build231008</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 8863b41833ad3a38937b659ebf6b4c8890881bac Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 11 Oct 2023 23:30:59 +0200 Subject: [PATCH 062/228] Update dependency on Silverpeas to version 6.4-JR-build231011 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b48048300..31c6832fe 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231008</silverpeas.version> + <silverpeas.version>6.4-JR-build231011</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From aa0b5915bfc11700bdde6e644f976d43262aa172 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 13 Oct 2023 12:05:01 +0200 Subject: [PATCH 063/228] Add technicals elements for speech and speak features --- .../mobile/client/common/Html5Utils.java | 102 ++++++++++++++++++ .../mobile/client/common/Voice.java | 16 +++ .../event/speech/AbstractSpeechEvent.java | 40 +++++++ .../common/event/speech/SpeechErrorEvent.java | 38 +++++++ .../event/speech/SpeechEventHandler.java | 38 +++++++ .../event/speech/SpeechResultEvent.java | 44 ++++++++ .../common/event/speech/SpeechStartEvent.java | 38 +++++++ .../common/event/speech/SpeechStopEvent.java | 38 +++++++ 8 files changed, 354 insertions(+) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/common/Voice.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/AbstractSpeechEvent.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechErrorEvent.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechEventHandler.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechResultEvent.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStartEvent.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStopEvent.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java index a72e17c59..8231e7a0d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java @@ -24,7 +24,13 @@ package org.silverpeas.mobile.client.common; +import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Element; +import com.google.gwt.user.client.Window; +import org.silverpeas.mobile.client.common.event.speech.SpeechErrorEvent; +import org.silverpeas.mobile.client.common.event.speech.SpeechResultEvent; +import org.silverpeas.mobile.client.common.event.speech.SpeechStartEvent; +import org.silverpeas.mobile.client.common.event.speech.SpeechStopEvent; /** * @author: svu @@ -65,4 +71,100 @@ public static void vibrate() { public static native void vibrate(int duration) /*-{ $wnd.navigator.vibrate(duration); }-*/; + public static native boolean isSpeechSupported() /*-{ + return ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window); + }-*/; + + public static native boolean isSpeechSynthesisSupported() /*-{ + return ('speechSynthesis' in window); + }-*/; + + public static native void startListening() /*-{ + window.recognition.start(); + }-*/; + + public static native void stopListening() /*-{ + window.recognition.stop(); + }-*/; + + public static native boolean initSpeech(boolean continuous, String language) /*-{ + window.recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)(); + recognition.lang = language; + recognition.continuous = continuous; + + recognition.onresult = function (event) { + // Récupère le texte reconnu + var text = event.results[0][0].transcript; + @org.silverpeas.mobile.client.common.Html5Utils::onSpeechResult(Ljava/lang/String;)(text); + } + + recognition.onstart = function () { + // envoie d'un evenement sur le bus pour mise à jour GUI selon le contexte + @org.silverpeas.mobile.client.common.Html5Utils::onSpeechStart(*)(); + }; + + // Événement déclenché lorsqu'une reconnaissance vocale s'arrête + recognition.onend = function () { + // envoie d'un evenement sur le bus pour mise à jour GUI selon le contexte + @org.silverpeas.mobile.client.common.Html5Utils::onSpeechStop(*)(); + }; + + recognition.onerror = function(event) { + @org.silverpeas.mobile.client.common.Html5Utils::onSpeechError(*)(); + }; + + }-*/; + public static native JsArray<Voice> getVoices() /*-{ + return window.speechSynthesis.getVoices(); + }-*/; + + public static native void speak(String text) /*-{ + var msg = new SpeechSynthesisUtterance(); + msg.text = text; + speechSynthesis.speak(msg); + }-*/; + + public static native void cancelSpeaking() /*-{ + speechSynthesis.cancel(); + }-*/; + public static native void speak(String text, double volume, double rate, double pitch, String language) /*-{ + var msg = new SpeechSynthesisUtterance(); + msg.volume = volume; // From 0 to 1 + msg.rate = rate; // From 0.1 to 10 + msg.pitch = pitch; // From 0 to 2 + msg.text = text; + msg.lang = language; + speechSynthesis.speak(msg); + }-*/; + + public static native void speak(String text, double volume, double rate, double pitch, String language, String desiredVoice) /*-{ + var msg = new SpeechSynthesisUtterance(); + for (var i = 0; i < speechSynthesis.getVoices().length; i++) { + if (speechSynthesis.getVoices()[i].name === desiredVoice) { + msg.voice = speechSynthesis.getVoices()[i]; + } + } + msg.volume = volume; // From 0 to 1 + msg.rate = rate; // From 0.1 to 10 + msg.pitch = pitch; // From 0 to 2 + msg.text = text; + msg.lang = language; + speechSynthesis.speak(msg); + }-*/; + + public static void onSpeechResult(String result) { + EventBus.getInstance().fireEvent(new SpeechResultEvent(result)); + } + + public static void onSpeechStart() { + EventBus.getInstance().fireEvent(new SpeechStartEvent()); + } + + public static void onSpeechStop() { + EventBus.getInstance().fireEvent(new SpeechStopEvent()); + } + + public static void onSpeechError() { + EventBus.getInstance().fireEvent(new SpeechErrorEvent()); + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Voice.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Voice.java new file mode 100644 index 000000000..1801ea684 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Voice.java @@ -0,0 +1,16 @@ +package org.silverpeas.mobile.client.common; + +import com.google.gwt.core.client.JavaScriptObject; + +public class Voice extends JavaScriptObject { + protected Voice() { + } + + public final native String getLang() /*-{ return this.lang; }-*/; + public final native String getName() /*-{ return this.name; }-*/; + public final native String getvoiceURI() /*-{ return this.voiceURI; }-*/; + + + public final native boolean getLocalService() /*-{ return this.localService; }-*/; + +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/AbstractSpeechEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/AbstractSpeechEvent.java new file mode 100644 index 000000000..fc2d30483 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/AbstractSpeechEvent.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.common.event.speech; + +import com.google.gwt.event.shared.GwtEvent; + +public abstract class AbstractSpeechEvent extends GwtEvent<SpeechEventHandler>{ + + public static Type<SpeechEventHandler> TYPE = new Type<SpeechEventHandler>(); + + public AbstractSpeechEvent(){ + } + + @Override + public Type<SpeechEventHandler> getAssociatedType() { + return TYPE; + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechErrorEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechErrorEvent.java new file mode 100644 index 000000000..283125702 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechErrorEvent.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.common.event.speech; + +public class SpeechErrorEvent extends AbstractSpeechEvent { + + + public SpeechErrorEvent(){ + super(); + } + + @Override + protected void dispatch(SpeechEventHandler handler) { + handler.onSpeechError(this); + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechEventHandler.java new file mode 100644 index 000000000..4b685dc10 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechEventHandler.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.common.event.speech; + +import com.google.gwt.event.shared.EventHandler; + +public interface SpeechEventHandler extends EventHandler { + + void onSpeechResult(SpeechResultEvent event); + + void onSpeechStart(SpeechStartEvent event); + + void onSpeechStop(SpeechStopEvent event); + + void onSpeechError(SpeechErrorEvent event); +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechResultEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechResultEvent.java new file mode 100644 index 000000000..638d3199d --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechResultEvent.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.common.event.speech; + +public class SpeechResultEvent extends AbstractSpeechEvent { + + private String result; + + public SpeechResultEvent(String result){ + super(); + this.result = result; + } + + @Override + protected void dispatch(SpeechEventHandler handler) { + handler.onSpeechResult(this); + } + + public String getResult() { + return result; + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStartEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStartEvent.java new file mode 100644 index 000000000..4ead47a59 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStartEvent.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.common.event.speech; + +public class SpeechStartEvent extends AbstractSpeechEvent { + + + public SpeechStartEvent(){ + super(); + } + + @Override + protected void dispatch(SpeechEventHandler handler) { + handler.onSpeechStart(this); + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStopEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStopEvent.java new file mode 100644 index 000000000..9c0bcb27c --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/event/speech/SpeechStopEvent.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.common.event.speech; + +public class SpeechStopEvent extends AbstractSpeechEvent { + + + public SpeechStopEvent(){ + super(); + } + + @Override + protected void dispatch(SpeechEventHandler handler) { + handler.onSpeechStop(this); + } +} From 567a78ed5bb34fe2c00b9372f9f2f984d45cc440 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 15 Oct 2023 23:29:22 +0200 Subject: [PATCH 064/228] Update dependency on Silverpeas to version 6.4-JR-build231015 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 31c6832fe..639a15704 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231011</silverpeas.version> + <silverpeas.version>6.4-JR-build231015</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 7fae2a930e8a40ea4d7ee12ccd64b4f47d1f941a Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 18 Oct 2023 23:31:02 +0200 Subject: [PATCH 065/228] Update dependency on Silverpeas to version 6.4-JR-build231018 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 639a15704..2e9c798e8 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231015</silverpeas.version> + <silverpeas.version>6.4-JR-build231018</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 26ace7ed611001a6e2e7378ddc68a17e72e2ae91 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 22 Oct 2023 23:28:52 +0200 Subject: [PATCH 066/228] Update dependency on Silverpeas to version 6.4-JR-build231022 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2e9c798e8..696ac06ca 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231018</silverpeas.version> + <silverpeas.version>6.4-JR-build231022</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 2c600857863656f3f4082a5306ecc4e5dd768314 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 25 Oct 2023 23:29:23 +0200 Subject: [PATCH 067/228] Update dependency on Silverpeas to version 6.4-JR-build231025 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 696ac06ca..b9f91bc17 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231022</silverpeas.version> + <silverpeas.version>6.4-JR-build231025</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From e91679e56342d1ad6dd196bb77967ba517c79085 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 26 Oct 2023 15:50:07 +0200 Subject: [PATCH 068/228] Feature #13824 --- .../apps/documents/pages/PublicationPage.java | 10 +++ .../components/attachments/Attachment.java | 89 ++++++++++++------- .../server/services/ServiceDocuments.java | 13 +++ .../shared/dto/documents/PublicationDTO.java | 9 ++ .../dto/documents/SimpleDocumentDTO.java | 9 ++ 5 files changed, 99 insertions(+), 31 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index c7d0264a8..f0052c2a5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -157,6 +157,16 @@ public void onLoadedPublication(PublicationLoadedEvent event) { @Override public void onLoadedPublicationAttachments(final PublicationAttachmentsLoadedEvent event) { for (SimpleDocumentDTO attachment : event.getAttachments()) { + if (!publication.getNotAllowedDownloads().isEmpty()) { + attachment.setDownloadable(true); + for (String idNotAllowed : publication.getNotAllowedDownloads()) { + if (idNotAllowed.equals(attachment.getId())) { + attachment.setDownloadable(false); + } + } + } else { + attachment.setDownloadable(true); + } Attachment a = new Attachment(); a.setAttachment(attachment); a.setSharing(event.getShare()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java index 5a20f1bd1..b7bb7612b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java @@ -49,6 +49,7 @@ import org.silverpeas.mobile.client.common.navigation.UrlUtils; import org.silverpeas.mobile.client.common.network.NetworkHelper; import org.silverpeas.mobile.client.common.storage.CacheStorageHelper; +import org.silverpeas.mobile.client.components.IframePage; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.documents.SimpleDocumentDTO; import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; @@ -95,9 +96,9 @@ public void setAttachment(SimpleDocumentDTO data) { private void render() { Image img = null; String sizeValue; - /*if (!data..isDownloadAllowed()) { - link.setStylePrimaryName("not-downloadable"); - }*/ + if (!data.isDownloadable()) { + link.setStylePrimaryName("not-downloadable"); + } if (data.getSize() < 1024 * 1024) { sizeValue = String.valueOf(data.getSize() / 1024); size.setInnerHTML(msg.sizeK(sizeValue)); @@ -135,45 +136,71 @@ private void render() { // link generation try { String url = UrlUtils.getAttachedFileLocation(); - url += "componentId/"; - url += data.getInstanceId(); - url += "/attachmentId/"; - url += data.getId(); - url += "/lang/"; - url += data.getLang(); - url += "/name/"; - url += data.getFileName(); - + if (data.isDownloadable()) { + url += "componentId/"; + url += data.getInstanceId(); + url += "/attachmentId/"; + url += data.getId(); + url += "/lang/"; + url += data.getLang(); + url += "/name/"; + url += data.getFileName(); + } else { + url = "#"; + } link.setHref(url); if (MobilUtils.isIOS()) { - //link.setTarget("_blank"); - link.addClickHandler(new ClickHandler() { - @Override - public void onClick(final ClickEvent clickEvent) { - String u = ((Anchor) clickEvent.getSource()).getHref(); - if (NetworkHelper.isOnline()) { - CacheStorageHelper.store(u); + if (data.isDownloadable()) { + link.addClickHandler(new ClickHandler() { + @Override + public void onClick(final ClickEvent clickEvent) { + String u = ((Anchor) clickEvent.getSource()).getHref(); + if (NetworkHelper.isOnline()) { + CacheStorageHelper.store(u); + } + Window.open(u, "_blank", "fullscreen=yes"); + } + }); + } else { + link.addClickHandler(new ClickHandler() { + @Override + public void onClick(final ClickEvent clickEvent) { + viewDocument(); } - Window.open(u, "_blank", "fullscreen=yes"); - } - }); + }); + } } else { - link.setTarget("_self"); - link.getElement().setAttribute("download", data.getFileName()); - link.addClickHandler(new ClickHandler() { - @Override - public void onClick(final ClickEvent clickEvent) { - if (NetworkHelper.isOnline()) { - CacheStorageHelper.store(((Anchor) clickEvent.getSource()).getHref()); + if (data.isDownloadable()) { + link.setTarget("_self"); + link.getElement().setAttribute("download", data.getFileName()); + link.addClickHandler(new ClickHandler() { + @Override + public void onClick(final ClickEvent clickEvent) { + if (NetworkHelper.isOnline()) { + CacheStorageHelper.store(((Anchor) clickEvent.getSource()).getHref()); + } } - } - }); + }); + } else { + link.addClickHandler(new ClickHandler() { + @Override + public void onClick(final ClickEvent clickEvent) { + viewDocument(); + } + }); + } } } catch (JavaScriptException e) { Notification.alert(e.getMessage()); } } + + private void viewDocument() { + IframePage page = new IframePage("/silverpeas/services/media/viewer/embed/pdf?documentId="+data.getId()+"&documentType=attachment&language="+data.getLang()+"&embedPlayer=true"); + page.show(); + } + @UiHandler("share") protected void share(ClickEvent event) { SharingPage page = new SharingPage(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java index c06419e86..2b4092ce9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java @@ -41,6 +41,7 @@ import org.silverpeas.core.contribution.attachment.AttachmentServiceProvider; import org.silverpeas.core.contribution.attachment.model.SimpleDocument; import org.silverpeas.core.contribution.attachment.model.SimpleDocumentPK; +import org.silverpeas.core.contribution.attachment.util.SimpleDocumentList; import org.silverpeas.core.contribution.publication.model.CompletePublication; import org.silverpeas.core.contribution.publication.model.PublicationDetail; import org.silverpeas.core.contribution.publication.model.PublicationLink; @@ -444,6 +445,18 @@ public PublicationDTO getPublication(@PathParam("id") String id, } catch (Exception e) { SilverLogger.getLogger(this).warn("Unable to get views number", e); } + + // List all attachements not downloadable for readers + ResourceReference foreignKey = new ResourceReference(id, componentId); + SimpleDocumentList<SimpleDocument> attachements = AttachmentServiceProvider.getAttachmentService().listAllDocumentsByForeignKey(foreignKey, null); + ArrayList<String> notAllowedDownloads = new ArrayList<>(); + for (SimpleDocument attachement : attachements) { + if (!attachement.isDownloadAllowedForReaders() && !attachement.canBeModifiedBy(getUser())) { + notAllowedDownloads.add(attachement.getId()); + } + } + dto.setNotAllowedDownloads(notAllowedDownloads); + } else if (type.equals(ContentsTypes.News.toString())) { dto.setViewsNumber(QuickInfoService.get().getNews(contributionId).getNbAccess()); } else { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java index 7592f3829..4c223c998 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java @@ -47,6 +47,8 @@ public class PublicationDTO extends BaseDTO implements Serializable, Comparable< private String vignette; private int viewsNumber; + private List<String> notAllowedDownloads; + public String getName() { return name; } @@ -136,4 +138,11 @@ public void setCreationDate(final String creationDate) { public int getViewsNumber() { return viewsNumber; } public void setViewsNumber(final int viewsNumber) { this.viewsNumber = viewsNumber; } + + public void setNotAllowedDownloads(List<String> notAllowedDownloads) { + this.notAllowedDownloads = notAllowedDownloads; + } + public List<String> getNotAllowedDownloads() { + return notAllowedDownloads; + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/SimpleDocumentDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/SimpleDocumentDTO.java index cd2effcef..577524227 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/SimpleDocumentDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/SimpleDocumentDTO.java @@ -50,6 +50,8 @@ public class SimpleDocumentDTO implements Serializable { private String spId; + private boolean downloadable; + public String getId() { return id; @@ -194,4 +196,11 @@ public String getSpId() { public void setSpId(String spId) { this.spId = spId; } + + public void setDownloadable(boolean downloadable) { + this.downloadable = downloadable; + } + public boolean isDownloadable() { + return this.downloadable; + } } From 0d37d1ab5e768c419ec7c442d20bd241f8cc9673 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Mon, 30 Oct 2023 20:44:08 +0100 Subject: [PATCH 069/228] Update dependency on Silverpeas to version 6.4-JR-build231030 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b9f91bc17..db3155da7 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231025</silverpeas.version> + <silverpeas.version>6.4-JR-build231030</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 75a4c4e38a2a2116f558dc3f9445f6e3ec6e71f5 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 31 Oct 2023 16:03:46 +0100 Subject: [PATCH 070/228] Fix Feature #13824 --- mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java index b6a36f871..28e25b71e 100644 --- a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java +++ b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java @@ -97,6 +97,7 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) final boolean isMobile = Boolean.TRUE.equals(mobileAlreadyDetected) || userAgent.contains("Android") || userAgent.contains("iPhone"); + session.setAttribute("isMobile", isMobile); final boolean tablet = session.getAttribute("tablet", Boolean.class, false); @@ -105,6 +106,7 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) if (isMobile && !url.contains("sso") && !url.contains("services") && !url.contains("spmobile") && !url.contains(URLUtil.getApplicationURL() + "/chat/") && + !url.contains(URLUtil.getApplicationURL() + "/media/") && !url.contains(URLUtil.getApplicationURL() + "/visio/") && !url.contains(URLUtil.getApplicationURL() + "/util/") && (!tablet) && !url.contains("attached_file") && !url.contains("Ticket") && From 70e93a98d3c2ccc1d976aa39a3dab4c9ad65932f Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 1 Nov 2023 23:28:36 +0100 Subject: [PATCH 071/228] Update dependency on Silverpeas to version 6.4-JR-build231101 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index db3155da7..c6cb39cfa 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231030</silverpeas.version> + <silverpeas.version>6.4-JR-build231101</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 9b970de005dad3e4e65fde9a94873225cf497858 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 3 Nov 2023 17:37:39 +0100 Subject: [PATCH 072/228] Feature #13833 --- .../client/apps/documents/DocumentsApp.java | 22 ++++++ .../events/app/DocumentsAppEventHandler.java | 2 + .../app/DocumentsNextPublicationEvent.java | 50 +++++++++++++ .../apps/documents/pages/PublicationPage.java | 36 +++++++-- .../documents/pages/PublicationPage.ui.xml | 31 ++++---- .../server/services/ServiceDocuments.java | 73 ++++++++++++++++++- .../services/rest/ServiceDocuments.java | 7 ++ 7 files changed, 197 insertions(+), 24 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsNextPublicationEvent.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java index e966ee403..07bd6efe4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java @@ -47,6 +47,7 @@ import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.ServicesLocator; import org.silverpeas.mobile.client.common.app.App; +import org.silverpeas.mobile.client.common.event.ErrorEvent; import org.silverpeas.mobile.client.common.mobil.MobilUtils; import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly; import org.silverpeas.mobile.client.components.IframePage; @@ -310,4 +311,25 @@ public void onSuccess(Method method, TicketDTO dto) { }; action.attempt(); } + + @Override + public void nextPublication(DocumentsNextPublicationEvent event) { + ServicesLocator.getServiceDocuments().getNextPublication(event.getPublication().getInstanceId(), event.getPublication().getId(), event.getDirection(), new MethodCallback<PublicationDTO>() { + @Override + public void onFailure(Method method, Throwable throwable) { + EventBus.getInstance().fireEvent(new ErrorEvent(throwable)); + } + + @Override + public void onSuccess(Method method, PublicationDTO publicationDTO) { + PublicationPage page = new PublicationPage(); + page.setPageTitle(msg.publicationTitle()); + page.show(); + ContentDTO content = new ContentDTO(); + content.setId(publicationDTO.getId()); + content.setType(ContentsTypes.Publication.toString()); + EventBus.getInstance().fireEvent(new DocumentsLoadPublicationEvent(content)); + } + }); + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java index 178516db9..7a7a7f67f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java @@ -31,4 +31,6 @@ public interface DocumentsAppEventHandler extends EventHandler { void loadPublication(DocumentsLoadPublicationEvent event); void loadAttachments(DocumentsLoadAttachmentsEvent event); void share(DocumentsSharingEvent event); + + void nextPublication(DocumentsNextPublicationEvent event); } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsNextPublicationEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsNextPublicationEvent.java new file mode 100644 index 000000000..82c4184e3 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsNextPublicationEvent.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.documents.events.app; + + +import org.silverpeas.mobile.shared.dto.documents.PublicationDTO; + +public class DocumentsNextPublicationEvent extends AbstractDocumentsAppEvent { + + private PublicationDTO publication; + private String direction; + + public DocumentsNextPublicationEvent(PublicationDTO publication, String direction) { + super(); + this.publication = publication; + this.direction = direction; + } + @Override + protected void dispatch(DocumentsAppEventHandler handler) { + handler.nextPublication(this); + } + public PublicationDTO getPublication() { + return publication; + } + public String getDirection() { + return direction; + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index f0052c2a5..5f4dadff8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -35,12 +35,11 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.HTMLPanel; -import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.user.client.ui.*; import org.silverpeas.mobile.client.apps.comments.pages.widgets.CommentsButton; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadAttachmentsEvent; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent; +import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsNextPublicationEvent; import org.silverpeas.mobile.client.apps.documents.events.pages.publication.AbstractPublicationPagesEvent; import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationAttachmentsLoadedEvent; import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationLoadedEvent; @@ -54,6 +53,10 @@ import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.PublicationContentHelper; import org.silverpeas.mobile.client.common.app.View; +import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent; +import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; +import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent; +import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer; import org.silverpeas.mobile.client.common.resources.ResourcesManager; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.attachments.Attachment; @@ -66,7 +69,7 @@ import org.silverpeas.mobile.shared.dto.notifications.NotificationDTO; public class PublicationPage extends PageContent - implements View, PublicationNavigationPagesEventHandler { + implements View, PublicationNavigationPagesEventHandler, SwipeEndHandler { private static PublicationPageUiBinder uiBinder = GWT.create(PublicationPageUiBinder.class); @@ -75,6 +78,8 @@ public class PublicationPage extends PageContent @UiField HeadingElement title; @UiField + FocusPanel supercontainer; + @UiField HTMLPanel container; @UiField UnorderedList attachments, linkedPublications; @@ -98,17 +103,37 @@ public class PublicationPage extends PageContent private ShareButton share = new ShareButton(); private ContentDTO contentDTO = null; + private SwipeRecognizer swipeRecognizer; + + @Override + public void onSwipeEnd(SwipeEndEvent event) { + if (!isVisible()) return; + String direction = "left"; + if (event.getDirection() == SwipeEvent.DIRECTION.RIGHT_TO_LEFT) { + // next + direction = "right"; + } else if (event.getDirection() == SwipeEvent.DIRECTION.LEFT_TO_RIGHT) { + // previous + direction = "left"; + } + if (!direction.isEmpty()) { + EventBus.getInstance().fireEvent(new DocumentsNextPublicationEvent(publication, direction)); + } + } interface PublicationPageUiBinder extends UiBinder<Widget, PublicationPage> {} public PublicationPage() { msg = GWT.create(DocumentsMessages.class); initWidget(uiBinder.createAndBindUi(this)); + supercontainer.getElement().setAttribute("style","height:100vh;"); container.getElement().setId("publication"); attachments.getElement().setId("attachments"); linkedPublications.getElement().setId("linkedPublications"); content.setId("content"); + content.getStyle().setDisplay(Style.Display.NONE); EventBus.getInstance().addHandler(AbstractPublicationPagesEvent.TYPE, this); + EventBus.getInstance().addHandler(SwipeEndEvent.getType(), this); } @Override @@ -116,6 +141,7 @@ public void stop() { super.stop(); comments.stop(); EventBus.getInstance().removeHandler(AbstractPublicationPagesEvent.TYPE, this); + EventBus.getInstance().removeHandler(SwipeEndEvent.getType(), this); } public void setContent(final ContentDTO content) { @@ -152,6 +178,7 @@ public void onLoadedPublication(PublicationLoadedEvent event) { PublicationContentHelper.showContent(publication.getId(), publication.getInstanceId(), content); } contentLink.setVisible(publication.getContent()); + swipeRecognizer = new SwipeRecognizer(supercontainer); } @Override @@ -237,7 +264,6 @@ protected void showContent(ClickEvent event) { public static void showWebPageContent(String pubId, String appId, String title) { PublicationContentHelper.showContent(pubId, appId, title); } - private static void showPublicationContent(String pubId, String appId, String title) { PublicationContentHelper.showContent(pubId, appId, title); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml index e6a910b4d..dd3d0b0ce 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml @@ -30,20 +30,21 @@ xmlns:widgets="urn:import:org.silverpeas.mobile.client.apps.comments.pages.widgets"> <ui:with field='msg' type='org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages'/> - <g:HTMLPanel ui:field="container" styleName="content"> + <g:FocusPanel ui:field="supercontainer"> + <g:HTMLPanel ui:field="container" styleName="content"> + <base:ActionsMenu ui:field="actionsMenu"/> - <base:ActionsMenu ui:field="actionsMenu"/> - - <h2 ui:field="title" class="publiName"></h2> - <p ui:field="desc" class="publiDesc"></p> - <widgets:CommentsButton ui:field="comments" visible="false"/> - <div ui:field="content" style="display:none;"> - <g:Anchor ui:field="contentLink" styleName="ui-btn ui-btn-icon-right" text="{msg.content}"/> - </div> - <components:UnorderedList ui:field="attachments"/> - <components:UnorderedList ui:field="linkedPublications"/> - <p ui:field="creator" class="lastUpdate"></p> - <p ui:field="lastUpdate" class="lastUpdate"></p> - <p ui:field="nbViews" class="nbViews"></p> - </g:HTMLPanel> + <h2 ui:field="title" class="publiName"></h2> + <p ui:field="desc" class="publiDesc"></p> + <widgets:CommentsButton ui:field="comments" visible="false"/> + <div ui:field="content" style="display:none;"> + <g:Anchor ui:field="contentLink" styleName="ui-btn ui-btn-icon-right" text="{msg.content}"/> + </div> + <components:UnorderedList ui:field="attachments"/> + <components:UnorderedList ui:field="linkedPublications"/> + <p ui:field="creator" class="lastUpdate"></p> + <p ui:field="lastUpdate" class="lastUpdate"></p> + <p ui:field="nbViews" class="nbViews"></p> + </g:HTMLPanel> + </g:FocusPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java index 2b4092ce9..24f155300 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java @@ -42,10 +42,8 @@ import org.silverpeas.core.contribution.attachment.model.SimpleDocument; import org.silverpeas.core.contribution.attachment.model.SimpleDocumentPK; import org.silverpeas.core.contribution.attachment.util.SimpleDocumentList; -import org.silverpeas.core.contribution.publication.model.CompletePublication; -import org.silverpeas.core.contribution.publication.model.PublicationDetail; -import org.silverpeas.core.contribution.publication.model.PublicationLink; -import org.silverpeas.core.contribution.publication.model.PublicationPK; +import org.silverpeas.core.contribution.publication.dao.PublicationCriteria; +import org.silverpeas.core.contribution.publication.model.*; import org.silverpeas.core.contribution.publication.service.PublicationService; import org.silverpeas.core.io.media.image.thumbnail.ThumbnailSettings; import org.silverpeas.core.node.model.NodeDetail; @@ -78,6 +76,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Optional; import java.util.concurrent.CopyOnWriteArrayList; /** @@ -619,6 +618,72 @@ public List<BaseDTO> getTopicsAndPublications(@PathParam("appId") String instanc return list; } + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("nextpublication/{id}/{direction}") + public PublicationDTO getNextPublication(@PathParam("appId") String instanceId, @PathParam("id") String id, @PathParam("direction") String direction) throws Exception { + + PublicationDTO dto = new PublicationDTO(); + try { + PublicationPK pubPK = new PublicationPK(id); + PublicationDetail pub = getPubBm().getDetail(pubPK); + + List<Location> locations = getPubBm().getAllLocations(pubPK); + //int order = locations.get(0).getPubOrder(); + String folderId = locations.get(0).getLocalId(); + + + NodePK nodePK = new NodePK(folderId, instanceId); + List<KmeliaPublication> publications = KmeliaService.get().getAuthorizedPublicationsOfFolder(nodePK, + getUserTopicProfile(nodePK.getId(), instanceId), getUser().getId(), + isTreeStructure(instanceId)); + + + int sort; + if (isManualSortingUsed(publications)) { + sort = 99; + } else { + sort = getDefaultSortValue(pubPK.getInstanceId()); + } + new KmeliaPublicationSort(sort).withContentLanguage(getUser().getUserPreferences().getLanguage()).sort(publications); + + + KmeliaPublication next = null; + for (int i = 0; i < publications.size(); i++) { + if (publications.get(i).getId().equals(id)) { + if (direction.equalsIgnoreCase("right")) { + if (i == publications.size() - 1) { + next = publications.get(0); + } else { + next = publications.get(i + 1); + } + } else if (direction.equalsIgnoreCase("left")) { + if (i == 0) { + next = publications.get(publications.size() - 1); + } else { + next = publications.get(i - 1); + } + } + } + } + + + dto.setId(next.getId()); + dto.setName(next.getName()); + //dto.setCreator(pub.getCreator().getDisplayedName()); + //dto.setUpdater(organizationController.getUserDetail(pub.getUpdaterId()).getDisplayedName()); + //dto.setVersion(next.getVersion()); + dto.setDescription(next.getDescription()); + + } catch(Throwable e) { + SilverLogger.getLogger(this) + .error("ServiceDocumentsImpl.getNextPublication", "root.EX_NO_MESSAGE", e); + throw e; + } + //TODO + return dto; + } + @Override protected String getResourceBasePath() { return PATH; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java index 607357ea9..7bc2263a1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java @@ -82,4 +82,11 @@ public void getTickets(@PathParam("appId") String appId, List<TicketDTO> tickets public void deleteTickets(@PathParam("appId") String appId, List<TicketDTO> tickets, MethodCallback<List<TicketDTO>> callback); + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("{appId}/nextpublication/{id}/{direction}") + public void getNextPublication(@PathParam("appId") String appId, + @PathParam("id") String id, + @PathParam("direction") String direction, MethodCallback<PublicationDTO> callback); + } From 723c4a7f19399909f9078c96e2cee651b7a4921a Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 5 Nov 2023 23:32:01 +0100 Subject: [PATCH 073/228] Update dependency on Silverpeas to version 6.4-JR-build231105 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c6cb39cfa..1e00eecb1 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231101</silverpeas.version> + <silverpeas.version>6.4-JR-build231105</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From a372d39755f97eda595c3cf6cb0539dd41e71469 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 12 Nov 2023 23:36:50 +0100 Subject: [PATCH 074/228] Update dependency on Silverpeas to version 6.4-JR-build231112 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1e00eecb1..2c20272cd 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231105</silverpeas.version> + <silverpeas.version>6.4-JR-build231112</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 0e6900a4dc79650d510beb43138a40f6c4e352a7 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 13 Nov 2023 09:35:01 +0100 Subject: [PATCH 075/228] silent error management --- .../mobile/client/common/AuthentificationManager.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java index ddbb8b8f1..176d8d1cf 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java @@ -24,6 +24,7 @@ package org.silverpeas.mobile.client.common; +import com.google.gwt.core.client.GWT; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; @@ -263,10 +264,7 @@ public void onSuccess(final Method method, final Boolean showTermsOfServices) { @Override public void onFailure(final Method method, final Throwable t) { - //super.onFailure(method, t); - Window.alert( - "Normaly never happen !!! " + t.getClass().getName() + " " + t.getMessage()); - + GWT.log("Normaly never happen !!! " + t.getClass().getName() + " " + t.getMessage(), t); if (t instanceof AuthenticationException) { EventBus.getInstance().fireEvent(new AuthenticationErrorEvent(t)); } else { @@ -278,7 +276,7 @@ public void onFailure(final Method method, final Throwable t) { } }); } else { - //TODO : terms of service ? + //TODO : terms of service in offline mode ? Notification.activityStop(); loadUser(); SpMobil.displayMainPage(); From 4beb981eedf62727bf202244b76d3d526a3cf34e Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 13 Nov 2023 16:32:38 +0100 Subject: [PATCH 076/228] method signature changed --- .../mobile/server/services/ServiceNotifications.java | 2 +- .../services/helpers/NotificationsPushHelper.java | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java index e260a3df9..80a06fd02 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java @@ -368,7 +368,7 @@ public void delete(List<NotificationBoxDTO> selection) { if (selection.get(0) instanceof NotificationSendedDTO) { for (NotificationBoxDTO dto : selection) { try { - SentNotificationInterface.get().deleteNotif((int) dto.getIdNotif(), getUser().getId()); + SentNotificationInterface.get().deleteNotif(String.valueOf(dto.getIdNotif()), Integer.parseInt(getUser().getId())); } catch (NotificationException e) { SilverLogger.getLogger(this).error(e); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java index 8eb22cfec..2cc11031b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java @@ -130,7 +130,7 @@ public String sendToToken(final String userId, String token, Map<String, Object> // This registration token comes from the client FCM SDKs. // See documentation on defining a message payload. - response = getNotificationPermalink(String.valueOf(notifData.get("id"))) + response = getNotificationPermalink(userId, String.valueOf(notifData.get("id"))) // No push if no permalink .map(l -> Message.builder() .putData("subject", String.valueOf(notifData.get("subject"))) @@ -156,10 +156,8 @@ public String sendToToken(final String userId, String token, Map<String, Object> return response; } - private Optional<String> getNotificationPermalink(String id) { - return ofNullable(id) - .map(Long::decode) - .map(SILVERMAILPersistence::getMessage) - .map(SILVERMAILMessage::getUrl); + private Optional<String> getNotificationPermalink(String userId, String id) { + SILVERMAILMessage m = SILVERMAILPersistence.getMessage(userId, Long.valueOf(id)); + return ofNullable(m.getUrl()); } } From 34a933dd7d54c62498c04c741c185e26c92f7497 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 14 Nov 2023 16:23:23 +0100 Subject: [PATCH 077/228] Fix #13849 --- .../contacts/pages/widgets/ContactItem.java | 8 +++---- .../mobile/shared/dto/DetailUserDTO.java | 21 ++++++++-------- .../mobile/shared/dto/PropertyDTO.java | 24 +++++++++++++++++++ 3 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/PropertyDTO.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java index 2bf0d4e7b..b178a915d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java @@ -39,6 +39,7 @@ import org.silverpeas.mobile.client.common.resources.ResourcesManager; import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.DetailUserDTO; +import org.silverpeas.mobile.shared.dto.PropertyDTO; public class ContactItem extends Composite { @@ -125,9 +126,8 @@ public void setData(DetailUserDTO userData) { tel.add(new InlineHTML(" ")); } - for (String prop :userData.getProperties()) { - - String value = userData.getPropertieValue(prop); + for (PropertyDTO prop :userData.getProperties()) { + String value = prop.getValue(); if (isPhoneNumber(value)) { HTMLPanel field = new HTMLPanel(""); Anchor tel = new Anchor(); @@ -145,7 +145,7 @@ public void setData(DetailUserDTO userData) { container.add(field); } else { HTML field = new HTML(value); - field.setStylePrimaryName(prop); + field.setStylePrimaryName(prop.getKey()); container.add(field); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java index 63bb3288c..ed1d6840a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java @@ -25,8 +25,8 @@ package org.silverpeas.mobile.shared.dto; import java.io.Serializable; -import java.util.LinkedHashMap; -import java.util.Set; +import java.util.ArrayList; +import java.util.List; public class DetailUserDTO implements Serializable{ @@ -46,18 +46,19 @@ public class DetailUserDTO implements Serializable{ private String sessionKey; private boolean connected; private boolean notificationBox; - private LinkedHashMap<String, String> properties = new LinkedHashMap<String, String>(); + private List<PropertyDTO> properties = new ArrayList<>(); public void addProperty(String key, String value) { - properties.put(key, value); + PropertyDTO dto = new PropertyDTO(); + dto.setKey(key); + dto.setValue(value); + this.properties.add(dto); } - - public Set<String> getProperties() { - return properties.keySet(); + public void setProperties(List<PropertyDTO> properties) { + this.properties = properties; } - - public String getPropertieValue(String key) { - return properties.get(key); + public List<PropertyDTO> getProperties() { + return properties; } public String getId() { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/PropertyDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/PropertyDTO.java new file mode 100644 index 000000000..cea66b17f --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/PropertyDTO.java @@ -0,0 +1,24 @@ +package org.silverpeas.mobile.shared.dto; + +import java.io.Serializable; + +public class PropertyDTO implements Serializable { + private String key; + private String value; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} From 42a54c9dea1cf1e1f6318cdf880fe05e32c5453a Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 14 Nov 2023 18:48:55 +0100 Subject: [PATCH 078/228] Fix #13853 --- .../mobile/client/apps/media/pages/widgets/AddMediaButton.java | 2 +- .../org/silverpeas/mobile/server/services/ServiceMedia.java | 2 +- .../silverpeas/mobile/shared/services/rest/ServiceMedia.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java index 7aa2e16f0..3486efd17 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java @@ -103,7 +103,7 @@ public void mediaNotUploaded(int codeError) { @UiHandler("link") void upload(ClickEvent event) { - if (!NetworkHelper.isOnline()) { + if (NetworkHelper.isOnline()) { clickOnInputFile(file.getElement()); } else { Notification.alert(globalMsg.needToBeOnline()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java index 9242b31cc..c8d846b16 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java @@ -400,7 +400,7 @@ public VideoStreamingDTO getVideoStreaming(@PathParam("appId") String instanceId */ @GET @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) - @Path("videostream/{pictureId}") + @Path("photo/{pictureId}") public PhotoDTO getPreviewPicture(@PathParam("appId") String instanceId, @PathParam("pictureId") String pictureId) { PhotoDTO picture = null; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java index 0d2674a6d..5ef688498 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java @@ -92,6 +92,6 @@ public void getAllQuestions(@PathParam("appId") String appId, @GET @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) - @Path("{appId}/videostream/{pictureId}") + @Path("{appId}/photo/{pictureId}") public void getPreviewPicture(@PathParam("appId") String instanceId, @PathParam("pictureId") String pictureId, MethodCallback<PhotoDTO> callback); } From 2475c22b5fedd074b831a5bb2d96dd90463e7e28 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 15 Nov 2023 15:02:20 +0100 Subject: [PATCH 079/228] Fix #13854 --- .../mobile/client/apps/documents/pages/widgets/GedItem.java | 2 +- .../silverpeas/mobile/server/services/ServiceDocuments.java | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java index cfeba6296..1869666de 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java @@ -62,7 +62,7 @@ public void setData(Object data) { dataTopic = (TopicDTO) data; if (dataTopic.getId().equals("1")) { setStyleName("trash"); - link.setText(dataTopic.getName()); + link.setText(dataTopic.getName() + " (" + dataTopic.getPubCount() + ")"); } else { setStyleName("folder-ged"); link.setText(dataTopic.getName() + " (" + dataTopic.getPubCount() + ")"); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java index 24f155300..3bab5eaf3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java @@ -629,7 +629,6 @@ public PublicationDTO getNextPublication(@PathParam("appId") String instanceId, PublicationDetail pub = getPubBm().getDetail(pubPK); List<Location> locations = getPubBm().getAllLocations(pubPK); - //int order = locations.get(0).getPubOrder(); String folderId = locations.get(0).getLocalId(); @@ -670,9 +669,6 @@ public PublicationDTO getNextPublication(@PathParam("appId") String instanceId, dto.setId(next.getId()); dto.setName(next.getName()); - //dto.setCreator(pub.getCreator().getDisplayedName()); - //dto.setUpdater(organizationController.getUserDetail(pub.getUpdaterId()).getDisplayedName()); - //dto.setVersion(next.getVersion()); dto.setDescription(next.getDescription()); } catch(Throwable e) { @@ -680,7 +676,7 @@ public PublicationDTO getNextPublication(@PathParam("appId") String instanceId, .error("ServiceDocumentsImpl.getNextPublication", "root.EX_NO_MESSAGE", e); throw e; } - //TODO + return dto; } From 350e645117e3474745a9c3efd9b69e5768e150e0 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 15 Nov 2023 15:03:56 +0100 Subject: [PATCH 080/228] Fix #13854 --- .../mobile/client/apps/documents/pages/widgets/GedItem.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java index 1869666de..13375de45 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java @@ -62,11 +62,10 @@ public void setData(Object data) { dataTopic = (TopicDTO) data; if (dataTopic.getId().equals("1")) { setStyleName("trash"); - link.setText(dataTopic.getName() + " (" + dataTopic.getPubCount() + ")"); } else { setStyleName("folder-ged"); - link.setText(dataTopic.getName() + " (" + dataTopic.getPubCount() + ")"); } + link.setText(dataTopic.getName() + " (" + dataTopic.getPubCount() + ")"); } else if (data instanceof PublicationDTO) { dataPublication = (PublicationDTO) data; link.setHTML(dataPublication.getName()); From 906ee17ef6bb6a8a7c9927d37b48742bbe0b5d02 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 15 Nov 2023 16:03:06 +0100 Subject: [PATCH 081/228] Feature #13850 --- .../mobile/client/apps/workflow/pages/WorkflowPage.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java index 0f7952a63..0368a0ea4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java @@ -31,6 +31,7 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.ListBox; @@ -94,7 +95,7 @@ public void loadDataInstances(final WorkflowLoadedDataEvent event) { for (Map.Entry<String, String> role : metaData.getRoles().entrySet()) { roles.addItem(role.getValue(), role.getKey()); } - roles.setVisible(true); + roles.setVisible(roles.getItemCount()>1); EventBus.getInstance().fireEvent(new WorkflowRoleChangeEvent(roles.getSelectedValue())); } @@ -107,6 +108,7 @@ public void loadInstances(final WorkflowLoadedInstancesEvent event) { this.data.getList().addAll(event.getData().getList()); } + instances.removeAllRows(); int c = 0; for (String label : metaData.getHeaderLabels().get(roles.getSelectedValue())) { instances.setHTML(0, c, label); From 48ed3f5d6083fcde84be651b45206ed15f2b0303 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 15 Nov 2023 16:35:33 +0100 Subject: [PATCH 082/228] update lib --- mobile-war/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile-war/pom.xml b/mobile-war/pom.xml index f5e088b3b..c756f169c 100644 --- a/mobile-war/pom.xml +++ b/mobile-war/pom.xml @@ -396,7 +396,7 @@ <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> - <version>1.4</version> + <version>1.5</version> </dependency> </dependencies> From ec98f9c3c9077501ca820e10a1e78fc95b7172b0 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 15 Nov 2023 23:34:15 +0100 Subject: [PATCH 083/228] Update dependency on Silverpeas to version 6.4-JR-build231115 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2c20272cd..381035517 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231112</silverpeas.version> + <silverpeas.version>6.4-JR-build231115</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 08610809a213652b6401a4ea086200e29bd2bdec Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 16 Nov 2023 11:49:19 +0100 Subject: [PATCH 084/228] Fix #13849 --- .../contacts/pages/widgets/ContactItem.java | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java index b178a915d..f80da82c6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java @@ -86,12 +86,12 @@ public void setData(DetailUserDTO userData) { int nbTel = 0; if (userData.getPhoneNumber() != null && !userData.getPhoneNumber().isEmpty()) { - Anchor tel1 = new Anchor(); - tel1.setStyleName("tel-link"); - tel1.setText(userData.getPhoneNumber()); - tel1.setHref("tel:" + userData.getPhoneNumber()); - tel.add(tel1); - nbTel++; + Anchor tel1 = new Anchor(); + tel1.setStyleName("tel-link"); + tel1.setText(userData.getPhoneNumber()); + tel1.setHref("tel:" + userData.getPhoneNumber()); + tel.add(tel1); + nbTel++; } if (userData.getCellularPhoneNumber() != null && !userData.getCellularPhoneNumber().isEmpty()) { if (nbTel == 1) { @@ -123,30 +123,32 @@ public void setData(DetailUserDTO userData) { nbTel++; } if (nbTel == 0) { - tel.add(new InlineHTML(" ")); + tel.setVisible(false); } for (PropertyDTO prop :userData.getProperties()) { String value = prop.getValue(); - if (isPhoneNumber(value)) { - HTMLPanel field = new HTMLPanel(""); - Anchor tel = new Anchor(); - tel.setStyleName("tel-link"); - tel.setText(value); - tel.setHref("tel:" + value); - field.add(tel); - - Anchor sms = new Anchor(); - sms.setHref("sms:" + value); - Image smsImg = new Image(resourcesContact.sms()); - sms.getElement().appendChild(smsImg.getElement()); - field.add(sms); - - container.add(field); - } else { - HTML field = new HTML(value); - field.setStylePrimaryName(prop.getKey()); - container.add(field); + if (value != null & !value.isEmpty()) { + if (isPhoneNumber(value)) { + HTMLPanel field = new HTMLPanel(""); + Anchor tel = new Anchor(); + tel.setStyleName("tel-link"); + tel.setText(value); + tel.setHref("tel:" + value); + field.add(tel); + + Anchor sms = new Anchor(); + sms.setHref("sms:" + value); + Image smsImg = new Image(resourcesContact.sms()); + sms.getElement().appendChild(smsImg.getElement()); + field.add(sms); + + container.add(field); + } else { + HTML field = new HTML(value); + field.setStylePrimaryName(prop.getKey()); + container.add(field); + } } } } From 8271e23b46598271a8cd46d62b025418ed5ca4a3 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 19 Nov 2023 23:32:49 +0100 Subject: [PATCH 085/228] Update dependency on Silverpeas to version 6.4-JR-build231119 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 381035517..44bb2bc27 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231115</silverpeas.version> + <silverpeas.version>6.4-JR-build231119</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From c2e23e1b560eea6735aa5ae49c8604b0f27b4bcf Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 22 Nov 2023 23:35:20 +0100 Subject: [PATCH 086/228] Update dependency on Silverpeas to version 6.4-JR-build231122 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 44bb2bc27..2ceaf0cbb 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231119</silverpeas.version> + <silverpeas.version>6.4-JR-build231122</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 26c93b184b195ab7957fc22e6456ab6344d366a6 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 28 Nov 2023 15:00:35 +0100 Subject: [PATCH 087/228] Fix #13868 --- mobile-war/src/main/webapp/WEB-INF/app-init.template | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mobile-war/src/main/webapp/WEB-INF/app-init.template b/mobile-war/src/main/webapp/WEB-INF/app-init.template index 0e834d3e6..d6b6c70b0 100644 --- a/mobile-war/src/main/webapp/WEB-INF/app-init.template +++ b/mobile-war/src/main/webapp/WEB-INF/app-init.template @@ -22,7 +22,8 @@ if (firebaseConfig != null) { messaging.onMessage(payload => { const notificationOptions = { - body : payload.data["subject"], icon : '/silverpeas/util/icons/desktop-user-notification.png' + body : payload.data["subject"], icon : '/silverpeas/util/icons/desktop-user-notification.png', + data : payload.data }; navigator.serviceWorker.getRegistration('/silverpeas/spmobile/').then(registration => { From 883d07522b49fecfbe8e243d4a078e5a9f182ee3 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 28 Nov 2023 17:39:53 +0100 Subject: [PATCH 088/228] Fix #13869 --- .../server/UserNotificationServerEventMobileListener.java | 6 ++++++ .../server/services/helpers/NotificationsPushHelper.java | 1 + mobile-war/src/main/webapp/WEB-INF/app-init.template | 4 ++-- mobile-war/src/main/webapp/WEB-INF/app-sw.template | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java index 4d4ff5c4c..75790745d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java @@ -25,8 +25,11 @@ package org.silverpeas.mobile.server; import com.fasterxml.jackson.databind.ObjectMapper; +import org.jsoup.Jsoup; import org.silverpeas.core.notification.sse.CDIServerEventListener; import org.silverpeas.core.notification.user.UserNotificationServerEvent; +import org.silverpeas.core.notification.user.server.channel.silvermail.SILVERMAILMessage; +import org.silverpeas.core.notification.user.server.channel.silvermail.SILVERMAILPersistence; import org.silverpeas.core.util.logging.SilverLogger; import org.silverpeas.mobile.server.services.helpers.NotificationsPushHelper; @@ -48,7 +51,10 @@ public void on(final UserNotificationServerEvent event) { String json = event.getData("", null); Map<String, Object> data = mapper.readValue(json, Map.class); Boolean isCreation = (Boolean) data.get("isCreation"); + String id = (String) data.get("id"); if (Boolean.TRUE.equals(isCreation)) { + SILVERMAILMessage msg = SILVERMAILPersistence.getMessage(event.getEmitterUserId(), Long.valueOf(id)); + data.put("body", Jsoup.parse(msg.getBody()).wholeText()); NotificationsPushHelper.getInstance().sendNotification(emitterUserId, data); } } catch(Exception e) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java index 2cc11031b..0f8ac611e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java @@ -135,6 +135,7 @@ public String sendToToken(final String userId, String token, Map<String, Object> .map(l -> Message.builder() .putData("subject", String.valueOf(notifData.get("subject"))) .putData("sender", String.valueOf(notifData.get("sender"))) + .putData("body", String.valueOf(notifData.get("body"))) .putData("permalink", l)) .map(m -> m.setToken(token)) .map(Message.Builder::build) diff --git a/mobile-war/src/main/webapp/WEB-INF/app-init.template b/mobile-war/src/main/webapp/WEB-INF/app-init.template index d6b6c70b0..e5fc4b19f 100644 --- a/mobile-war/src/main/webapp/WEB-INF/app-init.template +++ b/mobile-war/src/main/webapp/WEB-INF/app-init.template @@ -22,12 +22,12 @@ if (firebaseConfig != null) { messaging.onMessage(payload => { const notificationOptions = { - body : payload.data["subject"], icon : '/silverpeas/util/icons/desktop-user-notification.png', + body : payload.data["body"], icon : '/silverpeas/util/icons/desktop-user-notification.png', data : payload.data }; navigator.serviceWorker.getRegistration('/silverpeas/spmobile/').then(registration => { - registration.showNotification(payload.data["sender"], notificationOptions) + registration.showNotification(payload.data["subject"], notificationOptions) }); }); } else { diff --git a/mobile-war/src/main/webapp/WEB-INF/app-sw.template b/mobile-war/src/main/webapp/WEB-INF/app-sw.template index ed7735cf4..3d8b055ca 100644 --- a/mobile-war/src/main/webapp/WEB-INF/app-sw.template +++ b/mobile-war/src/main/webapp/WEB-INF/app-sw.template @@ -10,9 +10,9 @@ if (firebaseConfig != null) { messaging.setBackgroundMessageHandler(function(payload) { console.log('[firebase-messaging-sw.js] Received background message ', payload); - const notificationTitle = payload.data["sender"]; + const notificationTitle = payload.data["subject"]; const notificationOptions = { - body : payload.data["subject"], icon : '/silverpeas/util/icons/desktop-user-notification.png', + body : payload.data["body"], icon : '/silverpeas/util/icons/desktop-user-notification.png', data : payload.data }; From 51ac225be881326c0287ed0c869b7e6e9893c7c4 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 29 Nov 2023 11:16:14 +0100 Subject: [PATCH 089/228] Fix #13871 --- .../server/UserNotificationServerEventMobileListener.java | 1 + .../server/services/helpers/NotificationsPushHelper.java | 1 + mobile-war/src/main/webapp/WEB-INF/app-sw.template | 3 +++ 3 files changed, 5 insertions(+) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java index 75790745d..5dc7d34e7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java @@ -55,6 +55,7 @@ public void on(final UserNotificationServerEvent event) { if (Boolean.TRUE.equals(isCreation)) { SILVERMAILMessage msg = SILVERMAILPersistence.getMessage(event.getEmitterUserId(), Long.valueOf(id)); data.put("body", Jsoup.parse(msg.getBody()).wholeText()); + data.put("notificationId", (String) id); NotificationsPushHelper.getInstance().sendNotification(emitterUserId, data); } } catch(Exception e) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java index 0f8ac611e..5a6128e46 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NotificationsPushHelper.java @@ -136,6 +136,7 @@ public String sendToToken(final String userId, String token, Map<String, Object> .putData("subject", String.valueOf(notifData.get("subject"))) .putData("sender", String.valueOf(notifData.get("sender"))) .putData("body", String.valueOf(notifData.get("body"))) + .putData("notificationId", String.valueOf(notifData.get("notificationId"))) .putData("permalink", l)) .map(m -> m.setToken(token)) .map(Message.Builder::build) diff --git a/mobile-war/src/main/webapp/WEB-INF/app-sw.template b/mobile-war/src/main/webapp/WEB-INF/app-sw.template index 3d8b055ca..a62354070 100644 --- a/mobile-war/src/main/webapp/WEB-INF/app-sw.template +++ b/mobile-war/src/main/webapp/WEB-INF/app-sw.template @@ -24,6 +24,9 @@ if (firebaseConfig != null) { const pushData = event.notification.data; event.notification.close(); if (!pushData["permalink"].endsWith("/null")) { + fetch('/silverpeas/services/mobile/notification/readed/' + pushData["notificationId"], { + method: 'PUT' + }); event.waitUntil(self.clients.openWindow(pushData["permalink"])); } }); From 7749e169cb1aff9fb898774d4064a059d42df915 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 29 Nov 2023 16:47:12 +0100 Subject: [PATCH 090/228] Fix service worker initialisation --- .../src/main/webapp/WEB-INF/app-init.template | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/mobile-war/src/main/webapp/WEB-INF/app-init.template b/mobile-war/src/main/webapp/WEB-INF/app-init.template index e5fc4b19f..86250f507 100644 --- a/mobile-war/src/main/webapp/WEB-INF/app-init.template +++ b/mobile-war/src/main/webapp/WEB-INF/app-init.template @@ -5,18 +5,20 @@ if (firebaseConfig != null) { const messaging = firebase.messaging(); navigator.serviceWorker.register('/silverpeas/spmobile/app-sw.js') .then((registration) => { - messaging.useServiceWorker(registration); + navigator.serviceWorker.ready.then(function(reg) { + messaging.useServiceWorker(registration); - // Request permission and get token..... - Notification.requestPermission().then(function(permission) { - if (permission === "granted") { - messaging.getToken().then(token => { - console.log("Token Is : " + token); - storeToken(token); + // Request permission and get token..... + Notification.requestPermission().then(function(permission) { + if (permission === "granted") { + messaging.getToken().then(token => { + console.log("Token Is : " + token); + storeToken(token); + }); + } else { + console.log("No permission to send push"); + } }); - } else { - console.log("No permission to send push"); - } }); }); From cda2254680a2de3f553d3cc2c0543531f381508e Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 29 Nov 2023 23:52:20 +0100 Subject: [PATCH 091/228] Update dependency on Silverpeas to version 6.4-JR-build231129 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2ceaf0cbb..830bea3c8 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231122</silverpeas.version> + <silverpeas.version>6.4-JR-build231129</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From dc64993466d25beb175d851760fd79389e23e01c Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 1 Dec 2023 14:59:24 +0100 Subject: [PATCH 092/228] Fix #13875 --- .../common/AuthentificationManager.java | 3 +- .../server/services/ServiceNavigation.java | 29 ++------ .../server/services/helpers/NewsHelper.java | 70 ++++++++++++------- 3 files changed, 52 insertions(+), 50 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java index 176d8d1cf..b61eec14b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java @@ -264,7 +264,8 @@ public void onSuccess(final Method method, final Boolean showTermsOfServices) { @Override public void onFailure(final Method method, final Throwable t) { - GWT.log("Normaly never happen !!! " + t.getClass().getName() + " " + t.getMessage(), t); + //super.onFailure(method, t); + GWT.log("Normaly never happen !!! " + t.getClass().getName() + " " + t.getMessage()); if (t instanceof AuthenticationException) { EventBus.getInstance().fireEvent(new AuthenticationErrorEvent(t)); } else { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index fea109d7b..a277f1aa2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -25,14 +25,10 @@ package org.silverpeas.mobile.server.services; import org.apache.commons.lang3.EnumUtils; -import org.jsoup.Connection; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; import org.silverpeas.components.gallery.model.Media; import org.silverpeas.components.gallery.model.MediaPK; import org.silverpeas.components.gallery.service.MediaServiceProvider; import org.silverpeas.components.quickinfo.model.News; -import org.silverpeas.core.SilverpeasException; import org.silverpeas.core.admin.component.model.ComponentInst; import org.silverpeas.core.admin.component.model.ComponentInstLight; import org.silverpeas.core.admin.service.AdminException; @@ -47,15 +43,11 @@ import org.silverpeas.core.contribution.publication.model.PublicationPK; import org.silverpeas.core.contribution.publication.service.PublicationService; import org.silverpeas.core.mylinks.model.LinkDetail; -import org.silverpeas.core.security.session.SessionInfo; -import org.silverpeas.core.security.session.SessionManagement; -import org.silverpeas.core.security.session.SessionManagementProvider; import org.silverpeas.core.security.token.synchronizer.SynchronizerToken; import org.silverpeas.core.util.SettingBundle; import org.silverpeas.core.util.StringUtil; import org.silverpeas.core.util.logging.SilverLogger; import org.silverpeas.core.web.look.PublicationHelper; -import org.silverpeas.core.web.mvc.controller.MainSessionController; import org.silverpeas.core.web.rs.UserPrivilegeValidation; import org.silverpeas.core.web.rs.annotation.Authorized; import org.silverpeas.core.web.util.viewgenerator.html.GraphicElementFactory; @@ -66,24 +58,15 @@ import org.silverpeas.mobile.server.services.helpers.UserHelper; import org.silverpeas.mobile.server.services.helpers.events.EventsHelper; import org.silverpeas.mobile.server.services.helpers.events.NextEvents; -import org.silverpeas.mobile.shared.dto.ContentsTypes; -import org.silverpeas.mobile.shared.dto.DetailUserDTO; -import org.silverpeas.mobile.shared.dto.HomePageDTO; -import org.silverpeas.mobile.shared.dto.RightDTO; -import org.silverpeas.mobile.shared.dto.ShortCutLinkDTO; +import org.silverpeas.mobile.shared.dto.*; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO; import org.silverpeas.mobile.shared.dto.documents.PublicationDTO; -import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; -import org.silverpeas.mobile.shared.dto.navigation.Apps; -import org.silverpeas.mobile.shared.dto.navigation.HomePages; -import org.silverpeas.mobile.shared.dto.navigation.SilverpeasObjectDTO; -import org.silverpeas.mobile.shared.dto.navigation.SpaceDTO; +import org.silverpeas.mobile.shared.dto.navigation.*; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; -import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -248,11 +231,7 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { } else { maxNews = settings.getInteger("home.news.size", 3); } - List<News> lastNews = NewsHelper.getInstance().getLastNews(getUser().getId(), spaceId); - if (lastNews != null && lastNews.size() > maxNews) { - lastNews = lastNews.subList(0, maxNews); - } - + List<News> lastNews = NewsHelper.getInstance().getLastNews(getUser().getId(), spaceId, maxNews); data.setNews(NewsHelper.getInstance().populate(lastNews, false)); if (spaceId == null || spaceId.isEmpty()) { @@ -490,7 +469,7 @@ public List<SilverpeasObjectDTO> getSpacesAndApps(@PathParam("rootSpaceId") Stri if (rootSpaceId !=null && rootSpaceId.equals("null")) rootSpaceId = null; try { if (rootSpaceId == null) { - String[] spaceIds = Administration.get().getAllSpaceIds(getUser().getId()); + String[] spaceIds = Administration.get().getAllRootSpaceIds(getUser().getId()); for (String spaceId : spaceIds) { SpaceInst space = Administration.get().getSpaceInstById(spaceId); if (!space.isRemoved()) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java index 8e2c2336c..74fecaf74 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java @@ -38,17 +38,11 @@ import org.silverpeas.core.admin.service.OrganizationController; import org.silverpeas.core.admin.user.model.UserDetail; import org.silverpeas.core.contribution.publication.model.PublicationDetail; -import org.silverpeas.core.contribution.publication.service.PublicationService; import org.silverpeas.core.io.file.ImageResizingProcessor; import org.silverpeas.core.io.file.SilverpeasFileProcessor; -import org.silverpeas.core.util.CollectionUtil; -import org.silverpeas.core.util.ResourceLocator; -import org.silverpeas.core.util.ServiceProvider; -import org.silverpeas.core.util.SettingBundle; -import org.silverpeas.core.util.StringUtil; +import org.silverpeas.core.util.*; import org.silverpeas.core.util.file.FileRepositoryManager; import org.silverpeas.core.util.logging.SilverLogger; -import org.silverpeas.core.web.look.PublicationUpdateDateComparator; import org.silverpeas.core.web.util.viewgenerator.html.GraphicElementFactory; import org.silverpeas.mobile.shared.dto.news.NewsDTO; @@ -76,8 +70,8 @@ public static NewsHelper getInstance() { return instance; } - public List<News> getLastNews(String userId, String spaceId) throws Exception { - if(spaceId != null) { + public List<News> getLastNews(String userId, String spaceId, int maxNews) throws Exception { + if (spaceId != null) { List<String> appIds = new ArrayList<String>(); String[] cIds = organizationController.getAvailCompoIds(spaceId, userId); for (String id : cIds) { @@ -102,15 +96,15 @@ public List<News> getLastNews(String userId, String spaceId) throws Exception { } catch (MissingResourceException e) {} if (newsSource != null && newsSource.isEmpty() == false) { if (newsSource.trim().startsWith("quickinfo")) { - news = getNewsByComponentId(newsSource, false, userId); + news = getNewsByComponentId(newsSource, false, userId, maxNews); + news = sortAndTruncate(maxNews, news); } else if (newsSource.trim().equals("*")) { - news = getAllNews(userId); + news = getAllNews(userId, maxNews); + news = sortAndTruncate(maxNews, news); } else { - news = getDelegatedNews(userId); + news = getDelegatedNews(userId, maxNews); } } - Collections.sort(news, (o1, o2) -> o1.getUpdateDate().compareTo(o2.getUpdateDate())); - Collections.reverse(news); return news; } } @@ -119,22 +113,39 @@ private boolean isVisibleNews(PublicationDetail news) { return news.isValid() && news.isVisible(); } - private List<News> getDelegatedNews(String userId) throws Exception { + private List<News> getDelegatedNews(String userId, int maxNews) throws Exception { List<News> news = new ArrayList(); List<DelegatedNews> delegatedNews = DelegatedNewsServiceProvider.getDelegatedNewsService().getAllValidDelegatedNews(); UserDetail u = Administration.get().getUserDetail(userId); Date now = new Date(); + int count = 0; for (DelegatedNews delegated : delegatedNews) { - if (delegated.isValidated() && (delegated.getBeginDate() != null && now.after(delegated.getBeginDate())) - && (delegated.getEndDate() != null && now.before(delegated.getEndDate()))) { - News aNews = QuickInfoService.get().getNewsByForeignId(delegated.getPubId()); - if (aNews.canBeAccessedBy(u)) news.add(aNews); + if (count >= maxNews) break; + News aNews = null; + if (delegated.getBeginDate() == null && delegated.getEndDate() == null) { + aNews = getNews(delegated, u); + } else if (delegated.getBeginDate() != null && now.after(delegated.getBeginDate()) + && delegated.getEndDate() != null && now.before(delegated.getEndDate())) { + aNews = getNews(delegated, u); + } else if (delegated.getBeginDate() != null && now.after(delegated.getBeginDate()) && delegated.getEndDate() == null) { + aNews = getNews(delegated, u); + } else if (delegated.getEndDate() != null && now.before(delegated.getEndDate())) { + aNews = getNews(delegated, u); + } + if (aNews != null) { + news.add(aNews); + count++; } } - return news; } + private News getNews(DelegatedNews delegated, UserDetail u) { + News aNews = QuickInfoService.get().getNewsByForeignId(delegated.getPubId()); + if (!aNews.canBeAccessedBy(u)) aNews = null; + return aNews; + } + public List<News> getNewsByAppId(String appId, boolean managerAccess) { QuickInfoService service = QuickInfoServiceProvider.getQuickInfoService(); List<News> news; @@ -147,19 +158,19 @@ public List<News> getNewsByAppId(String appId, boolean managerAccess) { return news; } - private List<News> getAllNews(String userId) throws AdminException { + private List<News> getAllNews(String userId, int maxNews) throws AdminException { List<News> news = new ArrayList<>(); List<String> apps = CollectionUtil .asList(organizationController.getComponentIdsForUser(userId, "quickinfo")); for (String appId : apps) { - news.addAll(getNewsByComponentId(appId, false, userId)); + news.addAll(getNewsByComponentId(appId, false, userId, maxNews)); } - //TODO sort list + news = sortAndTruncate(maxNews, news); return news; } - private List<News> getNewsByComponentId(String appId, boolean managerAccess, String userId) throws AdminException { + private List<News> getNewsByComponentId(String appId, boolean managerAccess, String userId, int maxNews) throws AdminException { QuickInfoService service = QuickInfoServiceProvider.getQuickInfoService(); List<News> news = new ArrayList<>(); @@ -170,6 +181,17 @@ private List<News> getNewsByComponentId(String appId, boolean managerAccess, Str news = service.getVisibleNews(appId); } } + news = sortAndTruncate(maxNews, news); + + return news; + } + + private static List<News> sortAndTruncate(int maxNews, List<News> news) { + Collections.sort(news, (o1, o2) -> o1.getUpdateDate().compareTo(o2.getUpdateDate())); + //Collections.reverse(news); + if (news != null && news.size() > maxNews) { + news = news.subList(0, maxNews); + } return news; } From 4daf5ab8bda386a3b250759ad9b4d01f487b89a6 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 3 Dec 2023 23:37:55 +0100 Subject: [PATCH 093/228] Update dependency on Silverpeas to version 6.4-JR-build231203 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 830bea3c8..144f25bb1 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231129</silverpeas.version> + <silverpeas.version>6.4-JR-build231203</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 5face3a5bc919c8bbcd41e93b2519657273801e8 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 6 Dec 2023 12:18:38 +0100 Subject: [PATCH 094/228] Fix #13885 --- .../silverpeas/mobile/server/services/ServiceNavigation.java | 2 +- .../silverpeas/mobile/server/services/helpers/NewsHelper.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index a277f1aa2..6673576be 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -229,7 +229,7 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { if (spaceId == null) { maxNews = settings.getInteger("home.news.size", 3); } else { - maxNews = settings.getInteger("home.news.size", 3); + maxNews = settings.getInteger("space.homepage.news.nb", 3); } List<News> lastNews = NewsHelper.getInstance().getLastNews(getUser().getId(), spaceId, maxNews); data.setNews(NewsHelper.getInstance().populate(lastNews, false)); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java index 74fecaf74..1d656df19 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java @@ -84,7 +84,7 @@ public List<News> getLastNews(String userId, String spaceId, int maxNews) throws for (String appId : appIds) { news.addAll(service.getVisibleNews(appId)); } - Collections.sort(news, (o1, o2) -> o1.getUpdateDate().compareTo(o2.getUpdateDate())); + news = sortAndTruncate(maxNews, news); return news; } else { // News on main page From 11c8082701d8f63dd12bbe8c79a4ecbe682f5f1c Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 6 Dec 2023 14:52:28 +0100 Subject: [PATCH 095/228] Feature #13886 --- .../org/silverpeas/mobile/mobileSettings.properties | 4 ++++ .../mobile/server/services/ServiceNavigation.java | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties index b8d0277dc..49be9befa 100644 --- a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties +++ b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties @@ -25,6 +25,8 @@ defaultDomainId=0 homepage.lastpublications=true # display upcomming events or not on main home page homepage.lastevents=true +# display lasts news or not on main home page +homepage.lastnews=true # display free zone on main home page homepage.freezone=true # display free zone thin on main home page @@ -33,6 +35,8 @@ homepage.freezonethin=true spacehomepage.lastpublications=true # display last events or not on spaces home page spacehomepage.lastevents=true +# display last news or not on spaces home page +spacehomepage.lastnews=true spacehomepage.displayUrlType=true diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index 6673576be..4662afc91 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -231,8 +231,11 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { } else { maxNews = settings.getInteger("space.homepage.news.nb", 3); } - List<News> lastNews = NewsHelper.getInstance().getLastNews(getUser().getId(), spaceId, maxNews); - data.setNews(NewsHelper.getInstance().populate(lastNews, false)); + if ((spaceId == null && getSettings().getBoolean("homepage.lastnews", true)) || + (spaceId != null && getSettings().getBoolean("spacehomepage.lastnews", true))) { + List<News> lastNews = NewsHelper.getInstance().getLastNews(getUser().getId(), spaceId, maxNews); + data.setNews(NewsHelper.getInstance().populate(lastNews, false)); + } if (spaceId == null || spaceId.isEmpty()) { List<LinkDetail> links = From de77add944916ba1711670482b995fbce3e97b13 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 6 Dec 2023 15:35:56 +0100 Subject: [PATCH 096/228] Allow url pattern /silverpeas/FileServer/thumbnail/* --- .../java/org/silverpeas/bridge/MobilFilter.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java index 28e25b71e..ca5f85722 100644 --- a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java +++ b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java @@ -105,12 +105,13 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) boolean redirect = isRedirect(url); if (isMobile && !url.contains("sso") && !url.contains("services") && - !url.contains("spmobile") && !url.contains(URLUtil.getApplicationURL() + "/chat/") && - !url.contains(URLUtil.getApplicationURL() + "/media/") && - !url.contains(URLUtil.getApplicationURL() + "/visio/") && - !url.contains(URLUtil.getApplicationURL() + "/util/") && (!tablet) && - !url.contains("attached_file") && !url.contains("Ticket") && - !url.contains("LinkFile/Key") && redirect) { + !url.contains("spmobile") && !url.contains(URLUtil.getApplicationURL() + "/chat/") && + !url.contains(URLUtil.getApplicationURL() + "/media/") && + !url.contains(URLUtil.getApplicationURL() + "/visio/") && + !url.contains(URLUtil.getApplicationURL() + "/util/") && (!tablet) && + !url.contains("attached_file") && !url.contains("Ticket") && + !url.contains("LinkFile/Key") && + !url.contains("FileServer/thumbnail") && redirect) { String params = ""; if (url.contains("Publication")) { String id = url.substring(url.lastIndexOf("/") + 1); From e21861f39668435869c79721714cf8aaca23db81 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 7 Dec 2023 16:37:33 +0100 Subject: [PATCH 097/228] Feature #13883 --- .../mobile/mobileSettings.properties | 6 ++ .../org/silverpeas/mobile/client/SpMobil.java | 19 ++++- .../common/AuthentificationManager.java | 10 +-- .../client/pages/cookies/CookiesPage.java | 81 +++++++++++++++++++ .../client/pages/cookies/CookiesPage.ui.xml | 47 +++++++++++ .../client/resources/ApplicationMessages.java | 7 ++ .../ApplicationMessages_en.properties | 3 +- .../ApplicationMessages_fr.properties | 3 + .../org/silverpeas/mobile/public/spmobile.css | 26 ++++++ 9 files changed, 191 insertions(+), 11 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.ui.xml diff --git a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties index 49be9befa..16f4ed702 100644 --- a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties +++ b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties @@ -17,6 +17,12 @@ log.module.name=silverpeas.components.mobile # true if tablets must use mobile GUI. false if tablets must use standard GUI. guiMobileForTablets=true +# Display information about cookies data storage +displayCookiesInformation=true + +# How often a user should accept cookies +displayCookiesInformationFrequency=90 + # Default users domain selected on login page defaultDomainId=0 diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index 2576e504e..0ba2c68c0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -84,6 +84,7 @@ import org.silverpeas.mobile.client.components.base.Page; import org.silverpeas.mobile.client.components.base.events.window.OrientationChangeEvent; import org.silverpeas.mobile.client.pages.connexion.ConnexionPage; +import org.silverpeas.mobile.client.pages.cookies.CookiesPage; import org.silverpeas.mobile.client.pages.main.HomePage; import org.silverpeas.mobile.client.pages.search.SearchResultPage; import org.silverpeas.mobile.client.pages.termsofservice.TermsOfServicePage; @@ -181,7 +182,7 @@ public void onModuleLoad() { SSO = !ResourcesManager.getSSOPath().isEmpty(); - loadIds(null); + displayFirstPage(); NodeList<Element> tags = Document.get().getElementsByTagName("meta"); for (int i = 0; i < tags.getLength(); i++) { @@ -226,6 +227,16 @@ public void onResize(final ResizeEvent resizeEvent) { apps.add(new ResourcesManagerApp()); } + public void displayFirstPage() { + boolean displayCookiesInformation = Boolean.parseBoolean(ResourcesManager.getParam("displayCookiesInformation")); + String cookie = Cookies.getCookie("accept_cookies"); + if (displayCookiesInformation && (cookie == null || cookie.isEmpty())) { + displayCookiesPage(); + } else { + loadIds(null); + } + } + public static Page getMainPage() { if (mainPage == null) { mainPage = new Page(); @@ -308,6 +319,12 @@ public static void displayTermsOfServicePage() { SpMobil.getMainPage().setContent(new TermsOfServicePage()); } + public static void displayCookiesPage() { + RootPanel.get().clear(); + RootPanel.get().add(getMainPage()); + SpMobil.getMainPage().setContent(new CookiesPage()); + } + /** * Load ids in SQL Web Storage. */ diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java index b61eec14b..3e3895d57 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java @@ -32,7 +32,6 @@ import com.google.gwt.http.client.Response; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.RootPanel; import com.googlecode.gwt.crypto.bouncycastle.InvalidCipherTextException; import com.googlecode.gwt.crypto.client.TripleDesCipher; import org.fusesource.restygwt.client.Method; @@ -45,7 +44,6 @@ import org.silverpeas.mobile.client.common.network.NetworkHelper; import org.silverpeas.mobile.client.common.resources.ResourcesManager; import org.silverpeas.mobile.client.common.storage.LocalStorageHelper; -import org.silverpeas.mobile.client.pages.connexion.ConnexionPage; import org.silverpeas.mobile.shared.dto.DetailUserDTO; import org.silverpeas.mobile.shared.dto.FullUserDTO; import org.silverpeas.mobile.shared.dto.IFullUser; @@ -306,13 +304,9 @@ public void onResponseReceived(final Request request, final Response response) { AuthentificationManager.getInstance().clearLocalStorage(); PageHistory.getInstance().clear(); Notification.activityStop(); - ConnexionPage connexionPage = new ConnexionPage(); - RootPanel.get().clear(); - RootPanel.get().add(connexionPage); + SpMobil.getInstance().displayFirstPage(); SpMobil.destroyMainPage(); - } - @Override public void onError(final Request request, final Throwable throwable) { @@ -343,7 +337,5 @@ public void onSuccess(final Method method, final Void unused) { } }; action.attempt(); - - } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.java new file mode 100644 index 000000000..f5e7c8d2c --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.pages.cookies; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Cookies; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.SpMobil; +import org.silverpeas.mobile.client.common.Notification; +import org.silverpeas.mobile.client.common.resources.ResourcesManager; +import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.resources.ApplicationMessages; + +import java.util.Date; + + +public class CookiesPage extends PageContent { + + interface CookiesPageUiBinder extends UiBinder<Widget, CookiesPage> {} + + private static CookiesPageUiBinder uiBinder = GWT.create(CookiesPageUiBinder.class); + + @UiField + Anchor accept; + + @UiField + HTML text; + + @UiField(provided = true) + protected ApplicationMessages msg = null; + + public CookiesPage() { + msg = GWT.create(ApplicationMessages.class); + initWidget(uiBinder.createAndBindUi(this)); + SpMobil.getMainPage().hideFooter(); + text.setHTML(msg.cookiesInformation()); + Notification.activityStop(); + } + + @UiHandler("accept") + void accept(ClickEvent e) { + String cookie = Cookies.getCookie("accept_cookies"); + if (cookie == null || cookie.isEmpty()) { + long duration = Long.parseLong(ResourcesManager.getParam("displayCookiesInformationFrequency")); + final long DURATION = 1000 * 60 * 60 * 24 * duration; + Date expires = new Date(System.currentTimeMillis() + DURATION); + Cookies.setCookie("accept_cookies", "accepted", expires); + } + SpMobil.getInstance().loadIds(null); + } + +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.ui.xml new file mode 100644 index 000000000..324fac6ef --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.ui.xml @@ -0,0 +1,47 @@ +<!-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "https://www.silverpeas.org/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" + xmlns:g="urn:import:com.google.gwt.user.client.ui"> + + <ui:with field='msg' + type='org.silverpeas.mobile.client.resources.ApplicationMessages' /> + + <g:HTMLPanel> + <div id="header"> + <h1 id="page-cookies-title"><ui:safehtml from="{msg.informationTitle}"/></h1> + </div> + + <div id="page-cookies" class="ui-content ui-body-a"> + <div class="cookiesTextContainer"> + <g:HTML ui:field="text" styleName="cookiesText"></g:HTML> + <div class="cookiesTextActions"> + <g:Anchor ui:field="accept" styleName="btn-validate ui-link smaller multiple"><ui:safehtml from="{msg.accept}"/></g:Anchor> + </div> + </div> + </div> + </g:HTMLPanel> + +</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java index 7dd15b073..973ec005c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java @@ -29,6 +29,10 @@ public interface ApplicationMessages extends Messages { + + @DefaultMessage("Pour son fonctionnement cette application utilise des Cookies. Les informations stockées sont uniquement techniques et ne contiennent pas de données personnelles, ou de suivi.") + SafeHtml cookiesInformation(); + @DefaultMessage("Login") SafeHtml loginLabel(); @@ -38,6 +42,9 @@ public interface ApplicationMessages extends Messages { @DefaultMessage("Silverpeas > Ecran de connexion") SafeHtml loginTitle(); + @DefaultMessage("Information") + SafeHtml informationTitle(); + @DefaultMessage("Confirmer") String confirmBtnLabel(); @DefaultMessage("Annuler") diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties index 3948f3666..aba5d7837 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties @@ -22,10 +22,11 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # +For its operation, this application uses cookies. The stored information is solely technical and does not contain personal data or tracking information. loginLabel=Login passwordLabel=Password loginTitle=Silverpeas > Login screen - +informationTitle=Information confirmBtnLabel=Confirm cancelBtnLabel=Cancel correctBtnLabel=Correct diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties index 2b050fc99..6ae51b51e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties @@ -22,9 +22,12 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # +cookiesInformation=cookiesInformation=Pour son fonctionnement cette application utilise des Cookies. Les informations stockées sont uniquement techniques et ne contiennent pas de données personnelles, ou de suivi. + loginLabel=Login passwordLabel=Mot de passe loginTitle=Silverpeas > Ecran de connexion +informationTitle=Information confirmBtnLabel=Confirmer cancelBtnLabel=Annuler correctBtnLabel=Corriger diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index cd3d0d5df..19547fdc9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -1480,6 +1480,7 @@ input.filter-contacts { color: #fff !important; text-decoration: none; display: block; + font-weight: bold; } .btn-validate.smaller { @@ -2716,4 +2717,29 @@ a.popin-btn { #sharing .label { padding-top: 1em; +} + +/**** Cookies information page ****/ +.cookiesTextContainer { + background-color: white; + height: 25vh; + padding: 2em; + margin-left: 1em; + margin-right: 1em; + margin-top: 2em; + border-radius: 0.25em; +} + +.cookiesText { + height: 20vh; + text-align: justify; + line-height: 1.2em; +} +.cookiesTextActions { + text-align: right; +} + +#header #page-cookies-title { + left: 1em; + right: 1em; } \ No newline at end of file From af7692c9ba52eb22605dc2c4d1ac69aed5750ff0 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 7 Dec 2023 16:56:09 +0100 Subject: [PATCH 098/228] Fix french text --- .../silverpeas/mobile/client/resources/ApplicationMessages.java | 2 +- .../mobile/client/resources/ApplicationMessages_fr.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java index 973ec005c..8e145a6b5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java @@ -30,7 +30,7 @@ public interface ApplicationMessages extends Messages { - @DefaultMessage("Pour son fonctionnement cette application utilise des Cookies. Les informations stockées sont uniquement techniques et ne contiennent pas de données personnelles, ou de suivi.") + @DefaultMessage("Pour son fonctionnement, cette application utilise des Cookies. Les informations stockées sont uniquement techniques et ne contiennent pas de données personnelles, ou de suivi.") SafeHtml cookiesInformation(); @DefaultMessage("Login") diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties index 6ae51b51e..61834200d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties @@ -22,7 +22,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -cookiesInformation=cookiesInformation=Pour son fonctionnement cette application utilise des Cookies. Les informations stockées sont uniquement techniques et ne contiennent pas de données personnelles, ou de suivi. +cookiesInformation=cookiesInformation=Pour son fonctionnement, cette application utilise des Cookies. Les informations stockées sont uniquement techniques et ne contiennent pas de données personnelles, ou de suivi. loginLabel=Login passwordLabel=Mot de passe From d40549914013d1c3bbe08367bce0fe9a3bcbf890 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 7 Dec 2023 17:59:03 +0100 Subject: [PATCH 099/228] improve login page --- .../org/silverpeas/mobile/public/spmobile.css | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 19547fdc9..0d1ddbc22 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -1570,15 +1570,18 @@ textarea.ui-input-text { #formLogin { text-align: center; - padding-top: 1em; + padding-top: 4em; } #page-login #Login, #page-login #Password { background: #FFF url(bg-input-login.png) 0 0 no-repeat; - padding-left: 24px; + padding-left: 2em; border: 1px solid #dddddd; - width: 210px; - margin: 0 0 1em 0; + width: 70vw; + margin: 0 0 1.5em 0; + line-height: 2em; + border-radius: 0.25em; + box-shadow: 0 0 1em 0 rgba(0, 0, 0, 0.2); } #page-login #Password { @@ -1586,11 +1589,11 @@ textarea.ui-input-text { } #page-login #DomainId { - width: 237px; + width: 70vw; } #page-login #password-visibility { - margin-bottom: 1em; + margin-bottom: 1.5em; } #page-login #copyright { @@ -1605,7 +1608,7 @@ textarea.ui-input-text { #page-login .btn-validate, #page-login .btn-validate:visited { padding: 0.5em 0; - width: 235px; + width: 10em; margin: 1em 0 0 } From e1a669f982b41b63089b8f5b22738a748f083a55 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 8 Dec 2023 11:59:36 +0100 Subject: [PATCH 100/228] improve notification message --- .../server/UserNotificationServerEventMobileListener.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java index 5dc7d34e7..d42fc80e2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/UserNotificationServerEventMobileListener.java @@ -54,7 +54,9 @@ public void on(final UserNotificationServerEvent event) { String id = (String) data.get("id"); if (Boolean.TRUE.equals(isCreation)) { SILVERMAILMessage msg = SILVERMAILPersistence.getMessage(event.getEmitterUserId(), Long.valueOf(id)); - data.put("body", Jsoup.parse(msg.getBody()).wholeText()); + String body = msg.getBody(); + body = body.replace("<!--BEFORE_MESSAGE_FOOTER-->", "<!--BEFORE_MESSAGE_FOOTER--> "); + data.put("body", Jsoup.parse(body).wholeText()); data.put("notificationId", (String) id); NotificationsPushHelper.getInstance().sendNotification(emitterUserId, data); } From 7e4b3bf2ae33890708b770815d38d8f9dbdcedc5 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 8 Dec 2023 16:05:39 +0100 Subject: [PATCH 101/228] Login page improvement --- .../main/java/org/silverpeas/mobile/public/spmobile.css | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 0d1ddbc22..fcfdfa8a4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -1574,6 +1574,7 @@ textarea.ui-input-text { } #page-login #Login, #page-login #Password { + box-sizing: border-box; background: #FFF url(bg-input-login.png) 0 0 no-repeat; padding-left: 2em; border: 1px solid #dddddd; @@ -1590,6 +1591,12 @@ textarea.ui-input-text { #page-login #DomainId { width: 70vw; + box-sizing: border-box; + padding: 0.5em; + background-color: white; + border-radius: 0.25em; + border: none; + box-shadow: 0 0 1em 0 rgba(0, 0, 0, 0.2); } #page-login #password-visibility { From df4778cadd849d4f4a23c5865d77f50a8631ca15 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 13 Dec 2023 14:53:26 +0100 Subject: [PATCH 102/228] fix label cookies --- .../mobile/client/resources/ApplicationMessages_en.properties | 2 +- .../mobile/client/resources/ApplicationMessages_fr.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties index aba5d7837..1c378d1cb 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties @@ -22,7 +22,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -For its operation, this application uses cookies. The stored information is solely technical and does not contain personal data or tracking information. +cookiesInformation=For its operation, this application uses cookies. The stored information is solely technical and does not contain personal data or tracking information. loginLabel=Login passwordLabel=Password loginTitle=Silverpeas > Login screen diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties index 61834200d..1fb8cc8ea 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties @@ -22,7 +22,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -cookiesInformation=cookiesInformation=Pour son fonctionnement, cette application utilise des Cookies. Les informations stockées sont uniquement techniques et ne contiennent pas de données personnelles, ou de suivi. +cookiesInformation=Pour son fonctionnement, cette application utilise des Cookies. Les informations stockées sont uniquement techniques et ne contiennent pas de données personnelles, ou de suivi. loginLabel=Login passwordLabel=Mot de passe From 07de4ea65c3dc94c001d61556a7b14ac9d7fc542 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 13 Dec 2023 17:41:41 +0100 Subject: [PATCH 103/228] Fix #13889 --- .../server/services/ServiceContact.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java index f833cff1d..c30596ee0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java @@ -132,7 +132,8 @@ public List<DetailUserDTO> getContacts(@PathParam("type") String type, List tabUserDetail = getUsersByQuery(filter, "UserFull"); for (int i = 0; i < tabUserDetail.size(); i++) { if (i >= startIndex && i < startIndex + pageSize) { - listUsers.add(populate(tabUserDetail.get(i))); + DetailUserDTO dto = populate(tabUserDetail.get(i)); + if (dto != null) listUsers.add(dto); } } } else if (type.equals(ContactFilters.ALL_EXT)) { @@ -320,19 +321,20 @@ private DetailUserDTO populate(Object user) { SilverLogger.getLogger(this).debug(SpMobileLogModule.getName(), "ServiceContact.populate", "User id=" + userDetail.getId()); UserFull userFull = UserFull.getById(userDetail.getId()); - DetailUserDTO dto = new DetailUserDTO(); - dto.setId(userFull.getId()); - dto.setFirstName(userFull.getFirstName()); - dto.setLastName(userFull.getLastName()); - dto.seteMail(userFull.geteMail()); - dto.setStatus(userFull.getStatus()); - dto.setAvatar(userFull.getAvatar()); - dto.setLanguage(userFull.getUserPreferences().getLanguage()); - dto.setConnected(userFull.isConnected()); - String avatar = DataURLHelper.convertAvatarToUrlData(userDetail.getAvatarFileName(), - getSettings().getString("avatar.size", "24x")); - dto.setAvatar(avatar); + DetailUserDTO dto = null; if (userFull != null) { + dto = new DetailUserDTO(); + dto.setId(userFull.getId()); + dto.setFirstName(userFull.getFirstName()); + dto.setLastName(userFull.getLastName()); + dto.seteMail(userFull.geteMail()); + dto.setStatus(userFull.getStatus()); + dto.setAvatar(userFull.getAvatar()); + dto.setLanguage(userFull.getUserPreferences().getLanguage()); + dto.setConnected(userFull.isConnected()); + String avatar = DataURLHelper.convertAvatarToUrlData(userDetail.getAvatarFileName(), + getSettings().getString("avatar.size", "24x")); + dto.setAvatar(avatar); for (String prop : getUserProperties()) { dto.addProperty(prop, userFull.getValue(prop)); } From 46357cf57b261af40e6283feed0b614381fb250f Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 14 Dec 2023 12:09:12 +0100 Subject: [PATCH 104/228] improve login design --- .../client/pages/connexion/ConnexionPage.java | 13 ++--- .../pages/connexion/ConnexionPage.ui.xml | 3 +- .../client/resources/ApplicationMessages.java | 4 -- .../ApplicationMessages_en.properties | 1 - .../ApplicationMessages_fr.properties | 1 - .../silverpeas/mobile/public/components.css | 51 +++++++++++++++++++ .../org/silverpeas/mobile/public/spmobile.css | 2 + 7 files changed, 59 insertions(+), 16 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/components.css diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java index 40ff92761..d4a81fb4c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java @@ -31,13 +31,7 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.CheckBox; -import com.google.gwt.user.client.ui.FormPanel; -import com.google.gwt.user.client.ui.ListBox; -import com.google.gwt.user.client.ui.PasswordTextBox; -import com.google.gwt.user.client.ui.TextBox; -import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.user.client.ui.*; import org.fusesource.restygwt.client.Method; import org.silverpeas.mobile.client.common.AuthentificationManager; import org.silverpeas.mobile.client.common.Notification; @@ -72,6 +66,9 @@ public class ConnexionPage extends PageContent { @UiField CheckBox tooglePasswordView; + @UiField + InlineHTML labelTooglePasswordView; + public void setAuthenticateError(final AuthenticationException authenticateError) { if (authenticateError == null) { checkCredentials("init","init"); @@ -140,10 +137,8 @@ void connexion(ClickEvent e) { void changePasswordVisibity(ClickEvent e) { if (passwordField.getElement().getAttribute("type").equals("password")) { passwordField.getElement().setAttribute("type", "text"); - tooglePasswordView.setText(msg.hidePwd()); } else { passwordField.getElement().setAttribute("type", "password"); - tooglePasswordView.setText(msg.showPwd()); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml index 213d99955..78ac985a6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml @@ -44,7 +44,8 @@ <g:PasswordTextBox ui:field="passwordField" name="Password"/> </div> <div id="password-visibility"> - <g:CheckBox ui:field="tooglePasswordView" text="{msg.showPwd}"/> + <g:InlineHTML ui:field="labelTooglePasswordView" text="{msg.showPwd}"/> + <g:CheckBox ui:field="tooglePasswordView" stylePrimaryName="checkbox-wrapper"/> </div> <div id="domain-formLogin"> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java index 8e145a6b5..8063e7e6f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java @@ -186,10 +186,6 @@ public interface ApplicationMessages extends Messages { @DefaultMessage("Afficher le mot de passe") String showPwd(); - - @DefaultMessage("Masquer le mot de passe") - String hidePwd(); - @DefaultMessage("Reçues") SafeHtml received(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties index 1c378d1cb..1cd6f4c6a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties @@ -78,7 +78,6 @@ notifications=My notifications pwdNotValid=Password is not valid showPwd=Show password -hidePwd=Hide password received=Received sended=Sended diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties index 1fb8cc8ea..53763656e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties @@ -83,7 +83,6 @@ notifications=Mes notifications pwdNotValid=Le mot de passe ne respecte pas les consignes de sécurité showPwd=Afficher le mot de passe -hidePwd=Masquer le mot de passe received=Reçues sended=Envoyées diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css new file mode 100644 index 000000000..c238d74c3 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css @@ -0,0 +1,51 @@ + +/** Checkbox **********************************************************************************************************/ + +.checkbox-wrapper { + display : inline-grid; + vertical-align : middle; +} + +.checkbox-wrapper input[type=checkbox] { + height: 0; + width: 0; + display: none; +} + +.checkbox-wrapper label { + --size: 50px; + + cursor: pointer; + width: var(--size); + height: calc(var(--size) / 2); + background: black; + display: block; + border-radius: 0.25em; + position: relative; +} + +.checkbox-wrapper label:after { + content: ''; + position: absolute; + top: 6%; + left: 2.5%; + width: calc(50% - 5%); + height: calc(100% - 10%); + background: #fff; + border-radius: 0.25em; + transition: 0.3s; +} + +.checkbox-wrapper input:checked + label { + /*background: #bada55;*/ + background: linear-gradient(#7eb73a, #6fa800) repeat scroll 0 0 #6fa800; +} + +.checkbox-wrapper input:checked + label:after { + left: calc(100% - 2.5%); + transform: translateX(-100%); +} + +.checkbox-wrapper label:active:after { + width: 55%; +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index fcfdfa8a4..4fa6fc4a4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -22,6 +22,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +@import "components.css"; + /* Globals */ /* Font -----------------------------------------------------------------------------------------------------------*/ From 1202a50088fd558433beb99f8c02af0416bf3262 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 18 Dec 2023 11:31:06 +0100 Subject: [PATCH 105/228] Fix permalink in wysiwyg content --- .../client/apps/navigation/NavigationApp.java | 29 +++++++++++++++---- .../server/services/ServiceNavigation.java | 17 +++++++++++ .../servlets/PublicationContentServlet.java | 7 +++++ .../services/rest/ServiceNavigation.java | 6 ++++ 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java index d2a4fad8a..9e5d6b709 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java @@ -25,7 +25,9 @@ package org.silverpeas.mobile.client.apps.navigation; import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Window; import org.fusesource.restygwt.client.Method; +import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.apps.navigation.events.app.AbstractNavigationAppEvent; import org.silverpeas.mobile.client.apps.navigation.events.app.LoadSpacesAndAppsEvent; import org.silverpeas.mobile.client.apps.navigation.events.app.NavigationAppEventHandler; @@ -37,11 +39,14 @@ import org.silverpeas.mobile.client.apps.navigation.pages.NavigationPage; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.ServicesLocator; +import org.silverpeas.mobile.client.common.ShortCutRouter; import org.silverpeas.mobile.client.common.app.App; import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.HomePageDTO; +import org.silverpeas.mobile.shared.dto.navigation.HomePages; +import org.silverpeas.mobile.shared.dto.navigation.SpaceDTO; public class NavigationApp extends App implements NavigationAppEventHandler,NavigationEventHandler { @@ -100,10 +105,24 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { @Override public void showContent(final NavigationShowContentEvent event) { - if (event.getContent().getType().equals(ContentsTypes.Space.name())) { - NavigationPage page = new NavigationPage(); - page.setRootSpaceId(event.getContent().getInstanceId()); - page.show(); - } + if (event.getContent().getType().equals(ContentsTypes.Space.name())) { + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<SpaceDTO>() { + @Override + public void attempt() { + ServicesLocator.getServiceNavigation().getSpace(event.getContent().getInstanceId(), this); + } + @Override + public void onSuccess(Method method, SpaceDTO space) { + if (space.getHomePageType() == HomePages.APP.getValue()) { + ShortCutRouter.route(SpMobil.getUser(), space.getHomePageParameter(), "Component", null, null, null); + } else { + NavigationPage page = new NavigationPage(); + page.setRootSpaceId(event.getContent().getInstanceId()); + page.show(); + } + } + }; + action.attempt(); + } } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index 4662afc91..6c010a204 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -231,6 +231,7 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { } else { maxNews = settings.getInteger("space.homepage.news.nb", 3); } + if ((spaceId == null && getSettings().getBoolean("homepage.lastnews", true)) || (spaceId != null && getSettings().getBoolean("spacehomepage.lastnews", true))) { List<News> lastNews = NewsHelper.getInstance().getLastNews(getUser().getId(), spaceId, maxNews); @@ -463,6 +464,22 @@ public Boolean isWorkflowApp(@PathParam("instanceId") String intanceId) { } } + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("space/{spaceId}/") + public SpaceDTO getSpace(@PathParam("spaceId") String spaceId) { + try { + SpaceInst space = Administration.get().getSpaceInstById(spaceId); + SpaceDTO dto = new SpaceDTO(); + dto.setHomePageType(space.getFirstPageType()); + dto.setHomePageParameter(space.getFirstPageExtraParam()); + return dto; + } catch (AdminException e) { + SilverLogger.getLogger(this).error(e); + throw new WebApplicationException(e); + } + } + //TODO : remove appType @GET @Produces(MediaType.APPLICATION_JSON) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java index 679c872d7..057d6ad9e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java @@ -185,6 +185,13 @@ private void displayWysiwyg(String html, HttpServletRequest request, HttpServlet } img.attr("src", newSource); } + Elements anchors = doc.getElementsByTag("a"); + for (Element a : anchors) { + String target = a.attr("target"); + if (!target.equalsIgnoreCase("_blank")) { + a.attr("target", "_top"); + } + } html = doc.outerHtml(); OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream(), "UTF-8"); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java index 02a98c7b7..b95b56d41 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java @@ -31,6 +31,7 @@ import org.silverpeas.mobile.shared.dto.HomePageDTO; import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; import org.silverpeas.mobile.shared.dto.navigation.SilverpeasObjectDTO; +import org.silverpeas.mobile.shared.dto.navigation.SpaceDTO; import javax.ws.rs.Consumes; import javax.ws.rs.GET; @@ -48,6 +49,11 @@ @Path("/mobile/navigation") public interface ServiceNavigation extends RestService { + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("space/{spaceId}/") + public void getSpace(@PathParam("spaceId") String spaceId, MethodCallback<SpaceDTO> callback); + @GET @Produces(MediaType.APPLICATION_JSON) @Path("spacesAndApps/{rootSpaceId}/") From 295fb8cc07dd432450463d862b7914d42a11df7c Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 19 Dec 2023 12:00:13 +0100 Subject: [PATCH 106/228] Feature #13901 --- .../java/org/silverpeas/mobile/client/SpMobil.java | 5 +++++ .../mobile/client/apps/navigation/NavigationApp.java | 4 +++- .../mobile/client/common/navigation/LinksManager.java | 10 +++++++++- .../server/servlets/PublicationContentServlet.java | 6 +++++- mobile-war/src/main/webapp/spmobile/spmobil.jsp | 3 +++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index 0ba2c68c0..5eae9a551 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -145,6 +145,7 @@ public static void setUser(final DetailUserDTO user) { * Init. spmobile. */ public void onModuleLoad() { + exportNativeFunctions(); // init connexion supervision NetworkHelper.getInstance(); @@ -556,4 +557,8 @@ public static Config getConfiguration() { public void onAuthenticationError(final AbstractAuthenticationErrorEvent event) { displayLoginPage(((AuthenticationException) event.getException())); } + + public static native void exportNativeFunctions()/*-{ + $wnd.navigateTo = $entry(@org.silverpeas.mobile.client.common.navigation.LinksManager::navigateToPermalink(*)); + }-*/; } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java index 9e5d6b709..e8878068d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java @@ -109,7 +109,9 @@ public void showContent(final NavigationShowContentEvent event) { MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<SpaceDTO>() { @Override public void attempt() { - ServicesLocator.getServiceNavigation().getSpace(event.getContent().getInstanceId(), this); + String id = event.getContent().getInstanceId(); + if (id == null || id.isEmpty()) id = event.getContent().getId(); + ServicesLocator.getServiceNavigation().getSpace(id, this); } @Override public void onSuccess(Method method, SpaceDTO space) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java index 9bb409b64..18e098104 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java @@ -44,6 +44,14 @@ public class LinksManager { private static Boolean iosShowIframe = Boolean.parseBoolean(ResourcesManager.getParam("ios.link.open.in.iframe")); + public static void navigateToPermalink(String url) { + HyperLinkDTO dto = new HyperLinkDTO(); + dto.setUrl(url); + dto.setInternalLink(true); + dto.setOpenNewWindow(false); + processLink(dto); + } + public static void processLink(HyperLinkDTO hyperLinkDTO) { String url = hyperLinkDTO.getUrl(); if(sameContext(url)) { @@ -145,4 +153,4 @@ private static void openExternalLinkStandard(String url, boolean openNewWindow, } } -} \ No newline at end of file +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java index 057d6ad9e..083924f12 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java @@ -187,9 +187,13 @@ private void displayWysiwyg(String html, HttpServletRequest request, HttpServlet } Elements anchors = doc.getElementsByTag("a"); for (Element a : anchors) { + String href = a.attr("href"); String target = a.attr("target"); if (!target.equalsIgnoreCase("_blank")) { - a.attr("target", "_top"); + if (href.contains("/silverpeas/") && !href.contains(".jsp")) { + a.attr("href", "#"); + a.attr("onclick", "parent.navigate('" + href + "');"); + } } } diff --git a/mobile-war/src/main/webapp/spmobile/spmobil.jsp b/mobile-war/src/main/webapp/spmobile/spmobil.jsp index 0fd2140b2..3f6e2c4ad 100644 --- a/mobile-war/src/main/webapp/spmobile/spmobil.jsp +++ b/mobile-war/src/main/webapp/spmobile/spmobil.jsp @@ -144,6 +144,9 @@ var windowHeight = window.innerHeight; document.body.style.height = windowHeight + "px"; } + function navigate(url) { + window.navigateTo(url); + } </script> <% From 3827466b8156be4742054f75c5673b55faea711f Mon Sep 17 00:00:00 2001 From: SilverYoCha <yohann.chastagnier@silverpeas.com> Date: Tue, 19 Dec 2023 15:04:15 +0100 Subject: [PATCH 107/228] Feature #13861: fixing compilation errors --- .../org/silverpeas/mobile/server/services/ServiceContact.java | 2 +- .../mobile/server/services/ServiceNotifications.java | 4 ++-- .../silverpeas/mobile/server/services/helpers/UserHelper.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java index c30596ee0..eca7273b3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceContact.java @@ -327,7 +327,7 @@ private DetailUserDTO populate(Object user) { dto.setId(userFull.getId()); dto.setFirstName(userFull.getFirstName()); dto.setLastName(userFull.getLastName()); - dto.seteMail(userFull.geteMail()); + dto.seteMail(userFull.getEmailAddress()); dto.setStatus(userFull.getStatus()); dto.setAvatar(userFull.getAvatar()); dto.setLanguage(userFull.getUserPreferences().getLanguage()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java index 80a06fd02..e29c434cf 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java @@ -289,7 +289,7 @@ private UserDTO populate(UserDetail userDetail) { u.setId(userDetail.getId()); u.setFirstName(userDetail.getFirstName()); u.setLastName(userDetail.getLastName()); - u.seteMail(userDetail.geteMail()); + u.seteMail(userDetail.getEmailAddress()); String avatar = DataURLHelper.convertAvatarToUrlData(userDetail.getAvatarFileName(), getSettings().getString("avatar.size", "24x")); u.setAvatar(avatar); @@ -432,7 +432,7 @@ public void send(NotificationToSendDTO notificationToSendDTO) throws Exception { } metaData.setAnswerAllowed(false); metaData.setContent(notificationToSendDTO.getNotification().getMessage()); - metaData.setSender(getUser().geteMail()); + metaData.setSender(getUser().getEmailAddress()); ComponentInst app = Administration.get() .getComponentInst(notificationToSendDTO.getNotification().getInstanceId()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java index b151d7f22..a0e2d6b6b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java @@ -65,7 +65,7 @@ public DetailUserDTO populate(UserDetail user) { dto.setId(user.getId()); dto.setFirstName(user.getFirstName()); dto.setLastName(user.getLastName()); - dto.seteMail(user.geteMail()); + dto.seteMail(user.getEmailAddress()); dto.setStatus(user.getStatus()); dto.setAvatar(user.getAvatar()); dto.setLanguage(user.getUserPreferences().getLanguage()); @@ -97,7 +97,7 @@ public UserDTO populateUserDTO(UserDetail user) { dto.setId(user.getId()); dto.setFirstName(user.getFirstName()); dto.setLastName(user.getLastName()); - dto.seteMail(user.geteMail()); + dto.seteMail(user.getEmailAddress()); String avatar = DataURLHelper.convertAvatarToUrlData(user.getAvatarFileName(), getSettings().getString("avatar.size", "24x")); dto.setAvatar(avatar); From 3577b37a0ae3dedfcd90b478534df9266e5d890d Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 20 Dec 2023 16:02:03 +0100 Subject: [PATCH 108/228] Feature #13826 --- .../components/attachments/Attachment.java | 109 ++++++++++-------- .../components/attachments/Attachment.ui.xml | 9 +- .../org/silverpeas/mobile/public/download.png | Bin 383 -> 0 bytes .../mobile/public/forbidden-download.png | Bin 555 -> 0 bytes .../mobile/public/icons/arrow_forward.svg | 31 +++++ .../mobile/public/icons/download.svg | 1 + .../mobile/public/icons/expand_less.svg | 1 + .../mobile/public/icons/expand_more.svg | 1 + .../silverpeas/mobile/public/icons/share.svg | 1 + .../silverpeas/mobile/public/icons/view.svg | 1 + .../java/org/silverpeas/mobile/public/qvf.png | Bin 272 -> 0 bytes .../java/org/silverpeas/mobile/public/qvf.svg | 42 +++++++ .../org/silverpeas/mobile/public/spmobile.css | 83 +++++++++---- 13 files changed, 205 insertions(+), 74 deletions(-) delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/download.png delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/forbidden-download.png create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_forward.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/download.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_less.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_more.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/share.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/view.svg delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.png create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java index b7bb7612b..fd631e6f0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java @@ -35,15 +35,10 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Image; -import com.google.gwt.user.client.ui.Widget; -import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsSharingEvent; +import com.google.gwt.user.client.ui.*; import org.silverpeas.mobile.client.apps.documents.pages.SharingPage; import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; import org.silverpeas.mobile.client.apps.documents.resources.DocumentsResources; -import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.mobil.MobilUtils; import org.silverpeas.mobile.client.common.navigation.UrlUtils; @@ -52,18 +47,23 @@ import org.silverpeas.mobile.client.components.IframePage; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.documents.SimpleDocumentDTO; -import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; public class Attachment extends Composite { private static AttachmentUiBinder uiBinder = GWT.create(AttachmentUiBinder.class); @UiField - Anchor link, share; + Anchor link, download; @UiField SpanElement size, name, description; @UiField ImageElement icon; + @UiField + HTMLPanel operations; + + @UiField + HTML share, view; + protected DocumentsResources ressources = null; private DocumentsMessages msg = null; private ApplicationMessages globalMsg = null; @@ -94,10 +94,15 @@ public void setAttachment(SimpleDocumentDTO data) { } private void render() { + operations.getElement().setId("operations"); + view.getElement().setId("view"); + share.getElement().setId("share"); + download.getElement().setId("download"); + Image img = null; String sizeValue; if (!data.isDownloadable()) { - link.setStylePrimaryName("not-downloadable"); + download.setVisible(false); } if (data.getSize() < 1024 * 1024) { sizeValue = String.valueOf(data.getSize() / 1024); @@ -148,54 +153,29 @@ private void render() { } else { url = "#"; } - link.setHref(url); - if (MobilUtils.isIOS()) { - if (data.isDownloadable()) { - link.addClickHandler(new ClickHandler() { - @Override - public void onClick(final ClickEvent clickEvent) { - String u = ((Anchor) clickEvent.getSource()).getHref(); - if (NetworkHelper.isOnline()) { - CacheStorageHelper.store(u); - } - Window.open(u, "_blank", "fullscreen=yes"); - } - }); - } else { - link.addClickHandler(new ClickHandler() { - @Override - public void onClick(final ClickEvent clickEvent) { - viewDocument(); - } - }); - } - } else { - if (data.isDownloadable()) { - link.setTarget("_self"); - link.getElement().setAttribute("download", data.getFileName()); - link.addClickHandler(new ClickHandler() { - @Override - public void onClick(final ClickEvent clickEvent) { - if (NetworkHelper.isOnline()) { - CacheStorageHelper.store(((Anchor) clickEvent.getSource()).getHref()); - } - } - }); - } else { - link.addClickHandler(new ClickHandler() { - @Override - public void onClick(final ClickEvent clickEvent) { - viewDocument(); - } - }); + download.setHref(url); + link.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent clickEvent) { + toogleOperations(); } - } + }); } catch (JavaScriptException e) { Notification.alert(e.getMessage()); } } + private void toogleOperations() { + if (operations.getStylePrimaryName().equalsIgnoreCase("ops-closed")) { + operations.setStylePrimaryName("ops-open"); + link.setStylePrimaryName("expand-less"); + } else { + operations.setStylePrimaryName("ops-closed"); + link.setStylePrimaryName("expand-more"); + } + } + private void viewDocument() { IframePage page = new IframePage("/silverpeas/services/media/viewer/embed/pdf?documentId="+data.getId()+"&documentType=attachment&language="+data.getLang()+"&embedPlayer=true"); page.show(); @@ -206,6 +186,35 @@ protected void share(ClickEvent event) { SharingPage page = new SharingPage(); page.setData("Attachment", data.getSpId(), data.getInstanceId()); page.show(); + } + + @UiHandler("download") + protected void download(ClickEvent event) { + if (MobilUtils.isIOS()) { + if (data.isDownloadable()) { + String u = link.getHref(); + if (NetworkHelper.isOnline()) { + CacheStorageHelper.store(u); + } + Window.open(u, "_blank", "fullscreen=yes"); + } else { + viewDocument(); + } + } else { + if (data.isDownloadable()) { + link.setTarget("_self"); + link.getElement().setAttribute("download", data.getFileName()); + if (NetworkHelper.isOnline()) { + CacheStorageHelper.store(((Anchor) event.getSource()).getHref()); + } + } else { + viewDocument(); + } + } + } + @UiHandler("view") + protected void view(ClickEvent event) { + viewDocument(); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml index e1c48499a..aa51c83b8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml @@ -26,13 +26,16 @@ <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> <g:HTMLPanel tag="li"> - <g:Anchor ui:field="link" styleName="downloadable"> + <g:Anchor ui:field="link" styleName="expand-more" href="#"> <img ui:field="icon" src=""/> <span ui:field="name"></span><span ui:field="size" class="weight"></span> <span ui:field="description"></span> </g:Anchor> - <g:Anchor ui:field="share" styleName="share"> + <g:HTMLPanel ui:field="operations" stylePrimaryName="ops-closed"> + <g:HTML ui:field="share"></g:HTML> + <g:Anchor ui:field="download"></g:Anchor> + <g:HTML ui:field="view"></g:HTML> + </g:HTMLPanel> - </g:Anchor> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/download.png b/mobile-war/src/main/java/org/silverpeas/mobile/public/download.png deleted file mode 100644 index 5b3c0cf543922ebf4870a741085000b2d7f0e82d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 383 zcmV-_0f7FAP)<h;3K|Lk000e1NJLTq000XB000XJ1^@s6sjPP<0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzAxT6*RCwBCk-ch#Pz=Z8SD|v%4%bQO z6S(yOgm!76OW(k`;Nb2k2wfZ;y1I7h)S)1hK0seV9Yl0&@q(XdlLHDD1K}h&znp)< z;g)3qvN(=4Jbqzsf3|I3Q6R3BX_`P3MX)Suqj;W&BuTdX3?`MPX;{v297vMH>N|KG zN0{ds`o7;_YNq-Q9)<w~K{$ig`UVF<pyPRseozzzx~|(`ni*jMnH#nP%AC+&WLf^! zG>yUJZQC+8P4l3t>JKtc9L?o<-X%7E=(>Ju7{(?`3)XcFMNz!^zW>Zq5rY=x9?P=) z%=4VhO|xcM25FkUVeGKc)=wdGU6&NzkH_OZy;@b(7v>LP7!Es_%yFCxYCxyO@1iI= dt#|(d3;_GvkgyWsRXzX!002ovPDHLkV1gCoqe1`x diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/forbidden-download.png b/mobile-war/src/main/java/org/silverpeas/mobile/public/forbidden-download.png deleted file mode 100644 index 08b80dd3d10663fd6a0dd00f7e9dd013caea1b17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VG9P)<h;3K|Lk000e1NJLTq000jF000XJ1^@s6phwqS0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz%}GQ-RCwBiQ9VdoQ562(GtbyK=nE}L zD2R)tqNRg~(lw$PEOxYmn9ZSGBA5z=bm}5X76~{t#igPsluGL&4Lk(9hz<n_>X4s8 zitwI^x$pma?}J2(70=;t4j=cs=R4;Jlu~fZX0shEskm)gJRa}-4-Q|Wux%TXBq17& z!m_L;mdoXEm;FN)1OfGW9lEZ2nBzDeelNMv%`{CIhS4N*{O{^4^%e4<E=60<5a#pW zgvD1&*JMuO^Yh0y$*=!>?Vx!THd~FS?EE|4i9V`j-gLM4{r*RaqV%$dU9v34S%47Y z$?gBW4(s$7{(&*bbDv;pDvXmO2qqgxCr?Dysm5X<7!3Xlhr`X8d62^c=)^(i^arS4 z(m3B(LF?d45UmcQYL1AhREjXk<Ap+Dw^%HqTCHA_wM!Tm1eMPVD6MAD9-D$ZISZpk zKx(EaH13>CCLgf08Hq$<p-{-1zf>w=bY~fCQ+PNrjmI<ZarW^oROJVtJ4%zxEs;og zA29hb*L6{;RCXu#*M{M`0m^njnG4({$#yTTr{c}KrPFD`7B#`-Z<ovEU%VdLE4K%p t4Z~?^g+nC-p1*)zBYnM@t&=MO1^^|83O9^}bEN<P002ovPDHLkV1lkP`JVs) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_forward.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_forward.svg new file mode 100644 index 000000000..97e1aaff4 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_forward.svg @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + height="24" + viewBox="0 0 24 24" + width="24" + version="1.1" + id="svg2" + sodipodi:docname="expand_less.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs2" /> + <sodipodi:namedview + id="namedview2" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" /> + <path + d="M 0,0 H 24 V 24 H 0 Z" + fill="none" + id="path1" /> + <path + d="m 15.705,11.705 -6,-6 -1.41,1.41 4.58,4.59 -4.58,4.59 1.41,1.41 z" + id="path2" /> +</svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/download.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/download.svg new file mode 100644 index 000000000..c4ec1c354 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/download.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><rect fill="none" height="24" width="24"/></g><g><path d="M5,20h14v-2H5V20z M19,9h-4V3H9v6H5l7,7L19,9z"/></g></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_less.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_less.svg new file mode 100644 index 000000000..2d2595701 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_less.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_more.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_more.svg new file mode 100644 index 000000000..c55bd7ff5 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/expand_more.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/share.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/share.svg new file mode 100644 index 000000000..07fc6639e --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/share.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/view.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/view.svg new file mode 100644 index 000000000..37e45c117 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/view.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M21 3H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.1-.9-2-2-2zm0 14H3V5h18v12z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.png b/mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.png deleted file mode 100644 index 112b1c0401f14301f9784fb655d59bb6786314e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Ba!3HF|e7-mXDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MVmZb978H@CH?vT-@bXxnl-l4(zo68^z`Z!{(ii^KK|cy z{dl_*hZtCZQpGMVE<cVQJt}EoY58-1{eL@ljWt};Qqt4KS-p%pIy(&+N{tvwyPA&7 zbYL+y{_M3NPv9)W<K~PFehW_B@t<#Zm;F}e;e!VYpB(R(uT>~?o6uaqsK#c~z<O-L z#EB16Qc|uk8LhXi`}4y(M*YNm2XT9G0Rao<l8?o)v9Z-V&IQ(AIx?Suk&R)(hjjh5 TF^`r5UC-d@>gTe~DWM4f#foWx diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.svg new file mode 100644 index 000000000..4e7617356 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/qvf.svg @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + height="24" + viewBox="0 0 24 24" + width="24" + version="1.1" + id="svg2" + sodipodi:docname="more_verti.svg" + inkscape:version="1.3.1 (9b9bdc1480, 2023-11-25, custom)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs2" /> + <sodipodi:namedview + id="namedview2" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:zoom="31.541667" + inkscape:cx="12.015852" + inkscape:cy="12" + inkscape:window-width="1920" + inkscape:window-height="957" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg2" /> + <path + d="M0 0h24v24H0z" + fill="none" + id="path1" /> + <path + d="M 15,3 C 15,1.35 13.65,0 12,0 10.349999,0 9,1.35 9,3 c 0,1.65 1.349999,3 3,3 1.65,0 3,-1.35 3,-3 z m 0,17.999999 c 0,-1.65 -1.35,-3 -3,-3 -1.650001,0 -3,1.35 -3,3 0,1.65 1.349999,3 3,3 1.65,0 3,-1.35 3,-3 z m 0,-9 C 15,10.349999 13.65,9 12,9 c -1.650001,0 -3,1.349999 -3,2.999999 0,1.65 1.349999,3 3,3 1.65,0 3,-1.35 3,-3 z" + id="path2" + style="stroke-width:1.49999" /> +</svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 4fa6fc4a4..39560249a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -162,7 +162,7 @@ legend, .ui-input-text input, .ui-input-search input { /* Icons -----------------------------------------------------------------------------------------------------------*/ .ui-btn-icon-left:after, .ui-btn-icon-right:after, .ui-btn-icon-top:after, .ui-btn-icon-bottom:after, .ui-btn-icon-notext:after { - background: transparent url(packImagesNavigation.png) right -963px; + background: transparent url('icons/arrow_forward.svg') right; content: " "; } @@ -1239,38 +1239,78 @@ html .ui-controlgroup-controls .ui-btn-up-c { margin-right: 8px; } -#attachments li a.downloadable { - background: transparent url(download.png) right 1em no-repeat; +#attachments li a.expand-more { + background: transparent url(icons/expand_more.svg) right 1em no-repeat; display: block; - margin-right: 1.5em; + margin-right: 0.5em; +} + +#attachments li a.expand-less { + background: transparent url(icons/expand_less.svg) right 1em no-repeat; + display: block; + margin-right: 0.5em; } #shares li { width: max-content; } -#shares li a.share-link { - background: transparent url(download.png) right 1em no-repeat; + +#attachments li a span { display: inline-block; - width: 10px; - height: 24px; - margin-right: 1em; - margin-left: 1em; } -#attachments li a.share { - background: transparent url(share.png) right 1em no-repeat; - display: block; +.ops-open, .ops-open #share, .ops-open #download, .ops-open #view { + transition: all .25s ease-in-out; + color: transparent; + height: 30px; + line-height:30px; + transform: scaleY(1); + margin-bottom:10px; +} + +.ops-closed, .ops-closed #share, .ops-closed #download, .ops-closed #view { + transition: all .25s ease-in-out; + height: 0px; + line-height:0px; + transform: scaleY(1); + margin-bottom:0px; +} + +li > #operations { + padding:0em; +} + +#download { + background : transparent url(icons/download.svg) no-repeat; + background-position: 50% 50%; + background-color:#ececec; + width: 30px; + height: 30px; + border-radius: 0.25em; margin-right: 1.5em; - margin-bottom: 1em; + float : right; } -#attachments li a span { - display: inline-block; +#view { + background: transparent url(icons/view.svg) no-repeat; + background-position: 50% 50%; + background-color:#ececec; + width: 30px; + height: 30px; + border-radius: 0.25em; + margin-right: 1.5em; + float : right; } -#attachments li a.not-downloadable { - background: transparent url(forbidden-download.png) right 10px no-repeat; - display: block; +#share { + background: transparent url(icons/share.svg) no-repeat; + background-position: 50% 50%; + background-color:#ececec; + width: 30px; + height: 30px; + border-radius: 0.25em; + margin-right: 1.5em; + float : right; } /********** CONTACT *******/ @@ -1923,7 +1963,7 @@ form .forms .fields > li:nth-child(even) { text-indent: -3000px; top: 1em; right: 1em; - background: transparent url("qvf.png") 0 0 no-repeat; + background: transparent url("qvf.svg") 0 0 no-repeat; outline: none; z-index: 999; } @@ -2754,4 +2794,5 @@ a.popin-btn { #header #page-cookies-title { left: 1em; right: 1em; -} \ No newline at end of file +} + From 05409ae4c8a8fa6ce6c0defec6acafa1847606ec Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 21 Dec 2023 10:59:55 +0100 Subject: [PATCH 109/228] Feature #13826 --- .../apps/documents/pages/PublicationPage.java | 3 +++ .../components/attachments/Attachment.java | 20 +++++++++++++++++-- .../components/attachments/Attachment.ui.xml | 1 + .../silverpeas/mobile/public/icons/send.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 15 ++++++++++++-- .../server/services/ServiceNotifications.java | 6 +++++- .../dto/notifications/NotificationDTO.java | 2 ++ 7 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/send.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index 5f4dadff8..f8a43ea20 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -74,6 +74,7 @@ public class PublicationPage extends PageContent private static PublicationPageUiBinder uiBinder = GWT.create(PublicationPageUiBinder.class); private PublicationDTO publication; + private boolean notifiable; @UiField HeadingElement title; @@ -162,6 +163,7 @@ public void setPublicationId(String id, String type) { public void onLoadedPublication(PublicationLoadedEvent event) { Notification.activityStop(); this.publication = event.getPublication(); + this.notifiable = event.isNotifiable(); display(event.isCommentable(), event.isAbleToStoreContent(), event.getType()); actionsMenu.addAction(favorite); if (event.isNotifiable()) { @@ -195,6 +197,7 @@ public void onLoadedPublicationAttachments(final PublicationAttachmentsLoadedEve attachment.setDownloadable(true); } Attachment a = new Attachment(); + a.setNotifiable(this.notifiable); a.setAttachment(attachment); a.setSharing(event.getShare()); attachments.add(a); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java index fd631e6f0..e1936759c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java @@ -39,6 +39,7 @@ import org.silverpeas.mobile.client.apps.documents.pages.SharingPage; import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; import org.silverpeas.mobile.client.apps.documents.resources.DocumentsResources; +import org.silverpeas.mobile.client.apps.notifications.NotificationsApp; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.mobil.MobilUtils; import org.silverpeas.mobile.client.common.navigation.UrlUtils; @@ -47,6 +48,7 @@ import org.silverpeas.mobile.client.components.IframePage; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.documents.SimpleDocumentDTO; +import org.silverpeas.mobile.shared.dto.notifications.NotificationDTO; public class Attachment extends Composite { @@ -62,7 +64,7 @@ public class Attachment extends Composite { HTMLPanel operations; @UiField - HTML share, view; + HTML share, view, notify; protected DocumentsResources ressources = null; private DocumentsMessages msg = null; @@ -70,6 +72,14 @@ public class Attachment extends Composite { private SimpleDocumentDTO data = null; private int sharing; + private boolean notifiable; + + public void setNotifiable(boolean notifiable) { + this.notifiable = notifiable; + if (!notifiable) { + notify.setVisible(false); + } + } interface AttachmentUiBinder extends UiBinder<Widget, Attachment> {} @@ -87,7 +97,6 @@ public void setSharing(int sharing) { share.setVisible(false); } } - public void setAttachment(SimpleDocumentDTO data) { this.data = data; render(); @@ -98,6 +107,7 @@ private void render() { view.getElement().setId("view"); share.getElement().setId("share"); download.getElement().setId("download"); + notify.getElement().setId("notify"); Image img = null; String sizeValue; @@ -217,4 +227,10 @@ protected void download(ClickEvent event) { protected void view(ClickEvent event) { viewDocument(); } + + @UiHandler("notify") + protected void notify(ClickEvent event) { + NotificationsApp app = new NotificationsApp(data.getInstanceId(), data.getId(), NotificationDTO.TYPE_DOCUMENT, data.getFileName(), data.getFileName()); + app.start(); + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml index aa51c83b8..ee43435d2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml @@ -32,6 +32,7 @@ <span ui:field="description"></span> </g:Anchor> <g:HTMLPanel ui:field="operations" stylePrimaryName="ops-closed"> + <g:HTML ui:field="notify"></g:HTML> <g:HTML ui:field="share"></g:HTML> <g:Anchor ui:field="download"></g:Anchor> <g:HTML ui:field="view"></g:HTML> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/send.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/send.svg new file mode 100644 index 000000000..033ab7a11 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/send.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 39560249a..11a854f98 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -1259,7 +1259,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { display: inline-block; } -.ops-open, .ops-open #share, .ops-open #download, .ops-open #view { +.ops-open, .ops-open #share, .ops-open #download, .ops-open #view, .ops-open #notify { transition: all .25s ease-in-out; color: transparent; height: 30px; @@ -1268,7 +1268,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { margin-bottom:10px; } -.ops-closed, .ops-closed #share, .ops-closed #download, .ops-closed #view { +.ops-closed, .ops-closed #share, .ops-closed #download, .ops-closed #view, .ops-closed #notify { transition: all .25s ease-in-out; height: 0px; line-height:0px; @@ -1313,6 +1313,17 @@ li > #operations { float : right; } +#notify { + background: transparent url(icons/send.svg) no-repeat; + background-position: 50% 50%; + background-color:#ececec; + width: 30px; + height: 30px; + border-radius: 0.25em; + margin-right: 1.5em; + float : right; +} + /********** CONTACT *******/ #btn-my-contacts, #btn-all-contacts, #btn-all-contactsext { padding-left: 5px; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java index e29c434cf..83347a6f7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java @@ -409,7 +409,11 @@ public void send(NotificationToSendDTO notificationToSendDTO) throws Exception { if (notificationToSendDTO.getNotification().getContentType() .equals(NotificationDTO.TYPE_PUBLICATION)) { String url = silverpeasServerUrl + "/Publication/" + - notificationToSendDTO.getNotification().getContentId(); + notificationToSendDTO.getNotification().getContentId(); + metaData.setLink(url); + } else if (notificationToSendDTO.getNotification().getContentType().equals(NotificationDTO.TYPE_DOCUMENT)) { + String url = silverpeasServerUrl + "/services/media/viewer/embed/pdf?documentId=" + + notificationToSendDTO.getNotification().getContentId() + "&documentType=attachment&embedPlayer=true"; metaData.setLink(url); } else if (notificationToSendDTO.getNotification().getContentType() .equals(NotificationDTO.TYPE_PHOTO) || diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationDTO.java index 12dbc2410..844f129ec 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationDTO.java @@ -34,6 +34,8 @@ public class NotificationDTO implements Serializable { public final static String TYPE_PUBLICATION = "Publication"; + + public final static String TYPE_DOCUMENT = "Document"; public final static String TYPE_PHOTO = "Photo"; public final static String TYPE_VIDEO = "Video"; public final static String TYPE_SOUND = "Sound"; From 35a2b619f0ad537ce60ab31c8a3ca85d5facf0bc Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Thu, 21 Dec 2023 11:28:43 +0100 Subject: [PATCH 110/228] Update dependency on Silverpeas to version 6.4-JR-build231221 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 144f25bb1..376efc165 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231203</silverpeas.version> + <silverpeas.version>6.4-JR-build231221</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From eb61ffd51243364d6bfd216afc1aff57009ab065 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 21 Dec 2023 18:09:48 +0100 Subject: [PATCH 111/228] improve main menu --- .../mobile/public/icons/calendar.svg | 1 + .../silverpeas/mobile/public/icons/chat.svg | 1 + .../silverpeas/mobile/public/icons/edit.svg | 1 + .../silverpeas/mobile/public/icons/help.svg | 1 + .../silverpeas/mobile/public/icons/home.svg | 1 + .../silverpeas/mobile/public/icons/inbox.svg | 1 + .../silverpeas/mobile/public/icons/logout.svg | 1 + .../mobile/public/icons/settings.svg | 1 + .../silverpeas/mobile/public/icons/tasks.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 35 ++++++++++--------- 10 files changed, 27 insertions(+), 17 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/edit.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/help.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/inbox.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/logout.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/settings.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar.svg new file mode 100644 index 000000000..c482b90b9 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat.svg new file mode 100644 index 000000000..4ce311b89 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 9h12v2H6V9zm8 5H6v-2h8v2zm4-6H6V6h12v2z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/edit.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/edit.svg new file mode 100644 index 000000000..13586f290 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/edit.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/help.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/help.svg new file mode 100644 index 000000000..f7ffc5da2 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/help.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home.svg new file mode 100644 index 000000000..8584f7ebb --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/inbox.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/inbox.svg new file mode 100644 index 000000000..ed6363627 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/inbox.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V5H19v10z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/logout.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/logout.svg new file mode 100644 index 000000000..bfd7e2923 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/logout.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/settings.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/settings.svg new file mode 100644 index 000000000..e40c8496e --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/settings.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><path d="M0,0h24v24H0V0z" fill="none"/><path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z"/></g></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks.svg new file mode 100644 index 000000000..410991a61 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><rect fill="none" height="24" width="24"/><path d="M11,7H2v2h9V7z M11,15H2v2h9V15z M16.34,11l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,5.34L16.34,11z M16.34,19 l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,13.34L16.34,19z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 11a854f98..a80f5104d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -475,7 +475,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { #header h1 { color: #fff; - font-size: 0.8em; + font-size: 1em; font-weight: normal; left: 60px; line-height: 44px; @@ -703,13 +703,13 @@ html .ui-controlgroup-controls .ui-btn-up-c { #silverpeas-navmenu-panel #user .edit-my-statut { display: inline-block; text-indent: -3000px; - background: transparent url(packPictos.png) 4px 0 no-repeat; - width: 20px; + background: transparent url('icons/edit.svg') no-repeat; + width: 18px; + height: 18px; } #silverpeas-navmenu-panel #navmenu-panel { border-top: 1px solid #d3d3d3; - border-bottom: 1px solid #d3d3d3; list-style-type: none; padding: 0; margin: 0; @@ -724,49 +724,50 @@ html .ui-controlgroup-controls .ui-btn-up-c { text-decoration: none; color: #333333; display: block; - padding: 0.5em 0 0.5em 32px; - font-size: 0.9em; + padding: 0.25em 0 0.5em 32px; + font-size: 1.25em; line-height: 1.6em; + margin-left: 0.5em; } #silverpeas-navmenu-panel #navmenu-panel li#menu-config a { - background: transparent url(packPictos.png) 8px -520px no-repeat; + background: transparent url('icons/settings.svg') no-repeat; } #silverpeas-navmenu-panel #navmenu-panel li#menu-tasks a { - background: transparent url(packPictos.png) 8px -394px no-repeat; + background: transparent url('icons/tasks.svg') 8px -394px no-repeat; } #silverpeas-navmenu-panel #navmenu-panel li#menu-help a { - background: transparent url(packPictos.png) 8px -134px no-repeat; + background: transparent url('icons/help.svg') no-repeat; } #silverpeas-navmenu-panel #navmenu-panel li#menu-notificationsbox a { - background: transparent url(packPictos.png) 8px -515px no-repeat; + background: transparent url('icons/inbox.svg') no-repeat; } #silverpeas-navmenu-panel #navmenu-panel li#menu-sharesbox a { - background: transparent url(packPictos.png) 8px -539px no-repeat; + background: transparent url('icons/share.svg') no-repeat; } #silverpeas-navmenu-panel #navmenu-panel li#menu-parameter a { - background: transparent url(packPictos.png) 8px -98px no-repeat; + background: transparent url('icons/settings.svg') no-repeat; } #silverpeas-navmenu-panel #navmenu-panel li#menu-home a { - background: transparent url(packPictos.png) 8px -25px no-repeat; + background: transparent url('icons/home.svg') no-repeat; } #silverpeas-navmenu-panel #navmenu-panel li#menu-logout a { - background: transparent url(packPictos.png) 8px -63px no-repeat; + background: transparent url('icons/logout.svg') no-repeat; } #silverpeas-navmenu-panel #navmenu-panel li#menu-tchat a { - background: transparent url(packPictos.png) 8px -276px no-repeat; + background: transparent url('icons/chat.svg') no-repeat; } #silverpeas-navmenu-panel #navmenu-panel li#menu-usercalendar a { - background: transparent url(packImagesNavigation.png) -20px -2171px no-repeat; + background: transparent url('icons/calendar.svg') no-repeat; } #menu-principal li a strong { @@ -1959,7 +1960,7 @@ form .forms .fields > li:nth-child(even) { } .content > .ui-listview.ui-listview-inset { - padding-top: 3em; + padding-top: 3.25em; } .content-navigation { From 43509f7371f95f205f8771a3e1095864341b91bd Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 22 Dec 2023 18:01:01 +0100 Subject: [PATCH 112/228] Feature #13904 : media app --- .../client/apps/documents/DocumentsApp.java | 16 ++-- .../mobile/client/apps/media/MediaApp.java | 66 +++++++-------- .../apps/media/pages/MediaNavigationPage.java | 6 ++ .../client/apps/media/pages/PhotoPage.java | 5 ++ .../client/apps/media/pages/SoundPage.java | 5 ++ .../client/apps/media/pages/VideoPage.java | 5 ++ .../apps/media/pages/VideoStreamingPage.java | 5 ++ .../mobile/client/common/Html5Utils.java | 18 ++++ .../common/navigation/LinksManager.java | 11 +++ .../components/base/widgets/ShareButton.java | 82 +++++++++++++++++++ .../base/widgets/ShareButton.ui.xml | 33 ++++++++ .../client/resources/ApplicationMessages.java | 3 + .../ApplicationMessages_en.properties | 4 +- .../ApplicationMessages_fr.properties | 4 +- .../silverpeas/mobile/public/icons/add.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 4 +- .../mobile/server/services/ServiceMedia.java | 34 +------- .../shared/services/rest/ServiceMedia.java | 16 +--- 18 files changed, 228 insertions(+), 90 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.ui.xml create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/add.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java index 07bd6efe4..cbc4e3c97 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java @@ -212,12 +212,16 @@ public void execute() { event.getContent().getType().equals(ContentsTypes.News.name()) || event.getContent().getType().equals(ContentsTypes.Attachment.name()) || event.getContent().getType().equals(ContentsTypes.Folder.name())) { - loadAppInstance(event.getContent(), new Command() { - @Override - public void execute() { - startWithContent(event.getContent()); - } - }); + + if (event.getContent().getInstanceId().startsWith("kmelia") || + event.getContent().getInstanceId().startsWith("quickinfo")) { + loadAppInstance(event.getContent(), new Command() { + @Override + public void execute() { + startWithContent(event.getContent()); + } + }); + } } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java index ff28dc6a2..d49bc8367 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/MediaApp.java @@ -26,6 +26,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; +import com.google.gwt.user.client.Window; import org.fusesource.restygwt.client.Method; import org.silverpeas.mobile.client.apps.media.events.app.AbstractMediaAppEvent; import org.silverpeas.mobile.client.apps.media.events.app.MediaAppEventHandler; @@ -96,35 +97,7 @@ public void start() { @Override public void startWithContent(final ContentDTO content) { - - MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<ApplicationInstanceDTO>() { - @Override - public void attempt() { - super.attempt(); - ServicesLocator.getServiceNavigation() - .getApp(content.getInstanceId(), content.getId(), content.getType(), this); - } - - @Override - public void onFailure(final Method method, final Throwable t) { - super.onFailure(method, t); - if (NetworkHelper.needToGoOffine(t)) { - Notification.alert(globalMsg.needToBeOnline()); - } else { - EventBus.getInstance().fireEvent(new ErrorEvent(t)); - } - } - - @Override - public void onSuccess(final Method method, - final ApplicationInstanceDTO app) { - super.onSuccess(method, app); - commentable = app.getCommentable(); - notifiable = app.getNotifiable(); - displayContent(content); - } - }; - action.attempt(); + displayContent(content); } private void displayContent(ContentDTO contentSource) { @@ -133,13 +106,39 @@ private void displayContent(ContentDTO contentSource) { @Override public void attempt() { - ServicesLocator.getServiceMedia().getMedia(contentSource.getId(), this); + ServicesLocator.getServiceMedia().getMedia(contentSource.getInstanceId(), contentSource.getId(), this); } @Override public void onSuccess(final Method method, final MediaDTO media) { super.onSuccess(method, media); - displayContent(media); + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<ApplicationInstanceDTO>() { + @Override + public void attempt() { + super.attempt(); + ServicesLocator.getServiceNavigation() + .getApp(media.getInstance(), media.getId(), contentSource.getType(), this); + } + @Override + public void onFailure(final Method method, final Throwable t) { + super.onFailure(method, t); + if (NetworkHelper.needToGoOffine(t)) { + Notification.alert(globalMsg.needToBeOnline()); + } else { + EventBus.getInstance().fireEvent(new ErrorEvent(t)); + } + } + + @Override + public void onSuccess(final Method method, + final ApplicationInstanceDTO app) { + super.onSuccess(method, app); + commentable = app.getCommentable(); + notifiable = app.getNotifiable(); + displayContent(media); + } + }; + action.attempt(); } }; action.attempt(); @@ -243,8 +242,8 @@ public void showContent(final NavigationShowContentEvent event) { event.getContent().getType().equals(ContentsTypes.Video.name()) || event.getContent().getType().equals(ContentsTypes.Streaming.name())) { startWithContent(event.getContent()); - } else if (event.getContent().getType().equals(ContentsTypes.Album.name())) { - + } else if (event.getContent().getType().equals(ContentsTypes.Album.name()) || + event.getContent().getType().equals(ContentsTypes.Folder.name())) { MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<ApplicationInstanceDTO>() { @Override public void attempt() { @@ -268,6 +267,7 @@ public void onSuccess(final Method method, page.show(); } }; + action.attempt(); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java index 11f9d9573..67fe52b3a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java @@ -42,6 +42,7 @@ import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.app.View; +import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.LoadingItem; @@ -49,6 +50,7 @@ import org.silverpeas.mobile.client.components.base.events.page.DataLoadedEvent; import org.silverpeas.mobile.client.components.base.events.page.LoadingDataFinishEvent; import org.silverpeas.mobile.client.components.base.events.page.MoreDataLoadedEvent; +import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.shared.dto.BaseDTO; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.RightDTO; @@ -69,6 +71,7 @@ public class MediaNavigationPage extends PageContent implements View, MediaNavig private RightDTO rights; private AlbumDTO root; private AddToFavoritesButton favorite = new AddToFavoritesButton(); + private ShareButton share = new ShareButton(); interface MediaNavigationPageUiBinder extends UiBinder<Widget, MediaNavigationPage> { } @@ -100,10 +103,13 @@ public void loadedDataEvent(final DataLoadedEvent event) { list.add(endline); actionsMenu.addAction(favorite); + actionsMenu.addAction(share); if (root.getId() == null) { favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), root.getName()); + share.init(root.getName(), root.getName(), LinksManager.createApplicationPermalink(instanceId)); } else { favorite.init(instanceId, root.getId(), ContentsTypes.Album.name(), root.getName()); + share.init(root.getName(), root.getName(),LinksManager.createAlbumPermalink(instanceId, root.getId())); } } Notification.activityStop(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java index bb49a23b8..086741dcb 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java @@ -63,6 +63,7 @@ import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer; import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.comments.CommentDTO; import org.silverpeas.mobile.shared.dto.media.PhotoDTO; @@ -90,6 +91,8 @@ interface PhotoPageUiBinder extends UiBinder<HTMLPanel, PhotoPage> { private NotifyButton notification = new NotifyButton(); private AddToFavoritesButton favorite = new AddToFavoritesButton(); + private ShareButton share = new ShareButton(); + private static PhotoPageUiBinder uiBinder = GWT.create(PhotoPageUiBinder.class); private PhotoDTO photo; private DocumentsResources ressources; @@ -172,6 +175,8 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { notification.init(photo.getInstance(), photo.getId(), NotificationDTO.TYPE_PHOTO, photo.getName(), getPageTitle()); actionsMenu.addAction(notification); } + share.init(photo.getTitle(),photo.getTitle(),"/silverpeas/Media/"+photo.getId()); + actionsMenu.addAction(share); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java index 909c600bf..8af2cca05 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java @@ -56,6 +56,7 @@ import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.app.View; +import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.common.navigation.UrlUtils; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; @@ -63,6 +64,7 @@ import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer; import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.comments.CommentDTO; @@ -89,6 +91,7 @@ interface SoundPageUiBinder extends UiBinder<HTMLPanel, SoundPage> { @UiField ActionsMenu actionsMenu; private NotifyButton notification = new NotifyButton(); + private ShareButton share = new ShareButton(); private AddToFavoritesButton favorite = new AddToFavoritesButton(); private static SoundPageUiBinder uiBinder = GWT.create(SoundPageUiBinder.class); private ApplicationResources resources = GWT.create(ApplicationResources.class); @@ -154,6 +157,8 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { notification.init(sound.getInstance(), sound.getId(), NotificationDTO.TYPE_SOUND, sound.getName(), getPageTitle()); actionsMenu.addAction(notification); } + share.init(sound.getTitle(),sound.getTitle(), LinksManager.createMediaPermalink(sound.getId())); + actionsMenu.addAction(share); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java index 54e1dc3b1..b3bad79c7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java @@ -59,6 +59,7 @@ import org.silverpeas.mobile.client.common.Html5Utils; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.app.View; +import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.common.navigation.UrlUtils; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; @@ -66,6 +67,7 @@ import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer; import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.comments.CommentDTO; @@ -92,6 +94,7 @@ interface VideoPageUiBinder extends UiBinder<HTMLPanel, VideoPage> { @UiField ActionsMenu actionsMenu; private NotifyButton notification = new NotifyButton(); + private ShareButton share = new ShareButton(); private AddToFavoritesButton favorite = new AddToFavoritesButton(); private static VideoPageUiBinder uiBinder = GWT.create(VideoPageUiBinder.class); @@ -173,6 +176,8 @@ public void onClick(final ClickEvent clickEvent) { notification.init(video.getInstance(), video.getId(), NotificationDTO.TYPE_VIDEO, video.getName(), getPageTitle()); actionsMenu.addAction(notification); } + share.init(video.getTitle(),video.getTitle(), LinksManager.createMediaPermalink(video.getId())); + actionsMenu.addAction(share); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java index 084074db2..b1cbf9395 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java @@ -51,12 +51,14 @@ import org.silverpeas.mobile.client.apps.notifications.pages.widgets.NotifyButton; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.app.View; +import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer; import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.comments.CommentDTO; @@ -85,6 +87,7 @@ interface VideoStreamingPageUiBinder extends UiBinder<HTMLPanel, VideoStreamingP ActionsMenu actionsMenu; private NotifyButton notification = new NotifyButton(); + private ShareButton share = new ShareButton(); private AddToFavoritesButton favorite = new AddToFavoritesButton(); private static VideoStreamingPageUiBinder uiBinder = GWT.create(VideoStreamingPageUiBinder.class); private VideoStreamingDTO video; @@ -135,6 +138,8 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { notification.init(video.getInstance(), video.getId(), NotificationDTO.TYPE_STREAMING, video.getName(), getPageTitle()); actionsMenu.addAction(notification); } + share.init(video.getTitle(),video.getTitle(), LinksManager.createMediaPermalink(video.getId())); + actionsMenu.addAction(share); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java index 8231e7a0d..01de7117a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java @@ -167,4 +167,22 @@ public static void onSpeechStop() { public static void onSpeechError() { EventBus.getInstance().fireEvent(new SpeechErrorEvent()); } + + public static native boolean canShare(String title, String text, String url) /*-{ + var shareData = { + title: title, + text: text, + url: url + }; + return $wnd.navigator.canShare(shareData); + }-*/; + + public static native void share(String title, String text, String url) /*-{ + var shareData = { + title: title, + text: text, + url: url + }; + $wnd.navigator.share(shareData); + }-*/; } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java index 18e098104..5da0be052 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java @@ -52,6 +52,17 @@ public static void navigateToPermalink(String url) { processLink(dto); } + public static String createApplicationPermalink(String instanceId) { + return "/silverpeas/Component/" + instanceId; + } + + public static String createAlbumPermalink(String instanceId, String id) { + return "/silverpeas/Topic/"+id+"?ComponentId=" + instanceId; + } + + public static String createMediaPermalink(String id) { + return "/silverpeas/Media/"+id; + } public static void processLink(HyperLinkDTO hyperLinkDTO) { String url = hyperLinkDTO.getUrl(); if(sameContext(url)) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java new file mode 100644 index 000000000..fee1e8e2b --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.components.base.widgets; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.HTMLPanel; +import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages; +import org.silverpeas.mobile.client.common.Html5Utils; +import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.resources.ApplicationMessages; + +/** + * @author: svu + */ +public class ShareButton extends ActionItem { + interface ShareButtonUiBinder extends UiBinder<HTMLPanel, ShareButton> { + } + + private static ShareButtonUiBinder uiBinder = GWT.create(ShareButtonUiBinder.class); + + @UiField HTMLPanel container; + @UiField Anchor share; + + @UiField(provided = true) protected ApplicationMessages msg = null; + private String title, text, url; + + public ShareButton() { + msg = GWT.create(ApplicationMessages.class); + initWidget(uiBinder.createAndBindUi(this)); + setId("share"); + } + public void init(String title, String text, String url) { + this.title = title; + this.text = text; + this.url = url; + try { + if (!Html5Utils.canShare(title, text, url)) { + setVisible(false); + } + } catch(Throwable t) { + setVisible(false); + } + } + @UiHandler("share") + void share(ClickEvent event) { + Html5Utils.share(title, text, url); + + // hide menu + getElement().getParentElement().removeAttribute("style"); + } + + + +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.ui.xml new file mode 100644 index 000000000..74291968a --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.ui.xml @@ -0,0 +1,33 @@ +<!-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "https://www.silverpeas.org/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui'> + + <ui:with field='msg' type='org.silverpeas.mobile.client.resources.ApplicationMessages'/> + + <g:HTMLPanel tag="li" ui:field="container" styleName=""> + <g:Anchor styleName="" ui:field="share" text="{msg.share}"/> + </g:HTMLPanel> +</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java index 8063e7e6f..04109afb8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java @@ -194,4 +194,7 @@ public interface ApplicationMessages extends Messages { @DefaultMessage("Mes partages") String shares(); + + @DefaultMessage("Partager") + String share(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties index 1cd6f4c6a..db07d07f6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties @@ -82,4 +82,6 @@ showPwd=Show password received=Received sended=Sended -notfoundError=Ressource not found \ No newline at end of file +notfoundError=Ressource not found + +share=Share \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties index 53763656e..b69627d60 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties @@ -87,4 +87,6 @@ showPwd=Afficher le mot de passe received=Reçues sended=Envoyées -notfoundError=Ressource non trouv�e \ No newline at end of file +notfoundError=Ressource non trouv�e + +share=Partager \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/add.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/add.svg new file mode 100644 index 000000000..62c119a4f --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/add.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index a80f5104d..b7dee4cd9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -756,6 +756,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { #silverpeas-navmenu-panel #navmenu-panel li#menu-home a { background: transparent url('icons/home.svg') no-repeat; + } #silverpeas-navmenu-panel #navmenu-panel li#menu-logout a { @@ -817,8 +818,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { .ui-listview > li.add-media a::after, .ui-listview > li.add-task a::after { - background-position: right -599px; - width: 3em; + background: transparent url('icons/add.svg') no-repeat; } .publication.ui-input-text { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java index c8d846b16..d2ee200d6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMedia.java @@ -174,38 +174,6 @@ private String createPhoto(String name, String userId, String componentId, return newMedia.getId(); } - - /** - * Retourne la listes des galleries accessibles. - */ - @GET - @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) - @Path("allGalleries") - public List<ApplicationInstanceDTO> getAllGalleries(){ - - ArrayList<ApplicationInstanceDTO> results = new ArrayList<ApplicationInstanceDTO>(); - try { - String [] rootSpaceIds = Administration.get().getAllRootSpaceIds(); - for (String rootSpaceId : rootSpaceIds) { - String [] componentIds = Administration.get().getAvailCompoIds(rootSpaceId); - for (String componentId : componentIds) { - ComponentInstLight instance = Administration.get().getComponentInstLight(componentId); - if (instance.getName().equals("gallery")) { - ApplicationInstanceDTO i = new ApplicationInstanceDTO(); - i.setId(instance.getId()); - i.setLabel(instance.getLabel()); - results.add(i); - } - } - } - } catch (Exception e) { - SilverLogger.getLogger(this).error("ServiceMediaImpl.getAllGalleries", "root.EX_NO_MESSAGE", e); - } - - Collections.sort(results); - return results; - } - /** * Retourne la liste des albums d'une appli media. */ @@ -296,7 +264,7 @@ private List<MediaDTO> getMedias(String instanceId, String albumId) throws Media @GET @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) @Path("media/{id}") - public MediaDTO getMedia(@PathParam("id") String id) { + public MediaDTO getMedia(@PathParam("appId") String instanceId, @PathParam("id") String id) { MediaDTO dto = null; try { Media media = getGalleryService().getMedia(new MediaPK(id)); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java index 5ef688498..1e8fce900 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMedia.java @@ -48,26 +48,14 @@ @Path("/mobile/medialib") public interface ServiceMedia extends RestService { - @GET - @Path("{appId}/question/all") - public void getAllQuestions(@PathParam("appId") String appId, - MethodCallback<List<QuestionDTO>> callback); - - - @GET @Path("add/{name}/{data}/{idGallery}/{idAlbum}") public void uploadPicture(@PathParam("name") String name, @PathParam("data") String data, @PathParam("idGallery") String idGallery, @PathParam("idAlbum") String idAlbum, MethodCallback<Void> callback); @GET @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) - @Path("allGalleries") - public void getAllGalleries(MethodCallback<List<ApplicationInstanceDTO>> callback); - - @GET - @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) - @Path("media/{id}") - public void getMedia(@PathParam("id") String id, MethodCallback<MediaDTO> callback); + @Path("{appId}/media/{id}") + public void getMedia(@PathParam("appId") String instanceId, @PathParam("id") String id, MethodCallback<MediaDTO> callback); @GET @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) From 007974b9205a4f9c5caee776555741a3c2d7544d Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 24 Dec 2023 23:35:33 +0100 Subject: [PATCH 113/228] Update dependency on Silverpeas to version 6.4-JR-build231224 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 376efc165..602741874 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231221</silverpeas.version> + <silverpeas.version>6.4-JR-build231224</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 44a9f0d3a4231cc4cd5695fd230e46eb611d9465 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 27 Dec 2023 11:40:29 +0100 Subject: [PATCH 114/228] animate menu --- .../components/base/NavigationMenu.java | 16 +-- .../mobile/client/components/base/Page.java | 1 + .../client/components/base/PageHeader.java | 23 ++- .../client/components/base/PageHeader.ui.xml | 9 +- .../silverpeas/mobile/public/components.css | 132 ++++++++++++++++++ .../org/silverpeas/mobile/public/spmobile.css | 25 ---- 6 files changed, 165 insertions(+), 41 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java index c65fdaf27..2baf2470c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java @@ -160,7 +160,7 @@ protected void searchIos(ClickEvent event) { @UiHandler("home") protected void goHome(ClickEvent event) { goHome(); - closeMenu(); + SpMobil.getMainPage().closeMenu(); } static void goHome() { @@ -178,7 +178,7 @@ protected void goSharesBox(ClickEvent event) { ContentDTO content = new ContentDTO(); content.setType(ContentsTypes.SharesBox.toString()); EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content)); - closeMenu(); + SpMobil.getMainPage().closeMenu(); } @UiHandler("notifications") @@ -186,31 +186,31 @@ protected void goNotificationsBox(ClickEvent event) { ContentDTO content = new ContentDTO(); content.setType(ContentsTypes.NotificationsBox.toString()); EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content)); - closeMenu(); + SpMobil.getMainPage().closeMenu(); } @UiHandler("help") protected void goHelp(ClickEvent event) { - closeMenu(); + SpMobil.getMainPage().closeMenu(); } @UiHandler("config") protected void goConfig(ClickEvent event) { App app = new ConfigApp(); app.start(); - closeMenu(); + SpMobil.getMainPage().closeMenu(); } @UiHandler("updateStatus") protected void updateStatus(ClickEvent event) { App app = new ProfileApp(); app.start(); - closeMenu(); + SpMobil.getMainPage().closeMenu(); } @UiHandler("disconnect") protected void disconnect(ClickEvent event) { - closeMenu(); + SpMobil.getMainPage().closeMenu(); AuthentificationManager.getInstance().logout(); } @@ -220,7 +220,7 @@ protected void calendar(ClickEvent event) { app.setId("userCalendar" + SpMobil.getUser().getId() + "_PCI"); app.setType(Apps.userCalendar.name()); EventBus.getInstance().fireEvent(new NavigationAppInstanceChangedEvent(app)); - closeMenu(); + SpMobil.getMainPage().closeMenu(); } public void setUser(DetailUserDTO currentUser) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java index c6f6312ca..05d596566 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java @@ -83,6 +83,7 @@ public void toogleMenu() { public void closeMenu() { menu.closeMenu(); + header.closeMenuButton(); } public void setUser(DetailUserDTO user) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java index 8a1f7cb77..32e20dcac 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java @@ -30,10 +30,7 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HTMLPanel; -import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.user.client.ui.*; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.common.navigation.PageHistory; import org.silverpeas.mobile.client.common.resources.ResourcesManager; @@ -48,8 +45,9 @@ interface PageHeaderUiBinder extends UiBinder<Widget, PageHeader> { } @UiField protected HTMLPanel header; - @UiField protected Anchor menu, back; + @UiField protected Anchor back; @UiField protected HeadingElement title; + @UiField protected HTML menu; @UiField(provided = true) protected ApplicationMessages msg = null; protected ApplicationResources ressources = null; @@ -60,13 +58,12 @@ public PageHeader() { header.getElement().setId("header"); menu.getElement().setId("menu"); ressources.css().ensureInjected(); - title.setInnerText(ResourcesManager.getLabel("mainpage.title")); } - @UiHandler("menu") void onMenu(ClickEvent event) { + toogleMenuButton(); SpMobil.getMainPage().toogleMenu(); } @@ -75,6 +72,18 @@ void onBack(ClickEvent event) { PageHistory.getInstance().back(); } + public void toogleMenuButton() { + if (menu.getStylePrimaryName().equals("active")) { + closeMenuButton(); + } else { + menu.setStylePrimaryName("active"); + } + } + + public void closeMenuButton() { + menu.setStylePrimaryName("not-active"); + } + public void showOfflineIndicator() { menu.addStyleName(ressources.css().offline()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml index 350b2ce31..c14640182 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml @@ -28,7 +28,14 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.resources.ApplicationMessages'/> <g:HTMLPanel ui:field="header"> - <g:Anchor ui:field="menu" styleName="ui-icon-bars"></g:Anchor> + <div class="box"> + <g:HTML ui:field="menu" stylePrimaryName="not-active"> + <span></span> + <span></span> + <span></span> + </g:HTML> + </div> + <h1 ui:field="title" class="ui-title">Silverpeas</h1> <g:Anchor ui:field="back" styleName="ui-btn-right ui-btn-corner-all ui-btn ui-icon-grid ui-shadow back" text="{msg.back}"/> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css index c238d74c3..ec7120dd4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css @@ -48,4 +48,136 @@ .checkbox-wrapper label:active:after { width: 55%; +} + +/** Menu **************************************************************************************************************/ + +#header > .box { + border-radius: 2px; + position: absolute; + left:9px; + top:9px; + width: 35px; + height: 35px; +} + + +#header > div > div > span { + display: block; + width: 100%; + box-shadow: 0 2px 10px 0 rgba(0,0,0,0.3); + border-radius: 2em; + height: 5px; + background: #fff; + transition: all .3s; + position: relative; +} + +#header > div > div > span + span { + margin-top: 7px; +} + +.active span:nth-child(1) { + animation: ease .7s top forwards; +} + +.not-active span:nth-child(1) { + animation: ease .7s top-2 forwards; +} + +.active span:nth-child(2) { + animation: ease .7s scaled forwards; +} + +.not-active span:nth-child(2) { + animation: ease .7s scaled-2 forwards; +} + +.active span:nth-child(3) { + animation: ease .7s bottom forwards; +} + +.not-active span:nth-child(3) { + animation: ease .7s bottom-2 forwards; +} + +@keyframes top { + 0% { + top: 0; + transform: rotate(0); + } + 50% { + top: 12px; + transform: rotate(0); + } + 100% { + top: 12px; + transform: rotate(45deg); + } +} + +@keyframes top-2 { + 0% { + top: 12px; + transform: rotate(45deg); + } + 50% { + top: 12px; + transform: rotate(0deg); + } + 100% { + top: 0; + transform: rotate(0deg); + } +} + +@keyframes bottom { + 0% { + bottom: 0; + transform: rotate(0); + } + 50% { + bottom: 12px; + transform: rotate(0); + } + 100% { + bottom: 12px; + transform: rotate(135deg); + } +} + +@keyframes bottom-2 { + 0% { + bottom: 12px; + transform: rotate(135deg); + } + 50% { + bottom: 12px; + transform: rotate(0); + } + 100% { + bottom: 0; + transform: rotate(0); + } +} + +@keyframes scaled { + 50% { + transform: scale(0); + } + 100% { + transform: scale(0); + } +} + +@keyframes scaled-2 { + 0% { + transform: scale(0); + } + 50% { + transform: scale(0); + } + 100% { + transform: scale(1); + } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index b7dee4cd9..49d72339a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -489,31 +489,6 @@ html .ui-controlgroup-controls .ui-btn-up-c { text-shadow: 0 1px 0 #000; } -.ui-icon-bars:after { - width: 18px; - height: 18px; - content: ""; - display: block; - position: absolute; - top: 14px; - left: 14px; - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M1%2C4h12c0.553%2C0%2C1-0.447%2C1-1s-0.447-1-1-1H1C0.447%2C2%2C0%2C2.447%2C0%2C3S0.447%2C4%2C1%2C4z%20M13%2C6H1%20C0.447%2C6%2C0%2C6.447%2C0%2C7c0%2C0.553%2C0.447%2C1%2C1%2C1h12c0.553%2C0%2C1-0.447%2C1-1C14%2C6.447%2C13.553%2C6%2C13%2C6z%20M13%2C10H1c-0.553%2C0-1%2C0.447-1%2C1%20s0.447%2C1%2C1%2C1h12c0.553%2C0%2C1-0.447%2C1-1S13.553%2C10%2C13%2C10z%22%2F%3E%3C%2Fsvg%3E"); - background-position: center center; - background-repeat: no-repeat; - background-size: 100%; - z-index: -1; -} - -.ui-icon-bars { - border-right: 2px solid #151515; - width: 44px; - height: 44px; - padding: 0; - text-indent: -9999px; - display: block; - position: relative; -} - .ui-btn-right.back { background: #4c4c4c url(bg-degrade.png) bottom center repeat-x; color: #FFF; From d088dc3b6c0bba6f1b18c51eaa919eb53d16b9b9 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 27 Dec 2023 14:36:18 +0100 Subject: [PATCH 115/228] fix post display --- .../java/org/silverpeas/mobile/client/apps/blog/BlogApp.java | 5 ++--- .../mobile/client/apps/blog/pages/widgets/BlogItem.java | 1 + .../mobile/client/apps/documents/DocumentsApp.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/BlogApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/BlogApp.java index cdf39b769..bd971e74e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/BlogApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/BlogApp.java @@ -25,6 +25,7 @@ package org.silverpeas.mobile.client.apps.blog; import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Window; import org.fusesource.restygwt.client.Method; import org.silverpeas.mobile.client.apps.blog.events.app.AbstractBlogAppEvent; import org.silverpeas.mobile.client.apps.blog.events.app.BlogAppEventHandler; @@ -98,8 +99,6 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { @Override public void showContent(final NavigationShowContentEvent event) { - if (event.getContent().getType().equals("Component") && event.getContent().getInstanceId().startsWith(Apps.blog.name())) { - super.showContent(event); - } + // Managed by Document app } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/widgets/BlogItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/widgets/BlogItem.java index 6c4e162d1..e0bfe3a8b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/widgets/BlogItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/widgets/BlogItem.java @@ -77,6 +77,7 @@ public void onClick(final ClickEvent event) { ContentDTO content = new ContentDTO(); content.setId(data.getId()); content.setType(ContentsTypes.Publication.toString()); + content.setInstanceId(data.getInstanceId()); EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content)); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java index cbc4e3c97..5ad48dff1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java @@ -212,9 +212,9 @@ public void execute() { event.getContent().getType().equals(ContentsTypes.News.name()) || event.getContent().getType().equals(ContentsTypes.Attachment.name()) || event.getContent().getType().equals(ContentsTypes.Folder.name())) { - if (event.getContent().getInstanceId().startsWith("kmelia") || - event.getContent().getInstanceId().startsWith("quickinfo")) { + event.getContent().getInstanceId().startsWith("quickinfo") || + event.getContent().getInstanceId().startsWith("blog")) { loadAppInstance(event.getContent(), new Command() { @Override public void execute() { From a6ba2677dba2f3454bb370edc011be9b9580f216 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 27 Dec 2023 15:48:08 +0100 Subject: [PATCH 116/228] Feature #13904 --- .../silverpeas/mobile/client/apps/blog/pages/BlogPage.java | 5 +++++ .../silverpeas/mobile/client/apps/news/pages/NewsPage.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java index e710dc25a..949cf2b53 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java @@ -40,9 +40,11 @@ import org.silverpeas.mobile.client.apps.blog.resources.BlogMessages; import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton; import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.blog.PostDTO; @@ -67,6 +69,7 @@ public class BlogPage extends PageContent implements BlogPagesEventHandler { ListBox categories; private AddToFavoritesButton favorite = new AddToFavoritesButton(); + private ShareButton share = new ShareButton(); private String instanceId; interface BlogPageUiBinder extends UiBinder<Widget, BlogPage> { @@ -131,6 +134,8 @@ public int compare(Map.Entry<String, String> o1, actionsMenu.addAction(favorite); favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), getPageTitle()); + actionsMenu.addAction(share); + share.init(getPageTitle(), getPageTitle(), LinksManager.createApplicationPermalink(instanceId)); } @UiHandler("categories") diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java index 8f795ff4f..39f1caafe 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java @@ -36,9 +36,11 @@ import org.silverpeas.mobile.client.apps.news.pages.widgets.NewsItem; import org.silverpeas.mobile.client.apps.news.resources.NewsMessages; import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.news.NewsDTO; @@ -53,6 +55,7 @@ public class NewsPage extends PageContent implements NewsPagesEventHandler { @UiField ActionsMenu actionsMenu; private AddToFavoritesButton favorite = new AddToFavoritesButton(); + private ShareButton share = new ShareButton(); private String instanceId; interface NewsPageUiBinder extends UiBinder<Widget, NewsPage> { @@ -87,6 +90,8 @@ public void onNewsLoad(final NewsLoadedEvent event) { } actionsMenu.addAction(favorite); favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), getPageTitle()); + actionsMenu.addAction(share); + share.init(getPageTitle(), getPageTitle(), LinksManager.createApplicationPermalink(instanceId)); } } \ No newline at end of file From 8fb78995d32e3ac8c84b92be3fdb86ff02643639 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 27 Dec 2023 16:13:17 +0100 Subject: [PATCH 117/228] adjust menu --- .../silverpeas/mobile/public/components.css | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css index ec7120dd4..9efc575c0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css @@ -55,10 +55,10 @@ #header > .box { border-radius: 2px; position: absolute; - left:9px; - top:9px; - width: 35px; - height: 35px; + left:12px; + top:12px; + width: 30px; + height: 30px; } @@ -67,14 +67,14 @@ width: 100%; box-shadow: 0 2px 10px 0 rgba(0,0,0,0.3); border-radius: 2em; - height: 5px; + height: 4px; background: #fff; transition: all .3s; position: relative; } #header > div > div > span + span { - margin-top: 7px; + margin-top: 5px; } .active span:nth-child(1) { @@ -107,22 +107,22 @@ transform: rotate(0); } 50% { - top: 12px; + top: 9px;; transform: rotate(0); } 100% { - top: 12px; + top: 9px;; transform: rotate(45deg); } } @keyframes top-2 { 0% { - top: 12px; + top: 9px;; transform: rotate(45deg); } 50% { - top: 12px; + top: 9px;; transform: rotate(0deg); } 100% { @@ -137,22 +137,22 @@ transform: rotate(0); } 50% { - bottom: 12px; + bottom: 9px;; transform: rotate(0); } 100% { - bottom: 12px; + bottom: 9px;; transform: rotate(135deg); } } @keyframes bottom-2 { 0% { - bottom: 12px; + bottom: 9px;; transform: rotate(135deg); } 50% { - bottom: 12px; + bottom: 9px;; transform: rotate(0); } 100% { @@ -180,4 +180,4 @@ 100% { transform: scale(1); } -} \ No newline at end of file +} From fb057095d4f59b6a231fbf58a99389b4cbeacf43 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 27 Dec 2023 17:54:01 +0100 Subject: [PATCH 118/228] offline indicator adjustement --- .../silverpeas/mobile/client/components/base/PageHeader.java | 4 ++-- .../org/silverpeas/mobile/client/resources/application.css | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java index 32e20dcac..068b9d42b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java @@ -85,11 +85,11 @@ public void closeMenuButton() { } public void showOfflineIndicator() { - menu.addStyleName(ressources.css().offline()); + header.addStyleName(ressources.css().offline()); } public void hideOfflineIndicator() { - menu.removeStyleName(ressources.css().offline()); + header.removeStyleName(ressources.css().offline()); } public void setVisibleBackButton(boolean visible) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/application.css b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/application.css index 86551fd1e..e06fd4c29 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/application.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/application.css @@ -27,4 +27,6 @@ overflow: inherit; height: inherit; width: inherit; + background-position-x: -5px; + background-position-y: -5px; } \ No newline at end of file From 382f33d52c317d228861f73f6b266f9a4f95a46b Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Wed, 27 Dec 2023 23:38:49 +0100 Subject: [PATCH 119/228] Update dependency on Silverpeas to version 6.4-JR-build231227 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 602741874..3dc5ba1ba 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231224</silverpeas.version> + <silverpeas.version>6.4-JR-build231227</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 9cca2a01c2b702797a4947858e4fd773029d6033 Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 31 Dec 2023 23:35:58 +0100 Subject: [PATCH 120/228] Update dependency on Silverpeas to version 6.4-JR-build231231 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3dc5ba1ba..715c21b83 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231227</silverpeas.version> + <silverpeas.version>6.4-JR-build231231</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 45f8cd8505734160689520527512b8c006a6f400 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 2 Jan 2024 16:55:54 +0100 Subject: [PATCH 121/228] new back button --- .../client/components/base/PageHeader.ui.xml | 2 +- .../silverpeas/mobile/public/icons/arrow_back.svg | 4 ++++ .../java/org/silverpeas/mobile/public/spmobile.css | 14 ++++++-------- .../src/main/webapp/WEB-INF/manifest.json.template | 2 ++ 4 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_back.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml index c14640182..67b6fff74 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml @@ -37,6 +37,6 @@ </div> <h1 ui:field="title" class="ui-title">Silverpeas</h1> - <g:Anchor ui:field="back" styleName="ui-btn-right ui-btn-corner-all ui-btn ui-icon-grid ui-shadow back" text="{msg.back}"/> + <g:Anchor ui:field="back" styleName="ui-btn-right ui-btn-corner-all ui-btn ui-icon-grid back" text=""/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_back.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_back.svg new file mode 100644 index 000000000..a7d784dfd --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/arrow_back.svg @@ -0,0 +1,4 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"> + <path d="M0 0h36v36h-36z" fill="none"/> + <path d="M30 16.5h-18.26l8.38-8.38-2.12-2.12-12 12 12 12 2.12-2.12-8.38-8.38h18.26v-3z" fill="#fff"/> +</svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 49d72339a..f4742319a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -490,14 +490,12 @@ html .ui-controlgroup-controls .ui-btn-up-c { } .ui-btn-right.back { - background: #4c4c4c url(bg-degrade.png) bottom center repeat-x; - color: #FFF; - text-shadow: 0 1px 0 #000; - border: 1px solid #000; - height: 28px; - line-height: 28px; - padding: 0 1em; - font-size: 0.8em; + background: url('icons/arrow_back.svg') no-repeat; + border: none; + height: 44px; + width: 36px; + margin: 4px 0 0 0; + padding: 0 0 0 0; } /* HOME */ diff --git a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template index 66f37f344..81dbc989c 100644 --- a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template +++ b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template @@ -1,12 +1,14 @@ { "name": "Silverpeas Mobile", "short_name": "SpMobile", + "id": "spmobile", "background_color": "#FFFFFF", "description": "Version mobile de Silverpeas", "orientation": "portrait-primary", "scope": "/silverpeas/spmobile/", "start_url": "/silverpeas/spmobile/spmobil.jsp", "display": "standalone", + "display_override": ["standalone", "minimal-ui"], "theme_color": "#00FF00", "icons": [ { From e3db15acd4c682fe6bed5d24ace1fc664a2ec4e5 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 2 Jan 2024 18:33:02 +0100 Subject: [PATCH 122/228] Fix multi display of main page --- .../org/silverpeas/mobile/client/SpMobil.java | 2 ++ .../network/MethodCallbackOnlineOnly.java | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index 5eae9a551..a894927b9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -280,6 +280,7 @@ public static void displayMainPage() { getMainPage().setUser(user); RootPanel.get().clear(); RootPanel.get().add(getMainPage()); + PageHistory.getInstance().clear(); PageHistory.getInstance().goTo(new HomePage()); if ((shortcutAppId != null && shortcutContentType != null && shortcutContentId != null) || @@ -394,6 +395,7 @@ public void onFailure(final Method method, final Throwable t) { tryToRelogin(attempt); } }; + action.setRelogin(false); action.attempt(); } else { //Login diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/MethodCallbackOnlineOnly.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/MethodCallbackOnlineOnly.java index 02dc28f59..b38871867 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/MethodCallbackOnlineOnly.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/MethodCallbackOnlineOnly.java @@ -43,12 +43,17 @@ public abstract class MethodCallbackOnlineOnly<T> implements MethodCallback<T> { private static ApplicationMessages msg = GWT.create(ApplicationMessages.class); + private boolean relogin = true; public void attempt() { Notification.activityStart(); NetworkHelper.updateConnexionIndicator(); } + public void setRelogin(boolean relogin) { + this.relogin = relogin; + } + @Override public void onFailure(final Method method, final Throwable t) { Notification.activityStop(); @@ -57,12 +62,14 @@ public void onFailure(final Method method, final Throwable t) { if (SpMobil.isSSO()) { Window.Location.assign(ResourcesManager.getSSOPath()); } else { - SpMobil.getInstance().loadIds(new Command() { - @Override - public void execute() { - attempt(); - } - }); + if (relogin) { + SpMobil.getInstance().loadIds(new Command() { + @Override + public void execute() { + attempt(); + } + }); + } } } else if (method.getResponse().getStatusCode() == 404) { new Popin(msg.notfoundError()).show(); From d9bbf8c20f3c1a937ec027a105356b19f2599c1d Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 3 Jan 2024 15:05:21 +0100 Subject: [PATCH 123/228] new shortcuts apparence --- .../mobile/public/icons/chat_shortcut.svg | 1 + .../mobile/public/icons/contacts_shortcut.svg | 1 + .../mobile/public/icons/favorites_shortcut.svg | 1 + .../mobile/public/icons/home_shortcut.svg | 1 + .../mobile/public/icons/tasks_shortcut.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 15 ++++++++------- 6 files changed, 13 insertions(+), 7 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat_shortcut.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts_shortcut.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/favorites_shortcut.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home_shortcut.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks_shortcut.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat_shortcut.svg new file mode 100644 index 000000000..960bb0c16 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 9h12v2H6V9zm8 5H6v-2h8v2zm4-6H6V6h12v2z" fill="#7eb73b"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts_shortcut.svg new file mode 100644 index 000000000..19ef8754c --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z" fill="none"/><path d="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z" fill="#7eb73b"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/favorites_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/favorites_shortcut.svg new file mode 100644 index 000000000..89c8ae677 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/favorites_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M0 0h24v24H0z" fill="none"/><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" fill="#7eb73b"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home_shortcut.svg new file mode 100644 index 000000000..ffbb6ce97 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z" fill="#7eb73b"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks_shortcut.svg new file mode 100644 index 000000000..4447876ec --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><rect fill="none" height="24" width="24"/><path d="M11,7H2v2h9V7z M11,15H2v2h9V15z M16.34,11l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,5.34L16.34,11z M16.34,19 l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,13.34L16.34,19z" fill="#7eb73b"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index f4742319a..d16431ac8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -449,28 +449,29 @@ html .ui-controlgroup-controls .ui-btn-up-c { top: auto; flex: 1; text-indent: -300em; - border-left: 1px solid #151515; - border-right: 1px solid #444444; + transform: scale(1.5); } #navigation-footer .btn-list-navigation { - background: transparent url(packImagesNavigation.png) center -640px no-repeat; + background: transparent url('icons/home_shortcut.svg') center no-repeat; } #navigation-footer .btn-find-contact { - background: transparent url(packImagesNavigation.png) center -709px no-repeat; + background: transparent url('icons/contacts_shortcut.svg') center no-repeat; + transform: scale(1.2); } #navigation-footer .btn-update-tchat { - background: transparent url(packImagesNavigation.png) center -771px no-repeat; + background: transparent url('icons/chat_shortcut.svg') center no-repeat; + transform: scale(1.2); } #navigation-footer .btn-list-task { - background: transparent url(packImagesNavigation.png) center -835px no-repeat; + background: transparent url('icons/tasks_shortcut.svg') center no-repeat; } #navigation-footer .btn-list-favoris { - background: transparent url(packImagesNavigation.png) center -892px no-repeat; + background: transparent url('icons/favorites_shortcut.svg') center no-repeat; } #header h1 { From afc9162799e15c00097a5991ae0f03c1b7b3edc5 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 3 Jan 2024 16:10:38 +0100 Subject: [PATCH 124/228] notifications filter adjustement --- .../src/main/java/org/silverpeas/mobile/public/spmobile.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index d16431ac8..45a773e84 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -476,7 +476,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { #header h1 { color: #fff; - font-size: 1em; + font-size: 1.1em; font-weight: normal; left: 60px; line-height: 44px; @@ -487,7 +487,6 @@ html .ui-controlgroup-controls .ui-btn-up-c { right: 94px; top: 1px; height: 44px; - text-shadow: 0 1px 0 #000; } .ui-btn-right.back { @@ -1565,6 +1564,7 @@ textarea.ui-input-text { .ui-controlgroup-horizontal .ui-controlgroup-controls { display: inline-block; vertical-align: middle; + margin-top:0.5em; } .ui-controlgroup-controls, .ui-controlgroup-controls .ui-radio, .ui-controlgroup-controls .ui-checkbox, .ui-controlgroup-controls .ui-select, .ui-controlgroup-controls li { @@ -1934,7 +1934,7 @@ form .forms .fields > li:nth-child(even) { } .content > .ui-listview.ui-listview-inset { - padding-top: 3.25em; + padding-top: 3em; } .content-navigation { From b69b66dcd16655a4639c68f3348b1dbbba188176 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 3 Jan 2024 18:14:53 +0100 Subject: [PATCH 125/228] change icons --- .../mobile/public/icons/apps/blog.svg | 1 + .../mobile/public/icons/apps/book_online.svg | 1 + .../mobile/public/icons/apps/calendar.svg | 1 + .../mobile/public/icons/apps/classifieds.svg | 1 + .../mobile/public/icons/apps/faq.svg | 1 + .../mobile/public/icons/apps/folder.svg | 1 + .../mobile/public/icons/apps/form.svg | 1 + .../mobile/public/icons/apps/link.svg | 1 + .../public/icons/apps/media_library.svg | 1 + .../mobile/public/icons/apps/news.svg | 1 + .../mobile/public/icons/apps/poll.svg | 1 + .../mobile/public/icons/apps/quiz.svg | 1 + .../mobile/public/icons/apps/webpage.svg | 1 + .../mobile/public/icons/apps/workflow.svg | 1 + .../mobile/public/icons/comment.svg | 1 + .../silverpeas/mobile/public/icons/event.svg | 1 + .../public/icons/favorites_shortcut.svg | 2 +- .../silverpeas/mobile/public/icons/media.svg | 1 + .../mobile/public/icons/publication.svg | 1 + .../silverpeas/mobile/public/icons/trash.svg | 1 + .../org/silverpeas/mobile/public/spmobil.jsp | 176 ++++++++++++++++++ .../org/silverpeas/mobile/public/spmobile.css | 78 +++++--- 22 files changed, 253 insertions(+), 22 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/blog.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/book_online.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/calendar.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/classifieds.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/faq.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/folder.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/form.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/link.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/media_library.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/news.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/poll.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/quiz.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/webpage.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/workflow.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/comment.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/event.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/media.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/publication.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/trash.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/spmobil.jsp diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/blog.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/blog.svg new file mode 100644 index 000000000..b3be43d4a --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/blog.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M560-564v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-600q-38 0-73 9.5T560-564Zm0 220v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-380q-38 0-73 9t-67 27Zm0-110v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-490q-38 0-73 9.5T560-454ZM260-320q47 0 91.5 10.5T440-278v-394q-41-24-87-36t-93-12q-36 0-71.5 7T120-692v396q35-12 69.5-18t70.5-6Zm260 42q44-21 88.5-31.5T700-320q36 0 70.5 6t69.5 18v-396q-33-14-68.5-21t-71.5-7q-47 0-93 12t-87 36v394Zm-40 118q-48-38-104-59t-116-21q-42 0-82.5 11T100-198q-21 11-40.5-1T40-234v-482q0-11 5.5-21T62-752q46-24 96-36t102-12q58 0 113.5 15T480-740q51-30 106.5-45T700-800q52 0 102 12t96 36q11 5 16.5 15t5.5 21v482q0 23-19.5 35t-40.5 1q-37-20-77.5-31T700-240q-60 0-116 21t-104 59ZM280-494Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/book_online.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/book_online.svg new file mode 100644 index 000000000..19fca0725 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/book_online.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><rect fill="none" height="24" width="24"/><g><path d="M17,1H7C5.9,1,5,1.9,5,3v18c0,1.1,0.9,2,2,2h10c1.1,0,2-0.9,2-2V3C19,1.9,18.1,1,17,1z M7,18V6h10v12H7z M16,11V9.14 C16,8.51,15.55,8,15,8H9C8.45,8,8,8.51,8,9.14l0,1.96c0.55,0,1,0.45,1,1c0,0.55-0.45,1-1,1l0,1.76C8,15.49,8.45,16,9,16h6 c0.55,0,1-0.51,1-1.14V13c-0.55,0-1-0.45-1-1C15,11.45,15.45,11,16,11z M12.5,14.5h-1v-1h1V14.5z M12.5,12.5h-1v-1h1V12.5z M12.5,10.5h-1v-1h1V10.5z"/></g></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/calendar.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/calendar.svg new file mode 100644 index 000000000..f0eb348d9 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/calendar.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/classifieds.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/classifieds.svg new file mode 100644 index 000000000..c7605a5e8 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/classifieds.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-80q-33 0-56.5-23.5T200-160q0-33 23.5-56.5T280-240q33 0 56.5 23.5T360-160q0 33-23.5 56.5T280-80Zm400 0q-33 0-56.5-23.5T600-160q0-33 23.5-56.5T680-240q33 0 56.5 23.5T760-160q0 33-23.5 56.5T680-80ZM246-720l96 200h280l110-200H246Zm-38-80h590q23 0 35 20.5t1 41.5L692-482q-11 20-29.5 31T622-440H324l-44 80h480v80H280q-45 0-68-39.5t-2-78.5l54-98-144-304H40v-80h130l38 80Zm134 280h280-280Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/faq.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/faq.svg new file mode 100644 index 000000000..10b5689af --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/faq.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/folder.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/folder.svg new file mode 100644 index 000000000..453cba297 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/folder.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/form.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/form.svg new file mode 100644 index 000000000..8ce6b0557 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/form.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 5v14H5V5h14m1.1-2H3.9c-.5 0-.9.4-.9.9v16.2c0 .4.4.9.9.9h16.2c.4 0 .9-.5.9-.9V3.9c0-.5-.5-.9-.9-.9zM11 7h6v2h-6V7zm0 4h6v2h-6v-2zm0 4h6v2h-6zM7 7h2v2H7zm0 4h2v2H7zm0 4h2v2H7z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/link.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/link.svg new file mode 100644 index 000000000..50ce54c18 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/link.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/media_library.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/media_library.svg new file mode 100644 index 000000000..f8b20debe --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/media_library.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M22 16V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-11-4l2.03 2.71L16 11l4 5H8l3-4zM2 6v14c0 1.1.9 2 2 2h14v-2H4V6H2z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/news.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/news.svg new file mode 100644 index 000000000..c043f11a8 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/news.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-280q17 0 28.5-11.5T320-320q0-17-11.5-28.5T280-360q-17 0-28.5 11.5T240-320q0 17 11.5 28.5T280-280Zm-40-160h80v-240h-80v240Zm200 160h280v-80H440v80Zm0-160h280v-80H440v80Zm0-160h280v-80H440v80ZM160-120q-33 0-56.5-23.5T80-200v-560q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v560q0 33-23.5 56.5T800-120H160Zm0-80h640v-560H160v560Zm0 0v-560 560Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/poll.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/poll.svg new file mode 100644 index 000000000..68dc07849 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/poll.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/quiz.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/quiz.svg new file mode 100644 index 000000000..ca289cb99 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/quiz.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><path d="M0,0h24v24H0V0z" fill="none"/></g><g><g><path d="M4,6H2v14c0,1.1,0.9,2,2,2h14v-2H4V6z"/><path d="M20,2H8C6.9,2,6,2.9,6,4v12c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V4C22,2.9,21.1,2,20,2z M14.01,15 c-0.59,0-1.05-0.47-1.05-1.05c0-0.59,0.47-1.04,1.05-1.04c0.59,0,1.04,0.45,1.04,1.04C15.04,14.53,14.6,15,14.01,15z M16.51,8.83 c-0.63,0.93-1.23,1.21-1.56,1.81c-0.13,0.24-0.18,0.4-0.18,1.18h-1.52c0-0.41-0.06-1.08,0.26-1.65c0.41-0.73,1.18-1.16,1.63-1.8 c0.48-0.68,0.21-1.94-1.14-1.94c-0.88,0-1.32,0.67-1.5,1.23l-1.37-0.57C11.51,5.96,12.52,5,13.99,5c1.23,0,2.08,0.56,2.51,1.26 C16.87,6.87,17.08,7.99,16.51,8.83z"/></g></g></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/webpage.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/webpage.svg new file mode 100644 index 000000000..1265c26da --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/webpage.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-280h280v-80H280v80Zm0-160h400v-80H280v80Zm0-160h400v-80H280v80Zm-80 480q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/workflow.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/workflow.svg new file mode 100644 index 000000000..3c0669d29 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/workflow.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M400-80v-164l294-292q12-12 26.5-18t30.5-6q16 0 30.5 6t26.5 18l49 50q11 12 17 26.5t6 29.5q0 15-6.5 29.5T856-374L564-80H400Zm397-348-50-49 50 49ZM480-160h50l162-162-25-25-25-25-162 162v50Zm187-187-25-25 25 25 25 25-25-25ZM430-590l-56-57 73-73H313q-9 26-28 45t-45 28v334q35 13 57.5 43.5T320-200q0 50-35 85t-85 35q-50 0-85-35t-35-85q0-39 22.5-69t57.5-43v-335q-35-13-57.5-43.5T80-760q0-50 35-85t85-35q39 0 69.5 22.5T313-800h134l-73-73 56-57 170 170-170 170Zm330-290q50 0 85 35t35 85q0 50-35 85t-85 35q-50 0-85-35t-35-85q0-50 35-85t85-35ZM200-160q17 0 28.5-11.5T240-200q0-17-11.5-28.5T200-240q-17 0-28.5 11.5T160-200q0 17 11.5 28.5T200-160Zm0-560q17 0 28.5-11.5T240-760q0-17-11.5-28.5T200-800q-17 0-28.5 11.5T160-760q0 17 11.5 28.5T200-720Zm560 0q17 0 28.5-11.5T800-760q0-17-11.5-28.5T760-800q-17 0-28.5 11.5T720-760q0 17 11.5 28.5T760-720ZM200-200Zm0-560Zm560 0Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/comment.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/comment.svg new file mode 100644 index 000000000..21792818f --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/comment.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M21.99 4c0-1.1-.89-2-1.99-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4-.01-18zM18 14H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/event.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/event.svg new file mode 100644 index 000000000..5bbe6a941 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/event.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/favorites_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/favorites_shortcut.svg index 89c8ae677..4d6428b73 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/favorites_shortcut.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/favorites_shortcut.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M0 0h24v24H0z" fill="none"/><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" fill="#7eb73b"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" fill="#7eb73b"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/media.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/media.svg new file mode 100644 index 000000000..5d4bac103 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/media.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/publication.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/publication.svg new file mode 100644 index 000000000..f720a0c46 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/publication.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h360l200 200v520q0 33-23.5 56.5T720-80H240Zm0-80h480v-480H560v-160H240v640Zm240-40q67 0 113.5-47T640-360v-160h-80v160q0 33-23 56.5T480-280q-33 0-56.5-23.5T400-360v-220q0-9 6-14.5t14-5.5q9 0 14.5 5.5T440-580v220h80v-220q0-42-29-71t-71-29q-42 0-71 29t-29 71v220q0 66 47 113t113 47ZM240-800v160-160 640-640Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/trash.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/trash.svg new file mode 100644 index 000000000..560d174b9 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/trash.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobil.jsp b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobil.jsp new file mode 100644 index 000000000..3f6e2c4ad --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobil.jsp @@ -0,0 +1,176 @@ +<%@ page import="com.fasterxml.jackson.databind.ObjectMapper" %> +<%@ page import="org.silverpeas.core.admin.domain.DomainType" %> +<%@ page import="org.silverpeas.core.admin.domain.DomainTypeRegistry" %> +<%@ page import="org.silverpeas.core.security.session.SessionInfo" %> +<%@ page import="org.silverpeas.core.security.session.SessionManagement" %> +<%@ page import="org.silverpeas.core.security.session.SessionManagementProvider" %> +<%@ page import="org.silverpeas.core.security.token.synchronizer.SynchronizerToken" %> +<%@ page import="org.silverpeas.core.util.LocalizationBundle" %> +<%@ page import="org.silverpeas.core.util.ResourceLocator" %> +<%@ page import="org.silverpeas.core.util.URLUtil" %> +<%@ page import="org.silverpeas.mobile.server.helpers.ResourceBundleHelper" %> +<%@ page import="java.util.Map" %> +<%@ page import="org.silverpeas.core.util.SettingBundle" %> +<%@ page import="org.silverpeas.bridge.MobilFilter" %> + +<%-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "http://www.silverpeas.org/docs/core/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --%> + +<!doctype html> +<html> +<head> + <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> + <meta name="robots" content="noindex"> + <meta name="viewport" + content="width=device-width, target-densitydpi=device-dpi, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/> + + <meta name="mobile-web-app-capable" content="yes"> + <meta name="HandheldFriendly" content="true"> + <meta name="apple-mobile-web-app-capable" content="yes"/> + <meta name="apple-mobile-web-app-status-bar-style" content="default"/> + <link rel="manifest" href="manifest.json"> + + <% + String l = request.getHeader("Accept-Language"); + String appUrl = URLUtil.getApplicationURL(); + if (l != null && !l.isEmpty()) { + + l = l.substring(0, 2); + if (!l.equalsIgnoreCase("fr")) { + l = "en"; + } + } else { + l = "en"; + } + + String loginPage = request.getParameter("forceLoginPage"); + boolean displayLoginPage = false; + if (loginPage != null && loginPage.equalsIgnoreCase("true")) { + displayLoginPage = true; + } + + // SSO case + SynchronizerToken token = + (SynchronizerToken) ((HttpServletRequest) request).getSession().getAttribute("X-STKN"); + LocalizationBundle resourceGeneralLook = + ResourceLocator.getLocalizationBundle("org.silverpeas.lookAndFeel.generalLook", l); + String ssoPath = resourceGeneralLook.getString("login.sso.path"); + if (!displayLoginPage && token == null && (DomainTypeRegistry.get().exists(DomainType.GOOGLE) || + DomainTypeRegistry.get().exists(DomainType.SCIM)) && + (ssoPath != null && !ssoPath.isEmpty())) { + if (!ssoPath.startsWith("/")) { + ssoPath = "/" + ssoPath; + } + ssoPath = appUrl + ssoPath; + response.sendRedirect(ssoPath); + } else { + session.removeAttribute(MobilFilter.SESSION_PARAMS_KEY); + } + + if (token != null) { + out.print("<meta name='sp_token' content='" + token.getValue() + "'/>"); + + SessionManagement sessionManagement = SessionManagementProvider.getSessionManagement(); + SessionInfo sessionInfo = sessionManagement.validateSession(session.getId()); + out.print("<meta name='sp_session' content='" + sessionInfo.getSessionId() + "'/>"); + + } + + LocalizationBundle resourceLabels = + ResourceLocator.getLocalizationBundle("org.silverpeas.mobile.multilang.mobileBundle", l); + Map<String, String> map = ResourceBundleHelper.convertResourceBundleToMap(resourceLabels); + String jsonLabels = new ObjectMapper().writeValueAsString(map); + + LocalizationBundle resource = + ResourceLocator.getLocalizationBundle("org.silverpeas.mobile.mobileSettings", l); + Map<String, String> mapConfig = ResourceBundleHelper.convertResourceBundleToMap(resource); + String jsonParams = new ObjectMapper().writeValueAsString(mapConfig); + + String nocache = resource.getString("nocache"); + if (nocache.equalsIgnoreCase("true")) { + response.setHeader("Clear-Site-Data", "\"cache\", \"storage\""); + } + %> + + <meta name="gwt:property" content="locale=<%=l%>"> + + <link rel="apple-touch-icon" href="<%= resource.getString("apple-touch-icon")%>"/> + <link rel="apple-touch-icon" sizes="72x72" + href="<%= resource.getString("apple-touch-icon72x72")%>"/> + <link rel="apple-touch-icon" sizes="114x114" + href="<%= resource.getString("apple-touch-icon114x114")%>"/> + <link rel="shortcut icon" sizes="196x196" + href="<%= resource.getString("shortcut_icon196x196")%>"/> + <link rel="shortcut icon" sizes="128x128" + href="<%= resource.getString("shortcut_icon128x128")%>"/> + + <title><%= resourceLabels.getString("shortcut_title")%> + </title> + <% + SettingBundle settings = ResourceLocator.getSettingBundle("org.silverpeas.mobile.mobileSettings"); + String jsonFireBaseConfig = settings.getString("push.notification.clientConfig", "null"); + if (!jsonFireBaseConfig.equals("null")) { + out.println("<script src='"+ appUrl + "/spmobile/firebasejs/7.12.0/firebase-app.js'></script>"); + out.println("<script src='" + appUrl + "/spmobile/firebasejs/7.12.0/firebase-messaging.js'></script>"); + } + %> + + <script type="text/javascript" src="<%=appUrl%>/spmobile/spmobile.nocache.js"></script> + <script> + var labels = <% out.println(jsonLabels); %>; + var params = <% out.println(jsonParams); %>; + + function resize() { + var windowHeight = window.innerHeight; + document.body.style.height = windowHeight + "px"; + } + function navigate(url) { + window.navigateTo(url); + } + </script> + + <% + String css = resource.getString("styleSheet"); + if (css != null && !css.isEmpty()) { + out.println("<link rel='stylesheet' type='text/css' href='" + css + "'>"); + } + %> + + +</head> +<body class="ui-panel-wrapper ui-page-theme-a csspinner traditional" onload="resize();"> +<% + String fullSsoPath = ""; + if (!ssoPath.trim().isEmpty()) { + fullSsoPath = request.getRequestURL().toString(); + fullSsoPath = fullSsoPath.replace("/spmobile/spmobil.jsp", ""); + fullSsoPath = fullSsoPath + ssoPath; + } +%> +<input type="hidden" id="ssoPath" value="<%=fullSsoPath%>"> +<div id="oneinch" + style="position: absolute;padding: 0;visibility: hidden;width: 1in;height: 1in;"></div> + +</body> + +</html> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 45a773e84..ed829b851 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -773,7 +773,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { background-image: url(packImagesNavigation.png); background-position: 0.5625em 0.5625em; background-repeat: no-repeat; - padding-left: 2.056em + padding-left: 2.5em } .add-media, @@ -799,71 +799,105 @@ html .ui-controlgroup-controls .ui-btn-up-c { } .app-formsOnline a { - background-position: 0.65em -2208px; + background: transparent url('icons/apps/form.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .app-almanach a { - background-position: -20px -2167px; + background: transparent url('icons/apps/calendar.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .app-link a { - background-position: 0.65em -1684px; + background: transparent url('icons/apps/link.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .app-actuality a { - background-position: 0.5em -1026px; + background: transparent url('icons/apps/news.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .folder-ged a { - background-position: 0.5em 0.5em; + background: transparent url('icons/apps/folder.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .app-pageWeb a { - background-position: 0.7em -1395px; + background: transparent url('icons/apps/webpage.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .app-blog a { - background-position: 0.65em -1509px; + background: transparent url('icons/apps/blog.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .app-classifieds a { - background-position: 0.65em -2240px; + background: transparent url('icons/apps/classifieds.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .app-survey a { - background-position: 0.65em -2270px; + background: transparent url('icons/apps/quiz.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .app-polling a { - background-position: 0.65em -2330px; + background: transparent url('icons/apps/poll.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .app-faq a { - background-position: 0.65em -2300px; + background: transparent url('icons/apps/faq.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .app-workflow a { - background-position: 0.65em -1595px; + background: transparent url('icons/apps/workflow.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .app-resourcesManager a { - background-position: 0.65em -2360px; + background: transparent url('icons/apps/book_online.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .folder-galery a { - background-position: 0.5em -95px; + background: transparent url('icons/apps/media_library.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .publication a { - background-position: 0.5em -190px; + background: transparent url('icons/publication.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .trash a { - background-position: 0.5em -495px; + background: transparent url('icons/trash.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .media a { - background-position: 0.5em -287px; + background: transparent url('icons/media.svg') no-repeat; + background-position-y: center; + background-position-x: 0.5em; } .media-thumb:first-child { @@ -981,7 +1015,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { .comments .publiName, .comments .mediaName { margin-right: 1em; - background: transparent url(packImagesNavigation.png) right -400px no-repeat; + background: transparent url('icons/comment.svg') no-repeat right; } .cadrePhoto { @@ -1056,8 +1090,10 @@ html .ui-controlgroup-controls .ui-btn-up-c { border: 0 none; margin: 0; text-align: left; - background: #fff url(packImagesNavigation.png) 0.5625em -390px no-repeat; - padding-left: 2.5625em; + background: url('icons/comment.svg') no-repeat; + padding-left: 3em; + background-position-y: center; + background-position-x: 0.5em; } #info-event, .elts-pub { From 26f561d7e296678e91adb8f35057b725f5ca7c8f Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 3 Jan 2024 19:04:33 +0100 Subject: [PATCH 126/228] improve navigation --- .../client/apps/comments/pages/CommentsPage.java | 1 - .../mobile/client/components/base/PageHeader.java | 2 ++ .../java/org/silverpeas/mobile/public/spmobile.css | 11 ++++++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/pages/CommentsPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/pages/CommentsPage.java index ac59ce88c..43ac00157 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/pages/CommentsPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/comments/pages/CommentsPage.java @@ -78,7 +78,6 @@ public CommentsPage() { initWidget(uiBinder.createAndBindUi(this)); EventBus.getInstance().addHandler(AbstractCommentsPagesEvent.TYPE, this); container.getElement().setId("publication"); - addCommentTitle.setInnerHTML(msg.addComment()); } public void setContentInfos(final String contentId, final String instanceId, final String contentType) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java index 068b9d42b..820ac1bea 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java @@ -93,6 +93,8 @@ public void hideOfflineIndicator() { } public void setVisibleBackButton(boolean visible) { + // hide menu if not home page + menu.setVisible(!visible); // remove active state header.remove(back); header.add(back); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index ed829b851..1997a5418 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -494,8 +494,9 @@ html .ui-controlgroup-controls .ui-btn-up-c { border: none; height: 44px; width: 36px; - margin: 4px 0 0 0; + margin: 3px 0 0 0; padding: 0 0 0 0; + left:0; } /* HOME */ @@ -1219,11 +1220,19 @@ html .ui-controlgroup-controls .ui-btn-up-c { color: #ec9c01; display: block; text-align: right; + background: url("icons/send.svg") no-repeat right; + height: 24px; + width: 24px; + position: absolute; + right: 0; + bottom: 5px; + margin-right: 15px ; } #add-comment .btn-publicate.inactif { color: #999; text-decoration: none; + filter: opacity(0.5); } #attachments li a { From e5d9fcac167373faa98265a2312b78c324744c1e Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 3 Jan 2024 19:17:17 +0100 Subject: [PATCH 127/228] change position of qvf menu --- .../main/java/org/silverpeas/mobile/public/spmobile.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 1997a5418..d324aca6c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -1986,6 +1986,14 @@ form .forms .fields > li:nth-child(even) { padding: 1em; } +#actions { + position: absolute; + top: -44px; + right: 0.5em; + filter: invert(1); + z-index: 9999; +} + #action-button { border: 0; position: absolute; From f271d8db57c2594b9fd16a8fa9301b4e0632d488 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 4 Jan 2024 16:35:17 +0100 Subject: [PATCH 128/228] add transition between pages --- .../org/silverpeas/mobile/client/SpMobil.java | 4 +-- .../client/common/navigation/PageHistory.java | 10 +++---- .../components/base/NavigationMenu.java | 12 ++++++++ .../mobile/client/components/base/Page.java | 28 +++++++++++++++++-- .../silverpeas/mobile/public/animations.css | 9 ++++++ .../org/silverpeas/mobile/public/spmobile.css | 1 + 6 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index a894927b9..2004d5b70 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -318,13 +318,13 @@ public void onSuccess(final Method method, final HomePageDTO result) { public static void displayTermsOfServicePage() { RootPanel.get().clear(); RootPanel.get().add(getMainPage()); - SpMobil.getMainPage().setContent(new TermsOfServicePage()); + SpMobil.getMainPage().setContent(new TermsOfServicePage(), true); } public static void displayCookiesPage() { RootPanel.get().clear(); RootPanel.get().add(getMainPage()); - SpMobil.getMainPage().setContent(new CookiesPage()); + SpMobil.getMainPage().setContent(new CookiesPage(), true); } /** diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java index 22481a005..62d02ade9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java @@ -61,11 +61,10 @@ public void goTo(PageContent page) { hideCallback(); if (pages.isEmpty()) firstToken = "" + page.hashCode(); pages.push(page); - SpMobil.getMainPage().setContent(page); + SpMobil.getMainPage().setContent(page, true); page.setVisible(true); Window.scrollTo(0,0); browserGoto(""+page.hashCode()); - //TODO : TODO : css3 transition } private void hideCallback() { @@ -86,10 +85,9 @@ public PageContent back() { PageContent page = pages.pop(); page.stop(); page = pages.peek(); - SpMobil.getMainPage().setContent(page); + SpMobil.getMainPage().setContent(page, false); page.setVisible(true); browserBack(); - //TODO : css3 transition return page; } } @@ -108,7 +106,7 @@ public void goBackToFirst() { PageContent currentPage = pages.pop(); if (pages.isEmpty()) { pages.push(currentPage); - SpMobil.getMainPage().setContent(currentPage); + SpMobil.getMainPage().setContent(currentPage, false); browserGoto(""+currentPage.hashCode()); break; } else { @@ -146,7 +144,7 @@ private void back(String token) { if (page != null) { page.stop(); page = pages.peek(); - SpMobil.getMainPage().setContent(page); + SpMobil.getMainPage().setContent(page, false); } else { SpMobil.restoreMainPage(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java index 2baf2470c..776a9d0d8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java @@ -25,7 +25,9 @@ package org.silverpeas.mobile.client.components.base; import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.dom.client.Style; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.KeyCodes; @@ -128,8 +130,10 @@ public void loadedMoreDataEvent(final MoreDataLoadedEvent moreDataLoadedEvent) { public void toogleMenu() { if (container.getStyleName().contains("ui-panel-close")) { + container.getElement().getStyle().setVisibility(Style.Visibility.VISIBLE); container.removeStyleName("ui-panel-close"); container.addStyleName("ui-panel-open"); + } else { closeMenu(); } @@ -138,6 +142,14 @@ public void toogleMenu() { public void closeMenu() { container.removeStyleName("ui-panel-open"); container.addStyleName("ui-panel-close"); + Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { + @Override + public boolean execute() { + container.getElement().getStyle().setVisibility(Style.Visibility.HIDDEN); + return false; + } + }, 400); + } public void resetSearchField() { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java index 05d596566..d4ac56bc4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java @@ -25,6 +25,7 @@ package org.silverpeas.mobile.client.components.base; import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.DivElement; import com.google.gwt.dom.client.Document; import com.google.gwt.uibinder.client.UiBinder; @@ -45,7 +46,6 @@ public class Page extends Composite implements Window.ScrollHandler { private static PageUiBinder uiBinder = GWT.create(PageUiBinder.class); - interface PageUiBinder extends UiBinder<Widget, Page> { } @@ -64,7 +64,31 @@ public Page() { container.getElement().setId("home"); } - public void setContent(PageContent content) { + public DivElement getContentContainer() { + return contentContainer; + } + + public void setContent(PageContent content, boolean newContent) { + if (this.content != null && this.content.hashCode() == content.hashCode()) return; + String transitionClass; + if (newContent) { + transitionClass = "opening-page"; + } else { + transitionClass = "closing-page"; + } + + getContentContainer().addClassName(transitionClass); + Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { + @Override + public boolean execute() { + displayContent(content); + getContentContainer().removeClassName(transitionClass); + return false; + } + }, 300); + } + + private void displayContent(PageContent content) { this.content = content; contentPlace.setWidget(content); header.setPageTitle(content.getPageTitle()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css new file mode 100644 index 000000000..22b1f07b9 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css @@ -0,0 +1,9 @@ +.closing-page { + transition: transform 300ms; + transform: translateX(+100%); +} + +.opening-page { + transition: transform 300ms; + transform: translateX(-100%); +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index d324aca6c..75d221f92 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -23,6 +23,7 @@ */ @import "components.css"; +@import "animations.css"; /* Globals */ /* Font From 1d00768d4501bccd6352d26ff58e2cfea2ea0b38 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 4 Jan 2024 17:30:38 +0100 Subject: [PATCH 129/228] Fix contacts display --- .../client/apps/contacts/pages/ContactsPage.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/ContactsPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/ContactsPage.java index eace21815..02c5138d7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/ContactsPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/ContactsPage.java @@ -122,9 +122,10 @@ public void init(boolean limited) { allcontacts.setVisible(tabs.contains("allcontacts")); allextcontacts.setVisible(tabs.contains("allextcontacts")); - Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { + //Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { + Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { @Override - public void execute() { + public boolean execute() { if (defaultTab.equals("mycontacts")) { EventBus.getInstance().fireEvent( new ContactsLoadEvent(ContactFilters.MY, filter.getText(), computePageSize(), @@ -142,6 +143,7 @@ public void execute() { startIndex)); currentType = ContactFilters.ALL; allcontacts.addStyleName("ui-btn-active"); + allcontacts.removeStyleName("ui-last-child"); if (!mycontacts.isVisible()) { allcontacts.addStyleName("ui-first-child"); } @@ -161,8 +163,9 @@ public void execute() { allextcontacts.addStyleName("ui-last-child"); filter.setVisible(true); } + return false; } - }); + }, 500); } else { mycontacts.setVisible(false); allextcontacts.setVisible(false); @@ -307,7 +310,6 @@ private int computePageSize() { item.getElement().getStyle().setVisibility(Style.Visibility.HIDDEN); list.add(item); int itemHeight = item.getOffsetHeight(); - pageSize = (available / itemHeight) + 1; // add one for scroll list.remove(item); } From ac4af679b0124449ce32500b48b6cd1e2faf810d Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 5 Jan 2024 15:29:13 +0100 Subject: [PATCH 130/228] Fix some notifications mistakes --- .../mobile/client/components/attachments/Attachment.ui.xml | 2 +- .../org/silverpeas/mobile/client/components/base/Page.java | 4 +++- .../org/silverpeas/mobile/client/components/base/Page.ui.xml | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml index ee43435d2..06b04e267 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml @@ -26,7 +26,7 @@ <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> <g:HTMLPanel tag="li"> - <g:Anchor ui:field="link" styleName="expand-more" href="#"> + <g:Anchor ui:field="link" styleName="expand-more" href="javascript:;"> <img ui:field="icon" src=""/> <span ui:field="name"></span><span ui:field="size" class="weight"></span> <span ui:field="description"></span> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java index d4ac56bc4..3b4fd4560 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java @@ -49,7 +49,7 @@ public class Page extends Composite implements Window.ScrollHandler { interface PageUiBinder extends UiBinder<Widget, Page> { } - @UiField protected SimplePanel contentPlace; + @UiField protected SimplePanel contentPlace, contentPlaceTmp; @UiField protected PageHeader header; @UiField protected NavigationMenu menu; @UiField protected DivElement contentContainer; @@ -78,6 +78,7 @@ public void setContent(PageContent content, boolean newContent) { } getContentContainer().addClassName(transitionClass); + contentPlaceTmp.setWidget(content); Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { @Override public boolean execute() { @@ -90,6 +91,7 @@ public boolean execute() { private void displayContent(PageContent content) { this.content = content; + //contentPlaceTmp.remove(content); contentPlace.setWidget(content); header.setPageTitle(content.getPageTitle()); header.setVisibleBackButton(PageHistory.getInstance().size() > 1); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.ui.xml index 081ab2c00..4e59d9894 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.ui.xml @@ -41,6 +41,7 @@ <!-- Content --> <g:SimplePanel ui:field="contentPlace"/> + <g:SimplePanel ui:field="contentPlaceTmp" visible="false"/> </div> From 9b0f7630d87ad64a639ccf05020dcc37cb3c6dbc Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 5 Jan 2024 18:41:06 +0100 Subject: [PATCH 131/228] Feature #13920 : structure --- .../WebAppOriginAssociationServlet.java | 69 +++++++++++++++++++ .../webapp/WEB-INF/manifest.json.template | 7 ++ .../web-app-origin-association.template | 11 +++ mobile-war/src/main/webapp/WEB-INF/web.xml | 10 +++ .../src/main/webapp/spmobile/spmobil.jsp | 1 + 5 files changed, 98 insertions(+) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/WebAppOriginAssociationServlet.java create mode 100644 mobile-war/src/main/webapp/WEB-INF/web-app-origin-association.template diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/WebAppOriginAssociationServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/WebAppOriginAssociationServlet.java new file mode 100644 index 000000000..1e256f9fa --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/WebAppOriginAssociationServlet.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.server.servlets; + + +import org.apache.commons.io.IOUtils; +import org.silverpeas.core.util.StringUtil; +import org.silverpeas.core.util.logging.SilverLogger; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; + +/** + * @author: svu + */ +public class WebAppOriginAssociationServlet extends AbstractSilverpeasMobileServlet { + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + try { + response.setContentType("application/json"); + response.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate"); + response.setHeader("Pragma", "no-cache"); + + PrintWriter out = response.getWriter(); + + ServletContext context = getServletContext(); + String path = getSettings().getString("web-app-origin-association.json.path", ""); + InputStream template; + if (StringUtil.isDefined(path)) { + template = new FileInputStream(path); + } else { + template = + context.getResourceAsStream("/WEB-INF/web-app-origin-association.template"); + } + out.println(IOUtils.toString(template, StandardCharsets.UTF_8)); + } catch (Exception e) { + SilverLogger.getLogger(this).error(e); + } + } +} diff --git a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template index 81dbc989c..6f7ff117b 100644 --- a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template +++ b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template @@ -22,4 +22,11 @@ "sizes" : "512x512" } ] + + "capture_links": "existing_client_event", + "url_handlers" : [ + { + "origin": "https://intranoo.silverpeas.com" + } + ] } \ No newline at end of file diff --git a/mobile-war/src/main/webapp/WEB-INF/web-app-origin-association.template b/mobile-war/src/main/webapp/WEB-INF/web-app-origin-association.template new file mode 100644 index 000000000..f08be9f99 --- /dev/null +++ b/mobile-war/src/main/webapp/WEB-INF/web-app-origin-association.template @@ -0,0 +1,11 @@ +{ + "web_apps": [ + { + "manifest": "https://intranoo.silverpeas.com/silverpeas/spmobile/manifest.json", + "details": { + "paths": ["/*"], + "exclude_paths": [] + } + } + ] +} \ No newline at end of file diff --git a/mobile-war/src/main/webapp/WEB-INF/web.xml b/mobile-war/src/main/webapp/WEB-INF/web.xml index 541ab30ab..fce5560cb 100644 --- a/mobile-war/src/main/webapp/WEB-INF/web.xml +++ b/mobile-war/src/main/webapp/WEB-INF/web.xml @@ -71,6 +71,16 @@ <servlet-class>org.silverpeas.mobile.server.servlets.PublicationContentServlet</servlet-class> </servlet> + <servlet-mapping> + <servlet-name>webAppOriginAssociationServlet</servlet-name> + <url-pattern>/spmobile/web-app-origin-association</url-pattern> + </servlet-mapping> + + <servlet> + <servlet-name>webAppOriginAssociationServlet</servlet-name> + <servlet-class>org.silverpeas.mobile.server.servlets.WebAppOriginAssociationServlet</servlet-class> + </servlet> + <servlet-mapping> <servlet-name>PublicationContentServlet</servlet-name> <url-pattern>/services/spmobile/PublicationContent</url-pattern> diff --git a/mobile-war/src/main/webapp/spmobile/spmobil.jsp b/mobile-war/src/main/webapp/spmobile/spmobil.jsp index 3f6e2c4ad..6b10c3b1c 100644 --- a/mobile-war/src/main/webapp/spmobile/spmobil.jsp +++ b/mobile-war/src/main/webapp/spmobile/spmobil.jsp @@ -49,6 +49,7 @@ <meta name="apple-mobile-web-app-capable" content="yes"/> <meta name="apple-mobile-web-app-status-bar-style" content="default"/> <link rel="manifest" href="manifest.json"> + <link rel="web-app-origin-association" href="web-app-origin-association"> <% String l = request.getHeader("Accept-Language"); From 064f76d64e4b4496798759958cb0cd261e8e56cd Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 5 Jan 2024 18:44:55 +0100 Subject: [PATCH 132/228] Feature #13920 --- .../properties/org/silverpeas/mobile/mobileSettings.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties index 16f4ed702..6d6bfebfc 100644 --- a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties +++ b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties @@ -132,6 +132,7 @@ push.notification.clientConfig= # json configuration for pwa add to home screen manifest.json.path= +web-app-origin-association.json.path= #footer custom buttons #customButtonUrl1= From fadebc59dca383bb300bc14ffd2980135a3a8d6f Mon Sep 17 00:00:00 2001 From: silveruser <devteam@silverpeas.net> Date: Sun, 7 Jan 2024 23:35:10 +0100 Subject: [PATCH 133/228] Update dependency on Silverpeas to version 6.4-JR-build240107 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 715c21b83..0f2426fda 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ <name>Silverpeas Mobile component</name> <properties> - <silverpeas.version>6.4-JR-build231231</silverpeas.version> + <silverpeas.version>6.4-JR-build240107</silverpeas.version> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <next.release>6.4-JR</next.release> From 1b15b311e7a15f9098d036e3dd97630b52277f67 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 8 Jan 2024 10:52:37 +0100 Subject: [PATCH 134/228] some css adjustements --- .../client/apps/faq/pages/FaqPage.ui.xml | 2 +- .../mobile/public/icons/apps/calendar.svg | 2 +- .../mobile/public/icons/apps/folder.svg | 2 +- .../mobile/public/icons/apps/news.svg | 2 +- .../silverpeas/mobile/public/icons/help.svg | 2 +- .../silverpeas/mobile/public/icons/home.svg | 2 +- .../silverpeas/mobile/public/icons/logout.svg | 2 +- .../mobile/public/icons/settings.svg | 2 +- .../silverpeas/mobile/public/icons/star.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 20 +++++++++++++++++-- 10 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/star.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml index ed5dfc873..21434f329 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml @@ -32,7 +32,7 @@ <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> <base:ActionsMenu ui:field="actionsMenu"/> - <div class="content-navigation"><g:ListBox ui:field="categories"/></div> + <div class="content-navigation"><g:ListBox ui:field="categories" stylePrimaryName="faq-categories"/></div> <components:UnorderedList ui:field="faqs" styleName="forms-list"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/calendar.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/calendar.svg index f0eb348d9..bdce5c812 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/calendar.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/calendar.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z" fill="#7eb73b"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/folder.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/folder.svg index 453cba297..5017b4816 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/folder.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/folder.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" fill="#7eb73b"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/news.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/news.svg index c043f11a8..550afbdd9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/news.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/news.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-280q17 0 28.5-11.5T320-320q0-17-11.5-28.5T280-360q-17 0-28.5 11.5T240-320q0 17 11.5 28.5T280-280Zm-40-160h80v-240h-80v240Zm200 160h280v-80H440v80Zm0-160h280v-80H440v80Zm0-160h280v-80H440v80ZM160-120q-33 0-56.5-23.5T80-200v-560q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v560q0 33-23.5 56.5T800-120H160Zm0-80h640v-560H160v560Zm0 0v-560 560Z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-280q17 0 28.5-11.5T320-320q0-17-11.5-28.5T280-360q-17 0-28.5 11.5T240-320q0 17 11.5 28.5T280-280Zm-40-160h80v-240h-80v240Zm200 160h280v-80H440v80Zm0-160h280v-80H440v80Zm0-160h280v-80H440v80ZM160-120q-33 0-56.5-23.5T80-200v-560q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v560q0 33-23.5 56.5T800-120H160Zm0-80h640v-560H160v560Zm0 0v-560 560Z" fill="#7eb73b"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/help.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/help.svg index f7ffc5da2..8c2e93dcc 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/help.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/help.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z" fill="#7eb73b"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home.svg index 8584f7ebb..e8d717eae 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#7eb73b"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/logout.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/logout.svg index bfd7e2923..7ec1ee20c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/logout.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/logout.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z" fill="#7eb73b"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/settings.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/settings.svg index e40c8496e..155b7d7a1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/settings.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/settings.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><path d="M0,0h24v24H0V0z" fill="none"/><path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><path d="M0,0h24v24H0V0z" fill="none"/><path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z" fill="#7eb73b"/></g></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/star.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/star.svg new file mode 100644 index 000000000..dcd73881f --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/star.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M0 0h24v24H0z" fill="none"/><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" fill="#a9a9a9"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 75d221f92..85dab0822 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -430,7 +430,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { #header, #navigation-footer { - background-color: #333; + background-color: black; height: 46px; border-bottom: 2px solid #151515; position: fixed; @@ -473,6 +473,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { #navigation-footer .btn-list-favoris { background: transparent url('icons/favorites_shortcut.svg') center no-repeat; + transform: scale(1.4); } #header h1 { @@ -549,7 +550,8 @@ html .ui-controlgroup-controls .ui-btn-up-c { .favoris-bloc a { padding-left: 2.5em; font-size: 0.95em; - background: transparent url(packImagesNavigation.png) 0.5em -1186px no-repeat; + background: transparent url('icons/star.svg') no-repeat; + background-size: auto; } .racourcis-bloc a { @@ -2715,6 +2717,20 @@ a.popin-btn { background-color: #FFF; } +/******** FAQ ********/ +.faq-categories { + width: 90vw; + box-sizing: border-box; + padding-left: 5vw; + background-color: white; + border-radius: 0.25em; + border: none; + box-shadow: 0 0 1em 0 rgba(0, 0, 0, 0.2); + padding-right: 5vw; + line-height: 3em; + height: 2em; +} + /******** Resources Manager ********/ #resourcesManager .list-resources li.category { From 75fd0cca120f85f1ba90ae4e8afd1ca58fbb620d Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 8 Jan 2024 15:16:37 +0100 Subject: [PATCH 135/228] Feaure #13920 --- mobile-war/src/main/webapp/WEB-INF/manifest.json.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template index 6f7ff117b..e48086034 100644 --- a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template +++ b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template @@ -21,7 +21,7 @@ "type" : "image/png", "sizes" : "512x512" } - ] + ], "capture_links": "existing_client_event", "url_handlers" : [ From efb0c122e8159226c74fed7ea4cf8e5605a62864 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 8 Jan 2024 17:59:05 +0100 Subject: [PATCH 136/228] Feature #13920 --- .../src/main/webapp/WEB-INF/app-sw.template | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/mobile-war/src/main/webapp/WEB-INF/app-sw.template b/mobile-war/src/main/webapp/WEB-INF/app-sw.template index a62354070..a379890f3 100644 --- a/mobile-war/src/main/webapp/WEB-INF/app-sw.template +++ b/mobile-war/src/main/webapp/WEB-INF/app-sw.template @@ -27,7 +27,30 @@ if (firebaseConfig != null) { fetch('/silverpeas/services/mobile/notification/readed/' + pushData["notificationId"], { method: 'PUT' }); - event.waitUntil(self.clients.openWindow(pushData["permalink"])); + + event.waitUntil(clients.matchAll({type: "window", includeUncontrolled: true}).then(function (clientList) { + if (pushData["permalink"]) { + let client = null; + for (let i = 0; i < clientList.length; i++) { + let item = clientList[i]; + if (item.url) { + client = item; + break; + } + } + if (client && 'navigate' in client) { + client.focus(); + event.notification.close(); + return client.navigate(pushData["permalink"]); + } + else { + event.notification.close(); + // if client doesn't have navigate function, try to open a new browser window + return clients.openWindow(pushData["permalink"]); + } + } + })); + } }); From 8e38e6d3be30a85a6263f538315d7ebaeb8be27a Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 9 Jan 2024 14:57:54 +0100 Subject: [PATCH 137/228] secure navigation --- .../silverpeas/mobile/client/components/base/PageHeader.java | 4 +++- .../src/main/java/org/silverpeas/mobile/public/spmobile.css | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java index 820ac1bea..784d408dd 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java @@ -69,7 +69,9 @@ void onMenu(ClickEvent event) { @UiHandler("back") void onBack(ClickEvent event) { - PageHistory.getInstance().back(); + if (PageHistory.getInstance().size() > 1) { + PageHistory.getInstance().back(); + } } public void toogleMenuButton() { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 85dab0822..5d3ea3d96 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -2062,7 +2062,8 @@ form .forms .fields > li:nth-child(even) { } .ui-listview.favoris a { - background: transparent url(packImagesNavigation.png) 0.5em -1182px no-repeat; + background: transparent url('icons/star.svg') no-repeat; + background-size: auto; padding-left: 2em; } From 5b99f13d55e7b601b4f9e526245fe74b760a0de4 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 11 Jan 2024 17:44:54 +0100 Subject: [PATCH 138/228] attachments design review --- .../documents/resources/DocumentsCSS.java | 36 ------------ .../resources/DocumentsResources.java | 52 ------------------ .../apps/documents/resources/documents.css | 47 ---------------- .../client/apps/documents/resources/excel.gif | Bin 277 -> 0 bytes .../client/apps/documents/resources/image.gif | Bin 271 -> 0 bytes .../client/apps/documents/resources/pdf.gif | Bin 267 -> 0 bytes .../apps/documents/resources/powerpoint.gif | Bin 265 -> 0 bytes .../apps/documents/resources/unknown.gif | Bin 276 -> 0 bytes .../client/apps/documents/resources/word.gif | Bin 271 -> 0 bytes .../client/apps/media/pages/PhotoPage.java | 9 +-- .../client/common/network/NetworkHelper.java | 4 ++ .../components/attachments/Attachment.java | 33 +++++------ .../public/icons/files/file-type-calc.svg | 1 + .../public/icons/files/file-type-excel.svg | 1 + .../public/icons/files/file-type-image.svg | 1 + .../public/icons/files/file-type-pdf.svg | 1 + .../icons/files/file-type-powerpoint.svg | 1 + .../icons/files/file-type-presentation.svg | 1 + .../public/icons/files/file-type-unknown.svg | 1 + .../public/icons/files/file-type-word.svg | 1 + .../public/icons/files/file-type-writer.svg | 1 + .../public/icons/files/file-type-zip.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 31 ++++++++--- 23 files changed, 57 insertions(+), 165 deletions(-) delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsCSS.java delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsResources.java delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/documents.css delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/excel.gif delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/image.gif delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/pdf.gif delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/powerpoint.gif delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/unknown.gif delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/word.gif create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-calc.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-excel.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-image.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-pdf.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-powerpoint.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-presentation.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-unknown.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-word.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-writer.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-zip.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsCSS.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsCSS.java deleted file mode 100644 index 87a021969..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsCSS.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2000 - 2022 Silverpeas - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * As a special exception to the terms and conditions of version 3.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * Open Source Software ("FLOSS") applications as described in Silverpeas's - * FLOSS exception. You should have received a copy of the text describing - * the FLOSS exception, and it is also available here: - * "https://www.silverpeas.org/legal/floss_exception.html" - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package org.silverpeas.mobile.client.apps.documents.resources; - -import com.google.gwt.resources.client.CssResource; - -public interface DocumentsCSS extends CssResource { - String msword(); - String msexcel(); - String mspowerpoint(); - String pdf(); - String image(); - String unknown(); -} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsResources.java deleted file mode 100644 index c3e7f7493..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsResources.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2000 - 2022 Silverpeas - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * As a special exception to the terms and conditions of version 3.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * Open Source Software ("FLOSS") applications as described in Silverpeas's - * FLOSS exception. You should have received a copy of the text describing - * the FLOSS exception, and it is also available here: - * "https://www.silverpeas.org/legal/floss_exception.html" - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package org.silverpeas.mobile.client.apps.documents.resources; - -import com.google.gwt.resources.client.ClientBundle; -import com.google.gwt.resources.client.ImageResource; - -public interface DocumentsResources extends ClientBundle { - - @Source("documents.css") - DocumentsCSS css(); - - @Source("word.gif") - ImageResource msword(); - - @Source("excel.gif") - ImageResource msexcel(); - - @Source("powerpoint.gif") - ImageResource mspowerpoint(); - - @Source("image.gif") - ImageResource image(); - - @Source("pdf.gif") - ImageResource pdf(); - - @Source("unknown.gif") - ImageResource unknown(); -} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/documents.css b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/documents.css deleted file mode 100644 index 0b6e1ac56..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/documents.css +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2000 - 2022 Silverpeas - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * As a special exception to the terms and conditions of version 3.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * Open Source Software ("FLOSS") applications as described in Silverpeas's - * FLOSS exception. You should have received a copy of the text describing - * the FLOSS exception, and it is also available here: - * "https://www.silverpeas.org/legal/floss_exception.html" - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -@sprite .msword { - gwt-image: "msword"; -} - -@sprite .msexcel { - gwt-image: "msexcel"; -} - -@sprite .mspowerpoint { - gwt-image: "mspowerpoint"; -} - -@sprite .pdf { - gwt-image: "pdf"; -} - -@sprite .image { - gwt-image: "image"; -} - -@sprite .unknown { - gwt-image: "unknown"; -} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/excel.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/excel.gif deleted file mode 100644 index 5065c302df8c48e90d7a75c877142daf3a1edd77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmV+w0qXuoNk%w1VGsZi0K^{vQ;#}KdP(l??tZO*mA#N`p=-p%#OUbgnVFg8<>fqg zHFtM+WvNG4SXfGkNL!a(larHJf>wlzhdFCFW@~2f@bE!@IbEGW>+9>Gp`kcuCTp=v zP*70){r&&{|NsC0A^8LW0018VEC2ui01yBW000G&;P)9>X_khlep%<fZkDb{cic(d zVaO~(wi~XKz(7))q;g3t9vPmfG|GT=Bn(N!5_Kp74B_E=@esTL1^0r%+&T+Dln|K& zJRLy04VQZy0}mDj0{{Yha9j#%ffF7U0+ARU6bcjp4gnDb5fKWJk(3%!QyLYZ9Ss_* btgRKV0;wVmcvdhT4I&5}yuH4>2q6GFfv|4s diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/image.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/image.gif deleted file mode 100644 index bdb614fceddd6c09001ff4d1afae739c622dc1dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271 zcmV+q0r37uNk%w1VGsZi0K@<QhlhuAFbaEnd;R(G+?*}>?9aAq5t>X5*oz(3*49lK z2GV&Oo12@%dKI-<6V7WI$;rurIu69b!jqGezPPsZ;=Iq#&s!k~#A6lR-Q7eL2J-Uq zp`oE~Z*Sh--v9sqA^8LV00000EC2ui01yBW000GyAjFMiS&Cb#t}DlQM2sNIW8WUb zB*j+{wA$^FU`!I9WPvucB__vYlKH?y92g7KBCQ~*m_uYtnE))6L4{zzIK+WKgaSA> z8V17w9=Kcr5_J%Jdl7Md3W<RN5OIeWi5ij`5CV*TkP4HVl>!oxo1qc{9Ui8qsHPbi V9i^!m9<Z^i9UQH<xVao506PqTa_ay9 diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/pdf.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/pdf.gif deleted file mode 100644 index 39449953c98948e1a929befd0e6f9da231be79b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmV+m0rdVyNk%w1VGsZi0K^{v#Kgq81_tQp=$V<B<>lr7|NnP)ch&#^!vO)+EG+Gs znpjv^-%3i8laui7?(d|ehlht}XJ_s0?e^5v=>h`q@bKaT1LbaRw*Ua^>+7)q0HL9w zP*70q008~{{r~^}A^8LW0018VEC2ui01yBW000Gu;P(MrX_kPfew*jM?v}2DC)`Bt zWy35swj0hv$TU)&q;g3t9+%J#%mblVtscu&D4<%t7Dg7F$=p1KgZiL&T-N0>dd*NI zCJePiA~zrq2@VPu4-<cTdma&gcnBB>0e=pNiWnFHmYJ3n4wD`W8lj@26{QZJA`1mm RQw0km101rmw6X&s06W>da}odm diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/powerpoint.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/powerpoint.gif deleted file mode 100644 index 39e62545942e583e8326617e6214d399e93a709f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmV+k0rvh!Nk%w1VGsZi0K^{v=jZ2ibadB?bnWf!n3$MeUS9C<@WsW&zC|DC=;-C; z<?in8@9*#G>gws~>C}a6$jHc4R8*dxp8fgwii(Qh;NZYXB*4JHyE+r=>+7MRp-@mz z{r&y8GYbFz|NsC0A^8LW0018VEC2ui01yBW000Gs;P*jVX_k<veiG-tu5_#)!6iVh zC|pL&Dw`vL%W)LG%csL^Iyn`^fO6@0uGnh_#-Ugz0z|em#C5F#rbpdrG#n02z=}{~ zJDH4IPIqF~0|R+{9%)SvYYTw`gkTm34-;z)3yK^CR#|rj43w8npdALI3>*<65guGz P9;Y=Mu(7hR1R(%Bg&}=M diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/unknown.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/unknown.gif deleted file mode 100644 index c7f5e822237d91e32fd80394d056ac4a6e06501a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276 zcmV+v0qg!pNk%w1VGsZi0K^{v<mBXieSKqNV~UE3nVFetYHF30m0n(6aBy&tkdWr) z=682@R#sNT#KeSzg!A+B=jZ3~@$vHV^6Ba6?(XiPp`qyL=<Mw5@bK{M?d|I7>hJIG zP*70o>+Ajf{r~^}A^8LW0018VEC2ui01yBW000G%;MY`SNj6`qR$lA26{>!OXF-qx z0A5GPDT8NXx#c{7jsckPXePuPGMSJKdL7Nv^70H)4$tM%$!?{NRKSzTjLTZ6Cy-ir zHk9_;>{+A`9vB;Vd2VGM2q^^~5g3AmdL9KS0v-|(jgJ(09s(%`mJ*klgA^VIDGVMD a52B-v8y*a)UA3|)1RT1%yt)J*Apkq^m4qw+ diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/word.gif b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/word.gif deleted file mode 100644 index 73fbc81b6ae2f15abb81e5e525b06866335eb629..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271 zcmV+q0r37uNk%w1VGsZi0K^{vgPYLq?(Q&FoX5w<=;-K~nVIF~<wRkKcXxMtme=|F z{>9SjSXfwJg3+L`&XbdqwZ!CyhlgipXYlawz`(#<ccW8wzux5R^Yr@b>+7MRp-@mz z{r&w(U9129|NsC0A^8LW0018VEC2ui01yBW000Gy;P(w$X_kYiej4Y#u9mI^N8Cov zWyLH$wi}LP$UG>Yj&jK)7LOf|bSmw@IFTrI+7S}49Y6xG05}?rP9}5XAUcZ#BvF9~ z9O`w(-BE}I78VB=9RYfL90?s~cM638h8z-oiwXi26CRI{l3H7u6OaKM3{0jS6RD#N VA`Bi^S01b%1sk@vxV8l$06SdLdJF&n diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java index 086741dcb..b7b19d238 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java @@ -39,9 +39,7 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; -import com.google.gwt.user.client.ui.Image; import org.silverpeas.mobile.client.apps.comments.pages.widgets.CommentsButton; -import org.silverpeas.mobile.client.apps.documents.resources.DocumentsResources; import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton; import org.silverpeas.mobile.client.apps.media.events.app.MediaViewGetNextEvent; import org.silverpeas.mobile.client.apps.media.events.app.MediaViewGetPreviousEvent; @@ -57,6 +55,7 @@ import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.app.View; import org.silverpeas.mobile.client.common.navigation.UrlUtils; +import org.silverpeas.mobile.client.common.network.NetworkHelper; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent; @@ -95,14 +94,11 @@ interface PhotoPageUiBinder extends UiBinder<HTMLPanel, PhotoPage> { private static PhotoPageUiBinder uiBinder = GWT.create(PhotoPageUiBinder.class); private PhotoDTO photo; - private DocumentsResources ressources; private MediaMessages msg; private SwipeRecognizer swipeRecognizer; public PhotoPage() { initWidget(uiBinder.createAndBindUi(this)); - ressources = GWT.create(DocumentsResources.class); - ressources.css().ensureInjected(); msg = GWT.create(MediaMessages.class); EventBus.getInstance().addHandler(AbstractMediaPagesEvent.TYPE, this); getElement().setId("a-media"); @@ -143,8 +139,7 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { if (isVisible()) { this.photo = (PhotoDTO) event.getPreview(); preview.setSrc(photo.getDataPhoto()); - Image img = new Image(ressources.image()); - mediaType.getParentElement().replaceChild(img.getElement(), mediaType); + mediaType.setSrc(NetworkHelper.getContext() + "icons/files/file-type-image.svg"); mediaTitle.setInnerHTML(photo.getTitle()); mediaFileName.setInnerHTML(photo.getName()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/NetworkHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/NetworkHelper.java index 21279b67b..984775028 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/NetworkHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/network/NetworkHelper.java @@ -49,6 +49,10 @@ public NetworkHelper() { watchConnectionType(this); } + public static String getContext() { + return "/silverpeas/spmobile/"; + } + private static native void watchConnectionType(NetworkHelper i) /*-{ var connection = window.navigator.connection || window.navigator.mozConnection || null; if (connection != null) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java index e1936759c..57de0f37e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java @@ -38,7 +38,6 @@ import com.google.gwt.user.client.ui.*; import org.silverpeas.mobile.client.apps.documents.pages.SharingPage; import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; -import org.silverpeas.mobile.client.apps.documents.resources.DocumentsResources; import org.silverpeas.mobile.client.apps.notifications.NotificationsApp; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.mobil.MobilUtils; @@ -65,8 +64,6 @@ public class Attachment extends Composite { @UiField HTML share, view, notify; - - protected DocumentsResources ressources = null; private DocumentsMessages msg = null; private ApplicationMessages globalMsg = null; private SimpleDocumentDTO data = null; @@ -86,8 +83,6 @@ interface AttachmentUiBinder extends UiBinder<Widget, Attachment> {} public Attachment() { msg = GWT.create(DocumentsMessages.class); globalMsg = GWT.create(ApplicationMessages.class); - ressources = GWT.create(DocumentsResources.class); - ressources.css().ensureInjected(); initWidget(uiBinder.createAndBindUi(this)); } @@ -132,21 +127,27 @@ private void render() { description.getStyle().setDisplay(Style.Display.NONE); } - if (data.getContentType().contains("msword")) { - img = new Image(ressources.msword()); - } else if (data.getContentType().contains("sheet")) { - img = new Image(ressources.msexcel()); + if (data.getContentType().contains("msword") || data.getContentType().contains("word")) { + icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-word.svg"); + } else if (data.getContentType().contains("excel")) { + icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-excel.svg"); } else if (data.getContentType().contains("pdf")) { - img = new Image(ressources.pdf()); + icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-pdf.svg"); } else if (data.getContentType().contains("image")) { - img = new Image(ressources.image()); - } else if (data.getContentType().contains("presentation")) { - img = new Image(ressources.mspowerpoint()); + icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-image.svg"); + } else if (data.getContentType().contains("presentationml")) { + icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-powerpoint.svg"); + } else if (data.getContentType().contains("zip")) { + icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-zip.svg"); + } else if (data.getContentType().contains("opendocument.text")) { + icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-writer.svg"); + } else if (data.getContentType().contains("opendocument.spreadsheet")) { + icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-calc.svg"); + } else if (data.getContentType().contains("opendocument.presentation")) { + icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-presentation.svg"); } else { - img = new Image(ressources.unknown()); + icon.setSrc(NetworkHelper.getContext() + "icons/files/file-type-unknown.svg"); } - icon.getParentElement().replaceChild(img.getElement(), icon); - // link generation try { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-calc.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-calc.svg new file mode 100644 index 000000000..0eaca9f52 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-calc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32"><path fill="#107c41" d="M21.818 0a.795.795 0 0 0-.74.469a.78.78 0 0 0 .172.849l6.646 6.661a.811.811 0 0 0 .849.177a.792.792 0 0 0 .484-.708V.771A.807.807 0 0 0 28.448 0zM3.547 0a.787.787 0 0 0-.776.786v30.427c0 .432.349.781.776.786h24.896a.789.789 0 0 0 .786-.786V11.619a.792.792 0 0 0-.229-.557L18.234.244a.799.799 0 0 0-.563-.245zm.786 1.578h13.005l10.313 10.359v18.484H4.333z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-excel.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-excel.svg new file mode 100644 index 000000000..0249b58c8 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-excel.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24"><path fill="#107c41" d="M21.17 3.25q.33 0 .59.25q.24.24.24.58v15.84q0 .34-.24.58q-.26.25-.59.25H7.83q-.33 0-.59-.25q-.24-.24-.24-.58V17H2.83q-.33 0-.59-.24Q2 16.5 2 16.17V7.83q0-.33.24-.59Q2.5 7 2.83 7H7V4.08q0-.34.24-.58q.26-.25.59-.25M7 13.06l1.18 2.22h1.79L8 12.06l1.93-3.17H8.22L7.13 10.9l-.04.06l-.03.07q-.26-.53-.56-1.07q-.25-.53-.53-1.07H4.16l1.89 3.19L4 15.28h1.78m8.1 4.22V17H8.25v2.5m5.63-3.75v-3.12H12v3.12m1.88-4.37V8.25H12v3.13M13.88 7V4.5H8.25V7m12.5 12.5V17h-5.62v2.5m5.62-3.75v-3.12h-5.62v3.12m5.62-4.37V8.25h-5.62v3.13M20.75 7V4.5h-5.62V7Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-image.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-image.svg new file mode 100644 index 000000000..8a02d8ab5 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-image.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="#eb6a05" d="m5 11.1l2-2l5.5 5.5l3.5-3.5l3 3V5H5zM4 3h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1m11.5 7a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-pdf.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-pdf.svg new file mode 100644 index 000000000..01c65b553 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-pdf.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" d="M4.998 9V1H19.5L23 4.5V23H4M18 1v5h5M3 12h1.5c2 0 2.25 1.25 2.25 2s-.25 2-2.25 2H3.25v2H3zm6.5 6v-6h1.705c1.137 0 2.295.5 2.295 3s-1.158 3-2.295 3zm7 1v-7h4m-4 3.5h3"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-powerpoint.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-powerpoint.svg new file mode 100644 index 000000000..aa9ee2d3a --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-powerpoint.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24"><path fill="#d35230" d="M13.5 1.5q1.453 0 2.795.375q1.342.375 2.508 1.06q1.166.686 2.12 1.641q.956.955 1.641 2.121q.686 1.166 1.061 2.508Q24 10.547 24 12q0 1.453-.375 2.795q-.375 1.342-1.06 2.508q-.686 1.166-1.641 2.12q-.955.956-2.121 1.641q-1.166.686-2.508 1.061q-1.342.375-2.795.375q-1.29 0-2.52-.305q-1.23-.304-2.337-.884q-1.108-.58-2.063-1.418q-.955-.838-1.693-1.893H.997q-.411 0-.704-.293T0 17.004V6.996q0-.41.293-.703T.996 6h3.89q.739-1.055 1.694-1.893q.955-.837 2.063-1.418q1.107-.58 2.337-.884Q12.21 1.5 13.5 1.5m.75 1.535v8.215h8.215q-.14-1.64-.826-3.076q-.686-1.436-1.782-2.531q-1.095-1.096-2.537-1.782q-1.441-.685-3.07-.826m-5.262 7.57q0-.68-.228-1.166q-.229-.486-.627-.79q-.399-.305-.938-.446q-.539-.14-1.172-.14H2.848v7.863h1.84v-2.742H5.93q.574 0 1.119-.17t.978-.493q.434-.322.698-.802q.263-.48.263-1.114M13.5 21q1.172 0 2.262-.287t2.056-.82q.967-.534 1.776-1.278q.808-.744 1.418-1.664q.61-.92.984-1.986q.375-1.067.469-2.227h-9.703V3.035q-1.735.14-3.27.908T6.797 6h4.207q.41 0 .703.293t.293.703v10.008q0 .41-.293.703t-.703.293H6.797q.644.715 1.412 1.271q.768.557 1.623.944q.855.387 1.781.586Q12.54 21 13.5 21M5.812 9.598q.575 0 .915.228q.34.229.34.838q0 .27-.124.44q-.123.17-.31.275q-.188.105-.422.146q-.234.041-.445.041H4.687V9.598Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-presentation.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-presentation.svg new file mode 100644 index 000000000..c5d4879e1 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-presentation.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="#d35230" d="M16.365 0a.597.597 0 0 0-.555.352a.582.582 0 0 0 .128.635l4.985 4.996a.605.605 0 0 0 .635.133a.59.59 0 0 0 .363-.53V.577A.605.605 0 0 0 21.335 0zM2.661 0a.59.59 0 0 0-.582.59v22.82a.59.59 0 0 0 .582.59h18.67a.59.59 0 0 0 .59-.59V8.716a.59.59 0 0 0-.17-.42L13.674.182a.59.59 0 0 0-.42-.181zm.59 1.184h9.754l7.733 7.77v13.863H3.251z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-unknown.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-unknown.svg new file mode 100644 index 000000000..a33b32dff --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-unknown.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="black" d="M9 2.003V2h10.998C20.55 2 21 2.455 21 2.992v18.016a.993.993 0 0 1-.993.992H3.993A1 1 0 0 1 3 20.993V8zM5.83 8H9V4.83zM11 4v5a1 1 0 0 1-1 1H5v10h14V4z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-word.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-word.svg new file mode 100644 index 000000000..6228ea19b --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-word.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24"><path fill="#026c9c" d="M21.17 3.25q.33 0 .59.25q.24.24.24.58v15.84q0 .34-.24.58q-.26.25-.59.25H7.83q-.33 0-.59-.25q-.24-.24-.24-.58V17H2.83q-.33 0-.59-.24Q2 16.5 2 16.17V7.83q0-.33.24-.59Q2.5 7 2.83 7H7V4.08q0-.34.24-.58q.26-.25.59-.25m-.8 8.09l1.2 3.94H9.6l1.31-6.56H9.53l-.78 3.88l-1.11-3.75H6.5l-1.19 3.77l-.78-3.9H3.09l1.31 6.56h1.37m14.98 4.22V17H8.25v2.5m12.5-3.75v-3.12H12v3.12m8.75-4.37V8.25H12v3.13M20.75 7V4.5H8.25V7Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-writer.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-writer.svg new file mode 100644 index 000000000..068fd94a1 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-writer.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32"><path fill="#026c9c" d="M21.818 0a.795.795 0 0 0-.74.469a.78.78 0 0 0 .172.849l6.646 6.661a.811.811 0 0 0 .849.177a.792.792 0 0 0 .484-.708V.771A.807.807 0 0 0 28.448 0zM3.547 0a.787.787 0 0 0-.776.786v30.427c0 .432.349.781.776.786h24.896a.789.789 0 0 0 .786-.786V11.619a.792.792 0 0 0-.229-.557L18.234.244a.799.799 0 0 0-.563-.245zm.786 1.578h13.005l10.313 10.359v18.484H4.333z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-zip.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-zip.svg new file mode 100644 index 000000000..007419361 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-zip.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 1024 1024"><path fill="#ffd100" d="M854.6 288.7c6 6 9.4 14.1 9.4 22.6V928c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V96c0-17.7 14.3-32 32-32h424.7c8.5 0 16.7 3.4 22.7 9.4zM790.2 326L602 137.8V326zM296 136v64h64v-64zm64 64v64h64v-64zm-64 64v64h64v-64zm64 64v64h64v-64zm-64 64v64h64v-64zm64 64v64h64v-64zm-64 64v64h64v-64zm0 64v160h128V584zm48 48h32v64h-32z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 5d3ea3d96..08e22f13d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -1063,6 +1063,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { .list-reservations li > *, .list-detail-event > * { padding:1em; + padding-left: 0.5em; } #linkedPublications li { @@ -1196,7 +1197,6 @@ html .ui-controlgroup-controls .ui-btn-up-c { #add-comment, .introduction { - padding: 0 1em; position: relative; margin-bottom: 1em } @@ -1216,6 +1216,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { #add-comment textarea.ui-input-text { font-size: 9pt; + height: 7em; } #add-comment .btn-publicate { @@ -1229,7 +1230,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { position: absolute; right: 0; bottom: 5px; - margin-right: 15px ; + margin-right: 1em ; } #add-comment .btn-publicate.inactif { @@ -1243,22 +1244,37 @@ html .ui-controlgroup-controls .ui-btn-up-c { color: #000; } -#attachments li a .weight, -#a-media #attachments li a .dimension { +#attachments li a .weight { display: block; padding-left: 24px; color: #848484; + margin-left: 8px; +} + +#a-media #attachments li a .dimension { + display: block; + color: #848484; + padding-left: 0px; + margin-left: calc(1em + 24px); } #a-media #attachments li a .weight { display: inline-block; - padding-left: 4px; + padding-left: 0px; + margin-left: calc(1em + 24px); +} + +#a-media #attachments li a img { + margin-left: 0.5em; } #attachments li a img { vertical-align: bottom; border: 0; margin-right: 8px; + float: left; + height: 24px; + width: 24px; } #attachments li a.expand-more { @@ -1278,7 +1294,8 @@ html .ui-controlgroup-controls .ui-btn-up-c { } #attachments li a span { - display: inline-block; + display: block; + padding-right:0.5em; } .ops-open, .ops-open #share, .ops-open #download, .ops-open #view, .ops-open #notify { @@ -1490,7 +1507,7 @@ input.filter-contacts { width: 24px; border: 1px solid #ccc; float: right; - margin-right: 1em; + /*margin-right: 1em;*/ } .list-contacts .user-name, From e44fd23a2e5e062b326cfadcf0df5fb9c5bc552a Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 12 Jan 2024 18:12:23 +0100 Subject: [PATCH 139/228] change in the ergonomics of the action menu and action buttons --- .../widgets/AcceptParticipationButton.java | 3 +- .../pages/widgets/AddReminderButton.java | 3 +- .../widgets/RejectParticipationButton.java | 3 +- .../widgets/TentativeParticipationButton.java | 3 +- .../documents/pages/widgets/ShareButton.java | 53 ++++++++----------- .../pages/widgets/AddToFavoritesButton.java | 3 +- .../pages/widgets/ViewMyRequestsButton.java | 3 +- .../widgets/ViewRequestsToValidateButton.java | 3 +- .../apps/media/pages/MediaNavigationPage.java | 9 +++- .../media/pages/MediaNavigationPage.ui.xml | 1 + .../media/pages/widgets/AddMediaButton.java | 7 +-- .../media/pages/widgets/AddMediaButton.ui.xml | 4 +- .../pages/widgets/NotifyButton.java | 3 +- .../pages/widgets/DeleteButton.java | 26 ++++----- .../pages/widgets/MarkAsReadButton.java | 3 +- .../pages/widgets/AddReservationButton.java | 3 +- .../widgets/DeleteReservationButton.java | 3 +- .../sharesbox/pages/widgets/DeleteButton.java | 3 +- .../workflow/pages/widgets/ActionButton.java | 3 +- .../client/components/base/ActionsMenu.java | 17 ++++-- .../components/base/widgets/ShareButton.java | 3 +- .../silverpeas/mobile/public/animations.css | 13 ++++- .../org/silverpeas/mobile/public/spmobile.css | 43 ++++++++++++--- 23 files changed, 138 insertions(+), 77 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AcceptParticipationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AcceptParticipationButton.java index ceb69d9ec..c3f651b38 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AcceptParticipationButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AcceptParticipationButton.java @@ -35,6 +35,7 @@ import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO; import org.silverpeas.mobile.shared.dto.almanach.ParticipationStatusDTO; @@ -69,7 +70,7 @@ void acceptParticipation(ClickEvent event) { EventBus.getInstance().fireEvent(new ParticipationEvent(ParticipationStatusDTO.ACCEPTED, eventDTO)); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AddReminderButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AddReminderButton.java index 37f342dad..708ee12cf 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AddReminderButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/AddReminderButton.java @@ -35,6 +35,7 @@ import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; /** * @author svu @@ -67,7 +68,7 @@ void addReminder(ClickEvent event) { EventBus.getInstance().fireEvent(new RemindersAddingEvent()); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/RejectParticipationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/RejectParticipationButton.java index 1d08937d3..3b7653fe8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/RejectParticipationButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/RejectParticipationButton.java @@ -35,6 +35,7 @@ import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO; import org.silverpeas.mobile.shared.dto.almanach.ParticipationStatusDTO; @@ -69,7 +70,7 @@ void reject(ClickEvent event) { EventBus.getInstance().fireEvent(new ParticipationEvent(ParticipationStatusDTO.DECLINED, eventDTO)); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java index 2d60e75cd..9aa5fe33c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java @@ -36,6 +36,7 @@ import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO; import org.silverpeas.mobile.shared.dto.almanach.ParticipationStatusDTO; @@ -70,7 +71,7 @@ void tentative(ClickEvent event) { EventBus.getInstance().fireEvent(new ParticipationEvent(ParticipationStatusDTO.TENTATIVE, eventDTO)); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java index 9a90c6296..2253db70f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java @@ -22,28 +22,21 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -package org.silverpeas.mobile.client.apps.documents.pages.widgets; +package org.silverpeas.mobile.client.components.base.widgets; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Event; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; -import org.fusesource.restygwt.client.Method; -import org.fusesource.restygwt.client.MethodCallback; -import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsSharingEvent; -import org.silverpeas.mobile.client.apps.documents.pages.SharingPage; -import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; -import org.silverpeas.mobile.client.apps.notifications.NotificationsApp; -import org.silverpeas.mobile.client.apps.notifications.resources.NotificationsMessages; -import org.silverpeas.mobile.client.common.EventBus; -import org.silverpeas.mobile.client.common.ServicesLocator; +import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages; +import org.silverpeas.mobile.client.common.Html5Utils; import org.silverpeas.mobile.client.components.base.ActionItem; -import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; +import org.silverpeas.mobile.client.components.base.ActionsMenu; +import org.silverpeas.mobile.client.resources.ApplicationMessages; /** * @author: svu @@ -57,34 +50,34 @@ interface ShareButtonUiBinder extends UiBinder<HTMLPanel, ShareButton> { @UiField HTMLPanel container; @UiField Anchor share; - @UiField(provided = true) protected DocumentsMessages msg = null; - private String instanceId, contentId, contentType, title, pageTitle; - - private int shareLevel; + @UiField(provided = true) protected ApplicationMessages msg = null; + private String title, text, url; public ShareButton() { - msg = GWT.create(DocumentsMessages.class); + msg = GWT.create(ApplicationMessages.class); initWidget(uiBinder.createAndBindUi(this)); setId("share"); } - - public void init(int shareLevel, String instanceId, String contentId, String contentType, String title, String pageTitle) { - this.instanceId = instanceId; - this.contentId = contentId; - this.contentType = contentType; + public void init(String title, String text, String url) { this.title = title; - this.pageTitle = pageTitle; - this.shareLevel = shareLevel; + this.text = text; + this.url = url; + try { + if (!Html5Utils.canShare(title, text, url)) { + setVisible(false); + } + } catch(Throwable t) { + setVisible(false); + } } - @UiHandler("share") - void displaySharePage(ClickEvent event) { - SharingPage page = new SharingPage(); - page.setData(contentType, contentId, instanceId); - page.show(); + void share(ClickEvent event) { + Html5Utils.share(title, text, url); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } + + } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java index c95b6c201..385a1ec29 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java @@ -35,6 +35,7 @@ import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; /** * @author: svu @@ -75,7 +76,7 @@ void displayNotificationPage(ClickEvent event){ EventBus.getInstance().fireEvent(addEvent); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java index dd4d8e9fe..e0d59745a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java @@ -36,6 +36,7 @@ import org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; /** * @author: svu @@ -68,7 +69,7 @@ void displayNotificationPage(ClickEvent event){ EventBus.getInstance().fireEvent(new FormOnlineMyRequestLoadEvent()); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewRequestsToValidateButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewRequestsToValidateButton.java index 0833a512c..51f370b55 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewRequestsToValidateButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewRequestsToValidateButton.java @@ -35,6 +35,7 @@ import org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; /** * @author: svu @@ -61,7 +62,7 @@ public ViewRequestsToValidateButton() { void displayNotificationPage(ClickEvent event){ EventBus.getInstance().fireEvent(new FormsOnlineAsReceiverLoadEvent()); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java index 67fe52b3a..129d6b8b1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java @@ -27,6 +27,8 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton; import org.silverpeas.mobile.client.apps.media.events.app.MediaViewShowEvent; @@ -44,6 +46,7 @@ import org.silverpeas.mobile.client.common.app.View; import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.components.UnorderedList; +import org.silverpeas.mobile.client.components.base.ActionsList; import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.LoadingItem; import org.silverpeas.mobile.client.components.base.PageContent; @@ -66,6 +69,7 @@ public class MediaNavigationPage extends PageContent implements View, MediaNavig private AddMediaButton buttonImport = new AddMediaButton(); private LoadingItem endline = new LoadingItem(); @UiField ActionsMenu actionsMenu; + @UiField ActionsList actionsShortcuts; private String rootAlbumId, instanceId; private RightDTO rights; @@ -96,7 +100,10 @@ public void loadedDataEvent(final DataLoadedEvent event) { if (isVisible() && ((event.getLocationId() == null && rootAlbumId == null) || event.getLocationId().equals(rootAlbumId))) { list.clear(); if (rights.getWriter() || rights.getPublisher() || rights.getManager()) { - if (rootAlbumId != null) list.add(buttonImport); + if (rootAlbumId != null) { + //list.add(buttonImport); + actionsShortcuts.addAction(buttonImport); + } } List<BaseDTO> dataItems = event.getData(); populateList(dataItems); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml index daa9b4ea4..52c6aabab 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml @@ -29,6 +29,7 @@ xmlns:components="urn:import:org.silverpeas.mobile.client.components"> <g:HTMLPanel styleName="content"> + <base:ActionsList ui:field="actionsShortcuts"/> <base:ActionsMenu ui:field="actionsMenu"/> <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java index 3486efd17..3e6628271 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.java @@ -32,9 +32,7 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FileUpload; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.SpMobil; @@ -44,14 +42,14 @@ import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.navigation.UrlUtils; import org.silverpeas.mobile.client.common.network.NetworkHelper; -import org.silverpeas.mobile.client.common.network.OfflineHelper; +import org.silverpeas.mobile.client.components.base.ActionItem; import org.silverpeas.mobile.client.resources.ApplicationMessages; /** * @author: svu */ -public class AddMediaButton extends Composite { +public class AddMediaButton extends ActionItem { interface AddMediaButtonUiBinder extends UiBinder<Widget, AddMediaButton> { } @@ -108,7 +106,6 @@ void upload(ClickEvent event) { } else { Notification.alert(globalMsg.needToBeOnline()); } - } private static native void upload(AddMediaButton button, Element input, String componentId, String albumId, String url, String token) /*-{ diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.ui.xml index 6d6292185..827d18d91 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AddMediaButton.ui.xml @@ -28,7 +28,7 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.media.resources.MediaMessages'/> <g:HTMLPanel tag="li" styleName="add-media"> - <g:Anchor ui:field="link" styleName="ui-btn ui-btn-icon-right ui-icon-carat-more" text="{msg.importMedia}"/> - <g:FileUpload ui:field="file" styleName="ui-btn ui-btn-icon-right ui-icon-carat-more" title="{msg.importMedia}" name="file"/> + <g:Anchor ui:field="link"/> + <g:FileUpload ui:field="file" title="{msg.importMedia}" name="file"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/widgets/NotifyButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/widgets/NotifyButton.java index 0c9a60d65..0de549556 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/widgets/NotifyButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/widgets/NotifyButton.java @@ -34,6 +34,7 @@ import org.silverpeas.mobile.client.apps.notifications.NotificationsApp; import org.silverpeas.mobile.client.apps.notifications.resources.NotificationsMessages; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; /** * @author: svu @@ -71,7 +72,7 @@ void displayNotificationPage(ClickEvent event){ app.start(); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java index 6a1b69793..517ceea35 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java @@ -22,7 +22,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -package org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets; +package org.silverpeas.mobile.client.apps.sharesbox.pages.widgets; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; @@ -31,12 +31,13 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.notificationsbox.events.app.DeleteNotificationsEvent; -import org.silverpeas.mobile.client.apps.notificationsbox.pages.NotificationsBoxPage; -import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages; +import org.silverpeas.mobile.client.apps.sharesbox.events.app.DeleteSharesEvent; +import org.silverpeas.mobile.client.apps.sharesbox.pages.SharesBoxPage; +import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; -import org.silverpeas.mobile.shared.dto.notifications.NotificationBoxDTO; +import org.silverpeas.mobile.client.components.base.ActionsMenu; +import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; import java.util.List; @@ -49,7 +50,7 @@ interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} private static DeleteButtonUiBinder uiBinder = GWT.create(DeleteButtonUiBinder.class); - private NotificationsBoxPage parentPage; + private SharesBoxPage parentPage; @UiField HTMLPanel container; @@ -57,28 +58,27 @@ interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} Anchor delete; @UiField(provided = true) - protected NotificationsMessages msg = null; + protected ShareMessages msg = null; public DeleteButton() { - msg = GWT.create(NotificationsMessages.class); + msg = GWT.create(ShareMessages.class); initWidget(uiBinder.createAndBindUi(this)); setId("delete"); } @UiHandler("delete") void delete(ClickEvent event) { - List<NotificationBoxDTO> selection = parentPage.getSelectedNotification(); - - DeleteNotificationsEvent deleteEvent = new DeleteNotificationsEvent(); + List<TicketDTO> selection = parentPage.getSelectedShares(); + DeleteSharesEvent deleteEvent = new DeleteSharesEvent(); deleteEvent.setSelection(selection); if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } - public void setParentPage(final NotificationsBoxPage parentPage) { + public void setParentPage(final SharesBoxPage parentPage) { this.parentPage = parentPage; } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java index cb75aadfa..1508dd38c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java @@ -36,6 +36,7 @@ import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.shared.dto.notifications.NotificationBoxDTO; import java.util.List; @@ -75,7 +76,7 @@ void read(ClickEvent event) { EventBus.getInstance().fireEvent(notReadEvent); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } public void setParentPage(final NotificationsBoxPage parentPage) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java index 4dcb29c96..31bb17510 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java @@ -13,6 +13,7 @@ import org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; /** * @author svu @@ -47,6 +48,6 @@ void displayReservationPage(ClickEvent event){ page.show(); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java index 3a99c7ce7..0c0a85428 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java @@ -15,6 +15,7 @@ import org.silverpeas.mobile.client.components.Popin; import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.shared.dto.reservations.ReservationDTO; /** @@ -61,6 +62,6 @@ public void execute() { conf.show(); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java index bcdc71893..517ceea35 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java @@ -36,6 +36,7 @@ import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; import java.util.List; @@ -74,7 +75,7 @@ void delete(ClickEvent event) { if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } public void setParentPage(final SharesBoxPage parentPage) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/widgets/ActionButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/widgets/ActionButton.java index 013f3a1ff..ff925bc12 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/widgets/ActionButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/widgets/ActionButton.java @@ -35,6 +35,7 @@ import org.silverpeas.mobile.client.apps.workflow.resources.WorkflowMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; /** * @author: svu @@ -72,7 +73,7 @@ void executeAction(ClickEvent event){ ev.setState(state); EventBus.getInstance().fireEvent(ev); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java index e3c755e2c..d574dbe39 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java @@ -25,11 +25,14 @@ package org.silverpeas.mobile.client.components.base; import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; @@ -57,17 +60,25 @@ public ActionsMenu() { actions.getElement().setId("action-button"); container.getElement().setId("actions"); container.getElement().getStyle().setDisplay(Style.Display.NONE); + listActions.getElement().addClassName("closed-qvf-menu"); } @UiHandler("actions") protected void showActions(ClickEvent event) { - if (listActions.getStyleDisplay().equalsIgnoreCase("none") || listActions.getStyleDisplay().isEmpty()) { - listActions.setStyledisplay(Style.Display.BLOCK); + if (listActions.getElement().getClassName().equals("closed-qvf-menu")) { + listActions.getElement().addClassName("open-qvf-menu"); + listActions.getElement().removeClassName("closed-qvf-menu"); } else { - listActions.setStyledisplay(Style.Display.NONE); + listActions.getElement().removeClassName("open-qvf-menu"); + listActions.getElement().addClassName("closed-qvf-menu"); } } + public static void close(Element action) { + action.getParentElement().removeClassName("open-qvf-menu"); + action.getParentElement().addClassName("closed-qvf-menu"); + } + public boolean isEmpty() { return (listActions.getWidgetCount() == 0); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java index fee1e8e2b..2253db70f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java @@ -35,6 +35,7 @@ import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages; import org.silverpeas.mobile.client.common.Html5Utils; import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.resources.ApplicationMessages; /** @@ -74,7 +75,7 @@ void share(ClickEvent event) { Html5Utils.share(title, text, url); // hide menu - getElement().getParentElement().removeAttribute("style"); + ActionsMenu.close(getElement()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css index 22b1f07b9..960b5665a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css @@ -6,4 +6,15 @@ .opening-page { transition: transform 300ms; transform: translateX(-100%); -} \ No newline at end of file +} + +.open-qvf-menu { + opacity: 1.0; + transition: opacity 250ms linear; +} + +.closed-qvf-menu { + opacity: 0.0; + transition: opacity 250ms linear; +} + diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 08e22f13d..b59ca3884 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -772,7 +772,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { /***** NAVIGATION ****/ -.folder-ged a, .folder-galery a, .publication a, .media a, .trash a, .add-media a, .app-actuality a, +.folder-ged a, .folder-galery a, .publication a, .media a, .trash a, .app-actuality a, .publication.ui-input-text, .app-blog a, .app-pageWeb a, .app-workflow a, .app-link a, .app-almanach a, .app-formsOnline a, .app-classifieds a, .app-survey a, .app-faq a, .app-polling a, .app-resourcesManager a { background-image: url(packImagesNavigation.png); background-position: 0.5625em 0.5625em; @@ -780,20 +780,17 @@ html .ui-controlgroup-controls .ui-btn-up-c { padding-left: 2.5em } -.add-media, .add-task { background-color: #FDF4EF; border-bottom: 1px solid #EDBCBB; border-top: 1px solid #EDBCBB; } -.ui-listview > li.add-media a, .ui-listview > li.add-task a { background: #FDF4EF none; padding-left: 1em } -.ui-listview > li.add-media a::after, .ui-listview > li.add-task a::after { background: transparent url('icons/add.svg') no-repeat; } @@ -904,6 +901,19 @@ html .ui-controlgroup-controls .ui-btn-up-c { background-position-x: 0.5em; } +.add-media { + height: 24px; + width: 24px; + filter: invert(1); + background: url('icons/add.svg') no-repeat; +} + +.add-media a { + height: 24px; + width: 24px; + display: block; +} + .media-thumb:first-child { clear: left; } @@ -2021,18 +2031,19 @@ form .forms .fields > li:nth-child(even) { height: 24px; text-indent: -3000px; top: 1em; - right: 1em; + right: 0.5em; background: transparent url("qvf.svg") 0 0 no-repeat; outline: none; z-index: 999; + padding-left: 1em; + padding-right: 1em; } #action-bloc { - display: none; border: 0; position: absolute; - top: 3em; - right: 1em; + top: 46px; + right: 0.1em; padding: 0; margin: 0; width: 10em; @@ -2054,6 +2065,22 @@ form .forms .fields > li:nth-child(even) { width: 100%; } +#actionsList { + position: absolute; + top: -31px; + right: 4em; + z-index: 9999; +} + +#actionsList ul { + margin: 0; + padding: 0; +} + +#actionsList li { + list-style: none; +} + .config .actuality a { background-image: url(packImagesNavigation.png); background-position: right -1022px; From 8eb7d0eb51042e80de7919a5da5408a3d522d6a1 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 12 Jan 2024 18:16:48 +0100 Subject: [PATCH 140/228] change in the ergonomics of the action menu and action buttons --- .../client/components/base/ActionsList.java | 81 +++++++++++++++++++ .../client/components/base/ActionsList.ui.xml | 32 ++++++++ 2 files changed, 113 insertions(+) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.ui.xml diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java new file mode 100644 index 000000000..fb2b0353a --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.components.base; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.components.UnorderedList; + +/** + * @author: svu + */ +public class ActionsList extends Composite { + + interface ActionsMenuUiBinder extends UiBinder<Widget, ActionsList> { + } + + private static ActionsMenuUiBinder uiBinder = GWT.create(ActionsMenuUiBinder.class); + + @UiField HTMLPanel container; + @UiField + UnorderedList listActions; + + public ActionsList() { + initWidget(uiBinder.createAndBindUi(this)); + listActions.setId("actionList-bloc"); + container.getElement().setId("actionsList"); + container.getElement().getStyle().setDisplay(Style.Display.NONE); + } + public boolean isEmpty() { + return (listActions.getWidgetCount() == 0); + } + + public void addAction(ActionItem action) { + for (int i = 0; i < listActions.getWidgetCount(); i++) { + ActionItem act = (ActionItem) listActions.getWidget(i); + if (act.getId().equals(action.getId())) return; + } + listActions.add(action); + container.getElement().getStyle().setDisplay(Style.Display.BLOCK); + } + + public void removeAction(String id, boolean silently) { + for (int i = 0; i < listActions.getWidgetCount(); i++) { + ActionItem act = (ActionItem) listActions.getWidget(i); + if (act.getId().equals(id)) { + listActions.remove(act); + break; + } + } + if (isEmpty()) { + container.getElement().getStyle().setDisplay(Style.Display.NONE); + } + } +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.ui.xml new file mode 100644 index 000000000..68e24eaab --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.ui.xml @@ -0,0 +1,32 @@ +<!-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "https://www.silverpeas.org/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui' + xmlns:components="urn:import:org.silverpeas.mobile.client.components"> + <g:HTMLPanel ui:field="container"> + <components:UnorderedList ui:field="listActions" /> + </g:HTMLPanel> + +</ui:UiBinder> \ No newline at end of file From d12e7dfa738f8797ba9ee29753f78eb5f9531f66 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 15 Jan 2024 17:06:31 +0100 Subject: [PATCH 141/228] enhance tasks list --- .../apps/media/pages/MediaNavigationPage.java | 1 - .../client/apps/tasks/pages/TasksPage.java | 13 ++-- .../client/apps/tasks/pages/TasksPage.ui.xml | 4 +- .../tasks/pages/widgets/AddTaskButton.java | 63 +++++++++++++++++++ .../tasks/pages/widgets/AddTaskButton.ui.xml | 32 ++++++++++ .../apps/tasks/pages/widgets/TaskItem.java | 7 --- .../apps/tasks/pages/widgets/TaskItem.ui.xml | 2 +- .../silverpeas/mobile/public/components.css | 28 +++++++++ .../org/silverpeas/mobile/public/spmobile.css | 47 ++++---------- 9 files changed, 149 insertions(+), 48 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.ui.xml diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java index 129d6b8b1..648742c2a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java @@ -101,7 +101,6 @@ public void loadedDataEvent(final DataLoadedEvent event) { list.clear(); if (rights.getWriter() || rights.getPublisher() || rights.getManager()) { if (rootAlbumId != null) { - //list.add(buttonImport); actionsShortcuts.addAction(buttonImport); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java index e5b816c4b..7d9242c40 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java @@ -28,17 +28,19 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.HTMLPanel; +import org.silverpeas.mobile.client.apps.media.pages.widgets.AddMediaButton; import org.silverpeas.mobile.client.apps.tasks.events.app.TasksLoadEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.AbstractTasksPagesEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskCreatedEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskUpdatedEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksLoadedEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksPagesEventHandler; -import org.silverpeas.mobile.client.apps.tasks.pages.widgets.AddTaskItem; +import org.silverpeas.mobile.client.apps.tasks.pages.widgets.AddTaskButton; import org.silverpeas.mobile.client.apps.tasks.pages.widgets.TaskItem; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.components.UnorderedList; +import org.silverpeas.mobile.client.components.base.ActionsList; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.TaskDTO; @@ -52,11 +54,14 @@ public class TasksPage extends PageContent implements TasksPagesEventHandler { interface TasksPageUiBinder extends UiBinder<HTMLPanel, TasksPage> { } private static TasksPageUiBinder uiBinder = GWT.create(TasksPageUiBinder.class); - + private AddTaskButton buttonCreate = new AddTaskButton(); @UiField HTMLPanel container; @UiField UnorderedList list; + @UiField + ActionsList actionsShortcuts; + public TasksPage() { initWidget(uiBinder.createAndBindUi(this)); EventBus.getInstance().fireEvent(new TasksLoadEvent()); @@ -66,9 +71,9 @@ public TasksPage() { @Override public void onTaskLoad(final TasksLoadedEvent event) { Notification.activityStop(); + actionsShortcuts.addAction(buttonCreate); - - list.add(new AddTaskItem()); + //list.add(new AddTaskButton()); Iterator<TaskDTO> i = event.getTasks().iterator(); while (i.hasNext()) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml index 738ed1472..cfbb3dc50 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml @@ -24,9 +24,11 @@ <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" + xmlns:base="urn:import:org.silverpeas.mobile.client.components.base" xmlns:components="urn:import:org.silverpeas.mobile.client.components"> - <g:HTMLPanel ui:field="container" styleName="ui-content ui-body-a"> + <g:HTMLPanel ui:field="container" styleName="ui-content ui-body-a tasks"> + <base:ActionsList ui:field="actionsShortcuts"/> <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"></components:UnorderedList> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.java new file mode 100644 index 000000000..4f029ef90 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.tasks.pages.widgets; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.apps.tasks.pages.TaskPage; +import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; +import org.silverpeas.mobile.client.components.base.ActionItem; + +/** + * @author: svu + */ +public class AddTaskButton extends ActionItem { + + interface AddTaskItemUiBinder extends UiBinder<Widget, AddTaskButton> { + } + + @UiField Anchor link; + @UiField(provided = true) protected TasksMessages msg = null; + + private static AddTaskItemUiBinder uiBinder = GWT.create(AddTaskItemUiBinder.class); + + public AddTaskButton() { + msg = GWT.create(TasksMessages.class); + initWidget(uiBinder.createAndBindUi(this)); + } + + @UiHandler("link") + void createTask(ClickEvent event) { + TaskPage page = new TaskPage(); + page.setPageTitle(msg.create()); + page.show(); + } +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.ui.xml new file mode 100644 index 000000000..c5917f472 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.ui.xml @@ -0,0 +1,32 @@ +<!-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "https://www.silverpeas.org/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> + <ui:with field='msg' type='org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages'/> + + <g:HTMLPanel tag="li" ui:field="container" styleName="add-task"> + <g:Anchor ui:field="link"/> + </g:HTMLPanel> +</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java index 515026ba9..65dcffd92 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java @@ -25,7 +25,6 @@ package org.silverpeas.mobile.client.apps.tasks.pages.widgets; import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.InputElement; import com.google.gwt.dom.client.SpanElement; import com.google.gwt.dom.client.Style; @@ -87,12 +86,6 @@ public TaskDTO getData() { return task; } - public native void addListenerInput(Element range, TaskItem item) /*-{ - range.addEventListener('input', function () { - item.@org.silverpeas.mobile.client.apps.tasks.pages.widgets.TaskItem::updateRange(I)(range.value); - }, false); - }-*/; - @UiHandler("link") protected void edit(ClickEvent event) { if (task.getExternalId().isEmpty()) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.ui.xml index ac5cee19a..54814a39d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.ui.xml @@ -26,7 +26,7 @@ <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> <ui:with field='msg' type='org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages'/> - <g:HTMLPanel tag="li" ui:field="container" styleName="task"> + <g:HTMLPanel tag="li" ui:field="container" styleName="task readonly"> <g:Anchor styleName="ui-btn ui-icon-carat-r" ui:field="link"> <span ui:field="name"></span> (<span ui:field="priority" class="task-priority"></span>) <br/><span ui:field="delegator"></span><span ui:field="endDate" class="endDate"></span> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css index 9efc575c0..28b43e4f9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css @@ -181,3 +181,31 @@ transform: scale(1); } } + +/***** Range input ***************/ + +input[type="range"] { + height: 5px; + -webkit-appearance: none; + background: rgb(197, 197, 197); + outline: none; + color: rgb(197, 197, 197); + +} +input[type="range"]::-webkit-slider-thumb { + -webkit-appearance: none; + width: 25px; + height: 25px; + border-radius: 50%; + background: #6fa800; + cursor: pointer; +} + +.readonly input[type="range"] { + height: 1em; +} + +.readonly input[type="range"]::-webkit-slider-thumb { + width: 0px; + height: 0px; +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index b59ca3884..52e366b8b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -712,7 +712,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { } #silverpeas-navmenu-panel #navmenu-panel li#menu-tasks a { - background: transparent url('icons/tasks.svg') 8px -394px no-repeat; + background: transparent url('icons/tasks.svg') no-repeat; } #silverpeas-navmenu-panel #navmenu-panel li#menu-help a { @@ -780,19 +780,22 @@ html .ui-controlgroup-controls .ui-btn-up-c { padding-left: 2.5em } -.add-task { - background-color: #FDF4EF; - border-bottom: 1px solid #EDBCBB; - border-top: 1px solid #EDBCBB; +.tasks #actionsList { + top: 12px; + right: 1em; } -.ui-listview > li.add-task a { - background: #FDF4EF none; - padding-left: 1em +.add-task { + height: 24px; + width: 24px; + filter: invert(1); + background: url('icons/add.svg') no-repeat; } -.ui-listview > li.add-task a::after { - background: transparent url('icons/add.svg') no-repeat; +.add-task a { + height: 24px; + width: 24px; + display: block; } .publication.ui-input-text { @@ -1957,30 +1960,6 @@ form .forms .fields > li:nth-child(even) { float: left; } -.ui-listview input[type="range"] { - -webkit-appearance: none; - -moz-apperance: none; - border-radius: 0px; - border: 0; - height: 4px; - margin: 1em 0; - background-image: -webkit-gradient( - linear, - left top, - right top, - color-stop(0, #72ab0e), - color-stop(0, #C5C5C5) - ); -} - -.ui-listview input[type='range']::-webkit-slider-thumb { - -webkit-appearance: none !important; - background-color: transparent; - border: 0; - height: 1px; - width: 1px; -} - .task-percent-range { width: 80%; float: right; From 6b60a63ccf4c994f78b0f8a66919bd99f14546e4 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 16 Jan 2024 09:47:47 +0100 Subject: [PATCH 142/228] actions centralisation --- .../client/apps/agenda/pages/AgendaPage.java | 6 +-- .../apps/agenda/pages/AgendaPage.ui.xml | 1 - .../client/apps/agenda/pages/EventPage.java | 16 +++---- .../client/apps/agenda/pages/EventPage.ui.xml | 1 - .../widgets/TentativeParticipationButton.java | 1 - .../client/apps/blog/pages/BlogPage.java | 7 +-- .../client/apps/blog/pages/BlogPage.ui.xml | 1 - .../classifieds/pages/ClassifiedPage.java | 6 +-- .../classifieds/pages/ClassifiedPage.ui.xml | 1 - .../classifieds/pages/ClassifiedsPage.java | 5 +-- .../classifieds/pages/ClassifiedsPage.ui.xml | 1 - .../documents/pages/GedNavigationPage.java | 6 +-- .../documents/pages/GedNavigationPage.ui.xml | 1 - .../apps/documents/pages/PublicationPage.java | 9 ++-- .../documents/pages/PublicationPage.ui.xml | 1 - .../documents/pages/widgets/ShareButton.java | 43 +++++++++---------- .../mobile/client/apps/faq/pages/FaqPage.java | 5 +-- .../client/apps/faq/pages/FaqPage.ui.xml | 1 - .../formsonline/pages/FormOnlineEditPage.java | 4 -- .../pages/FormOnlineEditPage.ui.xml | 1 - .../pages/FormOnlineRequestsPage.java | 3 -- .../pages/FormOnlineRequestsPage.ui.xml | 1 - .../formsonline/pages/FormOnlineViewPage.java | 4 -- .../pages/FormOnlineViewPage.ui.xml | 1 - .../pages/FormsOnlineAsReceiverPage.java | 3 -- .../pages/FormsOnlineAsReceiverPage.ui.xml | 1 - .../formsonline/pages/FormsOnlinePage.java | 9 ++-- .../formsonline/pages/FormsOnlinePage.ui.xml | 1 - .../pages/widgets/ViewMyRequestsButton.java | 1 - .../apps/media/pages/MediaNavigationPage.java | 17 +++----- .../media/pages/MediaNavigationPage.ui.xml | 2 - .../client/apps/media/pages/PhotoPage.java | 9 ++-- .../client/apps/media/pages/PhotoPage.ui.xml | 2 - .../client/apps/media/pages/SoundPage.java | 8 ++-- .../client/apps/media/pages/SoundPage.ui.xml | 1 - .../client/apps/media/pages/VideoPage.java | 8 ++-- .../client/apps/media/pages/VideoPage.ui.xml | 1 - .../apps/media/pages/VideoStreamingPage.java | 9 ++-- .../media/pages/VideoStreamingPage.ui.xml | 1 - .../apps/navigation/pages/NavigationPage.java | 5 +-- .../navigation/pages/NavigationPage.ui.xml | 1 - .../client/apps/news/pages/NewsPage.java | 6 +-- .../client/apps/news/pages/NewsPage.ui.xml | 1 - .../pages/NotificationsBoxPage.java | 7 +-- .../pages/NotificationsBoxPage.ui.xml | 1 - .../pages/ReservationDetailPage.java | 13 +----- .../pages/ReservationDetailPage.ui.xml | 1 - .../pages/ResourcesManagerPage.java | 8 +--- .../pages/ResourcesManagerPage.ui.xml | 1 - .../pages/widgets/AddReservationButton.java | 3 -- .../widgets/DeleteReservationButton.java | 2 - .../apps/sharesbox/pages/SharesBoxPage.java | 6 +-- .../apps/sharesbox/pages/SharesBoxPage.ui.xml | 1 - .../client/apps/survey/pages/SurveyPage.java | 4 -- .../apps/survey/pages/SurveyPage.ui.xml | 1 - .../client/apps/survey/pages/SurveysPage.java | 5 +-- .../apps/survey/pages/SurveysPage.ui.xml | 1 - .../client/apps/tasks/pages/TasksPage.java | 6 +-- .../pages/WorkflowActionFormPage.java | 3 -- .../pages/WorkflowActionFormPage.ui.xml | 1 - .../apps/workflow/pages/WorkflowPage.java | 11 ++--- .../apps/workflow/pages/WorkflowPage.ui.xml | 1 - .../pages/WorkflowPresentationPage.java | 5 +-- .../pages/WorkflowPresentationPage.ui.xml | 1 - .../client/components/base/ActionsList.java | 5 +++ .../client/components/base/ActionsMenu.java | 10 +++++ .../mobile/client/components/base/Page.java | 3 ++ .../client/components/base/PageContent.java | 34 ++++++++++++++- .../client/components/base/PageHeader.java | 23 ++++++++++ .../client/components/base/PageHeader.ui.xml | 9 ++-- .../components/base/widgets/ShareButton.java | 2 - .../org/silverpeas/mobile/public/spmobile.css | 7 ++- 72 files changed, 158 insertions(+), 229 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java index 863c2bc15..ea71e303c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java @@ -48,7 +48,6 @@ import org.silverpeas.mobile.client.common.DateUtil; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO; @@ -67,9 +66,6 @@ public class AgendaPage extends PageContent implements AgendaPagesEventHandler { @UiField(provided = true) protected AgendaMessages msg = null; - @UiField - ActionsMenu actionsMenu; - @UiField UnorderedList events; @@ -215,7 +211,7 @@ public void onCalendarEventsLoaded(final CalendarLoadedEvent event) { } else { message.setInnerText(msg.noEvent()); } - actionsMenu.addAction(favorite); + addActionMenu(favorite); favorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.ui.xml index b07b1954f..3226ad9aa 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages' /> <g:HTMLPanel ui:field="container" styleName="content"> - <base:ActionsMenu ui:field="actionsMenu"/> <h2 class="appHeader"></h2> <div class="ui-corner-all ui-control-horizontal"> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java index f36b0d447..dae0f0602 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java @@ -69,7 +69,6 @@ import org.silverpeas.mobile.client.common.PublicationContentHelper; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.attachments.Attachment; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventAttendeeDTO; @@ -114,9 +113,6 @@ public class EventPage extends PageContent implements EventPagesEventHandler { @UiField UnorderedList attachments, attendees; - @UiField - ActionsMenu actionsMenu; - private CalendarEventDTO event; private CalendarDTO calendar; private ReminderDTO reminderDTO; @@ -237,9 +233,9 @@ public void setData(ApplicationInstanceDTO instance, CalendarEventDTO event, Cal for (CalendarEventAttendeeDTO attendee : event.getAttendees()) { if (attendee.getId().equals(SpMobil.getUser().getId())) { - actionsMenu.addAction(participation); - actionsMenu.addAction(rejectParticipation); - actionsMenu.addAction(tentativeParticipation); + addActionMenu(participation); + addActionMenu(rejectParticipation); + addActionMenu(tentativeParticipation); participation.setVisible(!attendee.getParticipationStatus().equals(ParticipationStatusDTO.ACCEPTED)); rejectParticipation.setVisible(!attendee.getParticipationStatus().equals(ParticipationStatusDTO.DECLINED)); tentativeParticipation.setVisible(!attendee.getParticipationStatus().equals(ParticipationStatusDTO.TENTATIVE)); @@ -255,15 +251,15 @@ public void setData(ApplicationInstanceDTO instance, CalendarEventDTO event, Cal } // actions - actionsMenu.addAction(addReminder); + addActionMenu(addReminder); notification.init(instance.getId(), event.getEventId(), NotificationDTO.TYPE_EVENT, event.getTitle(), getPageTitle()); - actionsMenu.addAction(notification); + addActionMenu(notification); } @Override public void onRemindersLoaded(final RemindersLoadedEvent event) { if (event.getDurations().isEmpty()) { - actionsMenu.removeAction(addReminder.getId(), true); + removeActionMenu(addReminder); } for (String duration : event.getDurations()) { String durationLabel = ""; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml index 48c55b720..e81da70b1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <h2 ui:field="header" class="appHeader"></h2> <p ui:field="description" class="publiDesc"></p> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java index 9aa5fe33c..0fb525174 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/TentativeParticipationButton.java @@ -29,7 +29,6 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; import org.silverpeas.mobile.client.apps.agenda.events.app.ParticipationEvent; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java index 949cf2b53..53c8b89f4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.java @@ -42,7 +42,6 @@ import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.shared.dto.ContentsTypes; @@ -64,8 +63,6 @@ public class BlogPage extends PageContent implements BlogPagesEventHandler { @UiField UnorderedList news; @UiField - ActionsMenu actionsMenu; - @UiField ListBox categories; private AddToFavoritesButton favorite = new AddToFavoritesButton(); @@ -132,9 +129,9 @@ public int compare(Map.Entry<String, String> o1, } categories.setSelectedIndex(oldSelection); - actionsMenu.addAction(favorite); + addActionMenu(favorite); favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), getPageTitle()); - actionsMenu.addAction(share); + addActionMenu(share); share.init(getPageTitle(), getPageTitle(), LinksManager.createApplicationPermalink(instanceId)); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml index f20201cc4..c49ab8996 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.blog.resources.BlogMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <div class="content-navigation"><g:ListBox ui:field="categories"/></div> <components:UnorderedList ui:field="news" styleName="liste-billet"/> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.java index 958982422..9a44490fb 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.java @@ -50,7 +50,6 @@ import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.FormFieldDTO; import org.silverpeas.mobile.shared.dto.classifieds.ClassifiedDTO; @@ -66,9 +65,6 @@ public class ClassifiedPage extends PageContent implements ClassifiedsPagesEvent @UiField(provided = true) protected ClassifiedsMessages msg = null; - @UiField - ActionsMenu actionsMenu; - @UiField HTML price, time, author; @@ -148,7 +144,7 @@ public void setData(ClassifiedDTO data) { } notification.init(getApp().getApplicationInstance().getId(), data.getId(), NotificationDTO.TYPE_EVENT, data.getTitle(), getPageTitle()); - actionsMenu.addAction(notification); + addActionMenu(notification); if (hasComments) { String contentType = "Classified"; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.ui.xml index a9ebcb854..d7ce649fe 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedPage.ui.xml @@ -32,7 +32,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.classifieds.resources.ClassifiedsMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <div id="classified" class="content-navigation"> <g:HTMLPanel tag="h2" ui:field="title" styleName="title"></g:HTMLPanel> <g:FocusPanel ui:field="carroussel" styleName="classified_pictures"> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.java index 7766ebef0..9483d7c94 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.java @@ -40,7 +40,6 @@ import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.classifieds.ClassifiedDTO; @@ -54,8 +53,6 @@ public class ClassifiedsPage extends PageContent implements ClassifiedsPagesEven @UiField UnorderedList classifieds; @UiField - ActionsMenu actionsMenu; - @UiField ListBox categories, types; @@ -94,7 +91,7 @@ public void onClassifiedsLoad(final ClassifiedsLoadedEvent event) { } displayList(); - actionsMenu.addAction(favorite); + addActionMenu(favorite); favorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml index 34a928bab..b7a27a9e1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.classifieds.resources.ClassifiedsMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <div class="content-navigation"> <span class="ui-btn-text"><ui:text from="{msg.category}"/></span> <g:ListBox ui:field="categories"/> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java index 1c359c042..216394723 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java @@ -44,7 +44,6 @@ import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.app.View; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.BaseDTO; import org.silverpeas.mobile.shared.dto.ContentDTO; @@ -59,7 +58,6 @@ public class GedNavigationPage extends PageContent implements View, GedNavigatio private DocumentsMessages msg; @UiField UnorderedList list; - @UiField ActionsMenu actionsMenu; private TopicDTO root; private String rootTopicId, instanceId; @@ -112,7 +110,7 @@ public void onLoadedTopics(GedItemsLoadedEvent event) { } dataLoaded = true; - actionsMenu.addAction(favorite); + addActionMenu(favorite); if (root.getId() == null) { favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), root.getName()); @@ -122,7 +120,7 @@ public void onLoadedTopics(GedItemsLoadedEvent event) { if (event.getSharing() > 0) { share.init(event.getSharing(), instanceId, root.getId(),"Node", "",""); - actionsMenu.addAction(share); + addActionMenu(share); } Notification.activityStop(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml index daa9b4ea4..72a5a68b3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml @@ -29,7 +29,6 @@ xmlns:components="urn:import:org.silverpeas.mobile.client.components"> <g:HTMLPanel styleName="content"> - <base:ActionsMenu ui:field="actionsMenu"/> <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index f8a43ea20..1b2232e1f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -60,7 +60,6 @@ import org.silverpeas.mobile.client.common.resources.ResourcesManager; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.attachments.Attachment; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.ContentDTO; import org.silverpeas.mobile.shared.dto.ContentsTypes; @@ -92,8 +91,6 @@ public class PublicationPage extends PageContent Anchor contentLink; @UiField DivElement content; - @UiField - ActionsMenu actionsMenu; @UiField(provided = true) protected DocumentsMessages msg; @@ -165,15 +162,15 @@ public void onLoadedPublication(PublicationLoadedEvent event) { this.publication = event.getPublication(); this.notifiable = event.isNotifiable(); display(event.isCommentable(), event.isAbleToStoreContent(), event.getType()); - actionsMenu.addAction(favorite); + addActionMenu(favorite); if (event.isNotifiable()) { - actionsMenu.addAction(notification); + addActionMenu(notification); } if (event.getSharing() > 0) { share.init(event.getSharing(), event.getPublication().getInstanceId(), event.getPublication().getId(), "Publication", "", ""); - actionsMenu.addAction(share); + addActionMenu(share); } if (Boolean.parseBoolean(ResourcesManager.getParam("content.display.embedded")) && publication.getContent()) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml index dd3d0b0ce..313a3065e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.ui.xml @@ -32,7 +32,6 @@ <g:FocusPanel ui:field="supercontainer"> <g:HTMLPanel ui:field="container" styleName="content"> - <base:ActionsMenu ui:field="actionsMenu"/> <h2 ui:field="title" class="publiName"></h2> <p ui:field="desc" class="publiDesc"></p> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java index 2253db70f..f19f6517b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/ShareButton.java @@ -22,21 +22,20 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -package org.silverpeas.mobile.client.components.base.widgets; +package org.silverpeas.mobile.client.apps.documents.pages.widgets; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages; -import org.silverpeas.mobile.client.common.Html5Utils; +import org.silverpeas.mobile.client.apps.documents.pages.SharingPage; +import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; import org.silverpeas.mobile.client.components.base.ActionItem; import org.silverpeas.mobile.client.components.base.ActionsMenu; -import org.silverpeas.mobile.client.resources.ApplicationMessages; + /** * @author: svu @@ -50,34 +49,34 @@ interface ShareButtonUiBinder extends UiBinder<HTMLPanel, ShareButton> { @UiField HTMLPanel container; @UiField Anchor share; - @UiField(provided = true) protected ApplicationMessages msg = null; - private String title, text, url; + @UiField(provided = true) protected DocumentsMessages msg = null; + private String instanceId, contentId, contentType, title, pageTitle; + + private int shareLevel; public ShareButton() { - msg = GWT.create(ApplicationMessages.class); + msg = GWT.create(DocumentsMessages.class); initWidget(uiBinder.createAndBindUi(this)); setId("share"); } - public void init(String title, String text, String url) { + + public void init(int shareLevel, String instanceId, String contentId, String contentType, String title, String pageTitle) { + this.instanceId = instanceId; + this.contentId = contentId; + this.contentType = contentType; this.title = title; - this.text = text; - this.url = url; - try { - if (!Html5Utils.canShare(title, text, url)) { - setVisible(false); - } - } catch(Throwable t) { - setVisible(false); - } + this.pageTitle = pageTitle; + this.shareLevel = shareLevel; } + @UiHandler("share") - void share(ClickEvent event) { - Html5Utils.share(title, text, url); + void displaySharePage(ClickEvent event) { + SharingPage page = new SharingPage(); + page.setData(contentType, contentId, instanceId); + page.show(); // hide menu ActionsMenu.close(getElement()); } - - } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.java index d1ab27edd..9b991f3b1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.java @@ -44,7 +44,6 @@ import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.app.App; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.faq.CategoryDTO; @@ -57,8 +56,6 @@ public class FaqPage extends PageContent implements FaqPagesEventHandler { private static FaqPageUiBinder uiBinder = GWT.create(FaqPageUiBinder.class); @UiField(provided = true) protected FaqMessages msg = null; - @UiField - ActionsMenu actionsMenu; @UiField HTMLPanel container; @@ -95,7 +92,7 @@ public void stop() { @Override public void setApp(final App app) { super.setApp(app); - actionsMenu.addAction(favorite); + addActionMenu(favorite); favorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml index 21434f329..333095600 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/faq/pages/FaqPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.faq.resources.FaqMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <div class="content-navigation"><g:ListBox ui:field="categories" stylePrimaryName="faq-categories"/></div> <components:UnorderedList ui:field="faqs" styleName="forms-list"/> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java index 5be0522f6..bccf8c1a1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java @@ -50,9 +50,7 @@ import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.resources.ResourcesManager; import org.silverpeas.mobile.client.components.Popin; -import org.silverpeas.mobile.client.components.PopinInformation; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.forms.FieldEditable; import org.silverpeas.mobile.client.components.userselection.UserSelectionPage; @@ -75,8 +73,6 @@ public class FormOnlineEditPage extends PageContent implements UserSelectionComp private static List<FormFieldDTO> data; @UiField(provided = true) protected FormsOnlineMessages msg = null; - @UiField - ActionsMenu actionsMenu; @UiField UnorderedList fields; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.ui.xml index d3814e9c0..a5bdf69a4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <components:UnorderedList ui:field="fields" styleName="formOnline-form"/> <g:HTML ui:field="layer"/> <div class=" ui-controlgroup ui-controlgroup-horizontal"> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.java index 143e3f277..226105281 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.java @@ -41,7 +41,6 @@ import org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.formsonline.FormRequestDTO; @@ -52,8 +51,6 @@ public class FormOnlineRequestsPage extends PageContent implements FormsOnlinePa private static FormsOnlineAsReceiverPageUiBinder uiBinder = GWT.create(FormsOnlineAsReceiverPageUiBinder.class); @UiField(provided = true) protected FormsOnlineMessages msg = null; - @UiField - ActionsMenu actionsMenu; @UiField UnorderedList requests; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.ui.xml index 2c0be6591..5bedecd02 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineRequestsPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <components:UnorderedList ui:field="requests" styleName="forms-list"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.java index a7d58c8ed..5dbda25f1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.java @@ -46,7 +46,6 @@ import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.resources.ResourcesManager; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.forms.FieldViewable; import org.silverpeas.mobile.shared.dto.FormFieldDTO; @@ -60,9 +59,6 @@ public class FormOnlineViewPage extends PageContent implements FormsOnlinePagesE private boolean hasHtmlLayer; @UiField(provided = true) protected FormsOnlineMessages msg = null; - @UiField - ActionsMenu actionsMenu; - @UiField UnorderedList fields; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.ui.xml index 3e1e2edbc..d928592f2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineViewPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a formOnlineRequest"> - <base:ActionsMenu ui:field="actionsMenu"/> <components:UnorderedList ui:field="fields" styleName="formOnline-form"/> <g:HTML ui:field="layer"/> <g:Label ui:field="labelComment" text="{msg.comment}" styleName="label-comment"></g:Label> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.java index a26eb563d..733c10559 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.java @@ -40,7 +40,6 @@ import org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.formsonline.FormDTO; @@ -51,8 +50,6 @@ public class FormsOnlineAsReceiverPage extends PageContent implements FormsOnlin private static FormsOnlineAsReceiverPageUiBinder uiBinder = GWT.create(FormsOnlineAsReceiverPageUiBinder.class); @UiField(provided = true) protected FormsOnlineMessages msg = null; - @UiField - ActionsMenu actionsMenu; @UiField UnorderedList forms; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.ui.xml index af7124bac..0fe366ffa 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlineAsReceiverPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <components:UnorderedList ui:field="forms" styleName="forms-list"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.java index 295eedcf7..68cac5991 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.java @@ -49,7 +49,6 @@ import org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.formsonline.FormDTO; @@ -59,8 +58,6 @@ public class FormsOnlinePage extends PageContent implements FormsOnlinePagesEven private static FormsOnlinePageUiBinder uiBinder = GWT.create(FormsOnlinePageUiBinder.class); @UiField(provided = true) protected FormsOnlineMessages msg = null; - @UiField - ActionsMenu actionsMenu; @UiField HTMLPanel container; @@ -82,11 +79,11 @@ public void onFormsOnlineLoad(final FormsOnlineLoadedEvent event) { if (form.isReceiver()) canReceive = true; } - actionsMenu.addAction(favorite); + addActionMenu(favorite); favorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle()); - actionsMenu.addAction(myRequests); + addActionMenu(myRequests); myRequests.init(getApp().getApplicationInstance().getId()); - if (canReceive) actionsMenu.addAction(requestsToValidate); + if (canReceive) addActionMenu(requestsToValidate); } @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.ui.xml index af7124bac..0fe366ffa 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormsOnlinePage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <components:UnorderedList ui:field="forms" styleName="forms-list"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java index e0d59745a..872de2f0f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/widgets/ViewMyRequestsButton.java @@ -31,7 +31,6 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.favorites.events.app.AddFavoriteEvent; import org.silverpeas.mobile.client.apps.formsonline.events.app.FormOnlineMyRequestLoadEvent; import org.silverpeas.mobile.client.apps.formsonline.resources.FormsOnlineMessages; import org.silverpeas.mobile.client.common.EventBus; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java index 648742c2a..e11c7defd 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java @@ -30,6 +30,7 @@ import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton; import org.silverpeas.mobile.client.apps.media.events.app.MediaViewShowEvent; import org.silverpeas.mobile.client.apps.media.events.app.MediasLoadMediaItemsEvent; @@ -46,10 +47,7 @@ import org.silverpeas.mobile.client.common.app.View; import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; -import org.silverpeas.mobile.client.components.base.LoadingItem; -import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.*; import org.silverpeas.mobile.client.components.base.events.page.DataLoadedEvent; import org.silverpeas.mobile.client.components.base.events.page.LoadingDataFinishEvent; import org.silverpeas.mobile.client.components.base.events.page.MoreDataLoadedEvent; @@ -60,6 +58,7 @@ import org.silverpeas.mobile.shared.dto.media.AlbumDTO; import org.silverpeas.mobile.shared.dto.media.MediaDTO; +import java.util.ArrayList; import java.util.List; public class MediaNavigationPage extends PageContent implements View, MediaNavigationPagesEventHandler { @@ -68,9 +67,6 @@ public class MediaNavigationPage extends PageContent implements View, MediaNavig @UiField UnorderedList list; private AddMediaButton buttonImport = new AddMediaButton(); private LoadingItem endline = new LoadingItem(); - @UiField ActionsMenu actionsMenu; - @UiField ActionsList actionsShortcuts; - private String rootAlbumId, instanceId; private RightDTO rights; private AlbumDTO root; @@ -101,15 +97,12 @@ public void loadedDataEvent(final DataLoadedEvent event) { list.clear(); if (rights.getWriter() || rights.getPublisher() || rights.getManager()) { if (rootAlbumId != null) { - actionsShortcuts.addAction(buttonImport); + addActionShortcut(buttonImport); } } List<BaseDTO> dataItems = event.getData(); populateList(dataItems); list.add(endline); - - actionsMenu.addAction(favorite); - actionsMenu.addAction(share); if (root.getId() == null) { favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), root.getName()); share.init(root.getName(), root.getName(), LinksManager.createApplicationPermalink(instanceId)); @@ -117,6 +110,8 @@ public void loadedDataEvent(final DataLoadedEvent event) { favorite.init(instanceId, root.getId(), ContentsTypes.Album.name(), root.getName()); share.init(root.getName(), root.getName(),LinksManager.createAlbumPermalink(instanceId, root.getId())); } + addActionMenu(favorite); + addActionMenu(share); } Notification.activityStop(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml index 52c6aabab..72a5a68b3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml @@ -29,8 +29,6 @@ xmlns:components="urn:import:org.silverpeas.mobile.client.components"> <g:HTMLPanel styleName="content"> - <base:ActionsList ui:field="actionsShortcuts"/> - <base:ActionsMenu ui:field="actionsMenu"/> <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java index b7b19d238..affcbf54c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java @@ -60,7 +60,6 @@ import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.shared.dto.ContentsTypes; @@ -85,8 +84,6 @@ interface PhotoPageUiBinder extends UiBinder<HTMLPanel, PhotoPage> { CommentsButton comments; @UiField DivElement previewContainer; - @UiField ActionsMenu actionsMenu; - private NotifyButton notification = new NotifyButton(); private AddToFavoritesButton favorite = new AddToFavoritesButton(); @@ -165,13 +162,13 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { } favorite.init(photo.getInstance(), photo.getId(), ContentsTypes.Media.name(), photo.getTitle()); - actionsMenu.addAction(favorite); + addActionMenu(favorite); if (event.isNotifiable()) { notification.init(photo.getInstance(), photo.getId(), NotificationDTO.TYPE_PHOTO, photo.getName(), getPageTitle()); - actionsMenu.addAction(notification); + addActionMenu(notification); } share.init(photo.getTitle(),photo.getTitle(),"/silverpeas/Media/"+photo.getId()); - actionsMenu.addAction(share); + addActionMenu(share); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml index 924a1d9a8..89bc85854 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml @@ -28,8 +28,6 @@ xmlns:widgets="urn:import:org.silverpeas.mobile.client.apps.comments.pages.widgets"> <g:HTMLPanel styleName="content"> - <base:ActionsMenu ui:field="actionsMenu"/> - <h2 class="mediaName" ui:field="mediaTitle"></h2> <div class="cadrePhoto" ui:field="previewContainer"> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java index 8af2cca05..928c4a982 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java @@ -62,7 +62,6 @@ import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.client.resources.ApplicationResources; @@ -88,7 +87,6 @@ interface SoundPageUiBinder extends UiBinder<HTMLPanel, SoundPage> { @UiField AudioElement player; @UiField CommentsButton comments; @UiField DivElement previewContainer; - @UiField ActionsMenu actionsMenu; private NotifyButton notification = new NotifyButton(); private ShareButton share = new ShareButton(); @@ -152,13 +150,13 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { comments.getElement().getStyle().setDisplay(Style.Display.NONE); } favorite.init(sound.getInstance(), sound.getId(), ContentsTypes.Media.name(), sound.getTitle()); - actionsMenu.addAction(favorite); + addActionMenu(favorite); if (event.isNotifiable()) { notification.init(sound.getInstance(), sound.getId(), NotificationDTO.TYPE_SOUND, sound.getName(), getPageTitle()); - actionsMenu.addAction(notification); + addActionMenu(notification); } share.init(sound.getTitle(),sound.getTitle(), LinksManager.createMediaPermalink(sound.getId())); - actionsMenu.addAction(share); + addActionMenu(share); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml index 1b8932506..cfb4940c7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml @@ -28,7 +28,6 @@ xmlns:widgets="urn:import:org.silverpeas.mobile.client.apps.comments.pages.widgets"> <g:HTMLPanel styleName="content"> - <base:ActionsMenu ui:field="actionsMenu"/> <h2 class="mediaName" ui:field="mediaTitle"></h2> <div class="cadrePhoto" ui:field="previewContainer"> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java index b3bad79c7..7674864a8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java @@ -65,7 +65,6 @@ import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.client.resources.ApplicationResources; @@ -91,7 +90,6 @@ interface VideoPageUiBinder extends UiBinder<HTMLPanel, VideoPage> { @UiField CommentsButton comments; @UiField VideoElement player; @UiField DivElement previewContainer; - @UiField ActionsMenu actionsMenu; private NotifyButton notification = new NotifyButton(); private ShareButton share = new ShareButton(); @@ -171,13 +169,13 @@ public void onClick(final ClickEvent clickEvent) { comments.getElement().getStyle().setDisplay(Style.Display.NONE); } favorite.init(video.getInstance(), video.getId(), ContentsTypes.Media.name(), video.getTitle()); - actionsMenu.addAction(favorite); + addActionMenu(favorite); if (event.isNotifiable()) { notification.init(video.getInstance(), video.getId(), NotificationDTO.TYPE_VIDEO, video.getName(), getPageTitle()); - actionsMenu.addAction(notification); + addActionMenu(notification); } share.init(video.getTitle(),video.getTitle(), LinksManager.createMediaPermalink(video.getId())); - actionsMenu.addAction(share); + addActionMenu(share); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml index ac68d9a1d..45d7b4f24 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml @@ -28,7 +28,6 @@ xmlns:widgets="urn:import:org.silverpeas.mobile.client.apps.comments.pages.widgets"> <g:HTMLPanel styleName="content"> - <base:ActionsMenu ui:field="actionsMenu"/> <h2 class="mediaName" ui:field="mediaTitle"></h2> <div class="cadrePhoto" ui:field="previewContainer"> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java index b1cbf9395..6646fc28a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java @@ -56,7 +56,6 @@ import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeRecognizer; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.client.resources.ApplicationResources; @@ -83,8 +82,6 @@ interface VideoStreamingPageUiBinder extends UiBinder<HTMLPanel, VideoStreamingP CommentsButton comments; @UiField IFrameElement player; @UiField DivElement previewContainer; - @UiField - ActionsMenu actionsMenu; private NotifyButton notification = new NotifyButton(); private ShareButton share = new ShareButton(); @@ -133,13 +130,13 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { comments.getElement().getStyle().setDisplay(Style.Display.NONE); } favorite.init(video.getInstance(), video.getId(), ContentsTypes.Media.name(), video.getTitle()); - actionsMenu.addAction(favorite); + addActionMenu(favorite); if (event.isNotifiable()) { notification.init(video.getInstance(), video.getId(), NotificationDTO.TYPE_STREAMING, video.getName(), getPageTitle()); - actionsMenu.addAction(notification); + addActionMenu(notification); } share.init(video.getTitle(),video.getTitle(), LinksManager.createMediaPermalink(video.getId())); - actionsMenu.addAction(share); + addActionMenu(share); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml index 3f3b513cc..5382904e5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml @@ -27,7 +27,6 @@ xmlns:base="urn:import:org.silverpeas.mobile.client.components.base" xmlns:widgets="urn:import:org.silverpeas.mobile.client.apps.comments.pages.widgets"> <g:HTMLPanel styleName="content"> - <base:ActionsMenu ui:field="actionsMenu"/> <h2 class="mediaName" ui:field="mediaTitle"></h2> <div class="cadrePhoto" ui:field="previewContainer"> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java index 8cc614826..95275f6be 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java @@ -39,7 +39,6 @@ import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.ShortCutRouter; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.homepage.HomePageContent; import org.silverpeas.mobile.client.resources.ApplicationMessages; @@ -50,8 +49,6 @@ public class NavigationPage extends PageContent implements NavigationPagesEventHandler { - @UiField - ActionsMenu actionsMenu; private AddToFavoritesButton favorite = new AddToFavoritesButton(); @@ -87,7 +84,7 @@ public void homePageLoaded(HomePageLoadedEvent event) { dataLoaded = true; - actionsMenu.addAction(favorite); + addActionMenu(favorite); favorite.init(null, event.getData().getId(), ContentsTypes.Space.name(), getPageTitle()); } Notification.activityStop(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.ui.xml index 336bfe00b..c60d0c9d4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.ui.xml @@ -29,7 +29,6 @@ xmlns:base="urn:import:org.silverpeas.mobile.client.components.base"> <g:HTMLPanel styleName="content"> - <base:ActionsMenu ui:field="actionsMenu"/> <homepage:HomePageContent ui:field="content"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java index 39f1caafe..aaef82434 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.java @@ -38,7 +38,6 @@ import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.base.widgets.ShareButton; import org.silverpeas.mobile.shared.dto.ContentsTypes; @@ -52,7 +51,6 @@ public class NewsPage extends PageContent implements NewsPagesEventHandler { @UiField(provided = true) protected NewsMessages msg = null; @UiField UnorderedList news; - @UiField ActionsMenu actionsMenu; private AddToFavoritesButton favorite = new AddToFavoritesButton(); private ShareButton share = new ShareButton(); @@ -88,9 +86,9 @@ public void onNewsLoad(final NewsLoadedEvent event) { instanceId = newsDTO.getInstanceId(); i++; } - actionsMenu.addAction(favorite); + addActionMenu(favorite); favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), getPageTitle()); - actionsMenu.addAction(share); + addActionMenu(share); share.init(getPageTitle(), getPageTitle(), LinksManager.createApplicationPermalink(instanceId)); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.ui.xml index df899cbef..bef70e6a6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/news/pages/NewsPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.news.resources.NewsMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <h2 class="appHeader"></h2> <components:UnorderedList ui:field="news" styleName="liste-news"/> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java index f28d115b6..e92c5b261 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java @@ -42,7 +42,6 @@ import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.NotificationItem; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.notifications.NotificationBoxDTO; @@ -63,8 +62,6 @@ public class NotificationsBoxPage extends PageContent implements NotificationsBo @UiField Anchor notificationReceived, notificationSended; - @UiField - ActionsMenu actionsMenu; private DeleteButton delete = new DeleteButton(); private MarkAsReadButton notRead = new MarkAsReadButton(); @@ -80,8 +77,8 @@ public NotificationsBoxPage() { EventBus.getInstance().fireEvent(new NotificationsLoadEvent()); delete.setParentPage(this); notRead.setParentPage(this); - actionsMenu.addAction(delete); - actionsMenu.addAction(notRead); + addActionMenu(delete); + addActionMenu(notRead); } @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.ui.xml index aae1d72b4..5a37c404e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.resources.ApplicationMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-body-a notificationBox"> - <base:ActionsMenu ui:field="actionsMenu"/> <div class="ui-corner-all ui-controlgroup ui-controlgroup-horizontal"> <div class="ui-controlgroup-controls "> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.java index c1604aeed..30e5dec56 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.java @@ -25,26 +25,18 @@ package org.silverpeas.mobile.client.apps.resourcesManager.pages; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Label; -import com.google.gwt.user.client.ui.TextArea; -import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; -import org.silverpeas.mobile.client.apps.resourcesManager.events.app.AddReservationEvent; import org.silverpeas.mobile.client.apps.resourcesManager.events.pages.AbstractResourcesManagerPagesEvent; import org.silverpeas.mobile.client.apps.resourcesManager.events.pages.DeletedReservationEvent; import org.silverpeas.mobile.client.apps.resourcesManager.events.pages.ResourcesManagerPagesEventHandler; import org.silverpeas.mobile.client.apps.resourcesManager.events.pages.SavedReservationEvent; -import org.silverpeas.mobile.client.apps.resourcesManager.pages.widgets.AddReservationButton; import org.silverpeas.mobile.client.apps.resourcesManager.pages.widgets.DeleteReservationButton; import org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages; import org.silverpeas.mobile.client.common.EventBus; -import org.silverpeas.mobile.client.components.Popin; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.reservations.ReservationDTO; import org.silverpeas.mobile.shared.dto.reservations.ReservationStatus; @@ -59,9 +51,6 @@ public class ReservationDetailPage extends PageContent implements ResourcesManag private DeleteReservationButton deleteReservation = new DeleteReservationButton(); - @UiField - ActionsMenu actionsMenu; - @UiField(provided = true) protected ResourcesManagerMessages msg = null; @UiField @@ -86,7 +75,7 @@ public void setData(final ReservationDTO data) { html += "</ul>"; resources.setHTML(html); deleteReservation.setData(data); - actionsMenu.addAction(deleteReservation); + addActionMenu(deleteReservation); } @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.ui.xml index 3beffd2f8..c18067c82 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ReservationDetailPage.ui.xml @@ -30,7 +30,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <div id="reservationDetail" class="content-navigation"> <div class="section"> <g:Label ui:field="labelTitle" stylePrimaryName="field"><ui:text from="{msg.event}"/></g:Label> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.java index a50960584..bf40f3ee1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.java @@ -38,7 +38,6 @@ import org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.reservations.ReservationDTO; @@ -51,9 +50,6 @@ public class ResourcesManagerPage extends PageContent implements ResourcesManage @UiField(provided = true) protected ResourcesManagerMessages msg = null; - @UiField - ActionsMenu actionsMenu; - @UiField UnorderedList reservations; @@ -94,9 +90,9 @@ public void setData(final List<ReservationDTO> reservationsDTO) { this.data = reservationsDTO; displayList(); - actionsMenu.addAction(favorite); + addActionMenu(favorite); favorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle()); - actionsMenu.addAction(addReservation); + addActionMenu(addReservation); } private void displayList() { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.ui.xml index 3a952b2d7..35925bf24 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/ResourcesManagerPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <div id="resourcesManager" class="content-navigation" style="min-height:100vh;"> <components:UnorderedList ui:field="reservations" styleName="list-reservations ui-listview ui-listview-inset ui-corner-all ui-shadow"/> </div> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java index 31bb17510..ee457bdd8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/AddReservationButton.java @@ -7,11 +7,8 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.resourcesManager.events.app.AddReservationEvent; import org.silverpeas.mobile.client.apps.resourcesManager.pages.ReservationPage; -import org.silverpeas.mobile.client.apps.resourcesManager.pages.ResourcesManagerPage; import org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages; -import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; import org.silverpeas.mobile.client.components.base.ActionsMenu; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java index 0c0a85428..fb5900942 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/resourcesManager/pages/widgets/DeleteReservationButton.java @@ -9,10 +9,8 @@ import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; import org.silverpeas.mobile.client.apps.resourcesManager.events.app.DeleteReservationEvent; -import org.silverpeas.mobile.client.apps.resourcesManager.pages.ReservationPage; import org.silverpeas.mobile.client.apps.resourcesManager.resources.ResourcesManagerMessages; import org.silverpeas.mobile.client.common.EventBus; -import org.silverpeas.mobile.client.components.Popin; import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.base.ActionItem; import org.silverpeas.mobile.client.components.base.ActionsMenu; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java index 4b44a5ba0..c23567afb 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java @@ -36,7 +36,6 @@ import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; @@ -51,9 +50,6 @@ public class SharesBoxPage extends PageContent implements SharesBoxPagesEventHan @UiField(provided = true) protected ShareMessages msg = null; @UiField UnorderedList shares; - - @UiField - ActionsMenu actionsMenu; private List<TicketDTO> data; private DeleteButton delete = new DeleteButton(); @@ -101,7 +97,7 @@ public SharesBoxPage() { shares.getElement().setId("shares"); EventBus.getInstance().addHandler(AbstractSharesBoxPagesEvent.TYPE, this); delete.setParentPage(this); - actionsMenu.addAction(delete); + addActionMenu(delete); } @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml index 3e569dc80..5bb8c953e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-body-a notificationBox"> - <base:ActionsMenu ui:field="actionsMenu"/> <components:UnorderedList ui:field="shares" stylePrimaryName="ui-listview ui-listview-inset ui-corner-all ui-shadow"></components:UnorderedList> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.java index 2a85b53e2..4276774df 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.java @@ -48,7 +48,6 @@ import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.survey.QuestionDTO; @@ -63,9 +62,6 @@ public class SurveyPage extends PageContent implements SurveyPagesEventHandler { @UiField(provided = true) protected SurveyMessages msg = null; @UiField(provided = true) protected ApplicationMessages msgApp = null; - @UiField - ActionsMenu actionsMenu; - @UiField UnorderedList questions; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.ui.xml index d84e1f1c1..63a47e140 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveyPage.ui.xml @@ -33,7 +33,6 @@ type='org.silverpeas.mobile.client.resources.ApplicationMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-body-a survey"> - <base:ActionsMenu ui:field="actionsMenu"/> <components:UnorderedList ui:field="questions" styleName="liste-questions forms-list"/> <g:HTMLPanel ui:field="secondPart" styleName="comment-area"> <g:InlineHTML><ui:text from="{msg.comments}"/></g:InlineHTML> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.java index aa1cc7728..79ca9e818 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.java @@ -39,7 +39,6 @@ import org.silverpeas.mobile.client.apps.survey.resources.SurveyMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.survey.SurveyDTO; @@ -55,8 +54,6 @@ public class SurveysPage extends PageContent implements SurveyPagesEventHandler @UiField UnorderedList surveys; - @UiField - ActionsMenu actionsMenu; private AddToFavoritesButton favorite = new AddToFavoritesButton(); private String instanceId; @@ -98,7 +95,7 @@ public void onSurveysLoad(final SurveysLoadedEvent event) { surveys.add(item); } - actionsMenu.addAction(favorite); + addActionMenu(favorite); favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), getPageTitle()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.ui.xml index abe4126e1..730fab862 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/survey/pages/SurveysPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.survey.resources.SurveyMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-body-a survey"> - <base:ActionsMenu ui:field="actionsMenu"/> <components:UnorderedList ui:field="surveys" styleName="liste-enquete"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java index 7d9242c40..649710a8b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java @@ -28,7 +28,6 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.media.pages.widgets.AddMediaButton; import org.silverpeas.mobile.client.apps.tasks.events.app.TasksLoadEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.AbstractTasksPagesEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskCreatedEvent; @@ -71,10 +70,7 @@ public TasksPage() { @Override public void onTaskLoad(final TasksLoadedEvent event) { Notification.activityStop(); - actionsShortcuts.addAction(buttonCreate); - - //list.add(new AddTaskButton()); - + addActionShortcut(buttonCreate); Iterator<TaskDTO> i = event.getTasks().iterator(); while (i.hasNext()) { TaskDTO task = i.next(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.java index 53798427d..2f9232f70 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.java @@ -46,7 +46,6 @@ import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.components.Popin; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; import org.silverpeas.mobile.shared.dto.workflow.WorkflowFieldDTO; @@ -65,8 +64,6 @@ public class WorkflowActionFormPage extends PageContent implements WorkflowPages @UiField UnorderedList fields; - @UiField - ActionsMenu actionsMenu; @UiField HeadingElement header; @UiField Anchor validate, cancel; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.ui.xml index 7421fb9b6..573b0d807 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowActionFormPage.ui.xml @@ -31,7 +31,6 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.workflow.resources.WorkflowMessages'/> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <h2 class="appHeader" ui:field="header"></h2> <components:UnorderedList ui:field="fields" styleName="workflow-form"/> <div class=" ui-controlgroup ui-controlgroup-horizontal"> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java index 0368a0ea4..375abe9d8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.java @@ -31,7 +31,6 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.ListBox; @@ -47,7 +46,6 @@ import org.silverpeas.mobile.client.apps.workflow.pages.widgets.ActionButton; import org.silverpeas.mobile.client.apps.workflow.resources.WorkflowMessages; import org.silverpeas.mobile.client.common.EventBus; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.StreamingList; import org.silverpeas.mobile.shared.dto.workflow.WorkflowDataDTO; @@ -63,8 +61,6 @@ public class WorkflowPage extends PageContent implements WorkflowPagesEventHandl @UiField FlexTable instances; @UiField - ActionsMenu actionsMenu; - @UiField ListBox roles; private String instanceId; @@ -96,7 +92,6 @@ public void loadDataInstances(final WorkflowLoadedDataEvent event) { roles.addItem(role.getValue(), role.getKey()); } roles.setVisible(roles.getItemCount()>1); - EventBus.getInstance().fireEvent(new WorkflowRoleChangeEvent(roles.getSelectedValue())); } @@ -146,9 +141,11 @@ private void creationGesture() { ActionButton act = new ActionButton(); act.setId(ACTION_CREATE); act.init(instanceId, "create", msg.create(), null); - actionsMenu.addAction(act); + addActionMenu(act); } else { - actionsMenu.removeAction(ACTION_CREATE, false); + ActionButton act = new ActionButton(); + act.setId(ACTION_CREATE); + removeActionMenu(act); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.ui.xml index 3b3c31aa3..4b77016e5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPage.ui.xml @@ -28,7 +28,6 @@ xmlns:base="urn:import:org.silverpeas.mobile.client.components.base"> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <h2 class="appHeader"></h2> <g:ListBox ui:field="roles" styleName="workflow-roles" visible="false"/> <g:FlexTable ui:field="instances" styleName="workflow-list"/> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.java index c80287774..87f810f13 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.java @@ -32,7 +32,6 @@ import org.silverpeas.mobile.client.apps.workflow.pages.widgets.ActionButton; import org.silverpeas.mobile.client.apps.workflow.pages.widgets.Field; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsMenu; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; import org.silverpeas.mobile.shared.dto.workflow.FieldPresentationDTO; @@ -49,8 +48,6 @@ public class WorkflowPresentationPage extends PageContent { @UiField UnorderedList fields; - @UiField - ActionsMenu actionsMenu; @UiField HeadingElement header; public void setData(final WorkflowInstancePresentationFormDTO data) { @@ -74,7 +71,7 @@ public void setData(final WorkflowInstancePresentationFormDTO data, final Applic ActionButton act = new ActionButton(); act.setId(action.getKey()); act.init(data.getId(), action.getKey(), action.getValue(), data.getState()); - actionsMenu.addAction(act); + addActionMenu(act); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.ui.xml index b09d82651..405402a30 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/workflow/pages/WorkflowPresentationPage.ui.xml @@ -29,7 +29,6 @@ xmlns:components="urn:import:org.silverpeas.mobile.client.components"> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <base:ActionsMenu ui:field="actionsMenu"/> <h2 class="appHeader" ui:field="header"></h2> <components:UnorderedList ui:field="fields" styleName="workflow-form"/> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java index fb2b0353a..1c67a9a6e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java @@ -66,6 +66,11 @@ public void addAction(ActionItem action) { container.getElement().getStyle().setDisplay(Style.Display.BLOCK); } + public void clear() { + listActions.clear(); + container.getElement().getStyle().setDisplay(Style.Display.NONE); + } + public void removeAction(String id, boolean silently) { for (int i = 0; i < listActions.getWidgetCount(); i++) { ActionItem act = (ActionItem) listActions.getWidget(i); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java index d574dbe39..11bac95d2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java @@ -79,6 +79,11 @@ public static void close(Element action) { action.getParentElement().addClassName("closed-qvf-menu"); } + public void close() { + listActions.getElement().removeClassName("open-qvf-menu"); + listActions.getElement().addClassName("closed-qvf-menu"); + } + public boolean isEmpty() { return (listActions.getWidgetCount() == 0); } @@ -92,6 +97,11 @@ public void addAction(ActionItem action) { container.getElement().getStyle().setDisplay(Style.Display.BLOCK); } + public void clear() { + listActions.clear(); + container.getElement().getStyle().setDisplay(Style.Display.NONE); + } + public void removeAction(String id, boolean silently) { for (int i = 0; i < listActions.getWidgetCount(); i++) { ActionItem act = (ActionItem) listActions.getWidget(i); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java index 3b4fd4560..350866f50 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java @@ -140,6 +140,9 @@ public int getHeaderHeight() { } public int getFooterHeight() { return footer.getOffsetHeight() ; } + public PageHeader getHeader() { + return header; + } public void showOfflineIndicator() { header.showOfflineIndicator(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java index b43e4c1e5..7eabf4035 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java @@ -33,6 +33,7 @@ import com.google.gwt.user.client.Event; import com.google.gwt.user.client.Event.NativePreviewEvent; import com.google.gwt.user.client.Event.NativePreviewHandler; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.common.EventBus; @@ -49,6 +50,9 @@ import org.silverpeas.mobile.client.components.base.events.page.PageEvent; import org.silverpeas.mobile.client.components.base.events.page.PageEventHandler; +import java.util.ArrayList; +import java.util.List; + public abstract class PageContent extends Composite implements View, NativePreviewHandler, PageEventHandler { private App app; @@ -56,6 +60,8 @@ public abstract class PageContent extends Composite implements View, NativePrevi protected String pageTitle; private HandlerRegistration registration; private SwipeRecognizer swipeRecognizer; + private List<ActionItem> actionsMenu = new ArrayList<>(); + private List<ActionItem> actionsShortcuts = new ArrayList<>(); public PageContent() { super(); @@ -87,6 +93,21 @@ public void show() { PageHistory.getInstance().goTo(this); } + public void addActionShortcut(ActionItem action) { + actionsShortcuts.add(action); + SpMobil.getMainPage().getHeader().addActionShortcut(action); + } + + public void addActionMenu(ActionItem action) { + actionsMenu.add(action); + SpMobil.getMainPage().getHeader().addActionMenu(action); + } + + public void removeActionMenu(ActionItem action) { + actionsMenu.remove(action); + SpMobil.getMainPage().getHeader().removeActionMenu(action); + } + public boolean isVisible() { return PageHistory.getInstance().isVisible(this); } @@ -114,6 +135,18 @@ public boolean execute() { } } + @Override + public void setVisible(boolean visible) { + super.setVisible(visible); + SpMobil.getMainPage().getHeader().closeMenuQVF(); + SpMobil.getMainPage().getHeader().clearActions(); + for (ActionItem action : actionsShortcuts) { + SpMobil.getMainPage().getHeader().addActionShortcut(action); + } + for (ActionItem action : actionsMenu) { + SpMobil.getMainPage().getHeader().addActionMenu(action); + } + } @Override public void stop() { EventBus.getInstance().removeHandler(AbstractPageEvent.TYPE, this); @@ -157,7 +190,6 @@ public void finishLoadingData(final LoadingDataFinishEvent loadingDataFinishEven public void loadedDataEvent(final DataLoadedEvent dataLoadedEvent) { // to be override if necessary } - @Override public void loadedMoreDataEvent(final MoreDataLoadedEvent moreDataLoadedEvent) { // to be override if necessary diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java index 784d408dd..ecce4202c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java @@ -41,6 +41,10 @@ public class PageHeader extends Composite { private static PageHeaderUiBinder uiBinder = GWT.create(PageHeaderUiBinder.class); + public void closeMenuQVF() { + actionsMenu.close(); + } + interface PageHeaderUiBinder extends UiBinder<Widget, PageHeader> { } @@ -48,6 +52,8 @@ interface PageHeaderUiBinder extends UiBinder<Widget, PageHeader> { @UiField protected Anchor back; @UiField protected HeadingElement title; @UiField protected HTML menu; + @UiField protected ActionsList actionsShortcuts; + @UiField protected ActionsMenu actionsMenu; @UiField(provided = true) protected ApplicationMessages msg = null; protected ApplicationResources ressources = null; @@ -61,6 +67,23 @@ public PageHeader() { title.setInnerText(ResourcesManager.getLabel("mainpage.title")); } + public void addActionShortcut(ActionItem action) { + actionsShortcuts.addAction(action); + } + + public void addActionMenu(ActionItem action) { + actionsMenu.addAction(action); + } + + public void removeActionMenu(ActionItem action) { + actionsMenu.removeAction(action.getId(), true); + } + + public void clearActions() { + actionsShortcuts.clear(); + actionsMenu.clear(); + } + @UiHandler("menu") void onMenu(ClickEvent event) { toogleMenuButton(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml index 67b6fff74..e9fa8e620 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml @@ -23,7 +23,9 @@ --> <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" + xmlns:g="urn:import:com.google.gwt.user.client.ui" + xmlns:base="urn:import:org.silverpeas.mobile.client.components.base"> <ui:with field='msg' type='org.silverpeas.mobile.client.resources.ApplicationMessages'/> @@ -35,8 +37,9 @@ <span></span> </g:HTML> </div> - - <h1 ui:field="title" class="ui-title">Silverpeas</h1> <g:Anchor ui:field="back" styleName="ui-btn-right ui-btn-corner-all ui-btn ui-icon-grid back" text=""/> + <h1 ui:field="title" class="ui-title">Silverpeas</h1> + <base:ActionsList ui:field="actionsShortcuts"/> + <base:ActionsMenu ui:field="actionsMenu"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java index 2253db70f..3681836fc 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/ShareButton.java @@ -29,10 +29,8 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages; import org.silverpeas.mobile.client.common.Html5Utils; import org.silverpeas.mobile.client.components.base.ActionItem; import org.silverpeas.mobile.client.components.base.ActionsMenu; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 52e366b8b..39374a828 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -1997,8 +1997,8 @@ form .forms .fields > li:nth-child(even) { #actions { position: absolute; - top: -44px; right: 0.5em; + top: 11px; filter: invert(1); z-index: 9999; } @@ -2009,7 +2009,6 @@ form .forms .fields > li:nth-child(even) { width: 16px; height: 24px; text-indent: -3000px; - top: 1em; right: 0.5em; background: transparent url("qvf.svg") 0 0 no-repeat; outline: none; @@ -2021,7 +2020,7 @@ form .forms .fields > li:nth-child(even) { #action-bloc { border: 0; position: absolute; - top: 46px; + top: 37px; right: 0.1em; padding: 0; margin: 0; @@ -2046,7 +2045,7 @@ form .forms .fields > li:nth-child(even) { #actionsList { position: absolute; - top: -31px; + top: 11px; right: 4em; z-index: 9999; } From a3205afdbcfd8fae0795d43751aa68a373354b68 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 16 Jan 2024 10:56:04 +0100 Subject: [PATCH 143/228] actions adjustements --- .../mobile/client/components/base/NavigationMenu.java | 1 + .../main/java/org/silverpeas/mobile/public/spmobile.css | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java index 776a9d0d8..fca5b1943 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java @@ -177,6 +177,7 @@ protected void goHome(ClickEvent event) { static void goHome() { String url = Window.Location.getHref(); + SpMobil.getMainPage().getHeader().clearActions(); if (url.contains("shortcutContentType")) { String homeUrl = url.substring(0,url.indexOf("?")); Window.Location.replace(homeUrl); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 39374a828..bbdeca5d8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -780,8 +780,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { padding-left: 2.5em } -.tasks #actionsList { - top: 12px; +#actionsList:has(.add-task) { right: 1em; } @@ -1577,6 +1576,10 @@ input.filter-contacts { border-radius: 10px; } +.btn-validate { + text-transform: uppercase; +} + .ui-page-theme-a .btn-validate { background-color: #6fa800; background: linear-gradient(#7eb73a, #6fa800) repeat scroll 0 0 #6fa800; From 91749d53c301751448f7817a022524be32c6cc1b Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 16 Jan 2024 12:22:08 +0100 Subject: [PATCH 144/228] graphicales notifications adjustements --- .../pages/NotificationSenderPage.ui.xml | 2 +- .../mobile/public/icons/peoples.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 20 ++++++++++++++++--- 3 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/peoples.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml index b844c2d80..24e686ad5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml @@ -49,7 +49,7 @@ <div class=" ui-controlgroup ui-controlgroup-horizontal" > <div class="ui-controlgroup-controls "> - <g:Anchor ui:field="send" styleName="btn-validate ui-link smaller"> + <g:Anchor ui:field="send" styleName="btn-validate ui-link"> <span class="ui-btn-text"><ui:safehtml from="{msg.send}"/></span> </g:Anchor> </div> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/peoples.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/peoples.svg new file mode 100644 index 000000000..0d0dbf821 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/peoples.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><rect fill="none" height="24" width="24"/></g><g><g/><g><g><path d="M16.67,13.13C18.04,14.06,19,15.32,19,17v3h4v-3 C23,14.82,19.43,13.53,16.67,13.13z" fill-rule="evenodd" fill="#7eb73b"/></g><g><circle cx="9" cy="8" fill-rule="evenodd" fill="#7eb73b" r="4"/></g><g><path d="M15,12c2.21,0,4-1.79,4-4c0-2.21-1.79-4-4-4c-0.47,0-0.91,0.1-1.33,0.24 C14.5,5.27,15,6.58,15,8s-0.5,2.73-1.33,3.76C14.09,11.9,14.53,12,15,12z" fill-rule="evenodd" fill="#7eb73b"/></g><g><path d="M9,13c-2.67,0-8,1.34-8,4v3h16v-3C17,14.34,11.67,13,9,13z" fill-rule="evenodd" fill="#7eb73b"/></g></g></g></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index bbdeca5d8..f703078d5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -428,6 +428,10 @@ html .ui-controlgroup-controls .ui-btn-up-c { font-weight: normal; } +#header { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); +} + #header, #navigation-footer { background-color: black; @@ -1429,15 +1433,19 @@ li > #operations { } #edit-notification .ui-input-text.destinataires { - background: #FFF url(packPictos.png) 13px -234px no-repeat; + background: #FFF url('icons/peoples.svg') no-repeat; padding-left: 4em; line-height: 1.4em; position: relative; - color: #AAA; + color: #000; font-size: 80%; min-height: 3.4em; } +#edit-notification #message { + height: 15em; +} + #edit-notification .ui-input-text.destinataires .nb-user-sectionne { position: absolute; top: 1em; @@ -1451,7 +1459,7 @@ li > #operations { top: 0.1em; right: 0.1em; bottom: 0.1em; - background: #7eb73a url(packPictos.png) 0.5em 0.5em no-repeat; + /*background: #7eb73a url(packPictos.png) 0.5em 0.5em no-repeat;*/ display: block; text-indent: -300em; width: 2em; @@ -1486,6 +1494,10 @@ li > #operations { font-size: 80%; } +#edit-notification .ui-input-text.publication { + background: url('icons/publication.svg') no-repeat #ffff; +} + .ui-controlgroup-horizontal .ui-controlgroup-controls > .ui-btn, .ui-controlgroup-horizontal .ui-controlgroup-controls li > .ui-btn, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-checkbox, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-radio, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-select { float: none; clear: inherit; @@ -1578,6 +1590,8 @@ input.filter-contacts { .btn-validate { text-transform: uppercase; + border-radius: 2px; + box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); } .ui-page-theme-a .btn-validate { From 487cd84f57600d6240cb41ff6f7a11223428d706 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 16 Jan 2024 14:12:37 +0100 Subject: [PATCH 145/228] best back button render on click --- .../silverpeas/mobile/client/components/base/PageHeader.ui.xml | 2 +- .../src/main/java/org/silverpeas/mobile/public/spmobile.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml index e9fa8e620..504b4c51a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.ui.xml @@ -37,7 +37,7 @@ <span></span> </g:HTML> </div> - <g:Anchor ui:field="back" styleName="ui-btn-right ui-btn-corner-all ui-btn ui-icon-grid back" text=""/> + <g:Anchor ui:field="back" styleName="ui-btn-right back" text=""/> <h1 ui:field="title" class="ui-title">Silverpeas</h1> <base:ActionsList ui:field="actionsShortcuts"/> <base:ActionsMenu ui:field="actionsMenu"/> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index f703078d5..7b9cdaff4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -498,7 +498,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { .ui-btn-right.back { background: url('icons/arrow_back.svg') no-repeat; border: none; - height: 44px; + height: 36px; width: 36px; margin: 3px 0 0 0; padding: 0 0 0 0; From c328bb56ed20d9c60fa55bc73d6b14e49c80c00e Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 18 Jan 2024 15:16:37 +0100 Subject: [PATCH 146/228] add ripple animation --- .../mobile/client/common/Html5Utils.java | 13 +++++++ .../common/animation/RippleAnimation.java | 34 +++++++++++++++++++ .../client/components/base/PageFooter.java | 12 ++++++- .../silverpeas/mobile/public/animations.css | 28 +++++++++++++++ .../org/silverpeas/mobile/public/spmobile.css | 1 + 5 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/common/animation/RippleAnimation.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java index 01de7117a..5a17bab77 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java @@ -27,6 +27,7 @@ import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Element; import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.Anchor; import org.silverpeas.mobile.client.common.event.speech.SpeechErrorEvent; import org.silverpeas.mobile.client.common.event.speech.SpeechResultEvent; import org.silverpeas.mobile.client.common.event.speech.SpeechStartEvent; @@ -37,6 +38,17 @@ */ public class Html5Utils { + public static void disableAnchor(Anchor a) { + String style = a.getElement().getAttribute("style"); + a.getElement().setAttribute("style",style + "pointer-events: none;"); + } + + public static void enableAnchor(Anchor a) { + String style = a.getElement().getAttribute("style"); + style = style.replace("pointer-events: none;",""); + a.getElement().setAttribute("style",style); + } + public static native void setVideoFullScreen(Element element) /*-{ if (element.requestFullscreen) { element.requestFullscreen(); @@ -185,4 +197,5 @@ public static native void share(String title, String text, String url) /*-{ }; $wnd.navigator.share(shareData); }-*/; + } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/animation/RippleAnimation.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/animation/RippleAnimation.java new file mode 100644 index 000000000..521122813 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/animation/RippleAnimation.java @@ -0,0 +1,34 @@ +package org.silverpeas.mobile.client.common.animation; + +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.dom.client.Style; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.Widget; + +public class RippleAnimation { + + public static void play(ClickEvent event, int duration) { + Element element = ((Widget) event.getSource()).getElement(); + SpanElement ripple = Document.get().createSpanElement(); + ripple.addClassName("ripple"); + element.appendChild(ripple); + + int x = event.getClientX() - element.getOffsetLeft(); + int y = event.getClientY() - element.getOffsetTop(); + ripple.getStyle().setLeft(x, Style.Unit.PX); + ripple.getStyle().setRight(y, Style.Unit.PX); + + Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { + @Override + public boolean execute() { + ripple.removeFromParent(); + return false; + } + }, duration); + } + +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java index 29d839ec2..37768a596 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java @@ -36,7 +36,10 @@ import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationShowContentEvent; import org.silverpeas.mobile.client.apps.profile.ProfileApp; import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.common.Html5Utils; +import org.silverpeas.mobile.client.common.animation.RippleAnimation; import org.silverpeas.mobile.client.common.app.App; +import org.silverpeas.mobile.client.common.navigation.PageHistory; import org.silverpeas.mobile.client.common.resources.ResourcesManager; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.client.resources.ApplicationResources; @@ -83,27 +86,34 @@ private void addCustomButtons() { @UiHandler("browse") protected void browse(ClickEvent event) { NavigationMenu.goHome(); + RippleAnimation.play(event, 150); } @UiHandler("favoris") protected void goFavoris(ClickEvent event) { + PageHistory.getInstance().goBackToFirst(); ContentDTO content = new ContentDTO(); content.setType(ContentsTypes.Favortis.toString()); EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content)); + RippleAnimation.play(event, 150); } @UiHandler("tasks") protected void goTasks(ClickEvent event) { + PageHistory.getInstance().goBackToFirst(); ContentDTO content = new ContentDTO(); content.setType(ContentsTypes.Tasks.toString()); EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content)); + RippleAnimation.play(event, 150); } @UiHandler("contact") - void contacts(ClickEvent e) { + void contacts(ClickEvent event) { + PageHistory.getInstance().goBackToFirst(); ContentDTO content = new ContentDTO(); content.setType(ContentsTypes.Contacts.toString()); EventBus.getInstance().fireEvent(new NavigationShowContentEvent(content)); + RippleAnimation.play(event, 150); } public int getHeight() { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css index 960b5665a..c81d45d74 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/animations.css @@ -18,3 +18,31 @@ transition: opacity 250ms linear; } +.ripple { + position: absolute; + border-radius: 50%; + /* To make it round */ + background-color: rgba(0, 0, 0, 0.3); + + width: 100px; + height: 100px; + margin-top: -50px; + /* for positioning */ + margin-left: -50px; + + animation: ripple 1s; + opacity: 0; +} + +/* Add animation */ +@keyframes ripple { + from { + opacity: 1; + transform: scale(0); + } + + to { + opacity: 0; + transform: scale(10); + } +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 7b9cdaff4..a9ec8815f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -512,6 +512,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { .ui-page-content { padding: 0; + min-height: 100vh; } #menu-principal { From 7bc097f603b43be58359eaa15b1ffcc42ce9e308 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 18 Jan 2024 16:53:14 +0100 Subject: [PATCH 147/228] Fix back navigation --- .../silverpeas/mobile/client/common/navigation/PageHistory.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java index 62d02ade9..a08bb282a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/PageHistory.java @@ -145,6 +145,7 @@ private void back(String token) { page.stop(); page = pages.peek(); SpMobil.getMainPage().setContent(page, false); + page.setVisible(true); } else { SpMobil.restoreMainPage(); } From 263d71a4cd2eaa82f6066de5064cc3793996b490 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 22 Jan 2024 18:59:50 +0100 Subject: [PATCH 148/228] improve medias render --- .../media/pages/MediaNavigationPage.ui.xml | 2 +- .../client/apps/media/pages/VideoPage.java | 5 +-- .../client/apps/media/pages/VideoPage.ui.xml | 12 ++++-- .../apps/media/pages/VideoStreamingPage.java | 4 +- .../media/pages/VideoStreamingPage.ui.xml | 12 ++++-- .../apps/media/pages/widgets/MediaItem.java | 4 +- .../components/attachments/Attachment.ui.xml | 10 +++-- .../resources/ApplicationResources.java | 6 --- .../silverpeas/mobile/public/components.css | 2 +- .../icons/files/file-type-video-ondemand.svg | 1 + .../public/icons/files/file-type-video.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 38 ++++++++----------- 12 files changed, 50 insertions(+), 47 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video-ondemand.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml index 72a5a68b3..0dd747445 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.ui.xml @@ -29,6 +29,6 @@ xmlns:components="urn:import:org.silverpeas.mobile.client.components"> <g:HTMLPanel styleName="content"> - <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/> + <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow medias"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java index 7674864a8..e825c4043 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java @@ -61,6 +61,7 @@ import org.silverpeas.mobile.client.common.app.View; import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.common.navigation.UrlUtils; +import org.silverpeas.mobile.client.common.network.NetworkHelper; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent; @@ -142,9 +143,7 @@ public void onClick(final ClickEvent clickEvent) { } } }); - - Image img = new Image(resources.video()); - mediaType.getParentElement().replaceChild(img.getElement(), mediaType); + mediaType.setSrc(NetworkHelper.getContext() + "icons/files/file-type-video.svg"); mediaTitle.setInnerHTML(video.getTitle()); mediaFileName.setInnerHTML(video.getName()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml index 45d7b4f24..83a284f54 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml @@ -39,10 +39,14 @@ <ul id="attachments"> <li> <g:Anchor ui:field="download" styleName="downloadable"> - <img ui:field="mediaType" src=""/> - <span ui:field="mediaFileName"></span> - <span class="weight" ui:field="weight"></span> - <span class="dimension" ui:field="dimensions"></span> + <div> + <img ui:field="mediaType" src=""/> + </div> + <div> + <span ui:field="mediaFileName"></span> + <span class="weight" ui:field="weight"></span> + <span class="dimension" ui:field="dimensions"></span> + </div> </g:Anchor> </li> </ul> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java index 6646fc28a..23b9b1d5a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.java @@ -52,6 +52,7 @@ import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.app.View; import org.silverpeas.mobile.client.common.navigation.LinksManager; +import org.silverpeas.mobile.client.common.network.NetworkHelper; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent; @@ -115,8 +116,7 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { player.setFrameBorder(0); player.setAttribute("allowfullscreen", ""); - Image img = new Image(resources.streaming()); - mediaType.getParentElement().replaceChild(img.getElement(), mediaType); + mediaType.setSrc(NetworkHelper.getContext() + "icons/files/file-type-video-ondemand.svg"); mediaTitle.setInnerHTML(video.getTitle()); mediaFileName.setInnerHTML(video.getName()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml index 5382904e5..c5de17aeb 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoStreamingPage.ui.xml @@ -38,10 +38,14 @@ <ul id="attachments"> <li> <g:Anchor ui:field="download" styleName="downloadable"> - <img ui:field="mediaType" src=""/> - <span ui:field="mediaFileName"></span> - <span class="weight" ui:field="weight"></span> - <span class="dimension" ui:field="dimensions"></span> + <div> + <img ui:field="mediaType" src=""/> + </div> + <div> + <span ui:field="mediaFileName"></span> + <span class="weight" ui:field="weight"></span> + <span class="dimension" ui:field="dimensions"></span> + </div> </g:Anchor> </li> </ul> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java index d0dea1c48..09febc23d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java @@ -37,7 +37,9 @@ import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.media.events.pages.navigation.MediaItemClickEvent; import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.common.Html5Utils; import org.silverpeas.mobile.client.common.navigation.UrlUtils; +import org.silverpeas.mobile.client.common.network.NetworkHelper; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.media.MediaDTO; @@ -82,7 +84,7 @@ public void setData(MediaDTO data) { } else if (data instanceof VideoStreamingDTO) { String url = ((VideoStreamingDTO) data).getUrlPoster(); if (url.isEmpty()) { - thumb.setSrc(resources.streaming().getSafeUri().asString()); + thumb.setSrc(NetworkHelper.getContext() + "icons/files/file-type-video-ondemand.svg"); } else { thumb.setSrc(url); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml index 06b04e267..6a100a3e7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.ui.xml @@ -27,9 +27,13 @@ xmlns:g="urn:import:com.google.gwt.user.client.ui"> <g:HTMLPanel tag="li"> <g:Anchor ui:field="link" styleName="expand-more" href="javascript:;"> - <img ui:field="icon" src=""/> - <span ui:field="name"></span><span ui:field="size" class="weight"></span> - <span ui:field="description"></span> + <div> + <img ui:field="icon" src=""/> + </div> + <div> + <span ui:field="name"></span><span ui:field="size" class="weight"></span> + <span ui:field="description"></span> + </div> </g:Anchor> <g:HTMLPanel ui:field="operations" stylePrimaryName="ops-closed"> <g:HTML ui:field="notify"></g:HTML> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java index b38268825..bf0c0521b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java @@ -41,12 +41,6 @@ public interface ApplicationResources extends ClientBundle { @Source("sound.png") ImageResource sound(); - @Source("video.png") - ImageResource video(); - - @Source("streaming.png") - ImageResource streaming(); - @Source("offline.png") ImageResource offline(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css index 28b43e4f9..005698838 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css @@ -65,7 +65,7 @@ #header > div > div > span { display: block; width: 100%; - box-shadow: 0 2px 10px 0 rgba(0,0,0,0.3); + box-shadow: 0 2px 10px 0 rgba(0,0,0,0.3); border-radius: 2em; height: 4px; background: #fff; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video-ondemand.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video-ondemand.svg new file mode 100644 index 000000000..7ca91146d --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video-ondemand.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M21 3H3c-1.11 0-2 .89-2 2v12c0 1.1.89 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.11-.9-2-2-2zm0 14H3V5h18v12zm-5-6l-7 4V7z" fill="#eb6a05"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video.svg new file mode 100644 index 000000000..7792b62b9 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-video.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M21 3H3c-1.11 0-2 .89-2 2v12c0 1.1.89 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.11-.9-2-2-2zm0 14H3V5h18v12z" fill="#eb6a05"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index a9ec8815f..dbfd7947d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -926,33 +926,36 @@ html .ui-controlgroup-controls .ui-btn-up-c { } .ui-listview .media-thumb { - width: 70px; - border: 1px solid #ccc; + width: 20vw; float: left; - margin: 8px 0 0 8px; + margin-left: 4vw; + margin-top: 4vw; } .media-thumb .ui-thumb { - width: 64px; - height: 94px; overflow: hidden; display: block; border: 3px solid #FFF; + background-color: white !important; + box-shadow: 0 2px 10px 0 rgba(0,0,0,0.3); } .media-thumb .ui-thumb img { - min-width: 64px; - max-height: 75px; - max-width: 75px; - min-height: 64px; - height: auto; + width: 100%; + height: 75px; + object-fit: scale-down; } .media-thumb .ui-thumb span { - font-size: 0.6em; - height: 2.4em; + font-size: 0.8em; + height: 2em; display: inline-block; overflow: hidden; + line-height: 1em; + background-color: #f6f6f6; + width: 100%; + color: black; + } .info-nb-sous-elmt { @@ -1259,30 +1262,23 @@ html .ui-controlgroup-controls .ui-btn-up-c { #attachments li a { text-decoration: none; color: #000; + display: flex; } #attachments li a .weight { display: block; - padding-left: 24px; color: #848484; - margin-left: 8px; } #a-media #attachments li a .dimension { display: block; color: #848484; padding-left: 0px; - margin-left: calc(1em + 24px); } #a-media #attachments li a .weight { display: inline-block; padding-left: 0px; - margin-left: calc(1em + 24px); -} - -#a-media #attachments li a img { - margin-left: 0.5em; } #attachments li a img { @@ -1296,13 +1292,11 @@ html .ui-controlgroup-controls .ui-btn-up-c { #attachments li a.expand-more { background: transparent url(icons/expand_more.svg) right 1em no-repeat; - display: block; margin-right: 0.5em; } #attachments li a.expand-less { background: transparent url(icons/expand_less.svg) right 1em no-repeat; - display: block; margin-right: 0.5em; } From b5040dadf9f256f3bbcf1e330f9f7baaac5be38b Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 23 Jan 2024 15:41:43 +0100 Subject: [PATCH 149/228] enhance attchment and media render --- .../client/apps/media/pages/PhotoPage.java | 33 ++++++++++++++++- .../client/apps/media/pages/PhotoPage.ui.xml | 18 +++++++--- .../client/apps/media/pages/SoundPage.java | 30 +++++++++++++--- .../client/apps/media/pages/SoundPage.ui.xml | 19 ++++++---- .../client/apps/media/pages/VideoPage.java | 34 +++++++++++++++--- .../client/apps/media/pages/VideoPage.ui.xml | 5 ++- .../apps/media/pages/widgets/MediaItem.java | 3 +- .../resources/ApplicationResources.java | 3 -- .../mobile/client/resources/sound.png | Bin 2057 -> 0 bytes .../mobile/client/resources/streaming.png | Bin 3106 -> 0 bytes .../mobile/client/resources/video.png | Bin 2438 -> 0 bytes .../public/icons/files/file-type-sound.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 19 +++++----- 13 files changed, 132 insertions(+), 33 deletions(-) delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sound.png delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/streaming.png delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/video.png create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-sound.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java index affcbf54c..454b4fee8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.java @@ -38,6 +38,7 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HTMLPanel; import org.silverpeas.mobile.client.apps.comments.pages.widgets.CommentsButton; import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton; @@ -76,7 +77,7 @@ interface PhotoPageUiBinder extends UiBinder<HTMLPanel, PhotoPage> { } @UiField HeadingElement mediaTitle; - @UiField Anchor mediaFullSize, download; + @UiField Anchor mediaFullSize, download, link; @UiField ParagraphElement lastUpdate, creator; @UiField SpanElement mediaFileName, weight, dimensions; @UiField ImageElement preview, mediaType; @@ -84,6 +85,10 @@ interface PhotoPageUiBinder extends UiBinder<HTMLPanel, PhotoPage> { CommentsButton comments; @UiField DivElement previewContainer; + @UiField HTML view; + + @UiField HTMLPanel operations; + private NotifyButton notification = new NotifyButton(); private AddToFavoritesButton favorite = new AddToFavoritesButton(); @@ -99,6 +104,9 @@ public PhotoPage() { msg = GWT.create(MediaMessages.class); EventBus.getInstance().addHandler(AbstractMediaPagesEvent.TYPE, this); getElement().setId("a-media"); + operations.getElement().setId("operations"); + download.getElement().setId("download"); + view.getElement().setId("view"); /*Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { @Override public void execute() { @@ -135,6 +143,7 @@ public void onMediaViewPrev(final MediaViewPrevEvent mediaViewPrevEvent) { public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { if (isVisible()) { this.photo = (PhotoDTO) event.getPreview(); + if (!photo.getDownload()) link.getElement().removeClassName("expand-more"); preview.setSrc(photo.getDataPhoto()); mediaType.setSrc(NetworkHelper.getContext() + "icons/files/file-type-image.svg"); mediaTitle.setInnerHTML(photo.getTitle()); @@ -187,6 +196,28 @@ void showFullScreen(ClickEvent event) { page.show(); } + @UiHandler("link") + void link(ClickEvent event) { + if (photo.getDownload()) { + toogleOperations(); + } + } + + private void toogleOperations() { + if (operations.getStylePrimaryName().equalsIgnoreCase("ops-closed")) { + operations.setStylePrimaryName("ops-open"); + link.setStylePrimaryName("expand-less"); + } else { + operations.setStylePrimaryName("ops-closed"); + link.setStylePrimaryName("expand-more"); + } + } + + @UiHandler("view") + void view(ClickEvent event) { + showFullScreen(event); + } + @UiHandler("download") void download(ClickEvent event) { if (photo.getDownload()) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml index 89bc85854..f03e39964 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/PhotoPage.ui.xml @@ -38,12 +38,20 @@ <widgets:CommentsButton ui:field="comments"/> <ul id="attachments"> <li> - <g:Anchor ui:field="download" styleName="downloadable"> - <img ui:field="mediaType"/> - <span ui:field="mediaFileName"></span> - <span class="weight" ui:field="weight"></span> - <span class="dimension" ui:field="dimensions"></span> + <g:Anchor ui:field="link" styleName="expand-more" href="javascript:;"> + <div> + <img ui:field="mediaType"/> + </div> + <div> + <span ui:field="mediaFileName"></span> + <span class="weight" ui:field="weight"></span> + <span class="dimension" ui:field="dimensions"></span> + </div> </g:Anchor> + <g:HTMLPanel ui:field="operations" stylePrimaryName="ops-closed"> + <g:Anchor ui:field="download" styleName="downloadable"></g:Anchor> + <g:HTML ui:field="view"></g:HTML> + </g:HTMLPanel> </li> </ul> <p ui:field="creator" class="lastUpdate"></p> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java index 928c4a982..d34503720 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.java @@ -58,6 +58,7 @@ import org.silverpeas.mobile.client.common.app.View; import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.common.navigation.UrlUtils; +import org.silverpeas.mobile.client.common.network.NetworkHelper; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndEvent; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEndHandler; import org.silverpeas.mobile.client.common.reconizer.swipe.SwipeEvent; @@ -80,7 +81,7 @@ interface SoundPageUiBinder extends UiBinder<HTMLPanel, SoundPage> { } @UiField HeadingElement mediaTitle; - @UiField Anchor mediaFullSize, download; + @UiField Anchor mediaFullSize, download, link; @UiField ParagraphElement lastUpdate, creator; @UiField SpanElement mediaFileName, weight, dimensions; @UiField ImageElement mediaPreview, mediaType; @@ -88,6 +89,8 @@ interface SoundPageUiBinder extends UiBinder<HTMLPanel, SoundPage> { @UiField CommentsButton comments; @UiField DivElement previewContainer; + @UiField HTMLPanel operations; + private NotifyButton notification = new NotifyButton(); private ShareButton share = new ShareButton(); private AddToFavoritesButton favorite = new AddToFavoritesButton(); @@ -101,6 +104,8 @@ public SoundPage() { initWidget(uiBinder.createAndBindUi(this)); msg = GWT.create(MediaMessages.class); getElement().setId("a-media"); + operations.getElement().setId("operations"); + download.getElement().setId("download"); EventBus.getInstance().addHandler(AbstractMediaPagesEvent.TYPE, this); /*Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { @Override @@ -114,9 +119,9 @@ public void execute() { @Override public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { if (isVisible()) { - mediaPreview.setSrc(resources.sound().getSafeUri().asString()); SoundDTO sound = (SoundDTO) event.getPreview(); this.sound = sound; + if (!sound.getDownload()) link.getElement().removeClassName("expand-more"); String url = UrlUtils.getSilverpeasServicesLocation(); url += "gallery/" + sound.getInstance() + "/sounds/" + sound.getId() + "/content"; player.setSrc(url); @@ -126,8 +131,8 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { player.setAttribute("controlsList", "nodownload"); player.setAttribute("type", sound.getMimeType()); - Image img = new Image(resources.sound()); - mediaType.getParentElement().replaceChild(img.getElement(), mediaType); + mediaType.setSrc(NetworkHelper.getContext() + "icons/files/file-type-sound.svg"); + mediaTitle.setInnerHTML(sound.getTitle()); mediaFileName.setInnerHTML(sound.getName()); @@ -160,6 +165,23 @@ public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { } } + @UiHandler("link") + void link(ClickEvent event) { + if (sound.getDownload()) { + toogleOperations(); + } + } + + private void toogleOperations() { + if (operations.getStylePrimaryName().equalsIgnoreCase("ops-closed")) { + operations.setStylePrimaryName("ops-open"); + link.setStylePrimaryName("expand-less"); + } else { + operations.setStylePrimaryName("ops-closed"); + link.setStylePrimaryName("expand-more"); + } + } + @UiHandler("download") void download(ClickEvent event) { if (sound.getDownload()) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml index cfb4940c7..31ed372eb 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/SoundPage.ui.xml @@ -32,19 +32,26 @@ <div class="cadrePhoto" ui:field="previewContainer"> <g:Anchor ui:field="mediaFullSize"> - <img ui:field="mediaPreview" src=""/> + <img ui:field="mediaPreview" src="/silverpeas/spmobile/icons/files/file-type-sound.svg" style="width:100%;"/> <audio ui:field="player"></audio> </g:Anchor> </div> <widgets:CommentsButton ui:field="comments"/> <ul id="attachments"> <li> - <g:Anchor ui:field="download" styleName="downloadable" href="#"> - <img ui:field="mediaType" src=""/> - <span ui:field="mediaFileName"></span> - <span class="weight" ui:field="weight"></span> - <span class="dimension" ui:field="dimensions"></span> + <g:Anchor ui:field="link" styleName="expand-more" href="javascript:;"> + <div> + <img ui:field="mediaType" src=""/> + </div> + <div> + <span ui:field="mediaFileName"></span> + <span class="weight" ui:field="weight"></span> + <span class="dimension" ui:field="dimensions"></span> + </div> </g:Anchor> + <g:HTMLPanel ui:field="operations" stylePrimaryName="ops-closed"> + <g:Anchor ui:field="download" styleName="downloadable"></g:Anchor> + </g:HTMLPanel> </li> </ul> <p ui:field="creator" class="lastUpdate"></p> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java index e825c4043..588e853d2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.java @@ -41,6 +41,7 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Image; import org.silverpeas.mobile.client.apps.comments.pages.widgets.CommentsButton; @@ -84,7 +85,7 @@ interface VideoPageUiBinder extends UiBinder<HTMLPanel, VideoPage> { } @UiField HeadingElement mediaTitle; - @UiField Anchor mediaFullSize, download; + @UiField Anchor mediaFullSize, download, link; @UiField ParagraphElement lastUpdate, creator; @UiField SpanElement mediaFileName, weight, dimensions; @UiField ImageElement mediaType; @@ -92,8 +93,11 @@ interface VideoPageUiBinder extends UiBinder<HTMLPanel, VideoPage> { @UiField VideoElement player; @UiField DivElement previewContainer; + @UiField + HTMLPanel operations; + private NotifyButton notification = new NotifyButton(); - private ShareButton share = new ShareButton(); + private ShareButton shareBtn = new ShareButton(); private AddToFavoritesButton favorite = new AddToFavoritesButton(); private static VideoPageUiBinder uiBinder = GWT.create(VideoPageUiBinder.class); @@ -107,6 +111,10 @@ public VideoPage() { msg = GWT.create(MediaMessages.class); EventBus.getInstance().addHandler(AbstractMediaPagesEvent.TYPE, this); getElement().setId("a-media"); + + operations.getElement().setId("operations"); + download.getElement().setId("download"); + /*Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { @Override public void execute() { @@ -120,6 +128,7 @@ public void execute() { public void onMediaPreviewLoaded(final MediaPreviewLoadedEvent event) { if (isVisible()) { this.video = (VideoDTO) event.getPreview(); + if (!video.getDownload()) link.getElement().removeClassName("expand-more"); String url = UrlUtils.getSilverpeasServicesLocation(); url += "gallery/" + video.getInstance() + "/videos/" + video.getId() + "/content"; player.setSrc(url); @@ -173,8 +182,25 @@ public void onClick(final ClickEvent clickEvent) { notification.init(video.getInstance(), video.getId(), NotificationDTO.TYPE_VIDEO, video.getName(), getPageTitle()); addActionMenu(notification); } - share.init(video.getTitle(),video.getTitle(), LinksManager.createMediaPermalink(video.getId())); - addActionMenu(share); + shareBtn.init(video.getTitle(),video.getTitle(), LinksManager.createMediaPermalink(video.getId())); + addActionMenu(shareBtn); + } + } + + @UiHandler("link") + void actions(ClickEvent event) { + if (video.getDownload()) { + toogleOperations(); + } + } + + private void toogleOperations() { + if (operations.getStylePrimaryName().equalsIgnoreCase("ops-closed")) { + operations.setStylePrimaryName("ops-open"); + link.setStylePrimaryName("expand-less"); + } else { + operations.setStylePrimaryName("ops-closed"); + link.setStylePrimaryName("expand-more"); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml index 83a284f54..89d92f407 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/VideoPage.ui.xml @@ -38,7 +38,7 @@ <widgets:CommentsButton ui:field="comments"/> <ul id="attachments"> <li> - <g:Anchor ui:field="download" styleName="downloadable"> + <g:Anchor ui:field="link" styleName="expand-more" href="javascript:;"> <div> <img ui:field="mediaType" src=""/> </div> @@ -48,6 +48,9 @@ <span class="dimension" ui:field="dimensions"></span> </div> </g:Anchor> + <g:HTMLPanel ui:field="operations" stylePrimaryName="ops-closed"> + <g:Anchor ui:field="download" styleName="downloadable"></g:Anchor> + </g:HTMLPanel> </li> </ul> <p ui:field="creator" class="lastUpdate"></p> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java index 09febc23d..b25693017 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/MediaItem.java @@ -76,7 +76,8 @@ public void setData(MediaDTO data) { if (data instanceof PhotoDTO) { thumb.setSrc( ((PhotoDTO)data).getDataPhoto()); } else if (data instanceof SoundDTO) { - thumb.setSrc(resources.sound().getSafeUri().asString()); + thumb.setSrc(NetworkHelper.getContext() + "icons/files/file-type-sound.svg"); + thumb.setAttribute("style", "object-fit:unset;"); } else if (data instanceof VideoDTO) { String url = UrlUtils.getSilverpeasServicesLocation(); url += "gallery/" + ((VideoDTO) data).getInstance() + "/videos/" + ((VideoDTO) data).getId() + "/thumbnail/0"; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java index bf0c0521b..e1fae223f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java @@ -38,9 +38,6 @@ public interface ApplicationResources extends ClientBundle { @Source("avatar.png") ImageResource avatar(); - @Source("sound.png") - ImageResource sound(); - @Source("offline.png") ImageResource offline(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sound.png b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sound.png deleted file mode 100644 index 53069e6671ec0ea34fb1bbc652d824072e73ee0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2057 zcmV+k2=@1hP)<h;3K|Lk000e1NJLTq003kF002t}0ssI233|2Q00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-vSyC6gHRY0et`f2bM`h zK~#9!?VM|DRL2#^&&=F=_vQ7j*|oj4@nf?##TeT>jG;hEQYBOc5=afGiD(tIADVoq zs)nj*lhC}Rekm1-qDqx2C9V2W3L$Ajpg|-GLP;?J6T3WY47GRh3wyoB`|v*Qy)*qV z-pe*E#u8qm>(2RfW_=}(fA^d-|8vGR`q{A!AZ&Jq1p)y}z!I<oECEZv5(oq=0ZYIV zummgtOCS)i1S|ndz!I<oEK~1Z)l&l2tW2Zo)`q>Ro))m~U<}yiFFn1X=J6ekKc!3; zux7G4@7nwC`xXGSRBmtZeO17k$)c%nN{s;kM&yx(A4ymiu>LFgvNjy;Io|Uto`4Re zsIB?Mc_?0{fkm0_viS&>8884KSZ)s;K6m{+4sluO14~Oc>Qoi5xS?;i9N1d_L&hjy zE5v&A@_`$%YXArU9;*AEMREvOz!=?9{{ye1YSrRxP2~?8_$bpq=y{zlN}TukJ*yWu ztc;#asj;+{m_Y$JEQ@Nr>i_^Dyrupbn_S4U^(z?Zyc#|O01{Rj%N{}qFIZSQ&FpG^ zW#8tHp4#wcrF;49cqK9u?_T)%G&sfG*0e99C9<qj=Lg>Bx!GL)HHBF6w_CDlPu0Cr zm2R8wsr7FJylWK6?zZ_nj;gMq<GDxPt#Sn@oCu}0_>$uF0N`;{jzoLM5<!eGLU<_J z-CDiVBG~~Tk-phKaULVGa3V|7)2k}BJ-z--kK@*>B3P1$lCzXoR%|h1O(C{V``_vr z{e&;S?EfY~a<-ze_R!nhZ>id@(aZu#L&hj&`kt2k+m}CUlMBBPYq=frM*kB#8lU5# z#7)A=$!ovM=t%%5bJqEswbP#yOMCDj_q~p4m(9l*Gd(N@tjJ#R{rmq^U%F|AO3Z*c zt=<P}zY74nSG;1C90teX=#|h!7Xa85ccr_*NYa!V8;<tyWvyooWtz!gX*8485-ByF zQsYTA27qe4t$SMbmlXK#7=1qH5{xhaSR}{x<v+=2Q`v}1c8{Lo>;m3agE#`r&qM&I zE^4A#EjG6%<%v{EORTHfxpMK=B6~SMsxTr}*{KlgonIg#edA{jcfI<JrhNdg%=ci0 zt9~rrj}XR4x-@cfYyC5TP?ft80cJqCq!_q)$;d>OA6R*bEXwq@#upxIdcJ1S3YWFS zZS%QpzCvs9Y)DN<3c}|HkM>16_;N+X*L9`=077Uy5sGIb0N}6`$>di598HfIqRb-O zO#`dAz~4}Iw__8G$l1_exnJR`H`D+^gqJM<C@BaS$7M!KCe;`KNLaQIhiPEh6&IO{ znMpViOsY`;u*ros$(e<SC#HtDUtsYV2OnjcM$^20VJw*j)*K!YeDFfBL~cnil+<F} zvq=s^#8Rg7sRKqtLgs;m=4x|@5G(<JPIXERHNa$S&C*nJ%N#<4D-UX-0?!zOxln}) zu~~>605bYiDjQ7<n9Eu+-7~6_2u;5lf+U$(viX=X4XkKt%=p>v#ypNHiC6$&EZ(o` z86(}wT}!8nTD%`+3%`UFUe_tr%>*klHF)Y@f0#^--etjBU$dM0T|>utJ~CiVi?_I- znnzG9J&v+TZ&zIWnUuygut`KI!P435f4g+!V;Ng{nh+%UJ*zhbo-DK$&u++-YHNDI zSGWWKMxwpF;dZXk7^4AC3jz!P*Kc0T?T~!Vy6hPm0$`?r#rHpznFN?L)?<m_Kl=Z& zZQ0&+HM?dWp-`sR6s>5f+`*RzJ71KsVzhxx<(qkz(>LB>D0RkYz}w3Gk=WHdjR5CQ zI$%U(Vma3R+M&*uV(IYAPxeoAbPoO<0FGULjW;@m-1RS71pum^?u(o=&JhGC;9bN0 zzDP%&=2;TVuVF+k41XAmbUxPjd~NaC8P37?F8(5#37-xgGDtB-H~Js9D{cUYObrZ9 zcJt45sy3EC%!^lAOAJh0P$av#BP&-B#WRuLpWFLc=$+hS3;l;aLn=*waQXFI%~@7h zw{r0|zU&w{!o@uR=uF#C^91)lA3Tck6IS<D!L!3%ufE;+aySv<>!Hb>FI<!wJ(Etg zQfJ`F*6E9!v3URK;30ksO_}cZtgdj^^DliCdN+T!)6%_zg%rttapdE^NQWZX8KX%x z3PAs-{x7nZ?QDL@n5_Q!{BxA)eBgxut*vU~Q5l@*9G@D@-v!S-gvC=5CDmAtEJC-b zbkph_08U)_^>`wLvqZ`Yml&hxj)5b2nvt5Ikv42Ras9}}Ujo3D(NEihhjN6g`e5yM zY_byoZYGC~Vd=t*tl6vFtKrjceZKEn_)J<)@}yJs)Vk{3OH04PpE(nHXEHfL^7-pD z=77aB@xt&4j0h*i7%g`#eRTPcv)$<E$*aH3y-EB3O+!PY8NS=*+tvKC(d+!N<5`SJ z-Zuc|v<mmKQfGksANBrbB-)FSfOQ+|zH#cG!zTbBIMH>w|KR+5Q^};TbgCY?v|l0C z_b(qvY4LdoD*!;|{r4&in1ZbtJ!K3_MH=4zJp)o{dfrHZ_;VBiOTZGa1S|ndn1Cf< n30MM_fF)oF6R-rVeA&MNc=rJn+l%xD00000NkvXXu0mjf@6g?w diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/streaming.png b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/streaming.png deleted file mode 100644 index 0b09eb084f22485e902c922898819f8c3178520a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3106 zcmV+-4BhjIP)<h;3K|Lk000e1NJLTq003kF002t}0ssI233|2Q00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-yl2@)C?IY>DI000ZYNkl<Zc-rlpdr(x@8Nkou?!CKv zcVT(R!(|b93y3cQ3L=OaOh_8j(Zoq=5;HMPCNp_-GD(_A({wVOwAE&&u_m3`*tAYf zMx*A@Oky=Je4#Faz#`xyyccohv9G)LdHTnNbyc92ATGM!@W<}ia}MYJ_I%%WzVCi_ z;oVPu077zof<g#FutKmxutpOCfRC3voFFSC1Zymj6#^9U@`jQR-(H()iBy7vSJ1&C zgishQnq&Fo-F0^srN&1a-+X?BAj-k8HY%7f0Us|e$TqJo&ncK=@wZ2W>5B7`j@GtQ z7=>UBZzu}C{7A`?yd<4gbJeF6B^gz<?V+6o2q78@XC_a3`H3ZwCVjt?d+(!TM{3$j z^JkV7q$I?LYiTOk5;?;h(b+S2Tf^c7DJwPRft9ltFG%um!oNPR{p3Jnzmuai_|vaX z@BFepJ2m!&$BNREqN5|&+ZUGV;GSJqw6Zvj*5JMSZ6AJ7=jH?m07DP0sx&|O>9qy% zF~(|JSM&Lcx1$=WdY7IW{mO=tD3e}oELt$b$4iyg*1kb6FGvw#`lr_B7tFD^y~3Zi zANk}!qy8F0Hu(Z4IgsWBX;yN~{VTG{7N(5Yp~F7VZXe9gwP+~x`L|6wzpA_7aBC=h zdmSAJA%ZABvF48Zmd(;Jqiz#RyvY)8I^Ws9@o$x#7Y1dS1PQ50f<*|x7$#eyUVpkQ zDneh=*u81nAp=WSlw=moPt-D$POCu>s+~QY@MUGow%t|$AcSDJIVj|YtD)B?W+X+g zSvh;zqLljPp1of;9y!?t5d;MAf<ypVU7oZ4{snrS1^`fLZT)y(Lw!q6Fj%Nb-C2YH zLdee_%)hrZlNaUJ-#Jj%+{23!#s~l)D+;TppI%!~wlGD@P##YF!`AO>PIpVP5}c%N z6f8BqONa}9@$uqhOC$h5tB{}GnQaQwRogm!J_!Jjn;G}w`eIg3^Mdr{!IsVcJfZ-A z5rjddcsClBAj*mH;j7DY?pl)JZ^Q`B&5WO$880hJT~iMMV1Cwg06^8Lj*s^>)HT~F z3S$uLLQU+3^6}Ec_s(5gk<04n5&K|-=4DL>0JuEDrfmo7n(aP83Lbwq8L$Wd2*Q~O z5x;n>IN1^*%SubDW8?dkf~ZuKW|ZX3Wc9ROt3e2=Td%6Nebe6$38I7%LP4x|6YmWP zA*_yGw`zXHl5~twORHnge%p7)&a2i(kYq`c?^=@a%tH%}EOVlvYu8ux*7{B@qnSFC zCT?d5qWr>R1uF_u2AsYvJC0V{x;TEw<tYk55I(!E@F!(ik|h7?odfmFc0rVN!RqfO zLk)er000ON)2>-Lo7FSchE6Xh5<+IB#Ju!Gu|dxqKH2v62ZsbfM#1gxZa6GjL;ZE< z2_wst<|n5oMW-i4OOjICWS3-l;he<UCi||h>Z@uy7#gcKYwF4bz=9CSGI?kFQHsKg z=g$BDP!!6`G0TebyRF|>)piJ?q-7{D^<`qN0YbnF(&p_)Q!J73(~JOs&Yr>FZ288= zixFYk8?kPVm)u^SkSPdDmA*l*hZEG-331_D-@O0Et-HI|`P;vI*V@%TRbe3nA%L>1 zY}$6vcD5G}TPTdtD^HfBCPt}m_x#7U=YUN^VL%7~K$4Z^g=vqjnin|Lk(%~*cT{OK zLw#h06wXV0YHfkP!}OT2=`qGhhK17>teU8~ctNTt&6pO+W+YELRNdO$>-73W4=1|4 zg0-P*LH6`;qZR-#D<$S)pSRl9sea1w(((EZMIq|RemJWYjxnmV{^0hCUZ2SM#M&mi zj~DZD68wD*TH87%H!DApup~*jXK7}XNzdx&ylivLX}hD}s~)(VZob;qotqvP5w0Tu z<mH$#Ms>|S!~PVXYU=TF!n`cA|3IIaJT20suW9U72mt_SDBN)7!oVQ6Als~Z)q~d7 zTLBgTz`!z#^OC9?I{RHd1R+Au<>e2bY@3r2r*_Cmi)Co)cwMJT6Jyl;!$r48xMTL^ zy^}U0D%_|$Qq!(#G{)#``=tRVr{03SbzlJiv<x*r%Y6D=uZBXbjyC9N4TWsydh>G3 zYQ`!nH73l!oNw<7Gcc@<Hn7Z@HV1{#tdy8QUXc;{Gp!DPpK~33L?PK}v6Bz$#vXsn zv0<BEyLXHZtCnT0T9!5TBo#|CDgv@SH&H_MSs_><SRq&;SRq&;3Bd}%3c<SRLfsmd z0U?BHcs*j`ngE3mqA0flEJ2hHpKSm9yVGY|9fL04wdv3Fr06*raSz@-Cnky=Atn{X zp6;$o7ag3(E6XDkfzvb{YmSdkNYK#q)Q07B^Bdo<{HE%BMsjp<-ppxHEKT9Sd@+Q; z$4fm9*BgKS`kvB^yGt@IZx{f)Zg+Eo&FylR7G<Z-jE{>kU3>RPA&R}H|KRbnNN0+j z9y{(Wc9UTd0zTeXUukW9X~UB8qEw2)qZPYLvcmbqV|5*8+b{W(t`NeO#?yK&_1Qmu zot2Tm&>B3-a9LJdZtktk|322#$Flk<Y2Xz_*?XYz`9})xE1RWdG-Es#Kw)HLnPm%8 zBf@k;OGoI^#fub>cf9vp-rN+uj=`f3#~7Ky*|%O@v!XC9SiIr?djqw%&l3@*TV9xY z-SY#3p7#GQpO>pB&(EKqa=llJ&;u3oXblbmHH5(H6aKFe951FMMjBaW>~3C8&<~g8 z_zS-Y0Pz;fy0uIF-P-Mg+jd)j=<M_7rU?LAMzgv+d-<ZF?;~wSlvYcP?_r>cgvDs6 z&D)Q@`c$crWv=Ir9!9XMXE2<l{q}3X#fj2o>x&?8^toUB{TCPe+)E2ma?)aDSpg7K z)pmS)*mj}4RZ-*}(ek0g(-1;}DDOXfMq`Met|?&JwDnsg^JR;()wj_mcF^e?M-{;Y z-wNxx;C%em-GE%LQhA(%6@^1dcONgl^2dFF4+lVm&Nnpy(eupu^5`fX=N@#qIH!v< zo6!3EauJ>j0OSRc^9c|DdvAZ%%y7FCaMIOfyB;rZJ#~I*QI-k_K}be9kWH#LL<o*n z#x|mXBO=W(^suofj0UrMI<SM@VA%4;qh-Z8|8q83RsaA4F7DA+b}I@A<OLy=C54b7 zhzw1EanZWj;SM2itPe@7*_@tgzMh#dMi`?g6PubCsa$IX;3%)B5G+ZS$*|HA)!SVu zS{iTp=(vZIu5-f1bG>KV`U1;!AcT@A$dViw{Y=S2DMeA*;SfZTWx?k|R~F)8j2l{d z%OBq8>g!VofdFXr`pn$f7(;|`XKQO$d#7rNv^rg8ZjK-Uh#-c@Pm1TbbImQ9l4SoE zfhjcgU=c!CqtU<gFr&_Zyr+&?1LHdgpx5g`2$e0)$(x(vxa4$lQdp#+uBC^fu#;1k z7G}*zj8PQg^9i5rv)X%IS7;dlUavROWLT7!?stC-g~(LgSr9@_zPyIFUVAtr&0J?| zyW%VkVNRxH-Rfdy_=%rmr#h^*E{u^WGOA+b{FSA-YWqX07w`JC%HG=_Sk#Ltyu3JP z$)Z{Q7Q4eezN)&LA4uE#c#oH7^$Y+&qrn?~woH=bz(WuL;Hofa?}0}36pj!)VRNi3 z9coWaiu>hrs{)4;03ZYyT^@eH;l9-G9bc*D%}@TdwDldU@4V8GVb!&%e^-$@Slw3N z(&OKHr<!}L4PB!Rr!Wd6r6^?AzIu)q$G6mptaTW-={nKSMPZa=ju<;?6D4{7;d5Je z9uEvw1W~Rz-Hi~m#GA$*?&$Yy+f%*oP|Ns@Mv(l<5rn{G)XgxPv@|th)X58STlav| z<r5|4DjgyOAOyn=jFDxg$A-ZG{bluZY@~q~q}nFCqu(>=;(tu3bnyIC0qA#fmj=C~ z9)ciH&Gxld3n3tc47hv)E?-;sz!lR1KokNXz-n3IkE@mrt{gmq5d6678KHW7;_Asm wcXvXtLa;)xLa;)xLK1=%f)#=lf;E-ozxPh?`~No6`2YX_07*qoM6N<$f@~1-egFUf diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/video.png b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/video.png deleted file mode 100644 index c18a57fded2af873a5387de6f86d99a99a3d7c01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2438 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 Eg0J|D`~Uy| diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-sound.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-sound.svg new file mode 100644 index 000000000..ead42df06 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/files/file-type-sound.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="#7eb73b"/><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z" fill="white"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index dbfd7947d..5de11bc56 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -955,7 +955,10 @@ html .ui-controlgroup-controls .ui-btn-up-c { background-color: #f6f6f6; width: 100%; color: black; +} +audio::-webkit-media-controls-enclosure { + border-radius: 0;; } .info-nb-sous-elmt { @@ -1291,12 +1294,12 @@ html .ui-controlgroup-controls .ui-btn-up-c { } #attachments li a.expand-more { - background: transparent url(icons/expand_more.svg) right 1em no-repeat; + background: transparent url(icons/expand_more.svg) right 0.5em no-repeat; margin-right: 0.5em; } #attachments li a.expand-less { - background: transparent url(icons/expand_less.svg) right 1em no-repeat; + background: transparent url(icons/expand_less.svg) right 0.5em no-repeat; margin-right: 0.5em; } @@ -1306,7 +1309,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { #attachments li a span { display: block; - padding-right:0.5em; + padding-right:1em; } .ops-open, .ops-open #share, .ops-open #download, .ops-open #view, .ops-open #notify { @@ -1315,7 +1318,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { height: 30px; line-height:30px; transform: scaleY(1); - margin-bottom:10px; + margin-bottom:1em; } .ops-closed, .ops-closed #share, .ops-closed #download, .ops-closed #view, .ops-closed #notify { @@ -1337,7 +1340,7 @@ li > #operations { width: 30px; height: 30px; border-radius: 0.25em; - margin-right: 1.5em; + margin-right: 1em; float : right; } @@ -1348,7 +1351,7 @@ li > #operations { width: 30px; height: 30px; border-radius: 0.25em; - margin-right: 1.5em; + margin-right: 1em; float : right; } @@ -1359,7 +1362,7 @@ li > #operations { width: 30px; height: 30px; border-radius: 0.25em; - margin-right: 1.5em; + margin-right: 1em; float : right; } @@ -1370,7 +1373,7 @@ li > #operations { width: 30px; height: 30px; border-radius: 0.25em; - margin-right: 1.5em; + margin-right: 1em; float : right; } From 10bc4093f54e657dff969e08693fbab3b6b2a6ae Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 23 Jan 2024 15:54:03 +0100 Subject: [PATCH 150/228] fix report --- .../pages/widgets/DeleteButton.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java index 517ceea35..ee509d84c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java @@ -22,7 +22,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -package org.silverpeas.mobile.client.apps.sharesbox.pages.widgets; +package org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; @@ -31,13 +31,13 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.sharesbox.events.app.DeleteSharesEvent; -import org.silverpeas.mobile.client.apps.sharesbox.pages.SharesBoxPage; -import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages; +import org.silverpeas.mobile.client.apps.notificationsbox.events.app.DeleteNotificationsEvent; +import org.silverpeas.mobile.client.apps.notificationsbox.pages.NotificationsBoxPage; +import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; import org.silverpeas.mobile.client.components.base.ActionsMenu; -import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; +import org.silverpeas.mobile.shared.dto.notifications.NotificationBoxDTO; import java.util.List; @@ -50,7 +50,7 @@ interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} private static DeleteButtonUiBinder uiBinder = GWT.create(DeleteButtonUiBinder.class); - private SharesBoxPage parentPage; + private NotificationsBoxPage parentPage; @UiField HTMLPanel container; @@ -58,19 +58,20 @@ interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} Anchor delete; @UiField(provided = true) - protected ShareMessages msg = null; + protected NotificationsMessages msg = null; public DeleteButton() { - msg = GWT.create(ShareMessages.class); + msg = GWT.create(NotificationsMessages.class); initWidget(uiBinder.createAndBindUi(this)); setId("delete"); } @UiHandler("delete") void delete(ClickEvent event) { - List<TicketDTO> selection = parentPage.getSelectedShares(); - DeleteSharesEvent deleteEvent = new DeleteSharesEvent(); + List<NotificationBoxDTO> selection = parentPage.getSelectedNotification(); + + DeleteNotificationsEvent deleteEvent = new DeleteNotificationsEvent(); deleteEvent.setSelection(selection); if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent); @@ -78,7 +79,7 @@ void delete(ClickEvent event) { ActionsMenu.close(getElement()); } - public void setParentPage(final SharesBoxPage parentPage) { + public void setParentPage(final NotificationsBoxPage parentPage) { this.parentPage = parentPage; } } \ No newline at end of file From a069f655d97dd718e924875089ff5affd94754cb Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 23 Jan 2024 17:38:20 +0100 Subject: [PATCH 151/228] burger menu reorganisation --- .../components/base/NavigationMenu.ui.xml | 5 ++++- .../org/silverpeas/mobile/public/spmobile.css | 21 ++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml index 051e8b3a5..dddcb14c0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml @@ -41,10 +41,13 @@ </div> <ul id="navmenu-panel"> - <li id="menu-home"><g:Anchor ui:field="home" styleName="ui-link" text="{msg.home}"/></li> <li id="menu-usercalendar"><g:Anchor ui:field="calendar" styleName="ui-link" text="{msg.usercalendar}"/></li> <li id="menu-notificationsbox"><g:Anchor ui:field="notifications" styleName="ui-link" text="{msg.notifications}"/></li> <li id="menu-sharesbox"><g:Anchor ui:field="shares" styleName="ui-link" text="{msg.shares}"/></li> + </ul> + + <ul id="actions-menu"> + <li id="menu-home"><g:Anchor ui:field="home" styleName="ui-link" text="{msg.home}"/></li> <li id="menu-parameter"><g:Anchor ui:field="config" styleName="ui-link" text="{msg.config}"/></li> <li id="menu-help"><g:Anchor ui:field="help" styleName="ui-link" text="{msg.help}"/></li> <li id="menu-logout"><g:Anchor ui:field="disconnect" styleName="ui-link" text="{msg.disconnect}"/></li> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 5de11bc56..4cee66172 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -690,19 +690,19 @@ html .ui-controlgroup-controls .ui-btn-up-c { height: 18px; } -#silverpeas-navmenu-panel #navmenu-panel { +#silverpeas-navmenu-panel #navmenu-panel, #silverpeas-navmenu-panel #actions-menu { border-top: 1px solid #d3d3d3; list-style-type: none; padding: 0; margin: 0; } -#silverpeas-navmenu-panel #navmenu-panel li { +#silverpeas-navmenu-panel #navmenu-panel li, #silverpeas-navmenu-panel #actions-menu li { padding: 0; margin: 0; } -#silverpeas-navmenu-panel #navmenu-panel li a { +#silverpeas-navmenu-panel #navmenu-panel li a, #silverpeas-navmenu-panel #actions-menu li a { text-decoration: none; color: #333333; display: block; @@ -712,6 +712,13 @@ html .ui-controlgroup-controls .ui-btn-up-c { margin-left: 0.5em; } +#actions-menu { + position: absolute; + bottom: 48px; + width: 100%; + border: 0; +} + #silverpeas-navmenu-panel #navmenu-panel li#menu-config a { background: transparent url('icons/settings.svg') no-repeat; } @@ -720,7 +727,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { background: transparent url('icons/tasks.svg') no-repeat; } -#silverpeas-navmenu-panel #navmenu-panel li#menu-help a { +#silverpeas-navmenu-panel #actions-menu li#menu-help a { background: transparent url('icons/help.svg') no-repeat; } @@ -732,16 +739,16 @@ html .ui-controlgroup-controls .ui-btn-up-c { background: transparent url('icons/share.svg') no-repeat; } -#silverpeas-navmenu-panel #navmenu-panel li#menu-parameter a { +#silverpeas-navmenu-panel #actions-menu li#menu-parameter a { background: transparent url('icons/settings.svg') no-repeat; } -#silverpeas-navmenu-panel #navmenu-panel li#menu-home a { +#silverpeas-navmenu-panel #actions-menu li#menu-home a { background: transparent url('icons/home.svg') no-repeat; } -#silverpeas-navmenu-panel #navmenu-panel li#menu-logout a { +#silverpeas-navmenu-panel #actions-menu li#menu-logout a { background: transparent url('icons/logout.svg') no-repeat; } From 433d78ea6e373b47fd16f294fbef30d0e934ff81 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 24 Jan 2024 16:52:51 +0100 Subject: [PATCH 152/228] contacts render improvements --- .../contacts/pages/widgets/ContactItem.java | 64 +++++++++---------- .../resources/ApplicationResources.java | 11 ++++ .../mobile/client/resources/call.svg | 1 + .../mobile/client/resources/sms.svg | 1 + .../mobile/public/icons/account.svg | 1 + .../mobile/public/icons/contacts.svg | 1 + .../silverpeas/mobile/public/icons/search.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 45 ++++++++----- 8 files changed, 75 insertions(+), 50 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/call.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sms.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/account.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/search.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java index f80da82c6..5e4cdb659 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/contacts/pages/widgets/ContactItem.java @@ -25,6 +25,8 @@ package org.silverpeas.mobile.client.apps.contacts.pages.widgets; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.SpanElement; import com.google.gwt.dom.client.Style; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; @@ -36,6 +38,7 @@ import com.google.gwt.user.client.ui.InlineHTML; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.contacts.resources.ContactsResources; +import org.silverpeas.mobile.client.common.network.NetworkHelper; import org.silverpeas.mobile.client.common.resources.ResourcesManager; import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.DetailUserDTO; @@ -86,40 +89,23 @@ public void setData(DetailUserDTO userData) { int nbTel = 0; if (userData.getPhoneNumber() != null && !userData.getPhoneNumber().isEmpty()) { - Anchor tel1 = new Anchor(); - tel1.setStyleName("tel-link"); - tel1.setText(userData.getPhoneNumber()); - tel1.setHref("tel:" + userData.getPhoneNumber()); - tel.add(tel1); - nbTel++; + createPhoneFragment(tel, userData.getPhoneNumber()); + nbTel++; } if (userData.getCellularPhoneNumber() != null && !userData.getCellularPhoneNumber().isEmpty()) { if (nbTel == 1) { tel.add(new InlineHTML(" | ")); } - Anchor tel2 = new Anchor(); - tel2.setStyleName("tel-link"); - tel2.setText(userData.getCellularPhoneNumber()); - tel2.setHref("tel:" + userData.getCellularPhoneNumber()); - tel.add(tel2); - - Anchor sms = new Anchor(); - sms.setHref("sms:" + userData.getCellularPhoneNumber()); - Image smsImg = new Image(resourcesContact.sms()); - sms.getElement().appendChild(smsImg.getElement()); - tel.add(sms); - + createPhoneFragment(tel, userData.getCellularPhoneNumber()); + createSmsFragment(tel, userData.getCellularPhoneNumber()); nbTel++; } if (userData.getFaxPhoneNumber() != null && !userData.getFaxPhoneNumber().isEmpty()) { if (nbTel == 2) { tel.add(new InlineHTML(" | ")); } - Anchor tel3 = new Anchor(); - tel3.setStyleName("tel-link"); - tel3.setText(userData.getFaxPhoneNumber()); - tel3.setHref("tel:" + userData.getFaxPhoneNumber()); - tel.add(tel3); + createPhoneFragment(tel, userData.getPhoneNumber()); + createPhoneFragment(tel, userData.getFaxPhoneNumber()); nbTel++; } if (nbTel == 0) { @@ -131,18 +117,8 @@ public void setData(DetailUserDTO userData) { if (value != null & !value.isEmpty()) { if (isPhoneNumber(value)) { HTMLPanel field = new HTMLPanel(""); - Anchor tel = new Anchor(); - tel.setStyleName("tel-link"); - tel.setText(value); - tel.setHref("tel:" + value); - field.add(tel); - - Anchor sms = new Anchor(); - sms.setHref("sms:" + value); - Image smsImg = new Image(resourcesContact.sms()); - sms.getElement().appendChild(smsImg.getElement()); - field.add(sms); - + createPhoneFragment(field, value); + createSmsFragment(field, value); container.add(field); } else { HTML field = new HTML(value); @@ -153,6 +129,24 @@ public void setData(DetailUserDTO userData) { } } + private void createPhoneFragment(HTMLPanel parent, String value) { + Anchor tel = new Anchor(); + tel.setStyleName("tel-link"); + tel.setHref("tel:" + value); + tel.getElement().setInnerHTML(resources.call().getText()); + SpanElement text = Document.get().createSpanElement(); + text.setInnerText(value); + tel.getElement().appendChild(text); + parent.add(tel); + } + private void createSmsFragment(HTMLPanel parent, String value) { + Anchor sms = new Anchor(); + sms.setStyleName("sms-link"); + sms.setHref("sms:" + value); + sms.getElement().setInnerHTML(resources.sms().getText()); + parent.add(sms); + } + private boolean isPhoneNumber(String value) { if (value == null) return false; value = value.replaceAll(" ", ""); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java index e1fae223f..e96e5bbdd 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java @@ -25,7 +25,9 @@ package org.silverpeas.mobile.client.resources; import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.DataResource; import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.resources.client.TextResource; /** * @author: svu @@ -40,4 +42,13 @@ public interface ApplicationResources extends ClientBundle { @Source("offline.png") ImageResource offline(); + + @Source("call.svg") + @DataResource.MimeType("image/svg+xml") + TextResource call(); + + @Source("sms.svg") + @DataResource.MimeType("image/svg+xml") + TextResource sms(); + } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/call.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/call.svg new file mode 100644 index 000000000..08df7f11e --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/call.svg @@ -0,0 +1 @@ +<svg height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.01 15.38c-1.23 0-2.42-.2-3.53-.56-.35-.12-.74-.03-1.01.24l-1.57 1.97c-2.83-1.35-5.48-3.9-6.89-6.83l1.95-1.66c.27-.28.35-.67.24-1.02-.37-1.11-.56-2.3-.56-3.53 0-.54-.45-.99-.99-.99H4.19C3.65 3 3 3.24 3 3.99 3 13.28 10.73 21 20.01 21c.71 0 .99-.63.99-1.18v-3.45c0-.54-.45-.99-.99-.99z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sms.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sms.svg new file mode 100644 index 000000000..c9f8ac0be --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sms.svg @@ -0,0 +1 @@ +<svg height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM9 11H7V9h2v2zm4 0h-2V9h2v2zm4 0h-2V9h2v2z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/account.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/account.svg new file mode 100644 index 000000000..c984876f5 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/account.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M3 5v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2H5c-1.11 0-2 .9-2 2zm12 4c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3zm-9 8c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1H6v-1z" fill="black"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts.svg new file mode 100644 index 000000000..3bd94fcdc --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z" fill="none"/><path d="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z" fill="back"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/search.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/search.svg new file mode 100644 index 000000000..7c2111eb7 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/search.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 4cee66172..e3455d904 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -256,8 +256,7 @@ legend, .ui-input-text input, .ui-input-search input { .ui-page-theme-a .ui-body-inherit.filter-contacts { background-color: #FFF; - background-image: url(packPictos.png); - background-position: 5px -577px; + background-image: url('icons/search.svg'); background-repeat: no-repeat; width: 92%; padding-left: 2em; @@ -1225,6 +1224,11 @@ audio::-webkit-media-controls-enclosure { text-decoration: underline; } +#add-comment { + margin-left: 1em; + margin-right: 1em; +} + #add-comment, .introduction { position: relative; @@ -1247,6 +1251,7 @@ audio::-webkit-media-controls-enclosure { #add-comment textarea.ui-input-text { font-size: 9pt; height: 7em; + border-radius: 10px; } #add-comment .btn-publicate { @@ -1260,7 +1265,7 @@ audio::-webkit-media-controls-enclosure { position: absolute; right: 0; bottom: 5px; - margin-right: 1em ; + margin-right: 0.5em ; } #add-comment .btn-publicate.inactif { @@ -1394,20 +1399,18 @@ li > #operations { font-style: italic; } -#btn-my-contacts > span, #btn-all-contacts > span { - background: transparent url(packPictos.png) 4px -241px no-repeat; +#btn-my-contacts > span, #btn-all-contactsext > span { + background: url('icons/contacts.svg') no-repeat; padding-left: 30px; display: block; - line-height: 0.8em; text-align: left; font-size: 0.8em; } -#btn-all-contactsext > span { - background: transparent url(packPictos.png) 4px -170px no-repeat; +#btn-all-contacts > span { + background: url('icons/account.svg') no-repeat; padding-left: 30px; display: block; - line-height: 0.8em; text-align: left; font-size: 0.8em; } @@ -1464,7 +1467,6 @@ li > #operations { top: 0.1em; right: 0.1em; bottom: 0.1em; - /*background: #7eb73a url(packPictos.png) 0.5em 0.5em no-repeat;*/ display: block; text-indent: -300em; width: 2em; @@ -1494,7 +1496,7 @@ li > #operations { width: 98%; padding-right: 1%; padding-left: 1%; - line-height: 2em; + line-height: 2.5em; background-color: #FFF; font-size: 80%; } @@ -1536,7 +1538,6 @@ input.filter-contacts { width: 24px; border: 1px solid #ccc; float: right; - /*margin-right: 1em;*/ } .list-contacts .user-name, @@ -1557,6 +1558,19 @@ input.filter-contacts { color: #ec8001; text-decoration: none; white-space: nowrap; + margin-right: 1em; +} + +.tel-link span { + margin-left: 1em; +} + +.tel-link svg { + fill:#ec8001; +} + +.sms-link svg { + fill:#ec8001; } /***** STATUT & ADD COMMENT***/ @@ -1782,11 +1796,12 @@ textarea.ui-input-text { } .searchButton { - width: 20px; - height: 17px; - background: transparent url(packPictos.png) bottom left no-repeat; + width: 24px; + height: 24px; + background: url('icons/search.svg') no-repeat; text-indent: -300em; display: inline-block; + position: absolute; } #menu-search { From 44aaa2dfe41709626137236615e3e8f07424ab09 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 25 Jan 2024 10:28:14 +0100 Subject: [PATCH 153/228] Fix #13956 --- .../org/silverpeas/mobile/server/services/ServiceDocuments.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java index 3bab5eaf3..d6d837dd8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java @@ -436,6 +436,7 @@ public PublicationDTO getPublication(@PathParam("id") String id, dto.setDescription(pub.getDescription()); dto.setUpdateDate(sdf.format(pub.getLastUpdateDate())); dto.setCreationDate(sdf.format(pub.getCreationDate())); + dto.setNotAllowedDownloads(new ArrayList<>()); if (type.equals(ContentsTypes.Publication.toString())) { try { From d606c08093ca3bf3e5cf038c9cd987fbc8381271 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 25 Jan 2024 14:53:40 +0100 Subject: [PATCH 154/228] Fix content display for publications --- .../apps/documents/pages/PublicationPage.java | 11 -------- .../common/PublicationContentHelper.java | 28 ++++--------------- 2 files changed, 6 insertions(+), 33 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index 1b2232e1f..5cc6e8ff2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -267,15 +267,4 @@ public static void showWebPageContent(String pubId, String appId, String title) private static void showPublicationContent(String pubId, String appId, String title) { PublicationContentHelper.showContent(pubId, appId, title); } - - @Override - public void setVisible(final boolean visible) { - super.setVisible(visible); - Element iframeC = content.getElementsByTagName("iframe").getItem(0); - if (iframeC != null) { - // need to re display - iframeC.removeFromParent(); - PublicationContentHelper.showContent(publication.getId(), publication.getInstanceId(), content); - } - } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java index b06bf7803..3fa1d487a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java @@ -78,28 +78,12 @@ public void onError(final Request request, final Throwable throwable) { public static void showContent(String pubId, String appId, Element basement) { final String url = UrlUtils.getServicesLocation() + "PublicationContent" + "?id=" + pubId + "&componentId=" + appId; IFrameElement iframeC = Document.get().createIFrameElement(); - try { - new RequestBuilder(RequestBuilder.GET, url).sendRequest(null, new RequestCallback() { - @Override - public void onResponseReceived(final Request request, final Response response) { - iframeC.setSrc("javascript:;"); - iframeC.getStyle().setBorderStyle(Style.BorderStyle.NONE); - iframeC.getStyle().setWidth(100, Style.Unit.PCT); - iframeC.getStyle().setOverflow(Style.Overflow.HIDDEN); - iframeC.setAttribute("onload", "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';}(this));"); - basement.appendChild(iframeC); - write(iframeC.getContentDocument(), response.getText()); - } - - @Override - public void onError(final Request request, final Throwable throwable) { - EventBus.getInstance().fireEvent(new ErrorEvent(throwable)); - } - }); - - } catch (RequestException e) { - EventBus.getInstance().fireEvent(new ErrorEvent(e)); - } + iframeC.setSrc(url); + iframeC.getStyle().setBorderStyle(Style.BorderStyle.NONE); + iframeC.getStyle().setWidth(100, Style.Unit.PCT); + iframeC.getStyle().setOverflow(Style.Overflow.HIDDEN); + iframeC.setAttribute("onload", "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';}(this));"); + basement.appendChild(iframeC); } private static native void write(Document doc, String newHTML) /*-{ From c2d0cb79f1b9d5bd35789d8c87c99a74d4efcb82 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 25 Jan 2024 17:22:32 +0100 Subject: [PATCH 155/228] Improve render classified --- .../silverpeas/mobile/mobileSettings.properties | 2 +- .../apps/classifieds/pages/ClassifiedsPage.ui.xml | 8 ++++---- .../org/silverpeas/mobile/public/components.css | 2 +- .../org/silverpeas/mobile/public/spmobile.css | 15 ++++++++++++--- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties index 6d6bfebfc..5e6857bc0 100644 --- a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties +++ b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties @@ -98,7 +98,7 @@ directory.display.tab.default=allcontacts avatar.updatable=true # size of users avatars -avatar.size=24x +avatar.size=32x # size of user avatar in main menu big.avatar.size=40x diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml index b7a27a9e1..b06a6165d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/classifieds/pages/ClassifiedsPage.ui.xml @@ -31,13 +31,13 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.classifieds.resources.ClassifiedsMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <div class="content-navigation"> + <div class="content-navigation filter-classifield"> <span class="ui-btn-text"><ui:text from="{msg.category}"/></span> - <g:ListBox ui:field="categories"/> + <g:ListBox ui:field="categories" styleName="filter-list"/> </div> - <div class="content-navigation"> + <div class="content-navigation filter-classifield"> <span class="ui-btn-text"><ui:text from="{msg.type}"/></span> - <g:ListBox ui:field="types"/> + <g:ListBox ui:field="types" styleName="filter-list"/> </div> <components:UnorderedList ui:field="classifieds" styleName="liste-annonces"/> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css index 005698838..0f423a3e0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css @@ -66,7 +66,7 @@ display: block; width: 100%; box-shadow: 0 2px 10px 0 rgba(0,0,0,0.3); - border-radius: 2em; + border-radius: 1px; height: 4px; background: #fff; transition: all .3s; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index e3455d904..a2c03e968 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -489,7 +489,6 @@ html .ui-controlgroup-controls .ui-btn-up-c { overflow: hidden; padding: 0; position: absolute; - right: 94px; top: 1px; height: 44px; } @@ -1535,7 +1534,7 @@ input.filter-contacts { .list-contacts .user-name img, .list-comments .user-name img, .list-notifications .user-name img { - width: 24px; + width: 32px; border: 1px solid #ccc; float: right; } @@ -1731,7 +1730,7 @@ textarea.ui-input-text { background: #FFF url(bg-input-password.png) 0 0 no-repeat; } -#page-login #DomainId { +#page-login #DomainId, .filter-list { width: 70vw; box-sizing: border-box; padding: 0.5em; @@ -2579,10 +2578,20 @@ a.popin-btn { margin:0.50em 0 ; } +.filter-classifield { + text-align: right; +} + +.filter-classifield span { + padding-right: 1em; +} + .liste-annonces div.thumbnail img{ margin:auto; max-height:125px; max-width:125px; + border-radius: 2px; + box-shadow: 0 0 1em 0 rgba(0, 0, 0, 0.2); } .classified_form { From 53391978484d0f74e7439b8ca4318aec32a51eec Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 25 Jan 2024 18:06:57 +0100 Subject: [PATCH 156/228] Fix some render --- .../mobile/client/apps/blog/pages/BlogPage.ui.xml | 2 +- .../mobile/client/common/PublicationContentHelper.java | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml index c49ab8996..f77f4e3c8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/blog/pages/BlogPage.ui.xml @@ -31,7 +31,7 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.blog.resources.BlogMessages' /> <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> - <div class="content-navigation"><g:ListBox ui:field="categories"/></div> + <div class="content-navigation"><g:ListBox ui:field="categories" styleName="filter-list"/></div> <components:UnorderedList ui:field="news" styleName="liste-billet"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java index 3fa1d487a..8cf65daf2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java @@ -79,10 +79,8 @@ public static void showContent(String pubId, String appId, Element basement) { final String url = UrlUtils.getServicesLocation() + "PublicationContent" + "?id=" + pubId + "&componentId=" + appId; IFrameElement iframeC = Document.get().createIFrameElement(); iframeC.setSrc(url); - iframeC.getStyle().setBorderStyle(Style.BorderStyle.NONE); - iframeC.getStyle().setWidth(100, Style.Unit.PCT); - iframeC.getStyle().setOverflow(Style.Overflow.HIDDEN); - iframeC.setAttribute("onload", "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';}(this));"); + String s = "border-style: none; width: 100%; height:50vh; overflow: hidden;"; + iframeC.setAttribute("style", s); basement.appendChild(iframeC); } From 5002881e74b7ad5a7127eada880f3a11eb8bbd76 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 26 Jan 2024 12:50:21 +0100 Subject: [PATCH 157/228] change events render --- .../client/apps/agenda/pages/EventPage.ui.xml | 2 +- .../mobile/public/icons/calendar_today.svg | 1 + .../mobile/public/icons/remove_circle.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 30 +++++++++++-------- 4 files changed, 20 insertions(+), 14 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar_today.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/remove_circle.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml index e81da70b1..e0251c6b9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml @@ -35,7 +35,7 @@ <p ui:field="description" class="publiDesc"></p> <div ui:field="reminder" class="rappel-event" style="display:none;"> - <g:ListBox ui:field="reminderDurations"/> + <g:ListBox ui:field="reminderDurations" styleName="filter-list"/> <div class="actions-rappel"> <g:Anchor ui:field="delete" styleName="delete"><ui:text from="{msg.delete}" /></g:Anchor> </div> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar_today.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar_today.svg new file mode 100644 index 000000000..5bbe6a941 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar_today.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/remove_circle.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/remove_circle.svg new file mode 100644 index 000000000..2a1ab5f24 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/remove_circle.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11H7v-2h10v2z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index a2c03e968..e0bf7cf14 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -383,9 +383,9 @@ html .ui-controlgroup-controls .ui-btn-up-c { display:block; width:16px; height:16px; - background-image: url(packImagesNavigation.png); - background-position:-28px -2174px; + background-image: url('icons/calendar_today.svg'); background-repeat: no-repeat; + background-size: contain; position:absolute; top:0; right:1.25em; @@ -1167,9 +1167,9 @@ audio::-webkit-media-controls-enclosure { } #event #participation .label { - background: #fff url(packImagesNavigation.png) 0.15em -1870px no-repeat; - padding-left: 1.5625em; - line-height: 1.15em; + background: #fff url('icons/peoples.svg') no-repeat; + padding-left: 2em; + line-height: 2em; padding-bottom: 0.5em; display: block; } @@ -1207,15 +1207,16 @@ audio::-webkit-media-controls-enclosure { #event .actions-rappel { display: inline-block; + vertical-align: middle; } #event .actions-rappel .delete { text-indent: -300em; display: inline-block; - width: 20px; - height: 20px; + width: 24px; + height: 24px; padding: 0 !important; - background: transparent url(packImagesNavigation.png) 0em -2054px no-repeat; + background: transparent url('icons/remove_circle.svg') no-repeat; } #comments .link-add-comment { @@ -2424,7 +2425,7 @@ a.popin-btn { } .ui-list-graduate > li { - background: #f4f4f4 url(packImagesNavigation.png) right -2104px no-repeat; + background: url('icons/expand_more.svg') right no-repeat; border-bottom: 1px solid #ddd; position: relative; } @@ -2435,13 +2436,16 @@ a.popin-btn { display: inline-block } +.graduate-time { + line-height: 2em; +} + .ui-list-graduate li .nb-event { position: absolute; - right: 1.5em; + right: 2em; top: 0.4em; - background: transparent url(packImagesNavigation.png) right -2176px no-repeat; - padding-right: 2em; - line-height: 14px; + background: transparent url('icons/calendar_today.svg') no-repeat right; + padding-right: 2.5em; } .ui-list-graduate li.open .nb-event { From 357085e6a8514b141ef4cd8d29fec174ab9df2d5 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 29 Jan 2024 16:58:24 +0100 Subject: [PATCH 158/228] change render group event --- .../mobile/client/apps/sharesbox/SharesBoxApp.java | 12 +++++++++++- .../java/org/silverpeas/mobile/public/spmobile.css | 13 ++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/SharesBoxApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/SharesBoxApp.java index dfd53842e..7c8f87b58 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/SharesBoxApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/SharesBoxApp.java @@ -25,6 +25,7 @@ package org.silverpeas.mobile.client.apps.sharesbox; import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Window; import org.fusesource.restygwt.client.Method; import org.silverpeas.mobile.client.apps.navigation.events.app.external.AbstractNavigationEvent; import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationAppInstanceChangedEvent; @@ -36,6 +37,7 @@ import org.silverpeas.mobile.client.apps.sharesbox.events.pages.SharesDeletedEvent; import org.silverpeas.mobile.client.apps.sharesbox.pages.SharesBoxPage; import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.ServicesLocator; import org.silverpeas.mobile.client.common.app.App; import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly; @@ -73,7 +75,7 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { @Override public void showContent(final NavigationShowContentEvent event) { - if (event.getContent().getType().equals(ContentsTypes.SharesBox.toString())) { + if (event.getContent().getType().equals(ContentsTypes. SharesBox.toString())) { MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<TicketDTO>>() { @Override public void attempt() { @@ -81,6 +83,14 @@ public void attempt() { ServicesLocator.getRestServiceTickets().getMyTickets("", this); } + @Override + public void onFailure(Method method, Throwable t) { + SharesBoxPage page = new SharesBoxPage(); + setMainPage(page); + page.show(); + Notification.activityStop(); + } + @Override public void onSuccess(Method method, List<TicketDTO> ticketDTOS) { super.onSuccess(method, ticketDTOS); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index e0bf7cf14..2dc8c3b81 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -2425,7 +2425,7 @@ a.popin-btn { } .ui-list-graduate > li { - background: url('icons/expand_more.svg') right no-repeat; + background: url('icons/expand_more.svg') top right no-repeat; border-bottom: 1px solid #ddd; position: relative; } @@ -2449,7 +2449,7 @@ a.popin-btn { } .ui-list-graduate li.open .nb-event { - display: none; + } .ui-list-graduate > li:nth-child(odd) { @@ -2457,12 +2457,12 @@ a.popin-btn { } .ui-list-graduate li.open { - background: #4c4c4c url(packImagesNavigation.png) right -2133px no-repeat; + background: url('icons/expand_less.svg') top right no-repeat; border: 0; } .ui-list-graduate li.open .label { - color: #FFF; + } .ui-list-graduate li ul { @@ -2470,8 +2470,7 @@ a.popin-btn { } .ui-list-graduate li.open ul { - background-color: #4c4c4c; - display: block; + } #list-events .open .ui-listview { @@ -2517,7 +2516,7 @@ a.popin-btn { margin-top: 0.5em; max-width: 80%; text-overflow: ellipsis; - height: 1em; + line-height: 1em; overflow: hidden; white-space: nowrap; } From 4dd54d428e95b4166629f3e26c6c514fbc17b19c Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 30 Jan 2024 11:21:12 +0100 Subject: [PATCH 159/228] enhance publication content display --- .../mobile/client/apps/documents/pages/PublicationPage.java | 2 +- .../mobile/client/common/PublicationContentHelper.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index 5cc6e8ff2..9aa155e3e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -124,7 +124,7 @@ interface PublicationPageUiBinder extends UiBinder<Widget, PublicationPage> {} public PublicationPage() { msg = GWT.create(DocumentsMessages.class); initWidget(uiBinder.createAndBindUi(this)); - supercontainer.getElement().setAttribute("style","height:100vh;"); + supercontainer.getElement().setAttribute("style","min-height:100vh;"); container.getElement().setId("publication"); attachments.getElement().setId("attachments"); linkedPublications.getElement().setId("linkedPublications"); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java index 8cf65daf2..045a64932 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java @@ -79,7 +79,8 @@ public static void showContent(String pubId, String appId, Element basement) { final String url = UrlUtils.getServicesLocation() + "PublicationContent" + "?id=" + pubId + "&componentId=" + appId; IFrameElement iframeC = Document.get().createIFrameElement(); iframeC.setSrc(url); - String s = "border-style: none; width: 100%; height:50vh; overflow: hidden;"; + iframeC.setAttribute("onload", "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';}(this));"); + String s = "border-style: none; width: 100%; overflow: hidden;"; iframeC.setAttribute("style", s); basement.appendChild(iframeC); } From 69ea2dfd2c2ba03b900ee4b428b724921a91f256 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 30 Jan 2024 11:28:37 +0100 Subject: [PATCH 160/228] simplify ui --- .../mobile/client/apps/documents/pages/PublicationPage.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index 9aa155e3e..6beb5f16f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -175,8 +175,10 @@ public void onLoadedPublication(PublicationLoadedEvent event) { if (Boolean.parseBoolean(ResourcesManager.getParam("content.display.embedded")) && publication.getContent()) { PublicationContentHelper.showContent(publication.getId(), publication.getInstanceId(), content); + contentLink.setVisible(false); + } else { + contentLink.setVisible(publication.getContent()); } - contentLink.setVisible(publication.getContent()); swipeRecognizer = new SwipeRecognizer(supercontainer); } From 65ab6de676b98f4aade906127730232ca1c88e1c Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 30 Jan 2024 12:57:26 +0100 Subject: [PATCH 161/228] Fix config refresh --- .../mobile/client/apps/config/pages/ConfigPage.java | 4 +++- .../client/apps/config/pages/ConfigPage.ui.xml | 5 +++++ .../client/components/homepage/HomePageContent.java | 4 ++++ .../java/org/silverpeas/mobile/public/spmobile.css | 12 ++++-------- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java index 791bf972e..80833e570 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java @@ -53,7 +53,7 @@ public class ConfigPage extends PageContent implements ConfigPagesEventHandler { @UiField CheckBox lastPublicationsDisplay, lastEventsDisplay; @UiField - CheckBox favoritesDisplay, shortCutsDisplay; + CheckBox favoritesDisplay, shortCutsDisplay, shortCutsToolsDisplay; private Config config; public ConfigPage() { initWidget(uiBinder.createAndBindUi(this)); @@ -84,6 +84,7 @@ public void onConfigLoaded(ConfigLoadedEvent event) { favoritesDisplay.setValue(config.isFavoritesDisplay()); lastEventsDisplay.setValue(config.isLastEventsDisplay()); shortCutsDisplay.setValue(config.isShortCutsDisplay()); + shortCutsToolsDisplay.setValue(config.isShortCutsToolsDisplay()); } private void save() { @@ -92,6 +93,7 @@ private void save() { config.setLastPublicationsDisplay(lastPublicationsDisplay.getValue()); config.setLastEventsDisplay(lastEventsDisplay.getValue()); config.setShortCutsDisplay(shortCutsDisplay.getValue()); + config.setShortCutsToolsDisplay(shortCutsToolsDisplay.getValue()); EventBus.getInstance().fireEvent(new UpdateConfigEvent(config)); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml index 8924a4fa0..91f03d3c5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml @@ -55,6 +55,11 @@ <g:CheckBox ui:field="shortCutsDisplay" text="Afficher les raccourcis"></g:CheckBox> </a> </li> + <li class="shortcutools"> + <a class="ui-btn"> + <g:CheckBox ui:field="shortCutsToolsDisplay" text="Afficher les outils"></g:CheckBox> + </a> + </li> </ul> </g:HTMLPanel> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java index 2aa5a5e5e..a53eaa78f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java @@ -27,6 +27,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.HTML; @@ -103,6 +104,9 @@ public void setConfig(final Config config) { news.setVisible(config.isNewsDisplay()); freeZoneSection.setVisible(config.isFreeZoneDisplay()); freeZoneThinSection.setVisible(config.isFreeZoneThinDisplay()); + shortCutsSection.setVisible(config.isShortCutsDisplay()); + lastEventsSection.setVisible(config.isLastEventsDisplay()); + shortCutsToolsSection.setVisible(config.isShortCutsToolsDisplay()); } public void setData(HomePageDTO data) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 2dc8c3b81..5b69e08e8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -2097,23 +2097,19 @@ form .forms .fields > li:nth-child(even) { } .config .actuality a { - background-image: url(packImagesNavigation.png); - background-position: right -1022px; - background-repeat: no-repeat; + } .config .publication a { - background-position: right -184px; + background:none; } .config .event a { - background-image: url(packImagesNavigation.png); - background-position: right -1393px; - background-repeat: no-repeat; + } .config .favoris a { - background: transparent url(packImagesNavigation.png) right -1182px no-repeat; + } .config li a { From 460855c152643fff31f73733694921141bbacd54 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 31 Jan 2024 12:41:52 +0100 Subject: [PATCH 162/228] Fix media upload --- .../mobile/client/apps/media/pages/MediaNavigationPage.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java index e11c7defd..c6bef3e54 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/MediaNavigationPage.java @@ -87,6 +87,7 @@ public void init(String instanceId, String rootAlbumId, RightDTO rights) { this.rootAlbumId = rootAlbumId; this.rights = rights; buttonImport.init(instanceId, rootAlbumId); + buttonImport.setId("import"); EventBus.getInstance().fireEvent(new MediasLoadMediaItemsEvent(instanceId, rootAlbumId)); } From df541f92afac820e3f2ca13a783f85924517f6c1 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 1 Feb 2024 17:48:03 +0100 Subject: [PATCH 163/228] Fix favorites --- .../mobile/client/apps/documents/DocumentsApp.java | 5 ----- .../mobile/client/apps/favorites/FavoritesApp.java | 8 +++++--- .../favorites/pages/widgets/AddToFavoritesButton.java | 3 +++ .../apps/favorites/resources/FavoritesMessages.java | 1 + .../favorites/resources/FavoritesMessages.properties | 1 + .../resources/FavoritesMessages_en.properties | 1 + .../resources/FavoritesMessages_fr.properties | 1 + .../mobile/client/apps/navigation/NavigationApp.java | 11 +++++++---- 8 files changed, 19 insertions(+), 12 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java index 5ad48dff1..2c5fc930d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java @@ -51,7 +51,6 @@ import org.silverpeas.mobile.client.common.mobil.MobilUtils; import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly; import org.silverpeas.mobile.client.components.IframePage; -import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.PopinInformation; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.BaseDTO; @@ -212,16 +211,12 @@ public void execute() { event.getContent().getType().equals(ContentsTypes.News.name()) || event.getContent().getType().equals(ContentsTypes.Attachment.name()) || event.getContent().getType().equals(ContentsTypes.Folder.name())) { - if (event.getContent().getInstanceId().startsWith("kmelia") || - event.getContent().getInstanceId().startsWith("quickinfo") || - event.getContent().getInstanceId().startsWith("blog")) { loadAppInstance(event.getContent(), new Command() { @Override public void execute() { startWithContent(event.getContent()); } }); - } } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java index 15a73d7b5..bfc2bc8e5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java @@ -25,7 +25,6 @@ package org.silverpeas.mobile.client.apps.favorites; import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.rpc.AsyncCallback; import org.fusesource.restygwt.client.Method; import org.silverpeas.mobile.client.apps.favorites.events.app.AbstractFavoritesAppEvent; import org.silverpeas.mobile.client.apps.favorites.events.app.AddFavoriteEvent; @@ -39,7 +38,6 @@ import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationEventHandler; import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationShowContentEvent; import org.silverpeas.mobile.client.common.EventBus; -import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.ServicesLocator; import org.silverpeas.mobile.client.common.app.App; import org.silverpeas.mobile.client.common.event.ErrorEvent; @@ -102,7 +100,11 @@ public void attempt() { super.attempt(); MyLinkDTO dto = new MyLinkDTO(); dto.setName(event.getDescription()); - dto.setUrl("/" + event.getObjectType() + "/" + event.getObjectId()); + if (event.getObjectType().equals(ContentsTypes.Folder.name())) { + dto.setUrl("/Topic/" + event.getObjectId() + "?ComponentId="+ event.getInstanceId()); + } else { + dto.setUrl("/" + event.getObjectType() + "/" + event.getObjectId()); + } dto.setVisible(true); dto.setPopup(false); dto.setDescription(event.getDescription()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java index 385a1ec29..b2a339141 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/AddToFavoritesButton.java @@ -34,6 +34,7 @@ import org.silverpeas.mobile.client.apps.favorites.events.app.AddFavoriteEvent; import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages; import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.components.Popin; import org.silverpeas.mobile.client.components.base.ActionItem; import org.silverpeas.mobile.client.components.base.ActionsMenu; @@ -77,6 +78,8 @@ void displayNotificationPage(ClickEvent event){ // hide menu ActionsMenu.close(getElement()); + Popin popin = new Popin(msg.favoriteAdded()); + popin.show(); } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java index 6ae2fe4a6..994ee4daa 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java @@ -28,5 +28,6 @@ public interface FavoritesMessages extends Messages { String addToFavoritesContent(); + String favoriteAdded(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties index c0196da5f..b8480eb24 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties @@ -23,3 +23,4 @@ # addToFavoritesContent=Ajouter en favoris +favoriteAdded=Favoris ajouté ! \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties index 3dbce1b1c..27dc8e7b3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties @@ -23,3 +23,4 @@ # addToFavoritesContent=Add to favorites +favoriteAdded=Favorite added ! \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties index c0196da5f..b8480eb24 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties @@ -23,3 +23,4 @@ # addToFavoritesContent=Ajouter en favoris +favoriteAdded=Favoris ajouté ! \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java index e8878068d..2c57117d6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java @@ -25,7 +25,6 @@ package org.silverpeas.mobile.client.apps.navigation; import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.Window; import org.fusesource.restygwt.client.Method; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.apps.navigation.events.app.AbstractNavigationAppEvent; @@ -106,11 +105,15 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { @Override public void showContent(final NavigationShowContentEvent event) { if (event.getContent().getType().equals(ContentsTypes.Space.name())) { + final String id; + if (event.getContent().getInstanceId() == null || event.getContent().getInstanceId().isEmpty()) { + id = event.getContent().getId(); + } else { + id = event.getContent().getInstanceId(); + } MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<SpaceDTO>() { @Override public void attempt() { - String id = event.getContent().getInstanceId(); - if (id == null || id.isEmpty()) id = event.getContent().getId(); ServicesLocator.getServiceNavigation().getSpace(id, this); } @Override @@ -119,7 +122,7 @@ public void onSuccess(Method method, SpaceDTO space) { ShortCutRouter.route(SpMobil.getUser(), space.getHomePageParameter(), "Component", null, null, null); } else { NavigationPage page = new NavigationPage(); - page.setRootSpaceId(event.getContent().getInstanceId()); + page.setRootSpaceId(id); page.show(); } } From 62f8bb75a83ec89435eab1663b1635136f07bee1 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 2 Feb 2024 11:58:06 +0100 Subject: [PATCH 164/228] embbeding apps icons --- .../apps/documents/pages/widgets/GedItem.java | 9 +- .../documents/pages/widgets/GedItem.ui.xml | 3 +- .../apps/media/pages/widgets/AlbumItem.java | 5 + .../apps/media/pages/widgets/AlbumItem.ui.xml | 1 + .../pages/widgets/NavigationItem.java | 24 ++++- .../pages/widgets/NavigationItem.ui.xml | 3 +- .../pages/NotificationSenderPage.java | 9 +- .../pages/NotificationSenderPage.ui.xml | 1 + .../resources/ApplicationResources.java | 82 +++++++++++++++- .../resources}/icons/apps/blog.svg | 0 .../resources}/icons/apps/book_online.svg | 0 .../resources}/icons/apps/calendar.svg | 2 +- .../resources}/icons/apps/classifieds.svg | 0 .../resources}/icons/apps/faq.svg | 0 .../resources}/icons/apps/form.svg | 0 .../client/resources/icons/apps/ged.svg | 1 + .../resources/icons/apps/ged}/folder.svg | 2 +- .../resources/icons/apps/ged}/publication.svg | 0 .../resources/icons/apps/ged}/trash.svg | 0 .../resources}/icons/apps/link.svg | 0 .../resources}/icons/apps/media_library.svg | 0 .../resources}/icons/apps/news.svg | 2 +- .../resources}/icons/apps/poll.svg | 0 .../resources}/icons/apps/quiz.svg | 0 .../resources}/icons/apps/webpage.svg | 0 .../resources}/icons/apps/workflow.svg | 0 .../client/resources/{ => icons}/avatar.png | Bin .../client/resources/{ => icons}/call.svg | 0 .../client/resources/{ => icons}/offline.png | Bin .../client/resources/{ => icons}/sms.svg | 0 .../org/silverpeas/mobile/public/spmobile.css | 91 +++++++----------- 31 files changed, 159 insertions(+), 76 deletions(-) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/blog.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/book_online.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/calendar.svg (96%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/classifieds.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/faq.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/form.svg (100%) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged.svg rename mobile-war/src/main/java/org/silverpeas/mobile/{public/icons/apps => client/resources/icons/apps/ged}/folder.svg (73%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public/icons => client/resources/icons/apps/ged}/publication.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public/icons => client/resources/icons/apps/ged}/trash.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/link.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/media_library.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/news.svg (95%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/poll.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/quiz.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/webpage.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/apps/workflow.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/client/resources/{ => icons}/avatar.png (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/client/resources/{ => icons}/call.svg (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/client/resources/{ => icons}/offline.png (100%) rename mobile-war/src/main/java/org/silverpeas/mobile/client/resources/{ => icons}/sms.svg (100%) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java index 13375de45..f66332b33 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java @@ -31,10 +31,12 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.InlineHTML; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemClickEvent; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.resources.ApplicationMessages; +import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.documents.PublicationDTO; import org.silverpeas.mobile.shared.dto.documents.TopicDTO; @@ -45,8 +47,9 @@ public class GedItem extends Composite { private PublicationDTO dataPublication; private static GedItemUiBinder uiBinder = GWT.create(GedItemUiBinder.class); @UiField Anchor link; + @UiField InlineHTML icon; protected ApplicationMessages msg = null; - + private ApplicationResources resources = GWT.create(ApplicationResources.class); interface GedItemUiBinder extends UiBinder<Widget, GedItem> { } @@ -62,14 +65,18 @@ public void setData(Object data) { dataTopic = (TopicDTO) data; if (dataTopic.getId().equals("1")) { setStyleName("trash"); + icon.setHTML(resources.trash().getText()); + link.setText(dataTopic.getName()); } else { setStyleName("folder-ged"); + icon.setHTML(resources.folder().getText()); } link.setText(dataTopic.getName() + " (" + dataTopic.getPubCount() + ")"); } else if (data instanceof PublicationDTO) { dataPublication = (PublicationDTO) data; link.setHTML(dataPublication.getName()); setStyleName("publication"); + icon.setHTML(resources.publication().getText()); if (dataPublication.getVignette() != null) { String style = "background-image:url("+dataPublication.getVignette(); style += ");background-position:5px 5px;background-size:20px 20px;"; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.ui.xml index ee58469a2..6759b89a0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.ui.xml @@ -25,8 +25,7 @@ <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> <g:HTMLPanel tag="li"> - + <g:InlineHTML ui:field="icon" styleName="icon-item"></g:InlineHTML> <g:Anchor ui:field="link"></g:Anchor> - </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.java index ab01703c1..80d323cf0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.java @@ -31,17 +31,21 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.InlineHTML; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.media.events.pages.navigation.MediaItemClickEvent; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.resources.ApplicationMessages; +import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.media.AlbumDTO; public class AlbumItem extends Composite { private AlbumDTO data; private static MediaItemUiBinder uiBinder = GWT.create(MediaItemUiBinder.class); + private ApplicationResources resources = GWT.create(ApplicationResources.class); @UiField Anchor link; + @UiField InlineHTML icon; protected ApplicationMessages msg = null; @@ -51,6 +55,7 @@ interface MediaItemUiBinder extends UiBinder<Widget, AlbumItem> { public AlbumItem() { initWidget(uiBinder.createAndBindUi(this)); msg = GWT.create(ApplicationMessages.class); + icon.setHTML(resources.mediaLib().getText()); } public void setData(AlbumDTO data) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.ui.xml index 73d9cb4d7..89fdce1e3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/media/pages/widgets/AlbumItem.ui.xml @@ -25,6 +25,7 @@ <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> <g:HTMLPanel tag="li" styleName="folder-galery"> + <g:InlineHTML ui:field="icon" styleName="icon-item"></g:InlineHTML> <g:Anchor ui:field="link" styleName="ui-btn ui-btn-icon-right ui-icon-carat-r"></g:Anchor> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java index 5a7f7b79c..2f20ad283 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java @@ -31,10 +31,12 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.InlineHTML; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.navigation.events.pages.ClickItemEvent; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.resources.ApplicationMessages; +import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; import org.silverpeas.mobile.shared.dto.navigation.Apps; import org.silverpeas.mobile.shared.dto.navigation.SilverpeasObjectDTO; @@ -44,9 +46,11 @@ public class NavigationItem extends Composite { private SilverpeasObjectDTO data; private static NavigationItemUiBinder uiBinder = GWT.create(NavigationItemUiBinder.class); + private ApplicationResources resources = GWT.create(ApplicationResources.class); @UiField Anchor link; - protected ApplicationMessages msg = null; + @UiField InlineHTML icon; + protected ApplicationMessages msg = null; interface NavigationItemUiBinder extends UiBinder<Widget, NavigationItem> { } @@ -66,33 +70,47 @@ public void setData(SilverpeasObjectDTO data) { } else { String type = ((ApplicationInstanceDTO) data).getType(); if (type.equalsIgnoreCase(Apps.kmelia.name())) { - setStyleName("folder-ged"); + setStyleName("app-ged"); + icon.setHTML(resources.ged().getText()); } else if (type.equalsIgnoreCase(Apps.gallery.name())) { - setStyleName("folder-galery"); + setStyleName("app-medialib"); + icon.setHTML(resources.mediaLib().getText()); } else if (type.equalsIgnoreCase(Apps.quickinfo.name())) { setStyleName("app-actuality"); + icon.setHTML(resources.news().getText()); } else if (type.equalsIgnoreCase(Apps.webPages.name())) { setStyleName("app-pageWeb"); + icon.setHTML(resources.webpage().getText()); } else if (type.equalsIgnoreCase(Apps.blog.name())) { setStyleName("app-blog"); + icon.setHTML(resources.blog().getText()); } else if (((ApplicationInstanceDTO) data).getWorkflow()) { setStyleName("app-workflow"); + icon.setHTML(resources.workflow().getText()); } else if (type.equalsIgnoreCase(Apps.hyperlink.name())) { setStyleName("app-link"); + icon.setHTML(resources.link().getText()); } else if (type.equalsIgnoreCase(Apps.almanach.name())) { setStyleName("app-almanach"); + icon.setHTML(resources.calendar().getText()); } else if (type.equalsIgnoreCase(Apps.formsOnline.name())) { setStyleName("app-formsOnline"); + icon.setHTML(resources.form().getText()); } else if (type.equalsIgnoreCase(Apps.classifieds.name())) { setStyleName("app-classifieds"); + icon.setHTML(resources.classifieds().getText()); } else if (type.equalsIgnoreCase(Apps.survey.name())) { setStyleName("app-survey"); + icon.setHTML(resources.quizz().getText()); } else if (type.equalsIgnoreCase(Apps.pollingStation.name())) { setStyleName("app-polling"); + icon.setHTML(resources.poll().getText()); } else if (type.equalsIgnoreCase(Apps.questionReply.name())) { setStyleName("app-faq"); + icon.setHTML(resources.faq().getText()); } else if (type.equalsIgnoreCase(Apps.resourcesManager.name())) { setStyleName("app-resourcesManager"); + icon.setHTML(resources.bookonline().getText()); } } link.setStyleName("ui-btn ui-btn-icon-right ui-icon-carat-r"); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.ui.xml index ee58469a2..1c98ed8d2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.ui.xml @@ -25,8 +25,7 @@ <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> <g:HTMLPanel tag="li"> - + <g:InlineHTML ui:field="icon" styleName="icon-app"></g:InlineHTML> <g:Anchor ui:field="link"></g:Anchor> - </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java index f82df83de..8d9f78d20 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java @@ -32,10 +32,7 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.HTMLPanel; -import com.google.gwt.user.client.ui.TextArea; -import com.google.gwt.user.client.ui.TextBox; +import com.google.gwt.user.client.ui.*; import org.silverpeas.mobile.client.apps.notifications.events.app.SendNotificationEvent; import org.silverpeas.mobile.client.apps.notifications.events.pages.AbstractNotificationPagesEvent; import org.silverpeas.mobile.client.apps.notifications.events.pages.NotificationPagesEventHandler; @@ -45,6 +42,7 @@ import org.silverpeas.mobile.client.common.app.View; import org.silverpeas.mobile.client.components.Popin; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.BaseDTO; import org.silverpeas.mobile.shared.dto.GroupDTO; import org.silverpeas.mobile.shared.dto.UserDTO; @@ -61,12 +59,14 @@ public class NotificationSenderPage extends PageContent implements View, Notific interface NotificationSenderPageUiBinder extends UiBinder<HTMLPanel, NotificationSenderPage> {} private static NotificationSenderPageUiBinder uiBinder = GWT.create(NotificationSenderPageUiBinder.class); + private ApplicationResources resources = GWT.create(ApplicationResources.class); @UiField protected HTMLPanel container; @UiField(provided = true) protected NotificationsMessages msg = null; @UiField protected Anchor modify, send; @UiField TextArea message; @UiField TextBox subject; + @UiField InlineHTML iconFile; List<BaseDTO> selection = new ArrayList<BaseDTO>(); @@ -78,6 +78,7 @@ public NotificationSenderPage() { container.getElement().setId("edit-notification"); message.getElement().setId("message"); subject.getElement().setId("subject"); + iconFile.setHTML(resources.publication().getText()); Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml index 24e686ad5..3835c6ded 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml @@ -33,6 +33,7 @@ <label for="subject"><ui:safehtml from="{msg.subject}"/></label> <div class="ui-input-text publication"> + <g:InlineHTML ui:field="iconFile" styleName="iconFile"/> <g:TextBox ui:field="subject"/> </div> <label for="subject"><ui:safehtml from="{msg.notifiedContacts}"/></label> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java index e96e5bbdd..7a043088f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java @@ -37,18 +37,92 @@ public interface ApplicationResources extends ClientBundle { @Source("application.css") ApplicationCSS css(); - @Source("avatar.png") + @Source("icons/avatar.png") ImageResource avatar(); - @Source("offline.png") + @Source("icons/offline.png") ImageResource offline(); - @Source("call.svg") + @Source("icons/call.svg") @DataResource.MimeType("image/svg+xml") TextResource call(); - @Source("sms.svg") + @Source("icons/sms.svg") @DataResource.MimeType("image/svg+xml") TextResource sms(); + + /** Applications icons **/ + + @Source("icons/apps/blog.svg") + @DataResource.MimeType("image/svg+xml") + TextResource blog(); + + @Source("icons/apps/news.svg") + @DataResource.MimeType("image/svg+xml") + TextResource news(); + + @Source("icons/apps/calendar.svg") + @DataResource.MimeType("image/svg+xml") + TextResource calendar(); + + @Source("icons/apps/webpage.svg") + @DataResource.MimeType("image/svg+xml") + TextResource webpage(); + + @Source("icons/apps/ged.svg") + @DataResource.MimeType("image/svg+xml") + TextResource ged(); + + @Source("icons/apps/media_library.svg") + @DataResource.MimeType("image/svg+xml") + TextResource mediaLib(); + + @Source("icons/apps/link.svg") + @DataResource.MimeType("image/svg+xml") + TextResource link(); + + @Source("icons/apps/classifieds.svg") + @DataResource.MimeType("image/svg+xml") + TextResource classifieds(); + + @Source("icons/apps/faq.svg") + @DataResource.MimeType("image/svg+xml") + TextResource faq(); + + @Source("icons/apps/form.svg") + @DataResource.MimeType("image/svg+xml") + TextResource form(); + + @Source("icons/apps/book_online.svg") + @DataResource.MimeType("image/svg+xml") + TextResource bookonline(); + + @Source("icons/apps/poll.svg") + @DataResource.MimeType("image/svg+xml") + TextResource poll(); + + @Source("icons/apps/quiz.svg") + @DataResource.MimeType("image/svg+xml") + TextResource quizz(); + + @Source("icons/apps/workflow.svg") + @DataResource.MimeType("image/svg+xml") + TextResource workflow(); + + /** Applications images ressources **/ + + @Source("icons/apps/ged/folder.svg") + @DataResource.MimeType("image/svg+xml") + TextResource folder(); + + @Source("icons/apps/ged/trash.svg") + @DataResource.MimeType("image/svg+xml") + TextResource trash(); + + @Source("icons/apps/ged/publication.svg") + @DataResource.MimeType("image/svg+xml") + TextResource publication(); + } + diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/blog.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/blog.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/blog.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/blog.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/book_online.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/book_online.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/book_online.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/book_online.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/calendar.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/calendar.svg similarity index 96% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/calendar.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/calendar.svg index bdce5c812..d628db86d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/calendar.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/calendar.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z" fill="#7eb73b"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/classifieds.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/classifieds.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/classifieds.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/classifieds.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/faq.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/faq.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/faq.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/faq.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/form.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/form.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/form.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/form.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged.svg new file mode 100644 index 000000000..72a671828 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/folder.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/folder.svg similarity index 73% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/folder.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/folder.svg index 5017b4816..72a671828 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/folder.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/folder.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" fill="#7eb73b"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/publication.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/publication.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/publication.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/publication.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/trash.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/trash.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/trash.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/ged/trash.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/link.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/link.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/link.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/link.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/media_library.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/media_library.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/media_library.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/media_library.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/news.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/news.svg similarity index 95% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/news.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/news.svg index 550afbdd9..e6ecbc14e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/news.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/news.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-280q17 0 28.5-11.5T320-320q0-17-11.5-28.5T280-360q-17 0-28.5 11.5T240-320q0 17 11.5 28.5T280-280Zm-40-160h80v-240h-80v240Zm200 160h280v-80H440v80Zm0-160h280v-80H440v80Zm0-160h280v-80H440v80ZM160-120q-33 0-56.5-23.5T80-200v-560q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v560q0 33-23.5 56.5T800-120H160Zm0-80h640v-560H160v560Zm0 0v-560 560Z" fill="#7eb73b"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-280q17 0 28.5-11.5T320-320q0-17-11.5-28.5T280-360q-17 0-28.5 11.5T240-320q0 17 11.5 28.5T280-280Zm-40-160h80v-240h-80v240Zm200 160h280v-80H440v80Zm0-160h280v-80H440v80Zm0-160h280v-80H440v80ZM160-120q-33 0-56.5-23.5T80-200v-560q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v560q0 33-23.5 56.5T800-120H160Zm0-80h640v-560H160v560Zm0 0v-560 560Z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/poll.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/poll.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/poll.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/poll.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/quiz.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/quiz.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/quiz.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/quiz.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/webpage.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/webpage.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/webpage.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/webpage.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/workflow.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/workflow.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/apps/workflow.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/apps/workflow.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/avatar.png b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/avatar.png similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/client/resources/avatar.png rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/avatar.png diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/call.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/call.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/client/resources/call.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/call.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/offline.png b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/offline.png similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/client/resources/offline.png rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/offline.png diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sms.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/sms.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/client/resources/sms.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/sms.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 5b69e08e8..e55b7aff5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -782,12 +782,16 @@ html .ui-controlgroup-controls .ui-btn-up-c { /***** NAVIGATION ****/ -.folder-ged a, .folder-galery a, .publication a, .media a, .trash a, .app-actuality a, +.icon-app, .icon-item { + position: absolute; + top: 0.5em; + left: 0.5em; + z-index: 2; +} + +.folder-ged a, .folder-galery a, .publication a, .media a, .trash a, .app-actuality a, .app-ged a, .app-medialib a, .publication.ui-input-text, .app-blog a, .app-pageWeb a, .app-workflow a, .app-link a, .app-almanach a, .app-formsOnline a, .app-classifieds a, .app-survey a, .app-faq a, .app-polling a, .app-resourcesManager a { - background-image: url(packImagesNavigation.png); - background-position: 0.5625em 0.5625em; - background-repeat: no-repeat; - padding-left: 2.5em + padding-left: 2.5em; } #actionsList:has(.add-task) { @@ -812,99 +816,71 @@ html .ui-controlgroup-controls .ui-btn-up-c { } .app-formsOnline a { - background: transparent url('icons/apps/form.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .app-almanach a { - background: transparent url('icons/apps/calendar.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .app-link a { - background: transparent url('icons/apps/link.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .app-actuality a { - background: transparent url('icons/apps/news.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .folder-ged a { - background: transparent url('icons/apps/folder.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + +} + +.app-ged a { + } .app-pageWeb a { - background: transparent url('icons/apps/webpage.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .app-blog a { - background: transparent url('icons/apps/blog.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .app-classifieds a { - background: transparent url('icons/apps/classifieds.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .app-survey a { - background: transparent url('icons/apps/quiz.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .app-polling a { - background: transparent url('icons/apps/poll.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .app-faq a { - background: transparent url('icons/apps/faq.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .app-workflow a { - background: transparent url('icons/apps/workflow.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .app-resourcesManager a { - background: transparent url('icons/apps/book_online.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .folder-galery a { - background: transparent url('icons/apps/media_library.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .publication a { - background: transparent url('icons/publication.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .trash a { - background: transparent url('icons/trash.svg') no-repeat; - background-position-y: center; - background-position-x: 0.5em; + } .media a { @@ -1491,6 +1467,10 @@ li > #operations { margin-bottom: 0; } +#edit-notification .iconFile { + position: absolute; +} + .filter-contacts, #edit-notification .ui-input-text.publication { width: 98%; @@ -1501,10 +1481,6 @@ li > #operations { font-size: 80%; } -#edit-notification .ui-input-text.publication { - background: url('icons/publication.svg') no-repeat #ffff; -} - .ui-controlgroup-horizontal .ui-controlgroup-controls > .ui-btn, .ui-controlgroup-horizontal .ui-controlgroup-controls li > .ui-btn, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-checkbox, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-radio, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-select { float: none; clear: inherit; @@ -2119,6 +2095,7 @@ form .forms .fields > li:nth-child(even) { .ui-listview.favoris a { background: transparent url('icons/star.svg') no-repeat; background-size: auto; + background-position-y: center; padding-left: 2em; } From 4f214a2780a6832bae0c474a82ca47cbfe348c00 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 2 Feb 2024 16:12:43 +0100 Subject: [PATCH 165/228] manage file permalink --- .../main/java/org/silverpeas/bridge/MobilFilter.java | 5 ++++- .../java/org/silverpeas/mobile/client/SpMobil.java | 7 ++++--- .../mobile/client/apps/documents/DocumentsApp.java | 4 +++- .../client/apps/documents/pages/PublicationPage.java | 1 - .../mobile/client/common/navigation/LinksManager.java | 10 +++++++++- .../client/components/attachments/Attachment.java | 3 +-- .../components/attachments/AttachmentsManager.java | 7 +++++++ 7 files changed, 28 insertions(+), 9 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java index ca5f85722..a982ae4bb 100644 --- a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java +++ b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java @@ -97,7 +97,6 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) final boolean isMobile = Boolean.TRUE.equals(mobileAlreadyDetected) || userAgent.contains("Android") || userAgent.contains("iPhone"); - session.setAttribute("isMobile", isMobile); final boolean tablet = session.getAttribute("tablet", Boolean.class, false); @@ -119,6 +118,10 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) String appId = pub.getInstanceId(); params = "?shortcutContentType=Publication&shortcutContentId=" + id + "&shortcutAppId=" + appId; + } else if (url.contains("/File/")) { + String id = url.substring(url.lastIndexOf("/") + 1); + String l = request.getParameter("ContentLanguage"); + params = "?shortcutContentType=Attachment&shortcutContentId=" + id + "&shortcutRole=" + l; } else if (url.contains("/Topic/")) { // sample : /silverpeas/Topic/6278?ComponentId=kmelia2431 String id = url.substring(url.lastIndexOf("/")+1); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index 2004d5b70..97d032de4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -283,10 +283,11 @@ public static void displayMainPage() { PageHistory.getInstance().clear(); PageHistory.getInstance().goTo(new HomePage()); - if ((shortcutAppId != null && shortcutContentType != null && shortcutContentId != null) || + if ((shortcutContentType != null && shortcutContentId != null) || + (shortcutAppId != null && shortcutContentType != null && shortcutContentId != null) || shortcutContributionId != null || - (shortcutContentType != null && (shortcutContentType.equals("Component") || shortcutContentType.equals("Space")) && - shortcutAppId != null)) { + (shortcutContentType != null && (shortcutContentType.equals("Component") || + shortcutContentType.equals("Space")) && shortcutAppId != null)) { ShortCutRouter.route(user, shortcutAppId, shortcutContentType, shortcutContentId, shortcutContributionId, shortcutRole); } else if (shortcutContentType != null && shortcutContentType.equalsIgnoreCase("Url") && shortcutAppId != null) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java index 2c5fc930d..014072ce2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java @@ -52,6 +52,7 @@ import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly; import org.silverpeas.mobile.client.components.IframePage; import org.silverpeas.mobile.client.components.PopinInformation; +import org.silverpeas.mobile.client.components.attachments.AttachmentsManager; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.BaseDTO; import org.silverpeas.mobile.shared.dto.ContentDTO; @@ -209,7 +210,6 @@ public void execute() { }); } else if (event.getContent().getType().equals(ContentsTypes.Publication.name()) || event.getContent().getType().equals(ContentsTypes.News.name()) || - event.getContent().getType().equals(ContentsTypes.Attachment.name()) || event.getContent().getType().equals(ContentsTypes.Folder.name())) { loadAppInstance(event.getContent(), new Command() { @Override @@ -217,6 +217,8 @@ public void execute() { startWithContent(event.getContent()); } }); + } else if (event.getContent().getType().equals(ContentsTypes.Attachment.name())) { + AttachmentsManager.viewDocument(event.getContent().getId(), event.getContent().getRole()); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index 6beb5f16f..f41157f3d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -34,7 +34,6 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.*; import org.silverpeas.mobile.client.apps.comments.pages.widgets.CommentsButton; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadAttachmentsEvent; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java index 5da0be052..3719cdaad 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/navigation/LinksManager.java @@ -67,10 +67,18 @@ public static void processLink(HyperLinkDTO hyperLinkDTO) { String url = hyperLinkDTO.getUrl(); if(sameContext(url)) { String shortcutContentType = ""; + String shortcutContentRole = null; String shortcutAppId = null; String shortcutContentId = url.substring(url.lastIndexOf("/") + 1); if (url.contains("/Publication/")) { shortcutContentType = ContentsTypes.Publication.name(); + } else if (url.contains("/File/")) { + shortcutContentType = ContentsTypes.Attachment.name(); + if (shortcutContentId.contains("?ContentLanguage")) { + String[] params = shortcutContentId.split("\\?"); + shortcutContentId = params[0]; + shortcutContentRole = params[1].replace("ContentLanguage=",""); + } } else if (url.contains("/Media/")) { shortcutContentType = ContentsTypes.Media.name(); } else if (url.contains("/Topic/")) { @@ -117,7 +125,7 @@ public static void processLink(HyperLinkDTO hyperLinkDTO) { } ShortCutRouter - .route(SpMobil.getUser(), shortcutAppId, shortcutContentType, shortcutContentId, null, null); + .route(SpMobil.getUser(), shortcutAppId, shortcutContentType, shortcutContentId, null, shortcutContentRole); return; } openExternalLink(url, hyperLinkDTO.getOpenNewWindow(), hyperLinkDTO.getInternalLink()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java index 57de0f37e..f230e889e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java @@ -188,8 +188,7 @@ private void toogleOperations() { } private void viewDocument() { - IframePage page = new IframePage("/silverpeas/services/media/viewer/embed/pdf?documentId="+data.getId()+"&documentType=attachment&language="+data.getLang()+"&embedPlayer=true"); - page.show(); + AttachmentsManager.viewDocument(data.getId(), data.getLang()); } @UiHandler("share") diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/AttachmentsManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/AttachmentsManager.java index ab5a9d7eb..6cf2c5646 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/AttachmentsManager.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/AttachmentsManager.java @@ -32,12 +32,19 @@ import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.mobil.MobilUtils; import org.silverpeas.mobile.client.common.navigation.UrlUtils; +import org.silverpeas.mobile.client.components.IframePage; /** * @author svu */ public class AttachmentsManager { + public static void viewDocument(String id, String lang) { + IframePage page = new IframePage("/silverpeas/services/media/viewer/embed/pdf?documentId=" + id + "" + + "&documentType=attachment&language=" + lang + "&embedPlayer=true"); + page.show(); + } + public static void generateLink(String id, String instanceId, String lang, String title, Anchor link) { try { String url = UrlUtils.getAttachedFileLocation(); From 923ce0dc68e7da86c324e6fe0a9e84ecf36600ab Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 2 Feb 2024 16:28:45 +0100 Subject: [PATCH 166/228] render share improve --- .../mobile/client/apps/documents/pages/SharingPage.ui.xml | 4 ++-- .../src/main/java/org/silverpeas/mobile/public/spmobile.css | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/SharingPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/SharingPage.ui.xml index 3800a0584..64739b79e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/SharingPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/SharingPage.ui.xml @@ -31,8 +31,8 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages'/> <g:HTMLPanel ui:field="container" styleName="ui-content ui-body-a"> - <label id="validityLabel" style="label"><ui:safehtml from="{msg.validityLabel}"/></label> - <g:ListBox ui:field="validity"></g:ListBox> + <label id="validityLabel" class="field-label"><ui:safehtml from="{msg.validityLabel}"/></label> + <g:ListBox ui:field="validity" styleName="filter-list"></g:ListBox> <div id="endValidityLabel"><ui:safehtml from="{msg.endValidityLabel}"/></div> <g:TextBox ui:field="endValidity" visible="false"></g:TextBox> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index e55b7aff5..8c1aaecb4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -1717,6 +1717,10 @@ textarea.ui-input-text { box-shadow: 0 0 1em 0 rgba(0, 0, 0, 0.2); } +.field-label { + padding-right: 1em; +} + #page-login #password-visibility { margin-bottom: 1.5em; } From e1a23c73c133d960b11593776640baa30b60cba7 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 2 Feb 2024 18:29:19 +0100 Subject: [PATCH 167/228] enhance notifications ui --- .../client/apps/agenda/pages/EventPage.java | 10 ++++++---- .../client/apps/agenda/pages/EventPage.ui.xml | 4 +++- .../apps/agenda/resources/AgendaMessages.java | 2 ++ .../agenda/resources/AgendaMessages.properties | 2 +- .../resources/AgendaMessages_en.properties | 1 + .../resources/AgendaMessages_fr.properties | 1 + .../pages/NotificationSenderPage.java | 16 ++++++---------- .../pages/NotificationSenderPage.ui.xml | 6 ++---- .../client/components/base/ActionsMenu.java | 6 ++++-- .../userselection/widgets/UserGroupItem.java | 6 +++++- .../client/resources/ApplicationResources.java | 4 ++++ .../resources}/icons/peoples.svg | 0 .../org/silverpeas/mobile/public/spmobile.css | 17 +++++++++++------ .../server/services/ServiceNotifications.java | 9 +++------ .../server/services/helpers/UserHelper.java | 4 +++- .../silverpeas/mobile/shared/dto/GroupDTO.java | 7 +++++++ 16 files changed, 59 insertions(+), 36 deletions(-) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/peoples.svg (100%) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java index dae0f0602..1620de6ba 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.java @@ -39,10 +39,7 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.HTMLPanel; -import com.google.gwt.user.client.ui.ListBox; -import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.user.client.ui.*; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.apps.agenda.events.app.AttachmentsLoadEvent; import org.silverpeas.mobile.client.apps.agenda.events.app.ReminderCreateEvent; @@ -70,6 +67,7 @@ import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.attachments.Attachment; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventAttendeeDTO; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventAttributeDTO; @@ -89,6 +87,7 @@ */ public class EventPage extends PageContent implements EventPagesEventHandler { private static EventPageUiBinder uiBinder = GWT.create(EventPageUiBinder.class); + private ApplicationResources resources = GWT.create(ApplicationResources.class); @UiField(provided = true) protected AgendaMessages msg = null; @@ -113,6 +112,8 @@ public class EventPage extends PageContent implements EventPagesEventHandler { @UiField UnorderedList attachments, attendees; + @UiField + InlineHTML iconParticipants; private CalendarEventDTO event; private CalendarDTO calendar; private ReminderDTO reminderDTO; @@ -140,6 +141,7 @@ public EventPage() { container.getElement().setId("event"); dateEvent.setId("date-event"); attachments.setId("attachments"); + iconParticipants.setHTML(resources.peoples().getText()); EventBus.getInstance().addHandler(AbstractEventPagesEvent.TYPE, this); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml index e0251c6b9..dba972530 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EventPage.ui.xml @@ -58,7 +58,9 @@ <components:UnorderedList ui:field="attachments"/> - <div id="participation" class=" elts-pub "> <span class="label">Participants :</span> + <div id="participation" class=" elts-pub "> + <g:InlineHTML ui:field="iconParticipants" styleName="icon-participation"/> + <span class="label"><ui:text from="{msg.participants}" /></span> <components:UnorderedList ui:field="attendees"/> </div> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java index 4df42e804..d4eccf8d5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java @@ -62,6 +62,8 @@ public interface AgendaMessages extends Messages { String addReminder(); String acceptParticipation(); + + String participants(); String rejectParticipation(); String tentativeParticipation(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties index 390822a9b..b50db1a4f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties @@ -58,7 +58,7 @@ addReminder=Ajouter rappel acceptParticipation=Participer rejectParticipation=Ne pas participer tentativeParticipation=Participer peut être - +participants=Participants : weekFilter=Semaine mouthFilter=Mois diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties index d32cc9a11..038d1d63f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties @@ -58,6 +58,7 @@ addReminder=Add reminder acceptParticipation=Join in rejectParticipation=Not join in tentativeParticipation=Join in maybe +participants=Participants : weekFilter=Week mouthFilter=Mouth diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties index 9b82b26c5..b50db1a4f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties @@ -58,6 +58,7 @@ addReminder=Ajouter rappel acceptParticipation=Participer rejectParticipation=Ne pas participer tentativeParticipation=Participer peut être +participants=Participants : weekFilter=Semaine mouthFilter=Mois diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java index 8d9f78d20..2fd00cac4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.java @@ -63,10 +63,11 @@ interface NotificationSenderPageUiBinder extends UiBinder<HTMLPanel, Notificatio @UiField protected HTMLPanel container; @UiField(provided = true) protected NotificationsMessages msg = null; - @UiField protected Anchor modify, send; + @UiField protected Anchor send; @UiField TextArea message; @UiField TextBox subject; - @UiField InlineHTML iconFile; + @UiField InlineHTML iconFile, iconSelection; + @UiField HTML destinataires; List<BaseDTO> selection = new ArrayList<BaseDTO>(); @@ -84,7 +85,7 @@ public NotificationSenderPage() { @Override public void execute() { - Element destinataires = Document.get().getElementById("destinataires"); + //Element destinataires = Document.get().getElementById("destinataires"); String dest = ""; @@ -98,8 +99,8 @@ public void execute() { dest = dest.substring(0, dest.length() - 2); dest += "<div id=\"nb-user-sectionne\" class=\"nb-user-sectionne\">"+"(" + selection.size() + ")"+"</div>"; - destinataires.setInnerHTML(dest); - + destinataires.setHTML(dest); + iconSelection.setHTML(resources.peoples().getText()); subject.setText(getTitle()); } } @@ -110,11 +111,6 @@ public void setSelection(List<BaseDTO> selection) { this.selection = selection; } - @UiHandler("modify") - protected void modify(ClickEvent event) { - back(); - } - @UiHandler("send") protected void sendNotification(ClickEvent event) { NotificationDTO notification = new NotificationDTO(message.getText()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml index 3835c6ded..9c2e1a3ee 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notifications/pages/NotificationSenderPage.ui.xml @@ -38,9 +38,8 @@ </div> <label for="subject"><ui:safehtml from="{msg.notifiedContacts}"/></label> <div id="destinataires" class="ui-input-text destinataires"> - <g:Anchor ui:field="modify" styleName="btn-modif"> - <ui:safehtml from="{msg.modify}"/> - </g:Anchor> + <g:InlineHTML ui:field="iconSelection"/> + <g:HTML ui:field="destinataires" /> </div> <label for="message"><ui:safehtml from="{msg.message}"/></label> <div id="champs-message"> @@ -49,7 +48,6 @@ </div> <div class=" ui-controlgroup ui-controlgroup-horizontal" > <div class="ui-controlgroup-controls "> - <g:Anchor ui:field="send" styleName="btn-validate ui-link"> <span class="ui-btn-text"><ui:safehtml from="{msg.send}"/></span> </g:Anchor> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java index 11bac95d2..91aed772c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java @@ -75,8 +75,10 @@ protected void showActions(ClickEvent event) { } public static void close(Element action) { - action.getParentElement().removeClassName("open-qvf-menu"); - action.getParentElement().addClassName("closed-qvf-menu"); + if (action.getParentElement() != null) { + action.getParentElement().removeClassName("open-qvf-menu"); + action.getParentElement().addClassName("closed-qvf-menu"); + } } public void close() { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/widgets/UserGroupItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/widgets/UserGroupItem.java index 971c376e7..85101c4af 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/widgets/UserGroupItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/widgets/UserGroupItem.java @@ -94,7 +94,11 @@ public void setData(BaseDTO data) { } else if (data instanceof GroupDTO) { content.setStylePrimaryName("group-name"); GroupDTO dataGroup = (GroupDTO) data; - content.add(new HTML(dataGroup.getName())); + HTML icon = new HTML(resources.peoples().getText()); + icon.setStylePrimaryName("icon-group"); + content.add(icon); + content.add(new HTML(dataGroup.getName() + " (" + dataGroup.getNbMembers() + ")")); + mail.setVisible(false); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java index 7a043088f..d8b1fe97f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java @@ -51,6 +51,10 @@ public interface ApplicationResources extends ClientBundle { @DataResource.MimeType("image/svg+xml") TextResource sms(); + @Source("icons/peoples.svg") + @DataResource.MimeType("image/svg+xml") + TextResource peoples(); + /** Applications icons **/ diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/peoples.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/peoples.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/peoples.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/peoples.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 8c1aaecb4..9f13057ca 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -1142,12 +1142,14 @@ audio::-webkit-media-controls-enclosure { line-height: 1.25em; } +.icon-participation { + position: absolute; +} + #event #participation .label { - background: #fff url('icons/peoples.svg') no-repeat; - padding-left: 2em; line-height: 2em; padding-bottom: 0.5em; - display: block; + padding-left: 2em; } #event #participation ul { @@ -1417,8 +1419,6 @@ li > #operations { } #edit-notification .ui-input-text.destinataires { - background: #FFF url('icons/peoples.svg') no-repeat; - padding-left: 4em; line-height: 1.4em; position: relative; color: #000; @@ -1432,7 +1432,7 @@ li > #operations { #edit-notification .ui-input-text.destinataires .nb-user-sectionne { position: absolute; - top: 1em; + top: 0.5em; left: 1.6em; font-size: 1.4em; color: #333; @@ -1516,6 +1516,11 @@ input.filter-contacts { float: right; } +.icon-group svg { + float: right; + width: 32px; +} + .list-contacts .user-name, .list-comments .user-name, .list-notifications .user-name { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java index 83347a6f7..30e8ee7b1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java @@ -56,6 +56,7 @@ import org.silverpeas.core.web.rs.UserPrivilegeValidation; import org.silverpeas.core.web.rs.annotation.Authorized; import org.silverpeas.mobile.server.helpers.DataURLHelper; +import org.silverpeas.mobile.server.services.helpers.UserHelper; import org.silverpeas.mobile.shared.StreamingList; import org.silverpeas.mobile.shared.dto.BaseDTO; import org.silverpeas.mobile.shared.dto.GroupDTO; @@ -183,9 +184,7 @@ public List<BaseDTO> getAllowedUsersAndGroups(@PathParam("componentId") String c users.add(populate(user)); } for (GroupDetail group : Administration.get().getAllGroups()) { - GroupDTO g = new GroupDTO(); - g.setId(group.getId()); - g.setName(group.getName()); + GroupDTO g =UserHelper.getInstance().populateGroupDTO(group); groups.add(g); } } else { @@ -223,9 +222,7 @@ public List<BaseDTO> getAllowedUsersAndGroups(@PathParam("componentId") String c for (String groupId : profile.getAllGroups()) { if (!isGroupPresent(groups, groupId)) { Group group = organizationController.getGroup(groupId); - GroupDTO g = new GroupDTO(); - g.setId(group.getId()); - g.setName(group.getName()); + GroupDTO g = UserHelper.getInstance().populateGroupDTO(group); groups.add(g); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java index a0e2d6b6b..84effe6f7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java @@ -25,6 +25,7 @@ package org.silverpeas.mobile.server.services.helpers; import org.silverpeas.core.admin.service.Administration; +import org.silverpeas.core.admin.user.model.Group; import org.silverpeas.core.admin.user.model.GroupDetail; import org.silverpeas.core.admin.user.model.UserDetail; import org.silverpeas.core.notification.NotificationException; @@ -104,10 +105,11 @@ public UserDTO populateUserDTO(UserDetail user) { return dto; } - public GroupDTO populateGroupDTO(GroupDetail group) { + public GroupDTO populateGroupDTO(Group group) { GroupDTO dto = new GroupDTO(); dto.setId(group.getId()); dto.setName(group.getName()); + dto.setNbMembers(group.getNbUsers()); return dto; } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/GroupDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/GroupDTO.java index 73a976624..75d97496f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/GroupDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/GroupDTO.java @@ -33,7 +33,14 @@ public class GroupDTO extends BaseDTO implements Serializable{ private static final long serialVersionUID = 5388415881024885835L; private String name; + private int nbMembers; + public int getNbMembers() { + return nbMembers; + } + public void setNbMembers(int nbMembers) { + this.nbMembers = nbMembers; + } public String getName() { return name; } From 114e4097264e548cf832ed0a41ca27b38c0f025c Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 5 Feb 2024 17:52:26 +0100 Subject: [PATCH 168/228] Feature #13977 --- .../org/silverpeas/mobile/client/SpMobil.java | 20 +++++++++++++ .../apps/navigation/pages/NavigationPage.java | 1 + .../components/base/NavigationMenu.java | 27 ++++++++++++++++++ .../components/base/NavigationMenu.ui.xml | 6 +++- .../mobile/client/components/base/Page.java | 12 ++++++++ .../mobile/client/pages/main/HomePage.java | 1 + .../client/resources/ApplicationMessages.java | 5 +++- .../ApplicationMessages_en.properties | 1 + .../ApplicationMessages_fr.properties | 1 + .../org/silverpeas/mobile/public/spmobile.css | 18 ++++++++++++ .../server/services/ServiceNavigation.java | 28 ++++++++++++++++++- .../services/rest/ServiceNavigation.java | 5 ++++ 12 files changed, 122 insertions(+), 3 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index 97d032de4..918205ae8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -97,6 +97,8 @@ import org.silverpeas.mobile.shared.dto.authentication.UserProfileDTO; import org.silverpeas.mobile.shared.dto.configuration.Config; import org.silverpeas.mobile.shared.dto.configuration.IConfig; +import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; +import org.silverpeas.mobile.shared.dto.navigation.SpaceDTO; import org.silverpeas.mobile.shared.dto.search.ResultDTO; import org.silverpeas.mobile.shared.exceptions.AuthenticationException; @@ -138,6 +140,7 @@ public static UserProfileDTO getUserProfile() { public static void setUser(final DetailUserDTO user) { SpMobil.user = user; + displayPersonnalApps(); } @@ -316,6 +319,23 @@ public void onSuccess(final Method method, final HomePageDTO result) { } } + private static void displayPersonnalApps () { + if (getUser() != null && !getMainPage().isPersonalAppsInitialized()) { + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<ApplicationInstanceDTO>>() { + @Override + public void attempt() { + ServicesLocator.getServiceNavigation().getPersonnalSpaceContent(getUser().getId(), this); + } + + @Override + public void onSuccess(Method method, List<ApplicationInstanceDTO> applicationInstanceDTOS) { + getMainPage().setPersonalApps(applicationInstanceDTOS); + } + }; + action.attempt(); + } + } + public static void displayTermsOfServicePage() { RootPanel.get().clear(); RootPanel.get().add(getMainPage()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java index 95275f6be..dd5e8a69d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/NavigationPage.java @@ -106,6 +106,7 @@ public void stop() { @Override public void clickItem(ClickItemEvent event) { if (isVisible()) { + SpMobil.getMainPage().closeMenu(); if (event.getData() instanceof SpaceDTO) { SpaceDTO space = (SpaceDTO) event.getData(); if (space.getHomePageType() == HomePages.SILVERPEAS.getValue() || diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java index fca5b1943..11d5affaa 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java @@ -47,6 +47,7 @@ import org.silverpeas.mobile.client.apps.navigation.events.app.external .NavigationAppInstanceChangedEvent; import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationShowContentEvent; +import org.silverpeas.mobile.client.apps.navigation.pages.widgets.NavigationItem; import org.silverpeas.mobile.client.apps.profile.ProfileApp; import org.silverpeas.mobile.client.apps.profile.events.ProfileEvents; import org.silverpeas.mobile.client.common.AuthentificationManager; @@ -54,6 +55,7 @@ import org.silverpeas.mobile.client.common.app.App; import org.silverpeas.mobile.client.common.navigation.PageHistory; import org.silverpeas.mobile.client.common.resources.ResourcesManager; +import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.events.page.AbstractPageEvent; import org.silverpeas.mobile.client.components.base.events.page.DataLoadedEvent; import org.silverpeas.mobile.client.components.base.events.page.LoadingDataFinishEvent; @@ -70,6 +72,8 @@ import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; import org.silverpeas.mobile.shared.dto.navigation.Apps; +import java.util.List; + public class NavigationMenu extends Composite implements PageEventHandler { private static NavigationMenuUiBinder uiBinder = GWT.create(NavigationMenuUiBinder.class); @@ -82,8 +86,16 @@ public class NavigationMenu extends Composite implements PageEventHandler { @UiField(provided = true) protected ApplicationMessages msg = null; + @UiField UnorderedList listApplications; + + private boolean personalAppsInitialized = false; + private ApplicationResources resources = GWT.create(ApplicationResources.class); + public boolean isPersonalAppsInitialized() { + return personalAppsInitialized; + } + interface NavigationMenuUiBinder extends UiBinder<Widget, NavigationMenu> { } @@ -91,6 +103,7 @@ public NavigationMenu() { msg = GWT.create(ApplicationMessages.class); initWidget(uiBinder.createAndBindUi(this)); container.getElement().setId("silverpeas-navmenu-panel"); + listApplications.getElement().setId("personals-apps"); container.getElement().getStyle().setHeight(Window.getClientHeight(), Unit.PX); user.getElement().setId("user"); String url = ResourcesManager.getParam("help.url"); @@ -106,6 +119,20 @@ public NavigationMenu() { EventBus.getInstance().addHandler(AbstractPageEvent.TYPE, this); } + public void setPersonalApps(List<ApplicationInstanceDTO> applicationInstanceDTOS) { + listApplications.clear(); + for (ApplicationInstanceDTO app : applicationInstanceDTOS) { + + if (app.getType().equals(Apps.kmelia.name())) { + app.setLabel(msg.myDocuments()); + } + NavigationItem item = new NavigationItem(); + item.setData(app); + listApplications.add(item); + } + personalAppsInitialized = true; + } + @Override public void receiveEvent(PageEvent event) { if (event.getSender() instanceof ProfileApp && event.getName().equals(ProfileEvents.POSTED.toString())) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml index dddcb14c0..3c35704ba 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml @@ -23,7 +23,9 @@ --> <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:w="urn:import:org.silverpeas.mobile.client.components.base.widgets"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" + xmlns:components="urn:import:org.silverpeas.mobile.client.components" + xmlns:w="urn:import:org.silverpeas.mobile.client.components.base.widgets"> <ui:with field='msg' type='org.silverpeas.mobile.client.resources.ApplicationMessages'/> @@ -46,6 +48,8 @@ <li id="menu-sharesbox"><g:Anchor ui:field="shares" styleName="ui-link" text="{msg.shares}"/></li> </ul> + <components:UnorderedList ui:field="listApplications" /> + <ul id="actions-menu"> <li id="menu-home"><g:Anchor ui:field="home" styleName="ui-link" text="{msg.home}"/></li> <li id="menu-parameter"><g:Anchor ui:field="config" styleName="ui-link" text="{msg.config}"/></li> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java index 350866f50..166421d35 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/Page.java @@ -42,10 +42,14 @@ import org.silverpeas.mobile.client.components.homepage.HomePageNewsSlider; import org.silverpeas.mobile.client.pages.main.HomePage; import org.silverpeas.mobile.shared.dto.DetailUserDTO; +import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; + +import java.util.List; public class Page extends Composite implements Window.ScrollHandler { private static PageUiBinder uiBinder = GWT.create(PageUiBinder.class); + interface PageUiBinder extends UiBinder<Widget, Page> { } @@ -151,4 +155,12 @@ public void hideOfflineIndicator() { header.hideOfflineIndicator(); } + public void setPersonalApps(List<ApplicationInstanceDTO> applicationInstanceDTOS) { + menu.setPersonalApps(applicationInstanceDTOS); + } + + public boolean isPersonalAppsInitialized() { + return menu.isPersonalAppsInitialized(); + } + } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/main/HomePage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/main/HomePage.java index be4370d62..d45617c8a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/main/HomePage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/main/HomePage.java @@ -92,6 +92,7 @@ public HomePageContent getContent() { @Override public void clickItem(final ClickItemEvent event) { if (isVisible()) { + SpMobil.getMainPage().closeMenu(); if (event.getData() instanceof SpaceDTO) { SpaceDTO space = (SpaceDTO) event.getData(); if (space.getHomePageType() == HomePages.SILVERPEAS.getValue() || diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java index 04109afb8..362e7e880 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java @@ -99,7 +99,10 @@ public interface ApplicationMessages extends Messages { @DefaultMessage("Espace personnel") String personalSpace(); - @Messages.DefaultMessage("Modifier mon statut") + @DefaultMessage("Mes documents") + String myDocuments(); + + @DefaultMessage("Modifier mon statut") String editStatus(); @DefaultMessage("Contenus trouvés") diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties index db07d07f6..924bf0a65 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties @@ -45,6 +45,7 @@ tasks=My tasks disconnect=Log out personalSpace=Personal space +myDocuments=My documents editStatus=Edit my status diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties index b69627d60..5671729fb 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties @@ -48,6 +48,7 @@ tasks=Mes tâches disconnect=Déconnexion personalSpace=Espace personnel +myDocuments=Mes documents editStatus=Modifier mon statut results=Contenus trouvés diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 9f13057ca..d20e4590d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -717,6 +717,24 @@ html .ui-controlgroup-controls .ui-btn-up-c { border: 0; } +#personals-apps { + padding: inherit; + border-top: 1px solid #d3d3d3; +} + +#personals-apps .icon-app { + top: auto; +} +#personals-apps a { + border: none; + padding-left: 2em; + padding-top: 0.5em; +} + +#personals-apps a:after { + background: none; +} + #silverpeas-navmenu-panel #navmenu-panel li#menu-config a { background: transparent url('icons/settings.svg') no-repeat; } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index 6c010a204..849fa2fff 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -175,6 +175,7 @@ private DetailUserDTO initSession(DetailUserDTO user) { return null; } } + protected void setUserInSession(UserDetail user) { request.getSession().setAttribute(AbstractAuthenticateService.USER_ATTRIBUT_NAME, user); } @@ -237,7 +238,7 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { List<News> lastNews = NewsHelper.getInstance().getLastNews(getUser().getId(), spaceId, maxNews); data.setNews(NewsHelper.getInstance().populate(lastNews, false)); } - + if (spaceId == null || spaceId.isEmpty()) { List<LinkDetail> links = FavoritesHelper.getInstance().getBookmarkPersoVisible(getUser().getId()); @@ -464,6 +465,23 @@ public Boolean isWorkflowApp(@PathParam("instanceId") String intanceId) { } } + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("personalSpace/{userId}/") + public List<ApplicationInstanceDTO> getPersonnalSpaceContent(@PathParam("userId") String userId) { + try { + SpaceInst space = Administration.get().getPersonalSpace(userId); + List<ApplicationInstanceDTO> apps = new ArrayList<>(); + for (ComponentInst app : space.getAllComponentsInst()) { + apps.add(populate(app)); + } + return apps; + } catch (AdminException e) { + SilverLogger.getLogger(this).error(e); + throw new WebApplicationException(e); + } + } + @GET @Produces(MediaType.APPLICATION_JSON) @Path("space/{spaceId}/") @@ -627,6 +645,14 @@ private SpaceDTO populate(SpaceInst space) { return dto; } + private ApplicationInstanceDTO populate(ComponentInst app) { + ApplicationInstanceDTO dto = new ApplicationInstanceDTO(); + dto.setId(app.getId()); + dto.setLabel(app.getLabel()); + dto.setType(app.getName()); + dto.setOrderNum(app.getOrderNum()); + return dto; + } private ApplicationInstanceDTO populate(ComponentInstLight app) { ApplicationInstanceDTO dto = new ApplicationInstanceDTO(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java index b95b56d41..81e1292d3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java @@ -54,6 +54,11 @@ public interface ServiceNavigation extends RestService { @Path("space/{spaceId}/") public void getSpace(@PathParam("spaceId") String spaceId, MethodCallback<SpaceDTO> callback); + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("personalSpace/{userId}/") + public void getPersonnalSpaceContent(@PathParam("userId") String userId, MethodCallback<List<ApplicationInstanceDTO>> callback); + @GET @Produces(MediaType.APPLICATION_JSON) @Path("spacesAndApps/{rootSpaceId}/") From 9353033a57072a4804fda0ed6e297823175b7934 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 6 Feb 2024 18:33:06 +0100 Subject: [PATCH 169/228] Feature #13940 --- .../client/apps/documents/DocumentsApp.java | 5 +- .../app/DocumentsLoadGedItemsEvent.java | 11 ++ .../pages/navigation/GedItemsLoadedEvent.java | 10 ++ .../documents/pages/GedNavigationPage.java | 21 ++- .../pages/widgets/AddFileButton.java | 141 +++++++++++++++ .../pages/widgets/AddFileButton.ui.xml | 34 ++++ .../resources/DocumentsMessages.java | 5 + .../resources/DocumentsMessages.properties | 4 + .../resources/DocumentsMessages_en.properties | 6 +- .../resources/DocumentsMessages_fr.properties | 4 + .../components/attachments/Attachment.java | 14 ++ .../org/silverpeas/mobile/public/spmobile.css | 4 +- .../mobile/server/servlets/FileServlet.java | 166 ++++++++++++++++++ mobile-war/src/main/webapp/WEB-INF/web.xml | 10 ++ 14 files changed, 430 insertions(+), 5 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.ui.xml create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java index 014072ce2..7c55fb18b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java @@ -193,6 +193,9 @@ public void appInstanceChanged(NavigationAppInstanceChangedEvent event) { GedNavigationPage page = new GedNavigationPage(); page.setPageTitle(event.getInstance().getLabel()); page.setInstanceId(event.getInstance().getId()); + //TODO : if writer manage validation + page.setCanImport(getApplicationInstance().getRights().getManager() || + getApplicationInstance().getRights().getPublisher()); page.setTopicId(null); page.show(); } @@ -239,7 +242,7 @@ public void attempt() { @Override public void onSuccess(final Method method, final List<BaseDTO> result) { super.onSuccess(method, result); - EventBus.getInstance().fireEvent(new GedItemsLoadedEvent(result, getApplicationInstance().getFolderSharing())); + EventBus.getInstance().fireEvent(new GedItemsLoadedEvent(result, getApplicationInstance().getFolderSharing(), event.isForceReload())); } }; action.attempt(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsLoadGedItemsEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsLoadGedItemsEvent.java index 143dcd0c1..cafc8efd8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsLoadGedItemsEvent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsLoadGedItemsEvent.java @@ -28,6 +28,7 @@ public class DocumentsLoadGedItemsEvent extends AbstractDocumentsAppEvent { private String rootTopicId, instanceId; + private boolean forceReload = false; public DocumentsLoadGedItemsEvent(String instanceId, String rootTopicId) { super(); @@ -36,6 +37,14 @@ public DocumentsLoadGedItemsEvent(String instanceId, String rootTopicId) { this.instanceId = instanceId; } + public DocumentsLoadGedItemsEvent(String instanceId, String rootTopicId, boolean forceReload) { + super(); + if (rootTopicId == null) rootTopicId = "0"; + this.rootTopicId = rootTopicId; + this.instanceId = instanceId; + this.forceReload = forceReload; + } + @Override protected void dispatch(DocumentsAppEventHandler handler) { handler.loadTopics(this); @@ -48,4 +57,6 @@ public String getRootTopicId() { public String getInstanceId() { return instanceId; } + + public boolean isForceReload() { return forceReload; } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java index 4e0001af7..1d0bb04bd 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java @@ -31,6 +31,7 @@ public class GedItemsLoadedEvent extends AbstractGedNavigationPagesEvent { private List<BaseDTO> topicsAndPublications; + private boolean forceReload = false; private int sharing; @@ -40,6 +41,13 @@ public GedItemsLoadedEvent(List<BaseDTO> topicsAndPublications, int sharing) { this.sharing = sharing; } + public GedItemsLoadedEvent(List<BaseDTO> topicsAndPublications, int sharing, boolean forceReload) { + super(); + this.topicsAndPublications = topicsAndPublications; + this.sharing = sharing; + this.forceReload = forceReload; + } + @Override protected void dispatch(GedNavigationPagesEventHandler handler) { handler.onLoadedTopics(this); @@ -52,4 +60,6 @@ public List<BaseDTO> getTopicsAndPublications() { public int getSharing() { return sharing; } + + public boolean isForceReload() { return forceReload; } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java index 216394723..5acbb0a1b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java @@ -27,6 +27,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadGedItemsEvent; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent; @@ -36,10 +37,12 @@ import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemsLoadedEvent; import org.silverpeas.mobile.client.apps.documents.events.pages.navigation .GedNavigationPagesEventHandler; +import org.silverpeas.mobile.client.apps.documents.pages.widgets.AddFileButton; import org.silverpeas.mobile.client.apps.documents.pages.widgets.GedItem; import org.silverpeas.mobile.client.apps.documents.pages.widgets.ShareButton; import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton; +import org.silverpeas.mobile.client.apps.media.pages.widgets.AddMediaButton; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.app.View; @@ -63,8 +66,12 @@ public class GedNavigationPage extends PageContent implements View, GedNavigatio private String rootTopicId, instanceId; private boolean dataLoaded = false; private AddToFavoritesButton favorite = new AddToFavoritesButton(); + + private AddFileButton buttonImport = new AddFileButton(); private ShareButton share = new ShareButton(); + private boolean canImport = false; + private static GedNavigationPageUiBinder uiBinder = GWT.create(GedNavigationPageUiBinder.class); interface GedNavigationPageUiBinder extends UiBinder<Widget, GedNavigationPage> { @@ -73,6 +80,7 @@ interface GedNavigationPageUiBinder extends UiBinder<Widget, GedNavigationPage> public GedNavigationPage() { msg = GWT.create(DocumentsMessages.class); initWidget(uiBinder.createAndBindUi(this)); + buttonImport.setId("import"); EventBus.getInstance().addHandler(AbstractGedNavigationPagesEvent.TYPE, this); } @@ -88,13 +96,17 @@ public void setTopicId(String rootTopicId) { EventBus.getInstance().fireEvent(new DocumentsLoadGedItemsEvent(instanceId, rootTopicId)); } + public void setCanImport(boolean canImport) { + this.canImport = canImport; + } + public void setInstanceId(String instanceId) { this.instanceId = instanceId; } @Override public void onLoadedTopics(GedItemsLoadedEvent event) { - if (isVisible() && dataLoaded == false) { + if ((isVisible() && dataLoaded == false) || (isVisible() && event.isForceReload())) { Notification.activityStart(); list.clear(); List<BaseDTO> dataItems = event.getTopicsAndPublications(); @@ -114,8 +126,14 @@ public void onLoadedTopics(GedItemsLoadedEvent event) { if (root.getId() == null) { favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), root.getName()); + buttonImport.init(instanceId, "0"); } else { favorite.init(instanceId, root.getId(), ContentsTypes.Folder.name(), root.getName()); + buttonImport.init(instanceId, rootTopicId); + } + + if (canImport) { + addActionShortcut(buttonImport); } if (event.getSharing() > 0) { @@ -135,6 +153,7 @@ public void onGedItemClicked(GedItemClickEvent event) { GedNavigationPage page = new GedNavigationPage(); page.setInstanceId(instanceId); page.setTopicId(((TopicDTO)event.getGedItem()).getId()); + page.setCanImport(canImport); page.show(); } else if (event.getGedItem() instanceof PublicationDTO) { PublicationPage page = new PublicationPage(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.java new file mode 100644 index 000000000..ee0341ec7 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.java @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.documents.pages.widgets; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.Style; +import com.google.gwt.event.dom.client.ChangeEvent; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.FileUpload; +import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.SpMobil; +import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadGedItemsEvent; +import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemsLoadedEvent; +import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationLoadedEvent; +import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; +import org.silverpeas.mobile.client.apps.media.events.app.MediasLoadMediaItemsEvent; +import org.silverpeas.mobile.client.apps.media.resources.MediaMessages; +import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.common.Notification; +import org.silverpeas.mobile.client.common.navigation.UrlUtils; +import org.silverpeas.mobile.client.common.network.NetworkHelper; +import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.resources.ApplicationMessages; + + +/** + * @author: svu + */ +public class AddFileButton extends ActionItem { + interface AddFileButtonUiBinder extends UiBinder<Widget, AddFileButton> { + } + + @UiField FileUpload file; + @UiField Anchor link; + @UiField(provided = true) protected DocumentsMessages msg = null; + + + private String instanceIdValue, folderIdValue; + private ApplicationMessages globalMsg = GWT.create(ApplicationMessages.class); + + private static AddFileButtonUiBinder uiBinder = GWT.create(AddFileButtonUiBinder.class); + + public AddFileButton() { + msg = GWT.create(DocumentsMessages.class); + initWidget(uiBinder.createAndBindUi(this)); + file.getElement().setAttribute("accept", "*/*"); + file.getElement().setAttribute("multiple", "multiple"); + file.getElement().setAttribute("length", "40"); + file.getElement().getStyle().setDisplay(Style.Display.NONE); + } + + public void init(String instanceId, String folderId) { + this.instanceIdValue = instanceId; + this.folderIdValue = folderId; + } + + @UiHandler("file") + void upload(ChangeEvent event) { + Notification.activityStartImmediately(); + String url = UrlUtils.getUploadLocation(); + url += "FileAction"; + upload(this, file.getElement(), instanceIdValue, folderIdValue, url, SpMobil.getUserToken()); + } + + public void fileUploadedSuccessfully() { + EventBus.getInstance().fireEvent(new DocumentsLoadGedItemsEvent(this.instanceIdValue, this.folderIdValue, true)); + } + + public void fileNotUploaded(int codeError) { + GWT.log("error " + codeError); + if (codeError == 413) { + Notification.alert(msg.maxUploadError()); + } else if (codeError == 415) { + Notification.alert(msg.fileNotSupportedError()); + } + Notification.activityStop(); + } + + @UiHandler("link") + void upload(ClickEvent event) { + if (NetworkHelper.isOnline()) { + clickOnInputFile(file.getElement()); + } else { + Notification.alert(globalMsg.needToBeOnline()); + } + } + + private static native void upload(AddFileButton button, Element input, String componentId, String folderId, String url, String token) /*-{ + var xhr = new XMLHttpRequest(); + var fd = new FormData(); + xhr.open("POST", url, false); + xhr.setRequestHeader("X-Silverpeas-Session", token); + xhr.onreadystatechange = function() { + if (xhr.readyState == 4 && xhr.status == 200) { + // Every thing ok, file uploaded + button.@org.silverpeas.mobile.client.apps.documents.pages.widgets.AddFileButton::fileUploadedSuccessfully()(); + } else { + button.@org.silverpeas.mobile.client.apps.documents.pages.widgets.AddFileButton::fileNotUploaded(I)(xhr.status); + } + }; + fd.append("componentId", componentId); + fd.append("folderId", folderId); + for(var i = 0; i < input.files.length ; i++) { + fd.append("upload_file"+i, input.files[i]); + } + xhr.send(fd); + }-*/; + + private static native void clickOnInputFile(Element elem) /*-{ + elem.click(); + }-*/; + +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.ui.xml new file mode 100644 index 000000000..a00b67808 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.ui.xml @@ -0,0 +1,34 @@ +<!-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "https://www.silverpeas.org/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui'> + + <ui:with field='msg' type='org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages'/> + + <g:HTMLPanel tag="li" styleName="add-file"> + <g:Anchor ui:field="link"/> + <g:FileUpload ui:field="file" title="{msg.importFile}" name="file"/> + </g:HTMLPanel> +</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java index c9d9f071c..984af7e8e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java @@ -57,4 +57,9 @@ public interface DocumentsMessages extends Messages { SafeHtml usersLabel(); SafeHtml emailsLabel(); SafeHtml commentsLabel(); + + String importFile(); + String maxUploadError(); + + String fileNotSupportedError(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties index f8fa54820..78720b514 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties @@ -52,3 +52,7 @@ maxAccessLabel=Nombre maximum d accès usersLabel=Utilisateurs emailsLabel=Emails externes commentsLabel=Message complémentaire + +importFile=Importer un fichier +maxUploadError=Média trop volumineux +fileNotSupportedError=Format non pris en charge \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties index 32a2d2d19..6e8ec5f84 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties @@ -51,4 +51,8 @@ endValidityLabel=End validity date maxAccessLabel=Max access number usersLabel=Users emailsLabel=Externals emails -commentsLabel=Additional message \ No newline at end of file +commentsLabel=Additional message + +importFile=File import +maxUploadError=Media too large +fileNotSupportedError=Unsupported format \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties index f8fa54820..78720b514 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties @@ -52,3 +52,7 @@ maxAccessLabel=Nombre maximum d accès usersLabel=Utilisateurs emailsLabel=Emails externes commentsLabel=Message complémentaire + +importFile=Importer un fichier +maxUploadError=Média trop volumineux +fileNotSupportedError=Format non pris en charge \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java index f230e889e..55ee5cf51 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java @@ -97,6 +97,17 @@ public void setAttachment(SimpleDocumentDTO data) { render(); } + private boolean isViewable() { + boolean v = (data.getContentType().contains("msword") || data.getContentType().contains("word")); + v = v || data.getContentType().contains("excel"); + v = v || data.getContentType().contains("pdf"); + v = v || data.getContentType().contains("presentationml"); + v = v || data.getContentType().contains("opendocument.text"); + v = v || data.getContentType().contains("opendocument.spreadsheet"); + v = v || data.getContentType().contains("opendocument.presentation"); + return v; + } + private void render() { operations.getElement().setId("operations"); view.getElement().setId("view"); @@ -171,6 +182,9 @@ public void onClick(ClickEvent clickEvent) { toogleOperations(); } }); + + if (!isViewable()) view.setVisible(false); + } catch (JavaScriptException e) { Notification.alert(e.getMessage()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index d20e4590d..cc8c49e5e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -907,14 +907,14 @@ html .ui-controlgroup-controls .ui-btn-up-c { background-position-x: 0.5em; } -.add-media { +.add-media, .add-file { height: 24px; width: 24px; filter: invert(1); background: url('icons/add.svg') no-repeat; } -.add-media a { +.add-media a, .add-file a { height: 24px; width: 24px; display: block; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java new file mode 100644 index 000000000..8e255a034 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java @@ -0,0 +1,166 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.server.servlets; + +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileUploadBase; +import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.io.FileUtils; +import org.apache.jackrabbit.webdav.observation.SubscriptionManager; +import org.silverpeas.components.kmelia.service.KmeliaService; +import org.silverpeas.components.questionreply.service.notification.SubscriptionNotifier; +import org.silverpeas.core.contribution.publication.model.PublicationDetail; +import org.silverpeas.core.contribution.publication.model.PublicationPK; +import org.silverpeas.core.node.model.NodeDetail; +import org.silverpeas.core.node.model.NodePK; +import org.silverpeas.core.subscription.SubscriptionFactory; +import org.silverpeas.core.subscription.SubscriptionServiceProvider; +import org.silverpeas.core.subscription.service.ComponentSubscriptionResource; +import org.silverpeas.core.subscription.util.SubscriptionUtil; +import org.silverpeas.core.util.file.FileRepositoryManager; +import org.silverpeas.core.webapi.admin.tools.SubscriptionTool; +import org.silverpeas.core.webapi.subscribe.SubscriptionResource; +import org.silverpeas.mobile.server.common.LocalDiskFileItem; + +import javax.activation.MimetypesFileTypeMap; +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +@SuppressWarnings("serial") +public class FileServlet extends AbstractSilverpeasMobileServlet { + + private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3; // 3MB + private static long MAX_FILE_SIZE = 1024 * 1024 * 100; // 100MB + private static long MAX_REQUEST_SIZE = 1024 * 1024 * 110; // 110MB + + @Override + public void init(final ServletConfig config) throws ServletException { + super.init(config); + MAX_FILE_SIZE = FileRepositoryManager.getUploadMaximumFileSize(); + MAX_REQUEST_SIZE = (long) (MAX_FILE_SIZE * 1.1); + } + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { + + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + } + + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + String componentId = ""; + String folderId = ""; + String tempDir = FileRepositoryManager.getTemporaryPath(); + + // configures upload settings + DiskFileItemFactory factory = new DiskFileItemFactory(); + // sets memory threshold - beyond which files are stored in disk + factory.setSizeThreshold(MEMORY_THRESHOLD); + // sets temporary location to store files + factory.setRepository(new File(tempDir)); + + ServletFileUpload upload = new ServletFileUpload(factory); + + // sets maximum size of upload file + upload.setFileSizeMax(MAX_FILE_SIZE); + + // sets maximum size of request (include file + form data) + upload.setSizeMax(MAX_REQUEST_SIZE); + + // Parse the request + @SuppressWarnings("unchecked") + List<FileItem> items = null; + try { + items = upload.parseRequest(request); + } catch(FileUploadBase.FileSizeLimitExceededException eu) { + response.sendError(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE); + return; + } catch (FileUploadException e) { + e.printStackTrace(); + } + + // Process the uploaded items + Iterator iter = items.iterator(); + while (iter.hasNext()) + { + FileItem item = (FileItem) iter.next(); + if (item.isFormField()) + { + if (item.getFieldName().equals("componentId")) componentId = item.getString(); + if (item.getFieldName().equals("folderId")) folderId = item.getString(); + + } + else { + String fileName = item.getName(); + File file = new File(tempDir + File.separator + fileName); + try { + item.write(file); + createPublication(request, response, fileName, getUserInSession(request).getId(), componentId, folderId, file); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + private String createPublication(HttpServletRequest request, HttpServletResponse response, String name, String userId, String componentId, + String folderId, File file) throws Exception { + + String type = new MimetypesFileTypeMap().getContentType(file); + List<FileItem> parameters = new ArrayList<FileItem>(); + LocalDiskFileItem item = new LocalDiskFileItem(file, type); + parameters.add(item); + + PublicationDetail pub = PublicationDetail.builder().build(); + pub.setName(file.getName()); + PublicationPK pk = new PublicationPK("", componentId); + pub.setPk(pk); + pub.setCreatorId(getUserInSession(request).getId()); + + NodePK node = new NodePK(folderId); + node.setComponentName(componentId); + + String pubId = KmeliaService.get().createPublicationIntoTopic(pub, node); + pk.setId(pubId); + + KmeliaService.get().addAttachmentToPublication(pk, getUserInSession(request).getId(), name, "", FileUtils.readFileToByteArray(file)); + + //TODO : notification management + + SubscriptionServiceProvider.getSubscribeService().getSubscribers() + return pubId; + } +} diff --git a/mobile-war/src/main/webapp/WEB-INF/web.xml b/mobile-war/src/main/webapp/WEB-INF/web.xml index fce5560cb..83b98d3a0 100644 --- a/mobile-war/src/main/webapp/WEB-INF/web.xml +++ b/mobile-war/src/main/webapp/WEB-INF/web.xml @@ -96,6 +96,16 @@ <url-pattern>/services/spmobile/MediaAction</url-pattern> </servlet-mapping> + <servlet> + <servlet-name>FileServlet</servlet-name> + <servlet-class>org.silverpeas.mobile.server.servlets.FileServlet</servlet-class> + </servlet> + + <servlet-mapping> + <servlet-name>FileServlet</servlet-name> + <url-pattern>/services/spmobile/FileAction</url-pattern> + </servlet-mapping> + <servlet> <servlet-name>FormServlet</servlet-name> <servlet-class>org.silverpeas.mobile.server.servlets.FormServlet</servlet-class> From 916eadf49b918ea6b87fc1e139f92e48b72915dc Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 6 Feb 2024 18:41:28 +0100 Subject: [PATCH 170/228] Feature #13940 --- .../mobile/server/servlets/FileServlet.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java index 8e255a034..e37e66862 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java @@ -30,20 +30,11 @@ import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FileUtils; -import org.apache.jackrabbit.webdav.observation.SubscriptionManager; import org.silverpeas.components.kmelia.service.KmeliaService; -import org.silverpeas.components.questionreply.service.notification.SubscriptionNotifier; import org.silverpeas.core.contribution.publication.model.PublicationDetail; import org.silverpeas.core.contribution.publication.model.PublicationPK; -import org.silverpeas.core.node.model.NodeDetail; import org.silverpeas.core.node.model.NodePK; -import org.silverpeas.core.subscription.SubscriptionFactory; -import org.silverpeas.core.subscription.SubscriptionServiceProvider; -import org.silverpeas.core.subscription.service.ComponentSubscriptionResource; -import org.silverpeas.core.subscription.util.SubscriptionUtil; import org.silverpeas.core.util.file.FileRepositoryManager; -import org.silverpeas.core.webapi.admin.tools.SubscriptionTool; -import org.silverpeas.core.webapi.subscribe.SubscriptionResource; import org.silverpeas.mobile.server.common.LocalDiskFileItem; import javax.activation.MimetypesFileTypeMap; @@ -71,16 +62,23 @@ public void init(final ServletConfig config) throws ServletException { MAX_REQUEST_SIZE = (long) (MAX_FILE_SIZE * 1.1); } - protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { + try { + checkUserInSession(request, response); + processRequest(request, response); + } catch (Exception e) { + e.printStackTrace(); + } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + String componentId = ""; String folderId = ""; String tempDir = FileRepositoryManager.getTemporaryPath(); @@ -159,8 +157,6 @@ private String createPublication(HttpServletRequest request, HttpServletResponse KmeliaService.get().addAttachmentToPublication(pk, getUserInSession(request).getId(), name, "", FileUtils.readFileToByteArray(file)); //TODO : notification management - - SubscriptionServiceProvider.getSubscribeService().getSubscribers() return pubId; } } From aff43f77d463b80c2441522bffd2e0f4a22a765c Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 7 Feb 2024 14:29:47 +0100 Subject: [PATCH 171/228] Feature #13940 --- .../client/apps/documents/DocumentsApp.java | 18 ++++++--- .../pages/navigation/GedItemsLoadedEvent.java | 9 ++++- .../publication/PublicationLoadedEvent.java | 7 +++- .../documents/pages/GedNavigationPage.java | 15 +++----- .../apps/documents/pages/PublicationPage.java | 22 ++++++++++- .../pages/widgets/AddFileButton.java | 37 +++++++++++++------ .../mobile/server/servlets/FileServlet.java | 28 +++++++++----- 7 files changed, 94 insertions(+), 42 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java index 7c55fb18b..0743d15c5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java @@ -193,9 +193,6 @@ public void appInstanceChanged(NavigationAppInstanceChangedEvent event) { GedNavigationPage page = new GedNavigationPage(); page.setPageTitle(event.getInstance().getLabel()); page.setInstanceId(event.getInstance().getId()); - //TODO : if writer manage validation - page.setCanImport(getApplicationInstance().getRights().getManager() || - getApplicationInstance().getRights().getPublisher()); page.setTopicId(null); page.show(); } @@ -242,12 +239,21 @@ public void attempt() { @Override public void onSuccess(final Method method, final List<BaseDTO> result) { super.onSuccess(method, result); - EventBus.getInstance().fireEvent(new GedItemsLoadedEvent(result, getApplicationInstance().getFolderSharing(), event.isForceReload())); + + EventBus.getInstance().fireEvent(new GedItemsLoadedEvent(result, getApplicationInstance().getFolderSharing(), + getCanImport(), event.isForceReload())); } }; action.attempt(); } + private boolean getCanImport() { + //TODO : if writer manage validation and manage topic specific right + boolean canImport = getApplicationInstance().getRights().getManager() || + getApplicationInstance().getRights().getPublisher(); + return canImport; + } + /** * Get publication infos. */ @@ -269,8 +275,8 @@ public void onSuccess(final Method method, final PublicationDTO result) { EventBus.getInstance().fireEvent( new PublicationLoadedEvent(result, getApplicationInstance().getCommentable(), getApplicationInstance().getAbleToStoreContent(), - getApplicationInstance().getNotifiable(), getApplicationInstance().getPublicationSharing(), event.getContent().getType())); - + getApplicationInstance().getNotifiable(), getApplicationInstance().getPublicationSharing(), + event.getContent().getType(), getCanImport())); } }; action.attempt(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java index 1d0bb04bd..1715fd508 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemsLoadedEvent.java @@ -34,17 +34,20 @@ public class GedItemsLoadedEvent extends AbstractGedNavigationPagesEvent { private boolean forceReload = false; private int sharing; + private boolean canImport = false; - public GedItemsLoadedEvent(List<BaseDTO> topicsAndPublications, int sharing) { + public GedItemsLoadedEvent(List<BaseDTO> topicsAndPublications, int sharing, boolean canImport) { super(); this.topicsAndPublications = topicsAndPublications; this.sharing = sharing; + this.canImport = canImport; } - public GedItemsLoadedEvent(List<BaseDTO> topicsAndPublications, int sharing, boolean forceReload) { + public GedItemsLoadedEvent(List<BaseDTO> topicsAndPublications, int sharing, boolean canImport, boolean forceReload) { super(); this.topicsAndPublications = topicsAndPublications; this.sharing = sharing; + this.canImport = canImport; this.forceReload = forceReload; } @@ -62,4 +65,6 @@ public int getSharing() { } public boolean isForceReload() { return forceReload; } + + public boolean isCanImport() { return canImport; } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java index b24522960..b46067105 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java @@ -33,7 +33,9 @@ public class PublicationLoadedEvent extends AbstractPublicationPagesEvent { private String type; private int sharing; - public PublicationLoadedEvent(PublicationDTO publication, boolean commentable, boolean ableToStoreContent, boolean notifiable, int sharing, String type) { + private boolean canImport = false; + + public PublicationLoadedEvent(PublicationDTO publication, boolean commentable, boolean ableToStoreContent, boolean notifiable, int sharing, String type, boolean canImport) { super(); this.notifiable = notifiable; this.publication = publication; @@ -41,6 +43,7 @@ public PublicationLoadedEvent(PublicationDTO publication, boolean commentable, b this.ableToStoreContent = ableToStoreContent; this.sharing = sharing; this.type = type; + this.canImport = canImport; } @Override @@ -67,4 +70,6 @@ public boolean isNotifiable() { public String getType() { return type; } public int getSharing() { return sharing; } + + public boolean isCanImport() { return canImport; } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java index 5acbb0a1b..12b58ee9a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java @@ -27,22 +27,18 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadGedItemsEvent; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.navigation - .AbstractGedNavigationPagesEvent; +import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.AbstractGedNavigationPagesEvent; import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemClickEvent; import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemsLoadedEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.navigation - .GedNavigationPagesEventHandler; +import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedNavigationPagesEventHandler; import org.silverpeas.mobile.client.apps.documents.pages.widgets.AddFileButton; import org.silverpeas.mobile.client.apps.documents.pages.widgets.GedItem; import org.silverpeas.mobile.client.apps.documents.pages.widgets.ShareButton; import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton; -import org.silverpeas.mobile.client.apps.media.pages.widgets.AddMediaButton; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.app.View; @@ -96,7 +92,7 @@ public void setTopicId(String rootTopicId) { EventBus.getInstance().fireEvent(new DocumentsLoadGedItemsEvent(instanceId, rootTopicId)); } - public void setCanImport(boolean canImport) { + private void setCanImport(boolean canImport) { this.canImport = canImport; } @@ -107,6 +103,7 @@ public void setInstanceId(String instanceId) { @Override public void onLoadedTopics(GedItemsLoadedEvent event) { if ((isVisible() && dataLoaded == false) || (isVisible() && event.isForceReload())) { + setCanImport(event.isCanImport()); Notification.activityStart(); list.clear(); List<BaseDTO> dataItems = event.getTopicsAndPublications(); @@ -126,10 +123,10 @@ public void onLoadedTopics(GedItemsLoadedEvent event) { if (root.getId() == null) { favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), root.getName()); - buttonImport.init(instanceId, "0"); + buttonImport.init(instanceId, "0", false); } else { favorite.init(instanceId, root.getId(), ContentsTypes.Folder.name(), root.getName()); - buttonImport.init(instanceId, rootTopicId); + buttonImport.init(instanceId, rootTopicId, false); } if (canImport) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index f41157f3d..3e44a3511 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -26,7 +26,6 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.DivElement; -import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.HeadingElement; import com.google.gwt.dom.client.ParagraphElement; import com.google.gwt.dom.client.Style; @@ -34,7 +33,10 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.*; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.FocusPanel; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.comments.pages.widgets.CommentsButton; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadAttachmentsEvent; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent; @@ -43,6 +45,7 @@ import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationAttachmentsLoadedEvent; import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationLoadedEvent; import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationNavigationPagesEventHandler; +import org.silverpeas.mobile.client.apps.documents.pages.widgets.AddFileButton; import org.silverpeas.mobile.client.apps.documents.pages.widgets.LinkedPublicationItem; import org.silverpeas.mobile.client.apps.documents.pages.widgets.ShareButton; import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; @@ -97,8 +100,11 @@ public class PublicationPage extends PageContent private NotifyButton notification = new NotifyButton(); private AddToFavoritesButton favorite = new AddToFavoritesButton(); + private AddFileButton buttonImport = new AddFileButton(); + private ShareButton share = new ShareButton(); private ContentDTO contentDTO = null; + private boolean canImport = false; private SwipeRecognizer swipeRecognizer; @@ -128,6 +134,7 @@ public PublicationPage() { attachments.getElement().setId("attachments"); linkedPublications.getElement().setId("linkedPublications"); content.setId("content"); + buttonImport.setId("import"); content.getStyle().setDisplay(Style.Display.NONE); EventBus.getInstance().addHandler(AbstractPublicationPagesEvent.TYPE, this); EventBus.getInstance().addHandler(SwipeEndEvent.getType(), this); @@ -145,6 +152,10 @@ public void setContent(final ContentDTO content) { this.contentDTO = content; } + private void setCanImport(boolean canImport) { + this.canImport = canImport; + } + public void setPublicationId(String id, String type) { // send event to controler for retrieve pub infos Notification.activityStart(); @@ -158,6 +169,8 @@ public void setPublicationId(String id, String type) { @Override public void onLoadedPublication(PublicationLoadedEvent event) { Notification.activityStop(); + attachments.clear(); + setCanImport(event.isCanImport()); this.publication = event.getPublication(); this.notifiable = event.isNotifiable(); display(event.isCommentable(), event.isAbleToStoreContent(), event.getType()); @@ -179,6 +192,11 @@ public void onLoadedPublication(PublicationLoadedEvent event) { contentLink.setVisible(publication.getContent()); } swipeRecognizer = new SwipeRecognizer(supercontainer); + + if (canImport) { + buttonImport.init(event.getPublication().getInstanceId(), event.getPublication().getId(), true); + addActionShortcut(buttonImport); + } } @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.java index ee0341ec7..4a5be2947 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/AddFileButton.java @@ -32,23 +32,21 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FileUpload; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadGedItemsEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemsLoadedEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationLoadedEvent; +import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent; import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; -import org.silverpeas.mobile.client.apps.media.events.app.MediasLoadMediaItemsEvent; -import org.silverpeas.mobile.client.apps.media.resources.MediaMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.navigation.UrlUtils; import org.silverpeas.mobile.client.common.network.NetworkHelper; import org.silverpeas.mobile.client.components.base.ActionItem; import org.silverpeas.mobile.client.resources.ApplicationMessages; +import org.silverpeas.mobile.shared.dto.ContentDTO; +import org.silverpeas.mobile.shared.dto.ContentsTypes; /** @@ -63,7 +61,8 @@ interface AddFileButtonUiBinder extends UiBinder<Widget, AddFileButton> { @UiField(provided = true) protected DocumentsMessages msg = null; - private String instanceIdValue, folderIdValue; + private String instanceIdValue, locationIdValue; + private boolean locationIsPublication = false; private ApplicationMessages globalMsg = GWT.create(ApplicationMessages.class); private static AddFileButtonUiBinder uiBinder = GWT.create(AddFileButtonUiBinder.class); @@ -77,9 +76,10 @@ public AddFileButton() { file.getElement().getStyle().setDisplay(Style.Display.NONE); } - public void init(String instanceId, String folderId) { + public void init(String instanceId, String locationId, boolean locationIsPublication) { this.instanceIdValue = instanceId; - this.folderIdValue = folderId; + this.locationIdValue = locationId; + this.locationIsPublication = locationIsPublication; } @UiHandler("file") @@ -87,11 +87,20 @@ void upload(ChangeEvent event) { Notification.activityStartImmediately(); String url = UrlUtils.getUploadLocation(); url += "FileAction"; - upload(this, file.getElement(), instanceIdValue, folderIdValue, url, SpMobil.getUserToken()); + upload(this, file.getElement(), instanceIdValue, locationIdValue, locationIsPublication, url, SpMobil.getUserToken()); } public void fileUploadedSuccessfully() { - EventBus.getInstance().fireEvent(new DocumentsLoadGedItemsEvent(this.instanceIdValue, this.folderIdValue, true)); + if (locationIsPublication) { + ContentDTO content = new ContentDTO(); + content.setInstanceId(instanceIdValue); + content.setType(ContentsTypes.Publication.name()); + content.setContributionId(locationIdValue); + content.setId(locationIdValue); + EventBus.getInstance().fireEvent(new DocumentsLoadPublicationEvent(content)); + } else { + EventBus.getInstance().fireEvent(new DocumentsLoadGedItemsEvent(this.instanceIdValue, this.locationIdValue, true)); + } } public void fileNotUploaded(int codeError) { @@ -113,7 +122,7 @@ void upload(ClickEvent event) { } } - private static native void upload(AddFileButton button, Element input, String componentId, String folderId, String url, String token) /*-{ + private static native void upload(AddFileButton button, Element input, String componentId, String locationId, boolean locationIsPublication, String url, String token) /*-{ var xhr = new XMLHttpRequest(); var fd = new FormData(); xhr.open("POST", url, false); @@ -127,7 +136,11 @@ private static native void upload(AddFileButton button, Element input, String co } }; fd.append("componentId", componentId); - fd.append("folderId", folderId); + if (locationIsPublication) { + fd.append("publicationId", locationId); + } else { + fd.append("folderId", locationId); + } for(var i = 0; i < input.files.length ; i++) { fd.append("upload_file"+i, input.files[i]); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java index e37e66862..429c953f9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java @@ -35,16 +35,13 @@ import org.silverpeas.core.contribution.publication.model.PublicationPK; import org.silverpeas.core.node.model.NodePK; import org.silverpeas.core.util.file.FileRepositoryManager; -import org.silverpeas.mobile.server.common.LocalDiskFileItem; -import javax.activation.MimetypesFileTypeMap; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; -import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -80,6 +77,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) String componentId = ""; + String publicationId = ""; String folderId = ""; String tempDir = FileRepositoryManager.getTemporaryPath(); @@ -119,6 +117,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) { if (item.getFieldName().equals("componentId")) componentId = item.getString(); if (item.getFieldName().equals("folderId")) folderId = item.getString(); + if (item.getFieldName().equals("publicationId")) publicationId = item.getString(); } else { @@ -126,7 +125,11 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) File file = new File(tempDir + File.separator + fileName); try { item.write(file); - createPublication(request, response, fileName, getUserInSession(request).getId(), componentId, folderId, file); + if(folderId.isEmpty()) { + addFileToPublication(request, fileName, componentId, publicationId, file); + } else { + createPublication(request, fileName, componentId, folderId, file); + } } catch (Exception e) { e.printStackTrace(); } @@ -134,13 +137,18 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) } } - private String createPublication(HttpServletRequest request, HttpServletResponse response, String name, String userId, String componentId, - String folderId, File file) throws Exception { + private void addFileToPublication(HttpServletRequest request, String name, String componentId, String publicationId, + File file) throws Exception { - String type = new MimetypesFileTypeMap().getContentType(file); - List<FileItem> parameters = new ArrayList<FileItem>(); - LocalDiskFileItem item = new LocalDiskFileItem(file, type); - parameters.add(item); + PublicationPK pk = new PublicationPK(publicationId, componentId); + KmeliaService.get().addAttachmentToPublication(pk, getUserInSession(request).getId(), name, "", + FileUtils.readFileToByteArray(file)); + + //TODO : notification management + } + + private String createPublication(HttpServletRequest request, String name, + String componentId, String folderId, File file) throws Exception { PublicationDetail pub = PublicationDetail.builder().build(); pub.setName(file.getName()); From d41dcabf7e3e14e1a2104cf1882e2b04c57bddcd Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 7 Feb 2024 15:55:34 +0100 Subject: [PATCH 172/228] Feature #13940 --- .../mobile/server/servlets/FileServlet.java | 14 +++++++++++--- .../mobile/server/servlets/MediaServlet.java | 8 ++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java index 429c953f9..1d45e6c01 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/FileServlet.java @@ -34,6 +34,9 @@ import org.silverpeas.core.contribution.publication.model.PublicationDetail; import org.silverpeas.core.contribution.publication.model.PublicationPK; import org.silverpeas.core.node.model.NodePK; +import org.silverpeas.core.subscription.SubscriptionServiceProvider; +import org.silverpeas.core.subscription.service.NodeSubscriptionResource; +import org.silverpeas.core.subscription.util.SubscriptionSubscriberList; import org.silverpeas.core.util.file.FileRepositoryManager; import javax.servlet.ServletConfig; @@ -143,8 +146,6 @@ private void addFileToPublication(HttpServletRequest request, String name, Strin PublicationPK pk = new PublicationPK(publicationId, componentId); KmeliaService.get().addAttachmentToPublication(pk, getUserInSession(request).getId(), name, "", FileUtils.readFileToByteArray(file)); - - //TODO : notification management } private String createPublication(HttpServletRequest request, String name, @@ -164,7 +165,14 @@ private String createPublication(HttpServletRequest request, String name, KmeliaService.get().addAttachmentToPublication(pk, getUserInSession(request).getId(), name, "", FileUtils.readFileToByteArray(file)); - //TODO : notification management + + SubscriptionSubscriberList l = SubscriptionServiceProvider.getSubscribeService() + .getSubscribers(NodeSubscriptionResource.from(node)); + + + KmeliaService.get().getUserNotification(node).send(); + return pubId; } + } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/MediaServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/MediaServlet.java index eb924401f..bea510cf8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/MediaServlet.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/MediaServlet.java @@ -37,8 +37,11 @@ import org.silverpeas.components.gallery.model.Media; import org.silverpeas.components.gallery.model.MediaPK; import org.silverpeas.components.gallery.model.Photo; +import org.silverpeas.components.gallery.notification.user.GalleryUserAlertNotification; import org.silverpeas.components.gallery.service.GalleryService; import org.silverpeas.components.gallery.service.MediaServiceProvider; +import org.silverpeas.core.admin.user.model.User; +import org.silverpeas.core.node.model.NodePK; import org.silverpeas.core.util.file.FileRepositoryManager; import org.silverpeas.mobile.server.common.LocalDiskFileItem; import org.silverpeas.mobile.server.helpers.MediaHelper; @@ -202,6 +205,11 @@ private String createMedia(HttpServletRequest request, HttpServletResponse respo Media newMedia = getGalleryService().createMedia(getUserInSession(request), componentId, GalleryComponentSettings.getWatermark(componentId), delegate); + // notification management + User sender = getUserInSession(request); + GalleryUserAlertNotification n = new GalleryUserAlertNotification(new NodePK(albumId, componentId), newMedia, sender); + n.build().send(); + return newMedia.getId(); } } From 45e1e26f07ebe3dcdd8ca01abfd7e7a13fe4342c Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 7 Feb 2024 17:30:29 +0100 Subject: [PATCH 173/228] Fix personnal EDM Label --- .../mobile/client/apps/documents/DocumentsApp.java | 2 ++ .../apps/documents/pages/GedNavigationPage.java | 14 +++++++++++++- .../client/components/base/NavigationMenu.java | 1 - .../mobile/server/services/ServiceNavigation.java | 4 +++- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java index 0743d15c5..e580ce63d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java @@ -194,6 +194,7 @@ public void appInstanceChanged(NavigationAppInstanceChangedEvent event) { page.setPageTitle(event.getInstance().getLabel()); page.setInstanceId(event.getInstance().getId()); page.setTopicId(null); + page.setPersonnal(event.getInstance().isPersonnal()); page.show(); } } @@ -248,6 +249,7 @@ public void onSuccess(final Method method, final List<BaseDTO> result) { } private boolean getCanImport() { + if (getApplicationInstance().getRights() == null) return true; //TODO : if writer manage validation and manage topic specific right boolean canImport = getApplicationInstance().getRights().getManager() || getApplicationInstance().getRights().getPublisher(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java index 12b58ee9a..85a690de5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java @@ -44,6 +44,7 @@ import org.silverpeas.mobile.client.common.app.View; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.BaseDTO; import org.silverpeas.mobile.shared.dto.ContentDTO; import org.silverpeas.mobile.shared.dto.ContentsTypes; @@ -67,9 +68,16 @@ public class GedNavigationPage extends PageContent implements View, GedNavigatio private ShareButton share = new ShareButton(); private boolean canImport = false; + private boolean personnal = false; private static GedNavigationPageUiBinder uiBinder = GWT.create(GedNavigationPageUiBinder.class); + private ApplicationMessages globalMsg = GWT.create(ApplicationMessages.class); + + public void setPersonnal(boolean personnal) { + this.personnal = personnal; + } + interface GedNavigationPageUiBinder extends UiBinder<Widget, GedNavigationPage> { } @@ -109,7 +117,11 @@ public void onLoadedTopics(GedItemsLoadedEvent event) { List<BaseDTO> dataItems = event.getTopicsAndPublications(); for (Object dataItem : dataItems) { if (dataItem instanceof TopicDTO && ((TopicDTO) dataItem).isRoot()) { - setPageTitle(((TopicDTO) dataItem).getName()); + if (personnal) { + setPageTitle(globalMsg.myDocuments()); + } else { + setPageTitle(((TopicDTO) dataItem).getName()); + } root = (TopicDTO) dataItem; } else { GedItem item = new GedItem(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java index 11d5affaa..e70b075ee 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java @@ -122,7 +122,6 @@ public NavigationMenu() { public void setPersonalApps(List<ApplicationInstanceDTO> applicationInstanceDTOS) { listApplications.clear(); for (ApplicationInstanceDTO app : applicationInstanceDTOS) { - if (app.getType().equals(Apps.kmelia.name())) { app.setLabel(msg.myDocuments()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index 849fa2fff..cfb0de277 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -473,7 +473,9 @@ public List<ApplicationInstanceDTO> getPersonnalSpaceContent(@PathParam("userId" SpaceInst space = Administration.get().getPersonalSpace(userId); List<ApplicationInstanceDTO> apps = new ArrayList<>(); for (ComponentInst app : space.getAllComponentsInst()) { - apps.add(populate(app)); + ApplicationInstanceDTO dto = populate(app); + dto.setPersonnal(true); + apps.add(dto); } return apps; } catch (AdminException e) { From 4a5a5e982b9ecec34f8a6d388f8d15919c19d5d9 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 8 Feb 2024 15:17:17 +0100 Subject: [PATCH 174/228] Fix #13981 --- .../server/services/ServiceNavigation.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index cfb0de277..1b11e503e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -24,10 +24,13 @@ package org.silverpeas.mobile.server.services; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.IFrameElement; import org.apache.commons.lang3.EnumUtils; import org.silverpeas.components.gallery.model.Media; import org.silverpeas.components.gallery.model.MediaPK; import org.silverpeas.components.gallery.service.MediaServiceProvider; +import org.silverpeas.components.kmelia.service.KmeliaService; import org.silverpeas.components.quickinfo.model.News; import org.silverpeas.core.admin.component.model.ComponentInst; import org.silverpeas.core.admin.component.model.ComponentInstLight; @@ -361,9 +364,12 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { getSettings().getBoolean("spacehomepage.displayUrlType")) { String url = space.getFirstPageExtraParam(); if (url.startsWith("/") && !url.startsWith("/silverpeas") && !url.startsWith("$")) url = "/silverpeas" + url; - String html = - "<iframe frameborder='0' style='width:100vw;height:100vh' src='" + url + - "'></iframe>"; + String html = getIframe(url); + data.setHtmlFreeZone(html); + } else if (space.getFirstPageType() == HomePages.APP.getValue() && space.getFirstPageExtraParam().startsWith("webPage")) { + String appId = space.getFirstPageExtraParam(); + String url = "/silverpeas/services/spmobile/PublicationContent" + "?id=" + appId + "&componentId=" + appId; + String html = getIframe(url); data.setHtmlFreeZone(html); } } @@ -385,6 +391,14 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { return data; } + private String getIframe(String url) { + String style = "border-style: none; width: 100%; overflow: hidden;"; + String script = "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';}(this));"; + String html = "<iframe style='" + style + "' src='" + url + "' onload=\"" + script + "\">"; + html += "</iframe>"; + return html; + } + private List<ComponentInstLight> getAllowedComponents(boolean visibleOnly, String name, String spaceId) { OrganizationController oc = OrganizationController.get(); From 28b305fd77fd370376e4d661f80e2182512a4dfe Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 8 Feb 2024 16:28:56 +0100 Subject: [PATCH 175/228] embbed shortcuts --- .../client/components/base/PageFooter.java | 7 +++++++ .../client/components/base/PageFooter.ui.xml | 10 +++++----- .../resources/ApplicationResources.java | 20 +++++++++++++++++++ .../mobile/public/icons/chat_shortcut.svg | 1 - .../mobile/public/icons/home_shortcut.svg | 1 - .../{chat.svg => shortcuts/chat_shortcut.svg} | 2 +- .../{ => shortcuts}/contacts_shortcut.svg | 2 +- .../{ => shortcuts}/favorites_shortcut.svg | 2 +- .../public/icons/shortcuts/home_shortcut.svg | 1 + .../public/icons/shortcuts/tasks_shortcut.svg | 1 + .../silverpeas/mobile/public/icons/tasks.svg | 1 - .../mobile/public/icons/tasks_shortcut.svg | 1 - 12 files changed, 37 insertions(+), 12 deletions(-) delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat_shortcut.svg delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home_shortcut.svg rename mobile-war/src/main/java/org/silverpeas/mobile/public/icons/{chat.svg => shortcuts/chat_shortcut.svg} (75%) rename mobile-war/src/main/java/org/silverpeas/mobile/public/icons/{ => shortcuts}/contacts_shortcut.svg (88%) rename mobile-war/src/main/java/org/silverpeas/mobile/public/icons/{ => shortcuts}/favorites_shortcut.svg (78%) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/home_shortcut.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/tasks_shortcut.svg delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks.svg delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks_shortcut.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java index 37768a596..a630ce626 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.java @@ -67,6 +67,13 @@ public PageFooter() { ressources.css().ensureInjected(); tchat.setVisible(Boolean.parseBoolean(ResourcesManager.getParam("chat.enable"))); + + browse.setHTML(ressources.homeShortcut().getText()); + favoris.setHTML(ressources.favoritesShortcut().getText()); + tasks.setHTML(ressources.tasksShortcut().getText()); + tchat.setHTML(ressources.chatShortcut().getText()); + contact.setHTML(ressources.contactsShortcut().getText()); + addCustomButtons(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.ui.xml index 46adab722..3908be5a8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageFooter.ui.xml @@ -28,10 +28,10 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.resources.ApplicationMessages'/> <g:HTMLPanel ui:field="footer"> - <g:Anchor stylePrimaryName="btn-list-navigation" ui:field="browse"><ui:safehtml from="{msg.browser}"/></g:Anchor> - <g:Anchor stylePrimaryName="btn-list-favoris" ui:field="favoris"><ui:safehtml from="{msg.appFavortis}"/></g:Anchor> - <g:Anchor stylePrimaryName="btn-find-contact" ui:field="contact"><ui:safehtml from="{msg.appContact}"/></g:Anchor> - <g:Anchor stylePrimaryName="btn-list-task" ui:field="tasks">{msg.tasks}/></g:Anchor> - <g:Anchor stylePrimaryName="btn-update-tchat" ui:field="tchat" href="chat.jsp" target="_blank"><ui:safehtml from="{msg.tchat}"/></g:Anchor> + <g:Anchor stylePrimaryName="btn-list-navigation" ui:field="browse"></g:Anchor> + <g:Anchor stylePrimaryName="btn-list-favoris" ui:field="favoris"></g:Anchor> + <g:Anchor stylePrimaryName="btn-find-contact" ui:field="contact"></g:Anchor> + <g:Anchor stylePrimaryName="btn-list-task" ui:field="tasks"></g:Anchor> + <g:Anchor stylePrimaryName="btn-update-tchat" ui:field="tchat" href="chat.jsp" target="_blank"></g:Anchor> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java index d8b1fe97f..bbaa90aff 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java @@ -128,5 +128,25 @@ public interface ApplicationResources extends ClientBundle { @DataResource.MimeType("image/svg+xml") TextResource publication(); + @Source("icons/shortcuts/home_shortcut.svg") + @DataResource.MimeType("image/svg+xml") + TextResource homeShortcut(); + + @Source("icons/shortcuts/favorites_shortcut.svg") + @DataResource.MimeType("image/svg+xml") + TextResource favoritesShortcut(); + + @Source("icons/shortcuts/contacts_shortcut.svg") + @DataResource.MimeType("image/svg+xml") + TextResource contactsShortcut(); + + @Source("icons/shortcuts/tasks_shortcut.svg") + @DataResource.MimeType("image/svg+xml") + TextResource tasksShortcut(); + + @Source("icons/shortcuts/chat_shortcut.svg") + @DataResource.MimeType("image/svg+xml") + TextResource chatShortcut(); + } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat_shortcut.svg deleted file mode 100644 index 960bb0c16..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat_shortcut.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 9h12v2H6V9zm8 5H6v-2h8v2zm4-6H6V6h12v2z" fill="#7eb73b"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home_shortcut.svg deleted file mode 100644 index ffbb6ce97..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/home_shortcut.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z" fill="#7eb73b"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/chat_shortcut.svg similarity index 75% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/chat_shortcut.svg index 4ce311b89..b4af4b1bf 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/chat.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/chat_shortcut.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 9h12v2H6V9zm8 5H6v-2h8v2zm4-6H6V6h12v2z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 9h12v2H6V9zm8 5H6v-2h8v2zm4-6H6V6h12v2z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/contacts_shortcut.svg similarity index 88% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts_shortcut.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/contacts_shortcut.svg index 19ef8754c..83277867a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/contacts_shortcut.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/contacts_shortcut.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z" fill="none"/><path d="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z" fill="#7eb73b"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z" fill="none"/><path d="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/favorites_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/favorites_shortcut.svg similarity index 78% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/favorites_shortcut.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/favorites_shortcut.svg index 4d6428b73..d090bc060 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/favorites_shortcut.svg +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/favorites_shortcut.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" fill="#7eb73b"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/home_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/home_shortcut.svg new file mode 100644 index 000000000..341070110 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/home_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/tasks_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/tasks_shortcut.svg new file mode 100644 index 000000000..704516259 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/shortcuts/tasks_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px"><rect fill="none" height="24" width="24"/><path d="M11,7H2v2h9V7z M11,15H2v2h9V15z M16.34,11l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,5.34L16.34,11z M16.34,19 l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,13.34L16.34,19z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks.svg deleted file mode 100644 index 410991a61..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><rect fill="none" height="24" width="24"/><path d="M11,7H2v2h9V7z M11,15H2v2h9V15z M16.34,11l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,5.34L16.34,11z M16.34,19 l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,13.34L16.34,19z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks_shortcut.svg deleted file mode 100644 index 4447876ec..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/tasks_shortcut.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><rect fill="none" height="24" width="24"/><path d="M11,7H2v2h9V7z M11,15H2v2h9V15z M16.34,11l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,5.34L16.34,11z M16.34,19 l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,13.34L16.34,19z" fill="#7eb73b"/></svg> From 7535c6de1908913ec50ddc445fdd08873e3f5abd Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 8 Feb 2024 17:24:58 +0100 Subject: [PATCH 176/228] embbed icons menu --- .../components/base/NavigationMenu.java | 7 +++- .../components/base/NavigationMenu.ui.xml | 20 ++++++++-- .../resources/ApplicationResources.java | 15 ++++++++ .../client/resources/icons/menu/help.svg | 1 + .../client/resources/icons/menu/home.svg | 1 + .../client/resources/icons/menu/logout.svg | 1 + .../client/resources/icons/menu/settings.svg | 1 + .../icons/shortcuts/chat_shortcut.svg | 1 + .../icons/shortcuts/contacts_shortcut.svg | 1 + .../icons/shortcuts/favorites_shortcut.svg | 1 + .../icons/shortcuts/home_shortcut.svg | 1 + .../icons/shortcuts/tasks_shortcut.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 37 +++++++------------ 13 files changed, 59 insertions(+), 29 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/help.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/home.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/logout.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/settings.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/chat_shortcut.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/contacts_shortcut.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/favorites_shortcut.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/home_shortcut.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/tasks_shortcut.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java index e70b075ee..6bb16910f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java @@ -80,7 +80,7 @@ public class NavigationMenu extends Composite implements PageEventHandler { @UiField HTMLPanel container, user; @UiField Anchor home, disconnect, updateStatus, searchButton, help, config, calendar, notifications, shares; - @UiField SpanElement status; + @UiField SpanElement status, iconHelp, iconSettings, iconHome, iconLogout; @UiField TextBox search; @UiField AvatarUpload avatar; @@ -116,6 +116,11 @@ public NavigationMenu() { help.setTarget("_blank"); } } + iconSettings.setInnerHTML(resources.settings().getText()); + iconHelp.setInnerHTML(resources.help().getText()); + iconLogout.setInnerHTML(resources.logout().getText()); + iconHome.setInnerHTML(resources.home().getText()); + EventBus.getInstance().addHandler(AbstractPageEvent.TYPE, this); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml index 3c35704ba..0bd6a609a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml @@ -51,10 +51,22 @@ <components:UnorderedList ui:field="listApplications" /> <ul id="actions-menu"> - <li id="menu-home"><g:Anchor ui:field="home" styleName="ui-link" text="{msg.home}"/></li> - <li id="menu-parameter"><g:Anchor ui:field="config" styleName="ui-link" text="{msg.config}"/></li> - <li id="menu-help"><g:Anchor ui:field="help" styleName="ui-link" text="{msg.help}"/></li> - <li id="menu-logout"><g:Anchor ui:field="disconnect" styleName="ui-link" text="{msg.disconnect}"/></li> + <li id="menu-home"> + <span ui:field="iconHome"></span> + <g:Anchor ui:field="home" styleName="ui-link" text="{msg.home}"/> + </li> + <li id="menu-parameter"> + <span ui:field="iconSettings"></span> + <g:Anchor ui:field="config" styleName="ui-link" text="{msg.config}"/> + </li> + <li id="menu-help"> + <span ui:field="iconHelp"></span> + <g:Anchor ui:field="help" styleName="ui-link" text="{msg.help}"/> + </li> + <li id="menu-logout"> + <span ui:field="iconLogout"></span> + <g:Anchor ui:field="disconnect" styleName="ui-link" text="{msg.disconnect}"/> + </li> </ul> </div> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java index bbaa90aff..52d2db168 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java @@ -147,6 +147,21 @@ public interface ApplicationResources extends ClientBundle { @Source("icons/shortcuts/chat_shortcut.svg") @DataResource.MimeType("image/svg+xml") TextResource chatShortcut(); + @Source("icons/menu/help.svg") + @DataResource.MimeType("image/svg+xml") + TextResource help(); + + @Source("icons/menu/settings.svg") + @DataResource.MimeType("image/svg+xml") + TextResource settings(); + + @Source("icons/menu/home.svg") + @DataResource.MimeType("image/svg+xml") + TextResource home(); + + @Source("icons/menu/logout.svg") + @DataResource.MimeType("image/svg+xml") + TextResource logout(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/help.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/help.svg new file mode 100644 index 000000000..3c5cd4aae --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/help.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/home.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/home.svg new file mode 100644 index 000000000..b7e227a3e --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/home.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/logout.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/logout.svg new file mode 100644 index 000000000..fe0a49072 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/logout.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/settings.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/settings.svg new file mode 100644 index 000000000..e40c8496e --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/settings.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><path d="M0,0h24v24H0V0z" fill="none"/><path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z"/></g></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/chat_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/chat_shortcut.svg new file mode 100644 index 000000000..b4af4b1bf --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/chat_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 9h12v2H6V9zm8 5H6v-2h8v2zm4-6H6V6h12v2z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/contacts_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/contacts_shortcut.svg new file mode 100644 index 000000000..83277867a --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/contacts_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z" fill="none"/><path d="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/favorites_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/favorites_shortcut.svg new file mode 100644 index 000000000..d090bc060 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/favorites_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/home_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/home_shortcut.svg new file mode 100644 index 000000000..341070110 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/home_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/tasks_shortcut.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/tasks_shortcut.svg new file mode 100644 index 000000000..704516259 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/shortcuts/tasks_shortcut.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px"><rect fill="none" height="24" width="24"/><path d="M11,7H2v2h9V7z M11,15H2v2h9V15z M16.34,11l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,5.34L16.34,11z M16.34,19 l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L22,13.34L16.34,19z"/></svg> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index cc8c49e5e..dc6e0aeb5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -449,33 +449,30 @@ html .ui-controlgroup-controls .ui-btn-up-c { } #navigation-footer a { - bottom: 0; - top: auto; + margin: auto; + text-align: center; flex: 1; - text-indent: -300em; transform: scale(1.5); + fill: #7eb73b; } #navigation-footer .btn-list-navigation { - background: transparent url('icons/home_shortcut.svg') center no-repeat; + } #navigation-footer .btn-find-contact { - background: transparent url('icons/contacts_shortcut.svg') center no-repeat; - transform: scale(1.2); + transform: scale(1.2); } #navigation-footer .btn-update-tchat { - background: transparent url('icons/chat_shortcut.svg') center no-repeat; - transform: scale(1.2); + transform: scale(1.2); } #navigation-footer .btn-list-task { - background: transparent url('icons/tasks_shortcut.svg') center no-repeat; + } #navigation-footer .btn-list-favoris { - background: transparent url('icons/favorites_shortcut.svg') center no-repeat; transform: scale(1.4); } @@ -735,16 +732,13 @@ html .ui-controlgroup-controls .ui-btn-up-c { background: none; } -#silverpeas-navmenu-panel #navmenu-panel li#menu-config a { - background: transparent url('icons/settings.svg') no-repeat; +#actions-menu li { + fill: #7eb73b; } -#silverpeas-navmenu-panel #navmenu-panel li#menu-tasks a { - background: transparent url('icons/tasks.svg') no-repeat; -} - -#silverpeas-navmenu-panel #actions-menu li#menu-help a { - background: transparent url('icons/help.svg') no-repeat; +#actions-menu li span { + position: absolute; + left: 0.5em; } #silverpeas-navmenu-panel #navmenu-panel li#menu-notificationsbox a { @@ -756,20 +750,15 @@ html .ui-controlgroup-controls .ui-btn-up-c { } #silverpeas-navmenu-panel #actions-menu li#menu-parameter a { - background: transparent url('icons/settings.svg') no-repeat; + } #silverpeas-navmenu-panel #actions-menu li#menu-home a { - background: transparent url('icons/home.svg') no-repeat; } #silverpeas-navmenu-panel #actions-menu li#menu-logout a { - background: transparent url('icons/logout.svg') no-repeat; -} -#silverpeas-navmenu-panel #navmenu-panel li#menu-tchat a { - background: transparent url('icons/chat.svg') no-repeat; } #silverpeas-navmenu-panel #navmenu-panel li#menu-usercalendar a { From 047cf5a9b26c8281507d8877d3739e1109f2e887 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 8 Feb 2024 18:11:20 +0100 Subject: [PATCH 177/228] embbed favorite icon --- .../navigation/pages/widgets/FavoriteItem.java | 10 +++++++++- .../pages/widgets/FavoriteItem.ui.xml | 3 +-- .../client/resources/ApplicationResources.java | 4 ++++ .../resources}/icons/star.svg | 0 .../org/silverpeas/mobile/public/spmobile.css | 18 +++++++++++------- 5 files changed, 25 insertions(+), 10 deletions(-) rename mobile-war/src/main/java/org/silverpeas/mobile/{public => client/resources}/icons/star.svg (100%) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java index 270482ac5..0f18f0e5c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java @@ -25,6 +25,7 @@ package org.silverpeas.mobile.client.apps.navigation.pages.widgets; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.SpanElement; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; @@ -34,6 +35,7 @@ import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.common.navigation.LinksManager; import org.silverpeas.mobile.client.resources.ApplicationMessages; +import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.MyLinkDTO; import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO; @@ -44,6 +46,11 @@ public class FavoriteItem extends Composite { @UiField Anchor link; protected ApplicationMessages msg = null; + private ApplicationResources resources = GWT.create(ApplicationResources.class); + + @UiField + SpanElement icon; + interface FavoriteItemUiBinder extends UiBinder<Widget, FavoriteItem> { } @@ -51,6 +58,7 @@ interface FavoriteItemUiBinder extends UiBinder<Widget, FavoriteItem> { public FavoriteItem() { initWidget(uiBinder.createAndBindUi(this)); msg = GWT.create(ApplicationMessages.class); + icon.setInnerHTML(resources.favorite().getText()); } public void setData(MyLinkDTO data) { @@ -74,4 +82,4 @@ protected void onClick(ClickEvent event) { LinksManager.processLink(link); } -} \ No newline at end of file +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml index ee58469a2..ace0654ff 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml @@ -25,8 +25,7 @@ <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> <g:HTMLPanel tag="li"> - + <span ui:field="icon" class="icon-app"></span> <g:Anchor ui:field="link"></g:Anchor> - </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java index 52d2db168..df93d10f4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java @@ -43,6 +43,10 @@ public interface ApplicationResources extends ClientBundle { @Source("icons/offline.png") ImageResource offline(); + @Source("icons/star.svg") + @DataResource.MimeType("image/svg+xml") + TextResource favorite(); + @Source("icons/call.svg") @DataResource.MimeType("image/svg+xml") TextResource call(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/star.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/star.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/star.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/star.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index dc6e0aeb5..3f6d3f4be 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -547,11 +547,13 @@ html .ui-controlgroup-controls .ui-btn-up-c { font-size: 0.8em; } +.favoris-bloc span { + top:0.25em; + fill : #a9a9a9; +} + .favoris-bloc a { padding-left: 2.5em; - font-size: 0.95em; - background: transparent url('icons/star.svg') no-repeat; - background-size: auto; } .racourcis-bloc a { @@ -2109,10 +2111,12 @@ form .forms .fields > li:nth-child(even) { } .ui-listview.favoris a { - background: transparent url('icons/star.svg') no-repeat; - background-size: auto; - background-position-y: center; - padding-left: 2em; + padding-left: 2.5em; +} + +.ui-listview.favoris span { + top: 0.25em; + fill : #a9a9a9; } /*** Popup ***/ From 3cda45470538cf815a46eadb30ff87c135ca9773 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 9 Feb 2024 10:52:28 +0100 Subject: [PATCH 178/228] Feature #13982 --- .../org/silverpeas/mobile/mobileSettings.properties | 3 +++ .../server/servlets/PublicationContentServlet.java | 13 +++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties index 5e6857bc0..c7c84ee5a 100644 --- a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties +++ b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties @@ -1,6 +1,9 @@ # css skin file url styleSheet= +# css for wysiwyg contents +wysiwyg.styleSheet= + # icons app apple-touch-icon=touch-icon-iphone.png apple-touch-icon72x72=touch-icon-iphone.png diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java index 083924f12..ca0f1bc16 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/servlets/PublicationContentServlet.java @@ -115,19 +115,16 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re response.getOutputStream().print("<html>"); response.getOutputStream().print("<head>"); - response.getOutputStream() - .print("<meta http-equiv='content-type' content='text/html;charset=UTF-8' />"); - response.getOutputStream().print("<style>"); - - InputStream template = - getServletContext().getResourceAsStream("/spmobile/spmobile.css"); - response.getOutputStream().print(IOUtils.toString(template, StandardCharsets.UTF_8)); - response.getOutputStream().print("</style>"); + response.getOutputStream().print("<meta http-equiv='content-type' content='text/html;charset=UTF-8' />"); String urlCSS = mobileSettings.getString("styleSheet", ""); if (!urlCSS.isEmpty()) { response.getOutputStream().print("<link rel=\"stylesheet\" href=\"" + urlCSS + "\">"); } + String urlCSSWysiwyg = mobileSettings.getString("wysiwyg.styleSheet", ""); + if (!urlCSSWysiwyg.isEmpty()) { + response.getOutputStream().print("<link rel=\"stylesheet\" href=\"" + urlCSSWysiwyg + "\">"); + } response.getOutputStream().print("</head>"); response.getOutputStream().print("<body>"); From 7d218dba8befa8b08dec8cdf1e3191a9d37136f4 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 12 Feb 2024 17:11:58 +0100 Subject: [PATCH 179/228] Feature #13988 --- .../mobile/client/apps/tasks/TasksApp.java | 25 +++++-- .../events/app/TasksAppEventHandler.java | 2 + .../tasks/events/app/TasksDeleteEvent.java | 48 +++++++++++++ .../client/apps/tasks/pages/TasksPage.java | 66 +++++++++++++++-- .../client/apps/tasks/pages/TasksPage.ui.xml | 1 - .../tasks/pages/widgets/AddTaskButton.java | 2 +- .../tasks/pages/widgets/DeleteTaskButton.java | 59 +++++++++++++++ .../pages/widgets/DeleteTaskButton.ui.xml | 32 +++++++++ .../apps/tasks/pages/widgets/TaskItem.java | 72 ++++++++++++++++--- .../apps/tasks/resources/TasksMessages.java | 2 + .../tasks/resources/TasksMessages.properties | 1 + .../resources/TasksMessages_en.properties | 2 +- .../resources/TasksMessages_fr.properties | 2 +- .../client/components/base/ActionItem.java | 10 +++ .../client/components/base/PageContent.java | 11 ++- .../client/components/base/PageHeader.java | 4 ++ .../silverpeas/mobile/public/icons/delete.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 12 +++- .../mobile/server/services/ServiceTask.java | 17 +++-- .../shared/services/rest/ServiceTask.java | 13 ++-- 20 files changed, 343 insertions(+), 39 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksDeleteEvent.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.ui.xml create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/delete.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksApp.java index 467b5f614..2ac564ebf 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksApp.java @@ -25,16 +25,13 @@ package org.silverpeas.mobile.client.apps.tasks; import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Window; import org.fusesource.restygwt.client.Method; import org.silverpeas.mobile.client.apps.navigation.events.app.external.AbstractNavigationEvent; import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationAppInstanceChangedEvent; import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationEventHandler; import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationShowContentEvent; -import org.silverpeas.mobile.client.apps.tasks.events.app.AbstractTasksAppEvent; -import org.silverpeas.mobile.client.apps.tasks.events.app.TaskCreateEvent; -import org.silverpeas.mobile.client.apps.tasks.events.app.TaskUpdateEvent; -import org.silverpeas.mobile.client.apps.tasks.events.app.TasksAppEventHandler; -import org.silverpeas.mobile.client.apps.tasks.events.app.TasksLoadEvent; +import org.silverpeas.mobile.client.apps.tasks.events.app.*; import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskCreatedEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskUpdatedEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksLoadedEvent; @@ -128,6 +125,24 @@ public void onSuccess(final Method method, final TaskDTO taskDTO) { action.attempt(); } + @Override + public void deleteTask(TasksDeleteEvent event) { + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<Void>() { + @Override + public void attempt() { + super.attempt(); + ServicesLocator.getServiceTasks().deleteTasks(event.getTasks(), this); + } + @Override + public void onSuccess(Method method, Void unused) { + super.onSuccess(method, unused); + loadTasks(new TasksLoadEvent()); + } + }; + action.attempt(); + + } + @Override public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksAppEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksAppEventHandler.java index fd2987f03..c44a82995 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksAppEventHandler.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksAppEventHandler.java @@ -30,4 +30,6 @@ public interface TasksAppEventHandler extends EventHandler{ void loadTasks(TasksLoadEvent event); void updateTask(TaskUpdateEvent event); void createTask(TaskCreateEvent event); + + void deleteTask(TasksDeleteEvent event); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksDeleteEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksDeleteEvent.java new file mode 100644 index 000000000..fd74cfdbb --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/events/app/TasksDeleteEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.tasks.events.app; + +import org.silverpeas.mobile.shared.dto.TaskDTO; + +import java.util.List; + +public class TasksDeleteEvent extends AbstractTasksAppEvent { + + private List<TaskDTO> tasks; + + public TasksDeleteEvent(List<TaskDTO> tasks){ + super(); + this.tasks = tasks; + } + + @Override + protected void dispatch(TasksAppEventHandler handler) { + handler.deleteTask(this); + } + + public List<TaskDTO> getTasks() { + return tasks; + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java index 649710a8b..9acbfcb9e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java @@ -27,7 +27,9 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.HTMLPanel; +import org.silverpeas.mobile.client.apps.tasks.events.app.TasksDeleteEvent; import org.silverpeas.mobile.client.apps.tasks.events.app.TasksLoadEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.AbstractTasksPagesEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskCreatedEvent; @@ -35,14 +37,17 @@ import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksLoadedEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksPagesEventHandler; import org.silverpeas.mobile.client.apps.tasks.pages.widgets.AddTaskButton; +import org.silverpeas.mobile.client.apps.tasks.pages.widgets.DeleteTaskButton; import org.silverpeas.mobile.client.apps.tasks.pages.widgets.TaskItem; +import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.Notification; +import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.ActionsList; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.TaskDTO; +import java.util.ArrayList; import java.util.Iterator; /** @@ -50,19 +55,23 @@ */ public class TasksPage extends PageContent implements TasksPagesEventHandler { - interface TasksPageUiBinder extends UiBinder<HTMLPanel, TasksPage> { } private static TasksPageUiBinder uiBinder = GWT.create(TasksPageUiBinder.class); private AddTaskButton buttonCreate = new AddTaskButton(); + + private DeleteTaskButton buttonDelete = new DeleteTaskButton(); @UiField HTMLPanel container; @UiField UnorderedList list; - @UiField - ActionsList actionsShortcuts; + private boolean selectionMode = false; + private int changeSelectionNumber = 0; + + private TasksMessages msg = GWT.create(TasksMessages .class); public TasksPage() { initWidget(uiBinder.createAndBindUi(this)); + list.getElement().setId("tasks"); EventBus.getInstance().fireEvent(new TasksLoadEvent()); EventBus.getInstance().addHandler(AbstractTasksPagesEvent.TYPE, this); } @@ -70,12 +79,15 @@ public TasksPage() { @Override public void onTaskLoad(final TasksLoadedEvent event) { Notification.activityStop(); + list.clear(); + clearActions(); addActionShortcut(buttonCreate); Iterator<TaskDTO> i = event.getTasks().iterator(); while (i.hasNext()) { TaskDTO task = i.next(); if (task != null) { TaskItem item = new TaskItem(); + item.setParent(this); item.setData(task); list.add(item); } @@ -85,6 +97,7 @@ public void onTaskLoad(final TasksLoadedEvent event) { @Override public void onTaskCreated(final TaskCreatedEvent taskCreatedEvent) { TaskItem item = new TaskItem(); + item.setParent(this); item.setData(taskCreatedEvent.getTask()); list.add(item); } @@ -112,4 +125,49 @@ public void stop() { super.stop(); EventBus.getInstance().removeHandler(AbstractTasksPagesEvent.TYPE, this); } + + public boolean isSelectionMode() { + return selectionMode; + } + + private void deleteSelectedTasks() { + PopinConfirmation popin = new PopinConfirmation(msg.deleteConfirmation()); + popin.setYesCallback(new Command() { + @Override + public void execute() { + ArrayList<TaskDTO> selection = new ArrayList<>(); + for (int i = 0; i < list.getCount(); i++) { + TaskItem item = (TaskItem) list.getWidget(i); + if (item.isSelected()) { + selection.add(item.getData()); + } + } + EventBus.getInstance().fireEvent(new TasksDeleteEvent(selection)); + } + }); + popin.show(); + } + + public void setSelectionMode(boolean selectionMode) { + + this.selectionMode = selectionMode; + if (selectionMode) { + clearActions(); + buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedTasks();}}); + addActionShortcut(buttonDelete); + } else { + clearActions(); + addActionShortcut(buttonCreate); + } + for (int i = 0; i < list.getCount(); i++) { + TaskItem item = (TaskItem) list.getWidget(i); + item.setSelectionMode(selectionMode); + } + } + public void changeSelectionNumber(int i) { + changeSelectionNumber = changeSelectionNumber + i; + if (changeSelectionNumber == 0) { + setSelectionMode(false); + } + } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml index cfbb3dc50..0ffbcba8c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.ui.xml @@ -28,7 +28,6 @@ xmlns:components="urn:import:org.silverpeas.mobile.client.components"> <g:HTMLPanel ui:field="container" styleName="ui-content ui-body-a tasks"> - <base:ActionsList ui:field="actionsShortcuts"/> <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"></components:UnorderedList> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.java index 4f029ef90..41753a157 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.java @@ -30,7 +30,6 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.tasks.pages.TaskPage; import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; @@ -51,6 +50,7 @@ interface AddTaskItemUiBinder extends UiBinder<Widget, AddTaskButton> { public AddTaskButton() { msg = GWT.create(TasksMessages.class); + setId("add-task"); initWidget(uiBinder.createAndBindUi(this)); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.java new file mode 100644 index 000000000..736e6c613 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.tasks.pages.widgets; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; +import org.silverpeas.mobile.client.components.base.ActionItem; + +/** + * @author: svu + */ +public class DeleteTaskButton extends ActionItem { + + interface DeleteTaskItemUiBinder extends UiBinder<Widget, DeleteTaskButton> { + } + + @UiField Anchor link; + @UiField(provided = true) protected TasksMessages msg = null; + + private static DeleteTaskItemUiBinder uiBinder = GWT.create(DeleteTaskItemUiBinder.class); + public DeleteTaskButton() { + setId("delete-task"); + msg = GWT.create(TasksMessages.class); + initWidget(uiBinder.createAndBindUi(this)); + } + + @UiHandler("link") + void deleteTasks(ClickEvent event) { + getCallback().execute(); + } +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.ui.xml new file mode 100644 index 000000000..93e99db44 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.ui.xml @@ -0,0 +1,32 @@ +<!-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "https://www.silverpeas.org/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> + <ui:with field='msg' type='org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages'/> + + <g:HTMLPanel tag="li" ui:field="container" styleName="delete-task"> + <g:Anchor ui:field="link"/> + </g:HTMLPanel> +</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java index 65dcffd92..288dfc44f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java @@ -25,10 +25,11 @@ package org.silverpeas.mobile.client.apps.tasks.pages.widgets; import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.InputElement; import com.google.gwt.dom.client.SpanElement; import com.google.gwt.dom.client.Style; -import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.*; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; @@ -37,6 +38,7 @@ import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.tasks.pages.TaskPage; +import org.silverpeas.mobile.client.apps.tasks.pages.TasksPage; import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; import org.silverpeas.mobile.shared.dto.TaskDTO; @@ -53,6 +55,9 @@ public class TaskItem extends Composite { private TaskDTO task; + private TasksPage parent; + + private boolean selectionMode = false; interface ContactItemUiBinder extends UiBinder<Widget, TaskItem> { } @@ -82,27 +87,74 @@ public void setData(TaskDTO data) { updateRange(data.getPercentCompleted()); } + public void setParent(TasksPage page) { + this.parent = page; + } public TaskDTO getData() { return task; } @UiHandler("link") - protected void edit(ClickEvent event) { - if (task.getExternalId().isEmpty()) { - TaskPage page = new TaskPage(); - page.setPageTitle(msg.edit()); - page.setData(task); - page.show(); + protected void startTouch(TouchStartEvent event) { + if (!parent.isSelectionMode()) { + Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { + @Override + public boolean execute() { + selectionMode = true; + container.getElement().addClassName("selected"); + return false; + } + }, 400); + } + } + + public boolean isSelected() { + return container.getElement().hasClassName("selected"); + } + + @UiHandler("link") + protected void endTouch(TouchEndEvent event) { + if (parent.isSelectionMode()) { + if (container.getElement().hasClassName("selected")) { + container.getElement().removeClassName("selected"); + parent.changeSelectionNumber(-1); + } else { + container.getElement().addClassName("selected"); + parent.changeSelectionNumber(1); + } } else { - //TODO : redirect on content + if (selectionMode) { + container.getElement().addClassName("selected"); + parent.changeSelectionNumber(1); + parent.setSelectionMode(true); + } else { + if (task.getExternalId().isEmpty()) { + TaskPage page = new TaskPage(); + page.setPageTitle(msg.edit()); + page.setData(task); + page.show(); + Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { + @Override + public boolean execute() { + selectionMode = false; + container.getElement().removeClassName("selected"); + return false; + } + }, 400); + } else { + //TODO : redirect on content + } + } } } + public void setSelectionMode(boolean mode) { + this.selectionMode = mode; + } + private void updateRange(final int value) { double val = value / 100.0; String css = "background-image: -webkit-gradient(linear, 0% 0%, 100% 0%, color-stop(" + val + ", rgb(114, 171, 14)), color-stop(" + val + ", rgb(197, 197, 197)));"; range.setAttribute("style", css); } - - } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java index 63560ebab..eed5d5f93 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java @@ -32,4 +32,6 @@ public interface TasksMessages extends Messages { String actionEdit(); String nameField(); String edit(); + + String deleteConfirmation(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties index 72091d1d3..0202fdb34 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties @@ -27,4 +27,5 @@ actionCreate=Créer actionEdit=Modifier nameField=Nom de la tâche edit=Modifier +deleteConfirmation=Etes-vous sur de supprimer ces tâches ? diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties index 07eab09b9..ecf0696df 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties @@ -27,4 +27,4 @@ actionCreate=Create actionEdit=Modify nameField=Task name edit=Edit - +deleteConfirmation=Delete those tasks ? diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties index 72091d1d3..ba18574b9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties @@ -27,4 +27,4 @@ actionCreate=Créer actionEdit=Modifier nameField=Nom de la tâche edit=Modifier - +deleteConfirmation=Etes-vous sur de supprimer ces tâches ? diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionItem.java index f5c78f02a..41e30193f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionItem.java @@ -24,6 +24,7 @@ package org.silverpeas.mobile.client.components.base; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Composite; /** @@ -32,6 +33,7 @@ public class ActionItem extends Composite { private String id; + private Command callback; public String getId() { @@ -41,4 +43,12 @@ public String getId() { public void setId(final String id) { this.id = id; } + + public void setCallback(Command callback) { + this.callback = callback; + } + + protected Command getCallback() { + return this.callback; + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java index 7eabf4035..7b1e3c994 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java @@ -33,7 +33,6 @@ import com.google.gwt.user.client.Event; import com.google.gwt.user.client.Event.NativePreviewEvent; import com.google.gwt.user.client.Event.NativePreviewHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.common.EventBus; @@ -98,6 +97,16 @@ public void addActionShortcut(ActionItem action) { SpMobil.getMainPage().getHeader().addActionShortcut(action); } + public void removeActionShortcut(ActionItem action) { + actionsShortcuts.remove(action); + SpMobil.getMainPage().getHeader().removeActionShortcut(action); + } + + public void clearActions() { + actionsShortcuts.clear(); + SpMobil.getMainPage().getHeader().clearActions(); + } + public void addActionMenu(ActionItem action) { actionsMenu.add(action); SpMobil.getMainPage().getHeader().addActionMenu(action); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java index ecce4202c..252da0279 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java @@ -71,6 +71,10 @@ public void addActionShortcut(ActionItem action) { actionsShortcuts.addAction(action); } + public void removeActionShortcut(ActionItem action) { + actionsShortcuts.removeAction(action.getId(), true); + } + public void addActionMenu(ActionItem action) { actionsMenu.addAction(action); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/delete.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/delete.svg new file mode 100644 index 000000000..560d174b9 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/delete.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 3f6d3f4be..f6663b3d2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -803,7 +803,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { padding-left: 2.5em; } -#actionsList:has(.add-task) { +#actionsList:has(.add-task), #actionsList:has(.delete-task){ right: 1em; } @@ -813,8 +813,14 @@ html .ui-controlgroup-controls .ui-btn-up-c { filter: invert(1); background: url('icons/add.svg') no-repeat; } +.delete-task { + height: 24px; + width: 24px; + filter: invert(1); + background: url('icons/delete.svg') no-repeat; +} -.add-task a { +.add-task a, .delete-task a { height: 24px; width: 24px; display: block; @@ -1457,7 +1463,7 @@ li > #operations { width: 2em; } -#notification .list-notifications > li.selected, .list-resources > li.selected { +#notification .list-notifications > li.selected, .list-resources > li.selected, #tasks > li.selected { border-left: 8px solid #7eb73a; color: #000 } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceTask.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceTask.java index 270cb78e4..6d9ac57c4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceTask.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceTask.java @@ -38,12 +38,7 @@ import org.silverpeas.mobile.shared.dto.TaskDTO; import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import java.text.SimpleDateFormat; @@ -95,6 +90,16 @@ public void updateTask(TaskDTO task) { getCalendar().updateToDo(todo); } + @DELETE + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Path("") + public void deleteTasks(List<TaskDTO> tasks) { + for (TaskDTO task : tasks) { + getCalendar().removeToDo(task.getId()); + } + } + @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceTask.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceTask.java index 2cfffd1bd..97840bb83 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceTask.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceTask.java @@ -28,12 +28,7 @@ import org.fusesource.restygwt.client.RestService; import org.silverpeas.mobile.shared.dto.TaskDTO; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.util.List; @@ -55,6 +50,12 @@ public interface ServiceTask extends RestService { @Path("") public void updateTask(TaskDTO task, MethodCallback<Void> callback); + @DELETE + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Path("") + public void deleteTasks(List<TaskDTO> tasks, MethodCallback<Void> callback); + @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) From 55d76acc32d6aca3c3cfbd0052e1ef6354edeab2 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 12 Feb 2024 17:57:58 +0100 Subject: [PATCH 180/228] Feature #13988 : generalisation --- .../client/apps/tasks/pages/TasksPage.java | 16 +---- .../apps/tasks/pages/widgets/TaskItem.java | 60 +++-------------- .../client/components/base/PageContent.java | 18 +++++ .../base/widgets/SelectableItem.java | 66 +++++++++++++++++++ 4 files changed, 96 insertions(+), 64 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java index 9acbfcb9e..1a67df1a8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java @@ -64,9 +64,6 @@ interface TasksPageUiBinder extends UiBinder<HTMLPanel, TasksPage> { } @UiField UnorderedList list; - private boolean selectionMode = false; - private int changeSelectionNumber = 0; - private TasksMessages msg = GWT.create(TasksMessages .class); public TasksPage() { @@ -126,10 +123,6 @@ public void stop() { EventBus.getInstance().removeHandler(AbstractTasksPagesEvent.TYPE, this); } - public boolean isSelectionMode() { - return selectionMode; - } - private void deleteSelectedTasks() { PopinConfirmation popin = new PopinConfirmation(msg.deleteConfirmation()); popin.setYesCallback(new Command() { @@ -148,9 +141,10 @@ public void execute() { popin.show(); } + @Override public void setSelectionMode(boolean selectionMode) { + super.setSelectionMode(selectionMode); - this.selectionMode = selectionMode; if (selectionMode) { clearActions(); buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedTasks();}}); @@ -164,10 +158,4 @@ public void setSelectionMode(boolean selectionMode) { item.setSelectionMode(selectionMode); } } - public void changeSelectionNumber(int i) { - changeSelectionNumber = changeSelectionNumber + i; - if (changeSelectionNumber == 0) { - setSelectionMode(false); - } - } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java index 288dfc44f..06add7133 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java @@ -25,24 +25,24 @@ package org.silverpeas.mobile.client.apps.tasks.pages.widgets; import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.InputElement; import com.google.gwt.dom.client.SpanElement; import com.google.gwt.dom.client.Style; -import com.google.gwt.event.dom.client.*; +import com.google.gwt.event.dom.client.TouchEndEvent; +import com.google.gwt.event.dom.client.TouchStartEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.tasks.pages.TaskPage; -import org.silverpeas.mobile.client.apps.tasks.pages.TasksPage; import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; +import org.silverpeas.mobile.client.components.base.widgets.SelectableItem; import org.silverpeas.mobile.shared.dto.TaskDTO; -public class TaskItem extends Composite { +public class TaskItem extends SelectableItem { private static ContactItemUiBinder uiBinder = GWT.create(ContactItemUiBinder.class); @@ -54,10 +54,6 @@ public class TaskItem extends Composite { @UiField(provided = true) protected TasksMessages msg = null; private TaskDTO task; - - private TasksPage parent; - - private boolean selectionMode = false; interface ContactItemUiBinder extends UiBinder<Widget, TaskItem> { } @@ -86,26 +82,13 @@ public void setData(TaskDTO data) { range.setDisabled(true); updateRange(data.getPercentCompleted()); } - - public void setParent(TasksPage page) { - this.parent = page; - } public TaskDTO getData() { return task; } @UiHandler("link") protected void startTouch(TouchStartEvent event) { - if (!parent.isSelectionMode()) { - Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { - @Override - public boolean execute() { - selectionMode = true; - container.getElement().addClassName("selected"); - return false; - } - }, 400); - } + startTouch(event, container); } public boolean isSelected() { @@ -114,42 +97,19 @@ public boolean isSelected() { @UiHandler("link") protected void endTouch(TouchEndEvent event) { - if (parent.isSelectionMode()) { - if (container.getElement().hasClassName("selected")) { - container.getElement().removeClassName("selected"); - parent.changeSelectionNumber(-1); - } else { - container.getElement().addClassName("selected"); - parent.changeSelectionNumber(1); - } - } else { - if (selectionMode) { - container.getElement().addClassName("selected"); - parent.changeSelectionNumber(1); - parent.setSelectionMode(true); - } else { + endTouch(event, container, new Command() { + @Override + public void execute() { if (task.getExternalId().isEmpty()) { TaskPage page = new TaskPage(); page.setPageTitle(msg.edit()); page.setData(task); page.show(); - Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { - @Override - public boolean execute() { - selectionMode = false; - container.getElement().removeClassName("selected"); - return false; - } - }, 400); } else { //TODO : redirect on content } } - } - } - - public void setSelectionMode(boolean mode) { - this.selectionMode = mode; + }); } private void updateRange(final int value) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java index 7b1e3c994..393038ea7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java @@ -56,12 +56,16 @@ public abstract class PageContent extends Composite implements View, NativePrevi private App app; protected boolean clicked = false; + + private boolean selectionMode = false; protected String pageTitle; private HandlerRegistration registration; private SwipeRecognizer swipeRecognizer; private List<ActionItem> actionsMenu = new ArrayList<>(); private List<ActionItem> actionsShortcuts = new ArrayList<>(); + private int changeSelectionNumber = 0; + public PageContent() { super(); pageTitle = ResourcesManager.getLabel("mainpage.title"); @@ -203,4 +207,18 @@ public void loadedDataEvent(final DataLoadedEvent dataLoadedEvent) { public void loadedMoreDataEvent(final MoreDataLoadedEvent moreDataLoadedEvent) { // to be override if necessary } + + public boolean isSelectionMode() { + return selectionMode; + } + public void setSelectionMode(boolean selectionMode) { + this.selectionMode = selectionMode; + } + + public void changeSelectionNumber(int i) { + changeSelectionNumber = changeSelectionNumber + i; + if (changeSelectionNumber == 0) { + setSelectionMode(false); + } + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java new file mode 100644 index 000000000..b5643dc4f --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java @@ -0,0 +1,66 @@ +package org.silverpeas.mobile.client.components.base.widgets; + +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.event.dom.client.TouchEndEvent; +import com.google.gwt.event.dom.client.TouchStartEvent; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTMLPanel; +import org.silverpeas.mobile.client.apps.tasks.pages.TaskPage; +import org.silverpeas.mobile.client.components.base.PageContent; + +public class SelectableItem extends Composite { + + private PageContent parent; + private boolean selectionMode = false; + + public void setParent(PageContent page) { + this.parent = page; + } + + public void setSelectionMode(boolean mode) { + this.selectionMode = mode; + } + + protected void startTouch(TouchStartEvent event, HTMLPanel container) { + if (!parent.isSelectionMode()) { + Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { + @Override + public boolean execute() { + selectionMode = true; + container.getElement().addClassName("selected"); + return false; + } + }, 400); + } + } + + protected void endTouch(TouchEndEvent event, HTMLPanel container, Command onClickAction) { + if (parent.isSelectionMode()) { + if (container.getElement().hasClassName("selected")) { + container.getElement().removeClassName("selected"); + parent.changeSelectionNumber(-1); + } else { + container.getElement().addClassName("selected"); + parent.changeSelectionNumber(1); + } + } else { + if (selectionMode) { + container.getElement().addClassName("selected"); + parent.changeSelectionNumber(1); + parent.setSelectionMode(true); + } else { + onClickAction.execute(); + Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { + @Override + public boolean execute() { + selectionMode = false; + container.getElement().removeClassName("selected"); + return false; + } + }, 400); + } + } + } + +} From 69a274e619b3c9a53dd6c388ab754a75dd275c15 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 12 Feb 2024 18:19:32 +0100 Subject: [PATCH 181/228] Feature #13988 : only personals tasks --- .../client/apps/tasks/pages/widgets/TaskItem.java | 4 ++-- .../client/components/base/widgets/SelectableItem.java | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java index 06add7133..b26c4aacb 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java @@ -88,7 +88,7 @@ public TaskDTO getData() { @UiHandler("link") protected void startTouch(TouchStartEvent event) { - startTouch(event, container); + startTouch(event, container, task.getExternalId().isEmpty()); } public boolean isSelected() { @@ -97,7 +97,7 @@ public boolean isSelected() { @UiHandler("link") protected void endTouch(TouchEndEvent event) { - endTouch(event, container, new Command() { + endTouch(event, container, task.getExternalId().isEmpty(), new Command() { @Override public void execute() { if (task.getExternalId().isEmpty()) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java index b5643dc4f..84033b02d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java @@ -22,8 +22,8 @@ public void setSelectionMode(boolean mode) { this.selectionMode = mode; } - protected void startTouch(TouchStartEvent event, HTMLPanel container) { - if (!parent.isSelectionMode()) { + protected void startTouch(TouchStartEvent event, HTMLPanel container, boolean selectable) { + if (!parent.isSelectionMode() && selectable) { Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { @Override public boolean execute() { @@ -35,7 +35,11 @@ public boolean execute() { } } - protected void endTouch(TouchEndEvent event, HTMLPanel container, Command onClickAction) { + protected void endTouch(TouchEndEvent event, HTMLPanel container, boolean selectable, Command onClickAction) { + if (!selectable) { + onClickAction.execute(); + return; + } if (parent.isSelectionMode()) { if (container.getElement().hasClassName("selected")) { container.getElement().removeClassName("selected"); From 773a862313e9ecefb03f41a5c8d72bfb3f1327cf Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 12 Feb 2024 18:49:46 +0100 Subject: [PATCH 182/228] Fix Bug #13987 --- .../client/components/base/NavigationMenu.java | 13 ++++++++----- .../shared/helpers/ApplicationsHelper.java | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/shared/helpers/ApplicationsHelper.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java index 6bb16910f..622633fa7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java @@ -71,6 +71,7 @@ import org.silverpeas.mobile.shared.dto.StatusDTO; import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; import org.silverpeas.mobile.shared.dto.navigation.Apps; +import org.silverpeas.mobile.shared.helpers.ApplicationsHelper; import java.util.List; @@ -127,12 +128,14 @@ public NavigationMenu() { public void setPersonalApps(List<ApplicationInstanceDTO> applicationInstanceDTOS) { listApplications.clear(); for (ApplicationInstanceDTO app : applicationInstanceDTOS) { - if (app.getType().equals(Apps.kmelia.name())) { - app.setLabel(msg.myDocuments()); + if (ApplicationsHelper.isSupportedApp(app)) { + if (app.getType().equals(Apps.kmelia.name())) { + app.setLabel(msg.myDocuments()); + } + NavigationItem item = new NavigationItem(); + item.setData(app); + listApplications.add(item); } - NavigationItem item = new NavigationItem(); - item.setData(app); - listApplications.add(item); } personalAppsInitialized = true; } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/helpers/ApplicationsHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/helpers/ApplicationsHelper.java new file mode 100644 index 000000000..f1cdfb6ea --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/helpers/ApplicationsHelper.java @@ -0,0 +1,18 @@ +package org.silverpeas.mobile.shared.helpers; + +import com.google.gwt.user.client.Window; +import org.silverpeas.mobile.client.common.resources.ResourcesManager; +import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; + +public class ApplicationsHelper { + + public static boolean isSupportedApp(ApplicationInstanceDTO app) { + String appSupported = ResourcesManager.getParam("apps.supported"); + String apps[] = appSupported.split(","); + for (String ap : apps) { + if (app.getType().equalsIgnoreCase(ap.trim())) return true; + } + return false; + } + +} From e87fc8ba3dadc12f1474f120b27fbec3745f791d Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 12 Feb 2024 19:07:41 +0100 Subject: [PATCH 183/228] improve icons navigation --- .../mobile/client/apps/documents/pages/widgets/GedItem.java | 4 +++- .../client/apps/navigation/pages/widgets/NavigationItem.java | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java index f66332b33..57cee45f2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java @@ -72,6 +72,7 @@ public void setData(Object data) { icon.setHTML(resources.folder().getText()); } link.setText(dataTopic.getName() + " (" + dataTopic.getPubCount() + ")"); + link.setStyleName("ui-btn ui-btn-icon-right ui-icon-carat-r"); } else if (data instanceof PublicationDTO) { dataPublication = (PublicationDTO) data; link.setHTML(dataPublication.getName()); @@ -82,8 +83,9 @@ public void setData(Object data) { style += ");background-position:5px 5px;background-size:20px 20px;"; link.getElement().setAttribute("style", style); } + link.setStyleName("ui-btn ui-icon-carat-r"); } - link.setStyleName("ui-btn ui-btn-icon-right ui-icon-carat-r"); + } @UiHandler("link") diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java index 2f20ad283..43b994ef3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/NavigationItem.java @@ -67,6 +67,7 @@ public void setData(SilverpeasObjectDTO data) { if (((SpaceDTO)data).isPersonal()) { link.setText(msg.personalSpace()); } + link.setStyleName("ui-btn ui-btn-icon-right ui-icon-carat-r"); } else { String type = ((ApplicationInstanceDTO) data).getType(); if (type.equalsIgnoreCase(Apps.kmelia.name())) { @@ -112,8 +113,8 @@ public void setData(SilverpeasObjectDTO data) { setStyleName("app-resourcesManager"); icon.setHTML(resources.bookonline().getText()); } + link.setStyleName("ui-btn ui-icon-carat-r"); } - link.setStyleName("ui-btn ui-btn-icon-right ui-icon-carat-r"); } @UiHandler("link") From abf895e918d15c485d38672fbdb244592ce181a6 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 12 Feb 2024 19:23:05 +0100 Subject: [PATCH 184/228] Refactoring --- .../client/apps/tasks/pages/widgets/TaskItem.java | 9 +++------ .../components/base/widgets/SelectableItem.java | 13 +++++++++++-- .../java/org/silverpeas/mobile/public/spmobile.css | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java index b26c4aacb..9a9652a34 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/TaskItem.java @@ -60,6 +60,7 @@ interface ContactItemUiBinder extends UiBinder<Widget, TaskItem> { public TaskItem() { msg = GWT.create(TasksMessages.class); initWidget(uiBinder.createAndBindUi(this)); + setContainer(container); } public void setData(TaskDTO data) { @@ -88,16 +89,12 @@ public TaskDTO getData() { @UiHandler("link") protected void startTouch(TouchStartEvent event) { - startTouch(event, container, task.getExternalId().isEmpty()); - } - - public boolean isSelected() { - return container.getElement().hasClassName("selected"); + startTouch(event, task.getExternalId().isEmpty()); } @UiHandler("link") protected void endTouch(TouchEndEvent event) { - endTouch(event, container, task.getExternalId().isEmpty(), new Command() { + endTouch(event, task.getExternalId().isEmpty(), new Command() { @Override public void execute() { if (task.getExternalId().isEmpty()) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java index 84033b02d..80afeb6b2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java @@ -12,17 +12,26 @@ public class SelectableItem extends Composite { private PageContent parent; + private HTMLPanel container; private boolean selectionMode = false; public void setParent(PageContent page) { this.parent = page; } + public void setContainer(HTMLPanel container) { + this.container = container; + } + public void setSelectionMode(boolean mode) { this.selectionMode = mode; } - protected void startTouch(TouchStartEvent event, HTMLPanel container, boolean selectable) { + public boolean isSelected() { + return container.getElement().hasClassName("selected"); + } + + protected void startTouch(TouchStartEvent event, boolean selectable) { if (!parent.isSelectionMode() && selectable) { Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { @Override @@ -35,7 +44,7 @@ public boolean execute() { } } - protected void endTouch(TouchEndEvent event, HTMLPanel container, boolean selectable, Command onClickAction) { + protected void endTouch(TouchEndEvent event, boolean selectable, Command onClickAction) { if (!selectable) { onClickAction.execute(); return; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index f6663b3d2..f51d710d3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -726,7 +726,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { } #personals-apps a { border: none; - padding-left: 2em; + padding-left: 0.5em; padding-top: 0.5em; } From c2832af859b9d60575c9c59c97f0a2f10b5a69cb Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 12 Feb 2024 19:25:18 +0100 Subject: [PATCH 185/228] refactoring --- .../apps/tasks/pages/widgets/AddTaskItem.java | 62 ------------------- .../tasks/pages/widgets/AddTaskItem.ui.xml | 32 ---------- 2 files changed, 94 deletions(-) delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.java delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.ui.xml diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.java deleted file mode 100644 index b13e6e846..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2000 - 2022 Silverpeas - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * As a special exception to the terms and conditions of version 3.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * Open Source Software ("FLOSS") applications as described in Silverpeas's - * FLOSS exception. You should have received a copy of the text describing - * the FLOSS exception, and it is also available here: - * "https://www.silverpeas.org/legal/floss_exception.html" - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package org.silverpeas.mobile.client.apps.tasks.pages.widgets; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Widget; -import org.silverpeas.mobile.client.apps.tasks.pages.TaskPage; -import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; - -/** - * @author: svu - */ -public class AddTaskItem extends Composite { - - interface AddTaskItemUiBinder extends UiBinder<Widget, AddTaskItem> { - } - - @UiField Anchor link; - @UiField(provided = true) protected TasksMessages msg = null; - - private static AddTaskItemUiBinder uiBinder = GWT.create(AddTaskItemUiBinder.class); - - public AddTaskItem() { - msg = GWT.create(TasksMessages.class); - initWidget(uiBinder.createAndBindUi(this)); - } - - @UiHandler("link") - void createTask(ClickEvent event) { - TaskPage page = new TaskPage(); - page.setPageTitle(msg.create()); - page.show(); - } -} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.ui.xml deleted file mode 100644 index c9f8f3a0b..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskItem.ui.xml +++ /dev/null @@ -1,32 +0,0 @@ -<!-- - ~ Copyright (C) 2000 - 2022 Silverpeas - ~ - ~ This program is free software: you can redistribute it and/or modify - ~ it under the terms of the GNU Affero General Public License as - ~ published by the Free Software Foundation, either version 3 of the - ~ License, or (at your option) any later version. - ~ - ~ As a special exception to the terms and conditions of version 3.0 of - ~ the GPL, you may redistribute this Program in connection with Free/Libre - ~ Open Source Software ("FLOSS") applications as described in Silverpeas's - ~ FLOSS exception. You should have received a copy of the text describing - ~ the FLOSS exception, and it is also available here: - ~ "https://www.silverpeas.org/legal/floss_exception.html" - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU Affero General Public License for more details. - ~ - ~ You should have received a copy of the GNU Affero General Public License - ~ along with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> - <ui:with field='msg' type='org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages'/> - - <g:HTMLPanel tag="li" ui:field="container" styleName="add-task"> - <g:Anchor ui:field="link" styleName="ui-btn ui-btn-icon-right ui-icon-carat-more" text="{msg.create}"/> - </g:HTMLPanel> -</ui:UiBinder> \ No newline at end of file From cb83e5d1538f15896a9956cc9fd7c140791f0e4e Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 13 Feb 2024 11:23:00 +0100 Subject: [PATCH 186/228] Fix burger menu display actions --- .../silverpeas/mobile/client/components/base/NavigationMenu.java | 1 - .../src/main/java/org/silverpeas/mobile/public/spmobile.css | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java index 622633fa7..f8b650d5b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java @@ -105,7 +105,6 @@ public NavigationMenu() { initWidget(uiBinder.createAndBindUi(this)); container.getElement().setId("silverpeas-navmenu-panel"); listApplications.getElement().setId("personals-apps"); - container.getElement().getStyle().setHeight(Window.getClientHeight(), Unit.PX); user.getElement().setId("user"); String url = ResourcesManager.getParam("help.url"); if (url != null && !url.isEmpty()) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index f51d710d3..971a78720 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -653,6 +653,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { background-color: #f4f4f4; position: fixed; font-size: 0.8em; + height: 100vh; } #silverpeas-navmenu-panel .ui-panel-inner { From 345d1de13b40b7d8cb4588c4bfe72326ace81b51 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 13 Feb 2024 19:43:26 +0100 Subject: [PATCH 187/228] New selection design for notification box --- .../notificationsbox/NotificationsBoxApp.java | 3 +- .../pages/NotificationsBoxPage.java | 70 ++++++++++++++--- .../pages/widgets/DeleteButton.java | 15 +--- .../pages/widgets/DeleteButton.ui.xml | 4 +- .../pages/widgets/MarkAsReadButton.java | 13 +--- .../pages/widgets/MarkAsReadButton.ui.xml | 4 +- .../pages/widgets/NotificationItem.java | 76 ++++++++++--------- .../pages/widgets/NotificationItem.ui.xml | 11 +-- .../resources/NotificationsMessages.java | 2 + .../NotificationsMessages.properties | 2 + .../NotificationsMessages_en.properties | 4 +- .../NotificationsMessages_fr.properties | 4 +- .../base/widgets/SelectableItem.java | 1 + .../mobile/public/icons/mark_read.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 61 ++++++++++++--- .../services/AbstractRestWebService.java | 46 +++++++---- .../server/services/ServiceNotifications.java | 6 +- .../dto/notifications/NotificationBoxDTO.java | 9 +++ .../NotificationReceivedDTO.java | 1 + .../notifications/NotificationSendedDTO.java | 1 + 20 files changed, 226 insertions(+), 108 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/mark_read.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/NotificationsBoxApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/NotificationsBoxApp.java index 0f9b400a0..d7c28981e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/NotificationsBoxApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/NotificationsBoxApp.java @@ -25,6 +25,7 @@ package org.silverpeas.mobile.client.apps.notificationsbox; import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Window; import org.fusesource.restygwt.client.Method; import org.silverpeas.mobile.client.apps.navigation.events.app.external.AbstractNavigationEvent; import org.silverpeas.mobile.client.apps.navigation.events.app.external.NavigationAppInstanceChangedEvent; @@ -133,7 +134,7 @@ public void attempt() { public void onSuccess(final Method method, final Void unused) { super.onSuccess(method, unused); if (event.getSelection().get(0) instanceof NotificationSendedDTO) { - loadNotificationsSended(new NotificationsSendedLoadEvent()); + loadNotificationsSended(new NotificationsSendedLoadEvent(), 0); } else { loadNotifications(new NotificationsLoadEvent(), 0); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java index e92c5b261..2ab965cae 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java @@ -29,8 +29,12 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.apps.notificationsbox.events.app.DeleteNotificationsEvent; +import org.silverpeas.mobile.client.apps.notificationsbox.events.app.MarkAsReadNotificationsEvent; import org.silverpeas.mobile.client.apps.notificationsbox.events.app.NotificationsLoadEvent; import org.silverpeas.mobile.client.apps.notificationsbox.events.app.NotificationsSendedLoadEvent; import org.silverpeas.mobile.client.apps.notificationsbox.events.pages.AbstractNotificationsBoxPagesEvent; @@ -40,7 +44,9 @@ import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.DeleteButton; import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.MarkAsReadButton; import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.NotificationItem; +import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages; import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.resources.ApplicationMessages; @@ -62,9 +68,9 @@ public class NotificationsBoxPage extends PageContent implements NotificationsBo @UiField Anchor notificationReceived, notificationSended; - - private DeleteButton delete = new DeleteButton(); - private MarkAsReadButton notRead = new MarkAsReadButton(); + private NotificationsMessages msgApp = GWT.create(NotificationsMessages .class); + private DeleteButton buttonDelete = new DeleteButton(); + private MarkAsReadButton buttonNotRead = new MarkAsReadButton(); interface NotificationsBoxPageUiBinder extends UiBinder<Widget, NotificationsBoxPage> { } @@ -75,10 +81,8 @@ public NotificationsBoxPage() { initWidget(uiBinder.createAndBindUi(this)); EventBus.getInstance().addHandler(AbstractNotificationsBoxPagesEvent.TYPE, this); EventBus.getInstance().fireEvent(new NotificationsLoadEvent()); - delete.setParentPage(this); - notRead.setParentPage(this); - addActionMenu(delete); - addActionMenu(notRead); + buttonDelete.setParentPage(this); + buttonNotRead.setParentPage(this); } @Override @@ -96,6 +100,7 @@ public void onNotificationsLoaded(final NotificationsLoadedEvent event) { for (NotificationReceivedDTO notif : notifs) { NotificationItem item = new NotificationItem(); item.setData(notif); + item.setParent(this); notifications.add(item); } } @@ -110,6 +115,7 @@ public void onNotificationsSendedLoaded( for (NotificationSendedDTO notif : notifs) { NotificationItem item = new NotificationItem(); item.setData(notif); + item.setParent(this); notifications.add(item); } } @@ -127,19 +133,61 @@ public List<NotificationBoxDTO> getSelectedNotification() { @UiHandler("notificationSended") protected void showSendedNotifications(ClickEvent event) { + setSelectionMode(false); notificationReceived.removeStyleName("ui-btn-active"); notificationSended.addStyleName("ui-btn-active"); - - notRead.setVisible(false); - + buttonNotRead.setVisible(false); EventBus.getInstance().fireEvent(new NotificationsSendedLoadEvent()); } @UiHandler("notificationReceived") protected void showReceivedNotifications(ClickEvent event) { + setSelectionMode(false); notificationSended.removeStyleName("ui-btn-active"); notificationReceived.addStyleName("ui-btn-active"); - notRead.setVisible(true); + buttonNotRead.setVisible(true); EventBus.getInstance().fireEvent(new NotificationsLoadEvent()); } + + @Override + public void setSelectionMode(boolean selectionMode) { + super.setSelectionMode(selectionMode); + if (selectionMode) { + clearActions(); + buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedNotifications();}}); + buttonNotRead.setCallback(new Command() {@Override public void execute() {markAsReadNotifications();}}); + addActionShortcut(buttonNotRead); + addActionShortcut(buttonDelete); + + } else { + clearActions(); + } + for (int i = 0; i < notifications.getCount(); i++) { + NotificationItem item = (NotificationItem) notifications.getWidget(i); + item.setSelectionMode(selectionMode); + } + } + + private void markAsReadNotifications() { + List<NotificationBoxDTO> selection = getSelectedNotification(); + MarkAsReadNotificationsEvent notReadEvent = new MarkAsReadNotificationsEvent(); + notReadEvent.setSelection(selection); + EventBus.getInstance().fireEvent(notReadEvent); + clearActions(); + } + + private void deleteSelectedNotifications() { + PopinConfirmation popin = new PopinConfirmation(msgApp.deleteConfirmation()); + popin.setYesCallback(new Command() { + @Override + public void execute() { + List<NotificationBoxDTO> selection = getSelectedNotification(); + DeleteNotificationsEvent deleteEvent = new DeleteNotificationsEvent(); + deleteEvent.setSelection(selection); + if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent); + clearActions(); + } + }); + popin.show(); + } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java index ee509d84c..4ec466bdf 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java @@ -55,7 +55,7 @@ interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} @UiField HTMLPanel container; @UiField - Anchor delete; + Anchor link; @UiField(provided = true) protected NotificationsMessages msg = null; @@ -64,19 +64,12 @@ interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} public DeleteButton() { msg = GWT.create(NotificationsMessages.class); initWidget(uiBinder.createAndBindUi(this)); - setId("delete"); + setId("delete-notification"); } - @UiHandler("delete") + @UiHandler("link") void delete(ClickEvent event) { - List<NotificationBoxDTO> selection = parentPage.getSelectedNotification(); - - DeleteNotificationsEvent deleteEvent = new DeleteNotificationsEvent(); - deleteEvent.setSelection(selection); - if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent); - - // hide menu - ActionsMenu.close(getElement()); + getCallback().execute(); } public void setParentPage(final NotificationsBoxPage parentPage) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.ui.xml index 72d0b4821..4cd11cd25 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.ui.xml @@ -27,7 +27,7 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages'/> - <g:HTMLPanel tag="li" ui:field="container" styleName=""> - <g:Anchor styleName="" ui:field="delete" text="{msg.delete}"/> + <g:HTMLPanel tag="li" ui:field="container" styleName="delete-notification"> + <g:Anchor ui:field="link"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java index 1508dd38c..b6fcdf8d1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.java @@ -55,7 +55,7 @@ interface NotReadButtonUiBinder extends UiBinder<HTMLPanel, MarkAsReadButton> {} @UiField HTMLPanel container; @UiField - Anchor read; + Anchor link; @UiField(provided = true) protected NotificationsMessages msg = null; @@ -67,16 +67,9 @@ public MarkAsReadButton() { setId("markAsRead"); } - @UiHandler("read") + @UiHandler("link") void read(ClickEvent event) { - List<NotificationBoxDTO> selection = parentPage.getSelectedNotification(); - - MarkAsReadNotificationsEvent notReadEvent = new MarkAsReadNotificationsEvent(); - notReadEvent.setSelection(selection); - EventBus.getInstance().fireEvent(notReadEvent); - - // hide menu - ActionsMenu.close(getElement()); + getCallback().execute(); } public void setParentPage(final NotificationsBoxPage parentPage) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.ui.xml index a02e581fc..abcfc45c5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/MarkAsReadButton.ui.xml @@ -27,7 +27,7 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages'/> - <g:HTMLPanel tag="li" ui:field="container" styleName=""> - <g:Anchor styleName="" ui:field="read" text="{msg.markAsRead}"/> + <g:HTMLPanel tag="li" ui:field="container" styleName="markAsRead-notification"> + <g:Anchor ui:field="link"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java index 0006fcfb6..e361f954c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java @@ -25,82 +25,86 @@ package org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets; import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Style; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.event.dom.client.TouchEndEvent; +import com.google.gwt.event.dom.client.TouchStartEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.CheckBox; -import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; -import com.google.gwt.user.client.ui.InlineHTML; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.notificationsbox.events.app.NotificationReadenEvent; import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages; import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.components.base.widgets.SelectableItem; import org.silverpeas.mobile.shared.dto.notifications.NotificationBoxDTO; import org.silverpeas.mobile.shared.dto.notifications.NotificationReceivedDTO; import org.silverpeas.mobile.shared.dto.notifications.NotificationSendedDTO; -public class NotificationItem extends Composite implements ClickHandler { +public class NotificationItem extends SelectableItem { - private static ContactItemUiBinder uiBinder = GWT.create(ContactItemUiBinder.class); + private static NotificationItemUiBinder uiBinder = GWT.create(NotificationItemUiBinder.class); @UiField HTMLPanel container; @UiField - InlineHTML date, title, source, author; + SpanElement date, title, source, author; @UiField - CheckBox select; + Anchor link; @UiField(provided = true) protected NotificationsMessages msg = null; private NotificationBoxDTO data; - @Override - public void onClick(final ClickEvent clickEvent) { - if (data instanceof NotificationSendedDTO) { - Window.Location.assign(((NotificationSendedDTO)data).getLink()); - } else { - Window.Location.assign(((NotificationReceivedDTO)data).getLink()); - NotificationReadenEvent event = new NotificationReadenEvent((NotificationReceivedDTO) data); - EventBus.getInstance().fireEvent(event); - } - } - - interface ContactItemUiBinder extends UiBinder<Widget, NotificationItem> { + interface NotificationItemUiBinder extends UiBinder<Widget, NotificationItem> { } public NotificationItem() { msg = GWT.create(NotificationsMessages.class); initWidget(uiBinder.createAndBindUi(this)); - date.addClickHandler(this); - author.addClickHandler(this); - source.addClickHandler(this); - title.addClickHandler(this); + setContainer(container); + } + + @UiHandler("link") + protected void startTouch(TouchStartEvent event) { + startTouch(event, true); } - public boolean isSelected() { - return select.getValue(); + @UiHandler("link") + protected void endTouch(TouchEndEvent event) { + endTouch(event, true, new Command() { + @Override + public void execute() { + if (data instanceof NotificationSendedDTO) { + Window.Location.assign(((NotificationSendedDTO)data).getLink()); + } else { + Window.Location.assign(((NotificationReceivedDTO)data).getLink()); + NotificationReadenEvent event = new NotificationReadenEvent((NotificationReceivedDTO) data); + EventBus.getInstance().fireEvent(event); + } + } + }); } public void setData(NotificationSendedDTO data) { this.data = data; - date.setText(data.getDate()); - source.setText(data.getSource()); - title.setText(data.getTitle()); + date.setInnerText(data.getDate()); + source.setInnerHTML(data.getSource()); + title.setInnerText(data.getTitle()); } public void setData(NotificationReceivedDTO data) { this.data = data; - date.setText(data.getDate()); - author.setText(data.getAuthor()); - source.setText(data.getSource()); - title.setText(data.getTitle()); + date.setInnerText(data.getDate()); + author.setInnerText(data.getAuthor()); + source.setInnerText(data.getSource()); + title.setInnerText(data.getTitle()); if (data.getReaden() == 0) { - getElement().getStyle().setFontWeight(Style.FontWeight.BOLD); + getElement().addClassName("not-read"); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.ui.xml index 5b99b9a8a..5d9c6f737 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.ui.xml @@ -27,11 +27,12 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages'/> <g:HTMLPanel tag="li" ui:field="container" styleName="notification"> - <g:CheckBox ui:field="select" styleName="notification-checkbox"></g:CheckBox> - <g:InlineHTML ui:field="title" styleName="notification-title"></g:InlineHTML> - <g:InlineHTML ui:field="date" styleName="notification-date"></g:InlineHTML> - <g:InlineHTML ui:field="author" styleName="notification-author"></g:InlineHTML> - <g:InlineHTML ui:field="source" styleName="notification-source"></g:InlineHTML> + <g:Anchor ui:field="link" styleName=""> + <span ui:field="title" class="notification-title"></span> + <span ui:field="date" class="notification-date"></span> + <span ui:field="author" class="notification-author"></span> + <span ui:field="source" class="notification-source"></span> + </g:Anchor> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.java index 4a94b9a81..2788052c3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.java @@ -31,4 +31,6 @@ public interface NotificationsMessages extends Messages { String delete(); String markAsRead(); + String deleteConfirmation(); + } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.properties index c5880dea7..6efdad047 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages.properties @@ -25,3 +25,5 @@ delete=Supprimer la selection markAsRead=Marquer la selection comme lue +deleteConfirmation=Etes-vous sur de supprimer ces notifications ? + diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_en.properties index 7475e799f..e8a909713 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_en.properties @@ -23,4 +23,6 @@ # delete=Delete selection -markAsRead=Mark selection as read \ No newline at end of file +markAsRead=Mark selection as read + +deleteConfirmation=Delete those notifications ? \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_fr.properties index 46c35e9cc..23a79d757 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/resources/NotificationsMessages_fr.properties @@ -23,4 +23,6 @@ # delete=Supprimer la selection -markAsRead=Marquer la selection comme lue \ No newline at end of file +markAsRead=Marquer la selection comme lue + +deleteConfirmation=Etes-vous sur de supprimer ces notifications ? \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java index 80afeb6b2..681f9117c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java @@ -4,6 +4,7 @@ import com.google.gwt.event.dom.client.TouchEndEvent; import com.google.gwt.event.dom.client.TouchStartEvent; import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; import org.silverpeas.mobile.client.apps.tasks.pages.TaskPage; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/mark_read.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/mark_read.svg new file mode 100644 index 000000000..e09dd4c43 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/mark_read.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><rect fill="none" height="24" width="24" x="0"/><path d="M12,19c0-3.87,3.13-7,7-7c1.08,0,2.09,0.25,3,0.68V6c0-1.1-0.9-2-2-2H4C2.9,4,2,4.9,2,6v12c0,1.1,0.9,2,2,2h8.08 C12.03,19.67,12,19.34,12,19z M4,6l8,5l8-5v2l-8,5L4,8V6z M17.34,22l-3.54-3.54l1.41-1.41l2.12,2.12l4.24-4.24L23,16.34L17.34,22z"/></g></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 971a78720..e6a8ec2e9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -804,6 +804,15 @@ html .ui-controlgroup-controls .ui-btn-up-c { padding-left: 2.5em; } +#actionList-bloc > li { + display: inline-block; + padding-left: 0.5em; +} + +#actionList-bloc > li:last-child { + padding-left: 0em; +} + #actionsList:has(.add-task), #actionsList:has(.delete-task){ right: 1em; } @@ -1464,7 +1473,8 @@ li > #operations { width: 2em; } -#notification .list-notifications > li.selected, .list-resources > li.selected, #tasks > li.selected { +#notification .list-notifications > li.selected, .list-resources > li.selected, #tasks > li.selected, +.notifications > li.selected { border-left: 8px solid #7eb73a; color: #000 } @@ -2744,35 +2754,42 @@ a.popin-btn { } /********* notification **************/ -.notificationBox .ui-listview.notifications .notification-date { - color:#777; - display:inline-block; - font-size:90%; -} .notificationBox .ui-listview.notifications input { position:absolute; top:0.5em; left:0.25em; } +.notificationBox .ui-listview.notifications a { + background-color: transparent; + user-select: none; +} -.notificationBox .ui-listview.notifications .notification-author{ +.notificationBox .ui-listview.notifications .notification-date, +.notificationBox .ui-listview.notifications .notification-author { font-size:90%; display:inline-block; + color : #777; } .notificationBox .ui-listview.notifications .notification-source { font-size:90%; + color: #70a72e; } -.notificationBox .ui-listview.notifications .notification-title{ +.notificationBox .ui-listview.notifications .notification-title{ margin-bottom:0.75em; - font-weight:600; + color: #000; +} + +.notificationBox .notification.not-read a .notification-title { + font-weight: bold; } + .ui-listview.notifications li span { display:block; } .ui-listview.notifications li{ - padding: 0.75em 0.75em 0.75em 3em; + padding: 0.75em 0.75em 0.75em 2em; position: relative; border-bottom:1px solid #CCC; } @@ -2789,6 +2806,30 @@ a.popin-btn { background-color: #FFF; } +#actionsList:has(.delete-notification) { + right: 1em; +} + +.delete-notification { + height: 24px; + width: 24px; + filter: invert(1); + background: url('icons/delete.svg') no-repeat; +} + +.markAsRead-notification { + height: 24px; + width: 24px; + filter: invert(1); + background: url('icons/mark_read.svg') no-repeat; +} + +.delete-notification a, .markAsRead-notification a { + height: 24px; + width: 24px; + display: block; +} + /******** FAQ ********/ .faq-categories { width: 90vw; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java index fb02aa517..26a29000b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java @@ -2,6 +2,7 @@ import org.silverpeas.core.SilverpeasException; import org.silverpeas.core.security.authentication.AuthenticationCredential; +import org.silverpeas.core.security.authentication.AuthenticationResponse; import org.silverpeas.core.security.authentication.AuthenticationService; import org.silverpeas.core.security.authentication.AuthenticationServiceProvider; import org.silverpeas.core.security.session.SessionInfo; @@ -16,7 +17,6 @@ import org.silverpeas.mobile.server.common.CommandCreateList; import org.silverpeas.mobile.shared.StreamingList; import org.silverpeas.mobile.shared.dto.BaseDTO; -import org.silverpeas.mobile.shared.dto.notifications.NotificationSendedDTO; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; @@ -33,7 +33,7 @@ protected static SettingBundle getSettings() { return ResourceLocator.getSettingBundle("org.silverpeas.mobile.mobileSettings"); } - protected MainSessionController getMainSessionController() throws Exception { + protected MainSessionController getMainSessionController() { return (MainSessionController) getHttpRequest().getSession() .getAttribute(MAINSESSIONCONTROLLER_ATTRIBUT_NAME); } @@ -42,8 +42,16 @@ protected void setMainsessioncontroller(String login, String password, String do throws SilverpeasException { AuthenticationService authService = AuthenticationServiceProvider.getService(); AuthenticationCredential credential = AuthenticationCredential.newWithAsLogin(login); - String key = + AuthenticationResponse response = authService.authenticate(credential.withAsPassword(password).withAsDomainId(domainId)); + String key; + if (response == null) { + key = null; + } else if (response.getStatus().succeeded()) { + key = response.getToken(); + } else { + key = response.getStatus().getCode(); + } MainSessionController mainSessionController = new MainSessionController(key, getHttpRequest().getSession()); } @@ -75,7 +83,8 @@ protected void initSilverpeasSession(HttpServletRequest request) { } } - protected StreamingList createStreamingList(CommandCreateList command, int callNumber, int callSize, String cacheKey) throws Exception { + protected StreamingList createStreamingList(CommandCreateList command, int callNumber, + int callSize, String cacheKey) throws Exception { List list; if (callNumber == 0) { list = command.execute(); @@ -87,25 +96,31 @@ protected StreamingList createStreamingList(CommandCreateList command, int callN int calledSize = 0; boolean moreElements = true; - if (callNumber > 0) calledSize = callSize * callNumber; + if (callNumber > 0) { + calledSize = callSize * callNumber; + } if ((calledSize + callSize) >= list.size()) { moreElements = false; callSize = list.size() - calledSize; } - StreamingList<BaseDTO> streamingList = new StreamingList<BaseDTO>(list.subList(calledSize, calledSize + callSize), moreElements); - if (!streamingList.getMoreElement()) getHttpRequest().getSession().removeAttribute(cacheKey); + StreamingList<BaseDTO> streamingList = + new StreamingList<BaseDTO>(list.subList(calledSize, calledSize + callSize), moreElements); + if (!streamingList.getMoreElement()) { + getHttpRequest().getSession().removeAttribute(cacheKey); + } return streamingList; } - protected StreamingList<?> makeStreamingList(int callNumber, String CACHE_NAME, HttpServletRequest request, Populator populator) { + protected StreamingList<?> makeStreamingList(int callNumber, String CACHE_NAME, + HttpServletRequest request, Populator populator) { int callSize = 25; - List<?> list = (List<?>) request.getSession() - .getAttribute(CACHE_NAME); + if (callNumber==0) request.getSession().removeAttribute(CACHE_NAME); + List<?> list = (List<?>) request.getSession().getAttribute(CACHE_NAME); if (list == null) { - list = populator.execute(); - request.getSession().setAttribute(CACHE_NAME, list); + list = populator.execute(); + request.getSession().setAttribute(CACHE_NAME, list); } int calledSize = 0; @@ -120,9 +135,10 @@ protected StreamingList<?> makeStreamingList(int callNumber, String CACHE_NAME, } List<?> sbList = list.subList(calledSize, calledSize + callSize); - StreamingList<?> streamingList = - new StreamingList<>(sbList, moreElements); - if (callNumber == 0) streamingList.setFirstCall(true); + StreamingList<?> streamingList = new StreamingList<>(sbList, moreElements); + if (callNumber == 0) { + streamingList.setFirstCall(true); + } if (!streamingList.getMoreElement()) { getHttpRequest().getSession().removeAttribute(CACHE_NAME); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java index 30e8ee7b1..6c4827549 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNotifications.java @@ -117,7 +117,7 @@ public List<?> execute() { SentNotificationInterface.get().getAllNotifByUser(getUser().getId()); for (SentNotificationDetail notif : notifications) { NotificationSendedDTO dto = new NotificationSendedDTO(); - dto.setSource(notif.getSource()); + dto.setSource(notif.getBody()); dto.setDate(sdf.format(notif.getNotifDate())); dto.setLink(notif.getLink()); dto.setTitle(notif.getTitle()); @@ -362,10 +362,10 @@ private List<String> getSelectionIds(List<NotificationBoxDTO> selection) { @Consumes(MediaType.APPLICATION_JSON) @Path("") public void delete(List<NotificationBoxDTO> selection) { - if (selection.get(0) instanceof NotificationSendedDTO) { + if (selection.get(0).isSended()) { for (NotificationBoxDTO dto : selection) { try { - SentNotificationInterface.get().deleteNotif(String.valueOf(dto.getIdNotif()), Integer.parseInt(getUser().getId())); + SentNotificationInterface.get().deleteNotif(getUser().getId(), (int) dto.getIdNotif()); } catch (NotificationException e) { SilverLogger.getLogger(this).error(e); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationBoxDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationBoxDTO.java index d7529eb6e..39d6634b6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationBoxDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationBoxDTO.java @@ -34,6 +34,7 @@ public class NotificationBoxDTO implements Serializable { private long idNotif; + private boolean sended; public long getIdNotif() { return idNotif; @@ -42,4 +43,12 @@ public long getIdNotif() { public void setIdNotif(final long idNotif) { this.idNotif = idNotif; } + + public boolean isSended() { + return sended; + } + + protected void setSended(boolean sended) { + this.sended = sended; + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationReceivedDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationReceivedDTO.java index feff5f1c7..e71e179b9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationReceivedDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationReceivedDTO.java @@ -42,6 +42,7 @@ public class NotificationReceivedDTO extends NotificationBoxDTO implements Seria public NotificationReceivedDTO() { super(); + setSended(false); } public String getDate() { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationSendedDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationSendedDTO.java index a393444f3..aeabdb25a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationSendedDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/notifications/NotificationSendedDTO.java @@ -40,6 +40,7 @@ public class NotificationSendedDTO extends NotificationBoxDTO implements Seriali public NotificationSendedDTO() { super(); + setSended(true); } public String getDate() { From 97e2ee95fcca56dd684ad1b75426790bcefa7119 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 13 Feb 2024 21:43:52 +0100 Subject: [PATCH 188/228] Fix multi touch selection --- .../pages/widgets/NotificationItem.java | 6 ++ .../base/widgets/SelectableItem.java | 70 ++++++++++--------- .../org/silverpeas/mobile/public/spmobile.css | 1 - 3 files changed, 43 insertions(+), 34 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java index e361f954c..cf9de3739 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java @@ -27,6 +27,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.SpanElement; import com.google.gwt.event.dom.client.TouchEndEvent; +import com.google.gwt.event.dom.client.TouchMoveEvent; import com.google.gwt.event.dom.client.TouchStartEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; @@ -74,6 +75,11 @@ protected void startTouch(TouchStartEvent event) { startTouch(event, true); } + @UiHandler("link") + protected void moveTouch(TouchMoveEvent event) { + super.moveTouch(event); + } + @UiHandler("link") protected void endTouch(TouchEndEvent event) { endTouch(event, true, new Command() { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java index 681f9117c..36dfd88bf 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java @@ -1,13 +1,12 @@ package org.silverpeas.mobile.client.components.base.widgets; -import com.google.gwt.core.client.Scheduler; import com.google.gwt.event.dom.client.TouchEndEvent; +import com.google.gwt.event.dom.client.TouchMoveEvent; import com.google.gwt.event.dom.client.TouchStartEvent; import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.tasks.pages.TaskPage; +import com.google.gwt.user.client.u i.HTMLPanel; import org.silverpeas.mobile.client.components.base.PageContent; public class SelectableItem extends Composite { @@ -15,6 +14,9 @@ public class SelectableItem extends Composite { private PageContent parent; private HTMLPanel container; private boolean selectionMode = false; + private boolean onMove = false; + + private Timer timer = null; public void setParent(PageContent page) { this.parent = page; @@ -34,46 +36,48 @@ public boolean isSelected() { protected void startTouch(TouchStartEvent event, boolean selectable) { if (!parent.isSelectionMode() && selectable) { - Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { + timer = new Timer() { @Override - public boolean execute() { + public void run() { selectionMode = true; container.getElement().addClassName("selected"); - return false; } - }, 400); + }; + timer.schedule(400); } } + protected void moveTouch(TouchMoveEvent event) { + if (timer != null) timer.cancel(); + onMove = true; + } + protected void endTouch(TouchEndEvent event, boolean selectable, Command onClickAction) { - if (!selectable) { - onClickAction.execute(); - return; - } - if (parent.isSelectionMode()) { - if (container.getElement().hasClassName("selected")) { - container.getElement().removeClassName("selected"); - parent.changeSelectionNumber(-1); - } else { - container.getElement().addClassName("selected"); - parent.changeSelectionNumber(1); + if (!onMove) { + if (!selectable) { + onClickAction.execute(); + return; } - } else { - if (selectionMode) { - container.getElement().addClassName("selected"); - parent.changeSelectionNumber(1); - parent.setSelectionMode(true); + if (parent.isSelectionMode()) { + if (container.getElement().hasClassName("selected")) { + container.getElement().removeClassName("selected"); + parent.changeSelectionNumber(-1); + } else { + container.getElement().addClassName("selected"); + parent.changeSelectionNumber(1); + } } else { - onClickAction.execute(); - Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() { - @Override - public boolean execute() { - selectionMode = false; - container.getElement().removeClassName("selected"); - return false; - } - }, 400); + if (selectionMode) { + container.getElement().addClassName("selected"); + parent.changeSelectionNumber(1); + parent.setSelectionMode(true); + } else { + onClickAction.execute(); + if (timer != null) timer.cancel(); + } } + } else { + onMove = false; } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index e6a8ec2e9..b172b060b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -2762,7 +2762,6 @@ a.popin-btn { .notificationBox .ui-listview.notifications a { background-color: transparent; - user-select: none; } .notificationBox .ui-listview.notifications .notification-date, From f714f541cc95ca3a933444c34f7aaa710208a05d Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 14 Feb 2024 11:34:50 +0100 Subject: [PATCH 189/228] Fix multi selection --- .../pages/NotificationsBoxPage.java | 5 -- .../client/apps/tasks/pages/TasksPage.java | 4 -- .../client/components/base/PageContent.java | 5 ++ .../base/widgets/SelectableItem.java | 65 ++++++++++--------- .../org/silverpeas/mobile/public/spmobile.css | 3 + .../webapp/WEB-INF/manifest.json.template | 2 +- 6 files changed, 44 insertions(+), 40 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java index 2ab965cae..7e0063f60 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java @@ -30,7 +30,6 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.notificationsbox.events.app.DeleteNotificationsEvent; @@ -162,10 +161,6 @@ public void setSelectionMode(boolean selectionMode) { } else { clearActions(); } - for (int i = 0; i < notifications.getCount(); i++) { - NotificationItem item = (NotificationItem) notifications.getWidget(i); - item.setSelectionMode(selectionMode); - } } private void markAsReadNotifications() { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java index 1a67df1a8..67d17709e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java @@ -153,9 +153,5 @@ public void setSelectionMode(boolean selectionMode) { clearActions(); addActionShortcut(buttonCreate); } - for (int i = 0; i < list.getCount(); i++) { - TaskItem item = (TaskItem) list.getWidget(i); - item.setSelectionMode(selectionMode); - } } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java index 393038ea7..39a336178 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageContent.java @@ -213,6 +213,7 @@ public boolean isSelectionMode() { } public void setSelectionMode(boolean selectionMode) { this.selectionMode = selectionMode; + resetSelectionNumber(); } public void changeSelectionNumber(int i) { @@ -221,4 +222,8 @@ public void changeSelectionNumber(int i) { setSelectionMode(false); } } + + private void resetSelectionNumber() { + changeSelectionNumber = 0; + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java index 36dfd88bf..c8a6a6579 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SelectableItem.java @@ -6,17 +6,18 @@ import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.u i.HTMLPanel; +import com.google.gwt.user.client.ui.HTMLPanel; import org.silverpeas.mobile.client.components.base.PageContent; public class SelectableItem extends Composite { private PageContent parent; private HTMLPanel container; - private boolean selectionMode = false; private boolean onMove = false; + private boolean unSelected = false; - private Timer timer = null; + private Timer timerSelection = null; + private Timer timerScroll = null; public void setParent(PageContent page) { this.parent = page; @@ -26,59 +27,63 @@ public void setContainer(HTMLPanel container) { this.container = container; } - public void setSelectionMode(boolean mode) { - this.selectionMode = mode; - } - public boolean isSelected() { return container.getElement().hasClassName("selected"); } protected void startTouch(TouchStartEvent event, boolean selectable) { if (!parent.isSelectionMode() && selectable) { - timer = new Timer() { + timerSelection = new Timer() { @Override public void run() { - selectionMode = true; + parent.setSelectionMode(true); container.getElement().addClassName("selected"); + parent.changeSelectionNumber(1); + } + }; + timerSelection.schedule(400); + } else if (parent.isSelectionMode() && selectable) { + timerScroll = new Timer() { + @Override + public void run() { + if (!onMove) { + if (container.getElement().hasClassName("selected")) { + container.getElement().removeClassName("selected"); + parent.changeSelectionNumber(-1); + unSelected = true; + } else { + container.getElement().addClassName("selected"); + parent.changeSelectionNumber(1); + } + } else { + onMove = false; + } } }; - timer.schedule(400); + timerScroll.schedule(100); } } protected void moveTouch(TouchMoveEvent event) { - if (timer != null) timer.cancel(); + if (timerSelection != null) timerSelection.cancel(); + if (timerScroll != null) timerScroll.cancel(); onMove = true; } protected void endTouch(TouchEndEvent event, boolean selectable, Command onClickAction) { + if (timerSelection != null) timerSelection.cancel(); if (!onMove) { - if (!selectable) { - onClickAction.execute(); - return; - } - if (parent.isSelectionMode()) { - if (container.getElement().hasClassName("selected")) { - container.getElement().removeClassName("selected"); - parent.changeSelectionNumber(-1); - } else { - container.getElement().addClassName("selected"); - parent.changeSelectionNumber(1); - } - } else { - if (selectionMode) { - container.getElement().addClassName("selected"); - parent.changeSelectionNumber(1); - parent.setSelectionMode(true); - } else { + if (selectable) { + if (!parent.isSelectionMode() && !unSelected) { onClickAction.execute(); - if (timer != null) timer.cancel(); } + } else { + onClickAction.execute(); } } else { onMove = false; } + unSelected = false; } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index b172b060b..04349f993 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -2769,15 +2769,18 @@ a.popin-btn { font-size:90%; display:inline-block; color : #777; + user-select: none; } .notificationBox .ui-listview.notifications .notification-source { font-size:90%; color: #70a72e; + user-select: none; } .notificationBox .ui-listview.notifications .notification-title{ margin-bottom:0.75em; color: #000; + user-select: none; } .notificationBox .notification.not-read a .notification-title { diff --git a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template index e48086034..6abde7196 100644 --- a/mobile-war/src/main/webapp/WEB-INF/manifest.json.template +++ b/mobile-war/src/main/webapp/WEB-INF/manifest.json.template @@ -9,7 +9,7 @@ "start_url": "/silverpeas/spmobile/spmobil.jsp", "display": "standalone", "display_override": ["standalone", "minimal-ui"], - "theme_color": "#00FF00", + "theme_color": "#7eb73b", "icons": [ { "src" : "icon.png", From 1535f134a3a5bc155b2a08c40c2f18207fe842ec Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 14 Feb 2024 18:12:07 +0100 Subject: [PATCH 190/228] enhance sharebox --- .../apps/sharesbox/pages/SharesBoxPage.java | 36 ++++++++- .../apps/sharesbox/pages/SharesBoxPage.ui.xml | 4 +- .../sharesbox/pages/widgets/DeleteButton.java | 27 +------ .../pages/widgets/DeleteButton.ui.xml | 5 +- .../sharesbox/pages/widgets/ShareItem.java | 63 +++++++++++----- .../sharesbox/pages/widgets/ShareItem.ui.xml | 11 +-- .../sharesbox/resources/ShareMessages.java | 1 + .../resources/ShareMessages.properties | 1 + .../resources/ShareMessages_en.properties | 3 +- .../resources/ShareMessages_fr.properties | 3 +- .../silverpeas/mobile/public/icons/link.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 74 +++++++++++++++++-- 12 files changed, 165 insertions(+), 64 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/link.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java index c23567afb..cc7b6a7fc 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java @@ -27,7 +27,9 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.apps.sharesbox.events.app.DeleteSharesEvent; import org.silverpeas.mobile.client.apps.sharesbox.events.pages.AbstractSharesBoxPagesEvent; import org.silverpeas.mobile.client.apps.sharesbox.events.pages.SharesBoxPagesEventHandler; import org.silverpeas.mobile.client.apps.sharesbox.events.pages.SharesDeletedEvent; @@ -35,6 +37,7 @@ import org.silverpeas.mobile.client.apps.sharesbox.pages.widgets.ShareItem; import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages; import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; @@ -52,13 +55,14 @@ public class SharesBoxPage extends PageContent implements SharesBoxPagesEventHan UnorderedList shares; private List<TicketDTO> data; - private DeleteButton delete = new DeleteButton(); + private DeleteButton buttonDelete = new DeleteButton(); public void setData(List<TicketDTO> data) { this.data = data; for (TicketDTO d : data) { ShareItem item = new ShareItem(); item.setData(d); + item.setParent(this); shares.add(item); } } @@ -94,10 +98,34 @@ public SharesBoxPage() { msg = GWT.create(ShareMessages.class); setPageTitle(msg.title()); initWidget(uiBinder.createAndBindUi(this)); - shares.getElement().setId("shares"); EventBus.getInstance().addHandler(AbstractSharesBoxPagesEvent.TYPE, this); - delete.setParentPage(this); - addActionMenu(delete); + } + + @Override + public void setSelectionMode(boolean selectionMode) { + super.setSelectionMode(selectionMode); + if (selectionMode) { + clearActions(); + buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedShares();}}); + addActionShortcut(buttonDelete); + + } else { + clearActions(); + } + } + + private void deleteSelectedShares() { + PopinConfirmation popin = new PopinConfirmation(msg.deleteConfirmation()); //TODO + popin.setYesCallback(new Command() { + @Override + public void execute() { + List<TicketDTO> selection = getSelectedShares(); + DeleteSharesEvent deleteEvent = new DeleteSharesEvent(); + deleteEvent.setSelection(selection); + if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent); + } + }); + popin.show(); } @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml index 5bb8c953e..892bd70af 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.ui.xml @@ -30,8 +30,8 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages' /> - <g:HTMLPanel ui:field="container" styleName="content ui-body-a notificationBox"> + <g:HTMLPanel ui:field="container" styleName="content ui-body-a sharesbox"> - <components:UnorderedList ui:field="shares" stylePrimaryName="ui-listview ui-listview-inset ui-corner-all ui-shadow"></components:UnorderedList> + <components:UnorderedList ui:field="shares" stylePrimaryName="ui-listview ui-listview-inset ui-corner-all ui-shadow shares"></components:UnorderedList> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java index 517ceea35..24c593333 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java @@ -31,15 +31,8 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.sharesbox.events.app.DeleteSharesEvent; -import org.silverpeas.mobile.client.apps.sharesbox.pages.SharesBoxPage; import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages; -import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.ActionItem; -import org.silverpeas.mobile.client.components.base.ActionsMenu; -import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; - -import java.util.List; /** * @author: svu @@ -50,12 +43,10 @@ interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} private static DeleteButtonUiBinder uiBinder = GWT.create(DeleteButtonUiBinder.class); - private SharesBoxPage parentPage; - @UiField HTMLPanel container; @UiField - Anchor delete; + Anchor link; @UiField(provided = true) protected ShareMessages msg = null; @@ -64,21 +55,11 @@ interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} public DeleteButton() { msg = GWT.create(ShareMessages.class); initWidget(uiBinder.createAndBindUi(this)); - setId("delete"); + setId("delete-share"); } - @UiHandler("delete") + @UiHandler("link") void delete(ClickEvent event) { - List<TicketDTO> selection = parentPage.getSelectedShares(); - DeleteSharesEvent deleteEvent = new DeleteSharesEvent(); - deleteEvent.setSelection(selection); - if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent); - - // hide menu - ActionsMenu.close(getElement()); - } - - public void setParentPage(final SharesBoxPage parentPage) { - this.parentPage = parentPage; + getCallback().execute(); } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.ui.xml index 472786168..0c882f21f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.ui.xml @@ -27,7 +27,8 @@ <ui:with field='msg' type='org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages'/> - <g:HTMLPanel tag="li" ui:field="container" styleName=""> - <g:Anchor styleName="" ui:field="delete" text="{msg.delete}"/> + <g:HTMLPanel tag="li" ui:field="container" styleName="delete-share"> + <g:Anchor ui:field="link"/> </g:HTMLPanel> + </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.java index 254038a31..9a265b9d9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.java @@ -25,52 +25,75 @@ package org.silverpeas.mobile.client.apps.sharesbox.pages.widgets; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.dom.client.AnchorElement; +import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.event.dom.client.TouchEndEvent; +import com.google.gwt.event.dom.client.TouchMoveEvent; +import com.google.gwt.event.dom.client.TouchStartEvent; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.*; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.apps.notificationsbox.events.app.NotificationReadenEvent; import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages; +import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.components.base.widgets.SelectableItem; +import org.silverpeas.mobile.shared.dto.notifications.NotificationReceivedDTO; +import org.silverpeas.mobile.shared.dto.notifications.NotificationSendedDTO; import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; import java.util.Date; -public class ShareItem extends Composite implements ClickHandler { +public class ShareItem extends SelectableItem { private static ShareItemUiBinder uiBinder = GWT.create(ShareItemUiBinder.class); @UiField HTMLPanel container; @UiField - InlineHTML date, name; + SpanElement date, name; @UiField Anchor link; @UiField - CheckBox select; + AnchorElement shareLink; @UiField(provided = true) protected ShareMessages msg = null; private TicketDTO data; - @Override - public void onClick(final ClickEvent clickEvent) { - //TODO - } - interface ShareItemUiBinder extends UiBinder<Widget, ShareItem> { } public ShareItem() { msg = GWT.create(ShareMessages.class); initWidget(uiBinder.createAndBindUi(this)); - date.addClickHandler(this); - name.addClickHandler(this); + setContainer(container); + } + + @UiHandler("link") + protected void startTouch(TouchStartEvent event) { + startTouch(event, true); + } + + @UiHandler("link") + protected void moveTouch(TouchMoveEvent event) { + super.moveTouch(event); } - public boolean isSelected() { - return select.getValue(); + @UiHandler("link") + protected void endTouch(TouchEndEvent event) { + endTouch(event, true, new Command() { + @Override + public void execute() { + //TODO : display share informations + } + }); } public void setData(TicketDTO data) { @@ -78,14 +101,14 @@ public void setData(TicketDTO data) { Date dt = new Date(); dt.setTime(Long.parseLong(data.getCreationDate())); DateTimeFormat fmt = DateTimeFormat.getFormat("dd/MM/yyyy"); - date.setText(fmt.format(dt)); - name.setText(data.getName()); + date.setInnerText(fmt.format(dt)); + name.setInnerText(data.getName()); - link.setHref("/silverpeas/Ticket?Key=" + data.getToken()); + shareLink.setHref("/silverpeas/Ticket?Key=" + data.getToken()); if (data.getSharedObjectType().equalsIgnoreCase("Attachment")) { - link.getElement().setAttribute("download", data.getName()); + shareLink.setAttribute("download", data.getName()); } else { - link.setTarget("_blank"); + shareLink.setTarget("_blank"); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.ui.xml index 60eecc36c..715d07d10 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/ShareItem.ui.xml @@ -26,11 +26,12 @@ <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> <ui:with field='msg' type='org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages'/> - <g:HTMLPanel tag="li" ui:field="container"> - <g:CheckBox ui:field="select" styleName="share-checkbox"></g:CheckBox> - <g:InlineHTML ui:field="date" styleName="share-date"></g:InlineHTML> - <g:Anchor ui:field="link" styleName="share-link" target="_self"></g:Anchor> - <g:InlineHTML ui:field="name" styleName="share-name"></g:InlineHTML> + <g:HTMLPanel tag="li" ui:field="container" styleName="share"> + <g:Anchor ui:field="link" styleName=""> + <a ui:field="shareLink" class="share-link" target="_self"></a> + <span ui:field="date" class="share-date"></span> + <span ui:field="name" class="share-name"></span> + </g:Anchor> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.java index 9a4263e68..18407a046 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.java @@ -32,4 +32,5 @@ public interface ShareMessages extends Messages { String delete(); + String deleteConfirmation(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.properties index d7f1d64d4..c314b3bfa 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages.properties @@ -24,3 +24,4 @@ title=Mes partages delete=Supprimer +deleteConfirmation=Etes-vous sur de supprimer ces partages ? \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_en.properties index 67d7d6c68..a3624f7aa 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_en.properties @@ -23,4 +23,5 @@ # title=My tickets -delete=Delete \ No newline at end of file +delete=Delete +deleteConfirmation=Etes-vous sur de supprimer ces partages ? \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_fr.properties index ce32461bd..a6b62a606 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/resources/ShareMessages_fr.properties @@ -23,4 +23,5 @@ # title=Mes partages -delete=Supprimer \ No newline at end of file +delete=Supprimer +deleteConfirmation=Delete those shares ? \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/link.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/link.svg new file mode 100644 index 000000000..50ce54c18 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/link.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 04349f993..7d075e3b0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -480,7 +480,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { color: #fff; font-size: 1.1em; font-weight: normal; - left: 60px; + left: 50px; line-height: 44px; margin: 0; overflow: hidden; @@ -488,6 +488,10 @@ html .ui-controlgroup-controls .ui-btn-up-c { position: absolute; top: 1px; height: 44px; + width: calc(100vw - 50px - 2.5em); + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; } .ui-btn-right.back { @@ -813,7 +817,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { padding-left: 0em; } -#actionsList:has(.add-task), #actionsList:has(.delete-task){ +#actionsList:has(.add-task), #actionsList:has(.delete-task), #actionsList:has(.delete-share) { right: 1em; } @@ -1422,6 +1426,7 @@ li > #operations { margin-bottom: 2em; } + /* notification */ #notification .list-contacts li { @@ -1474,7 +1479,7 @@ li > #operations { } #notification .list-notifications > li.selected, .list-resources > li.selected, #tasks > li.selected, -.notifications > li.selected { +.notifications > li.selected, .shares > li.selected { border-left: 8px solid #7eb73a; color: #000 } @@ -2753,6 +2758,63 @@ a.popin-btn { padding:1em; } +/********* sharebox **************/ + +.sharesbox .ui-listview.shares a { + background-color: transparent; +} + +.sharesbox .ui-listview.shares .share-date { + font-size:90%; + display:inline-block; + color : #777; + user-select: none; +} + +.sharesbox .ui-listview.shares .share-name { + font-size:90%; + display:block; + color: #70a72e; + user-select: none; +} + +.sharesbox .ui-listview.shares .share-link { + background: url('icons/link.svg') no-repeat; + height: 24px; + width: 24px; + display: block; + float: left; + padding-right: 1em; +} + +/*.sharesBox .ui-listview.shares .notification-title{ + margin-bottom:0.75em; + color: #000; + user-select: none; +}*/ + +.ui-listview.shares li span { + display:block; +} +.ui-listview.shares li { + width: 100%; + padding: 0.75em 0.75em 0.75em 2em; + position: relative; + border-bottom:1px solid #CCC; +} + +.ui-listview.shares li:first-child { + border-top:1px solid #CCC; +} + +.ui-listview.shares li:nth-child(odd){ + background-color: #F0F0F0; +} + +.ui-listview.shares li:nth-child(even){ + background-color: #FFF; +} + /********* notification **************/ .notificationBox .ui-listview.notifications input { position:absolute; @@ -2796,7 +2858,7 @@ a.popin-btn { border-bottom:1px solid #CCC; } -.ui-listview.notifications li:first-child{ +.ui-listview.notifications li:first-child { border-top:1px solid #CCC; } @@ -2812,7 +2874,7 @@ a.popin-btn { right: 1em; } -.delete-notification { +.delete-notification, .delete-share a { height: 24px; width: 24px; filter: invert(1); @@ -2826,7 +2888,7 @@ a.popin-btn { background: url('icons/mark_read.svg') no-repeat; } -.delete-notification a, .markAsRead-notification a { +.delete-notification a, .markAsRead-notification a, .delete-share a { height: 24px; width: 24px; display: block; From 36897f722d1ceea80c0975cc47c58f4b918361d8 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 15 Feb 2024 11:51:15 +0100 Subject: [PATCH 191/228] html in notification title --- .../apps/notificationsbox/pages/widgets/NotificationItem.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java index cf9de3739..2987d4376 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/NotificationItem.java @@ -100,7 +100,7 @@ public void setData(NotificationSendedDTO data) { this.data = data; date.setInnerText(data.getDate()); source.setInnerHTML(data.getSource()); - title.setInnerText(data.getTitle()); + title.setInnerHTML(data.getTitle()); } public void setData(NotificationReceivedDTO data) { @@ -108,7 +108,7 @@ public void setData(NotificationReceivedDTO data) { date.setInnerText(data.getDate()); author.setInnerText(data.getAuthor()); source.setInnerText(data.getSource()); - title.setInnerText(data.getTitle()); + title.setInnerHTML(data.getTitle()); if (data.getReaden() == 0) { getElement().addClassName("not-read"); } From 7e64ce163dae9273d2054a5de2a5063661efd45e Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 15 Feb 2024 15:36:24 +0100 Subject: [PATCH 192/228] Fix #13993 --- .../apps/profile/pages/ProfilePage.java | 19 ++++++---- .../apps/profile/pages/ProfilePage.ui.xml | 35 ++++++++++--------- .../org/silverpeas/mobile/public/spmobile.css | 8 +++++ .../server/services/helpers/UserHelper.java | 2 ++ .../mobile/shared/dto/DetailUserDTO.java | 9 +++++ 5 files changed, 50 insertions(+), 23 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.java index 3ae04efd4..9a83b82fe 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.java @@ -25,15 +25,15 @@ package org.silverpeas.mobile.client.apps.profile.pages; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.HTMLPanel; -import com.google.gwt.user.client.ui.PasswordTextBox; -import com.google.gwt.user.client.ui.TextArea; -import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.user.client.ui.*; +import org.apache.ecs.html.Div; +import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.apps.profile.ProfileApp; import org.silverpeas.mobile.client.apps.profile.events.ProfileEvents; import org.silverpeas.mobile.client.apps.profile.resources.ProfileMessages; @@ -53,6 +53,8 @@ public class ProfilePage extends PageContent { @UiField protected Anchor publish, changePwd; @UiField protected PasswordTextBox pwd1, pwd2; + @UiField protected DivElement changePwdArea; + interface StatusPageUiBinder extends UiBinder<Widget, ProfilePage> { } @@ -63,8 +65,11 @@ public ProfilePage() { container.getElement().setId("update-statut"); status.getElement().setAttribute("x-webkit-speech", "x-webkit-speech"); status.getElement().setAttribute("speech", "speech"); - pwd1.getElement().setAttribute("autocomplete", "off"); - pwd2.getElement().setAttribute("autocomplete", "off"); + pwd1.getElement().setAttribute("autocomplete", "new-password"); + pwd2.getElement().setAttribute("autocomplete", "new-password"); + if (!SpMobil.getUser().isLdap()) { + changePwdArea.getStyle().setDisplay(Style.Display.NONE); + } } @UiHandler("publish") diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.ui.xml index 4fdb4efbf..53b7b7ba4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/profile/pages/ProfilePage.ui.xml @@ -30,22 +30,6 @@ <g:HTMLPanel ui:field="container" styleName="ui-content ui-body-a"> - <h2><ui:safehtml from="{msg.titlePwd}"/></h2> - <div id="champs-password"> - <span class="ui-btn-text"><ui:text from="{msg.newPwd}"/></span> - <g:PasswordTextBox ui:field="pwd1" styleName="ui-input-text ui-body-inherit"/> - <br/> - <span class="ui-btn-text"><ui:text from="{msg.repeatNewPwd}"/></span> - <g:PasswordTextBox ui:field="pwd2" styleName="ui-input-text ui-body-inherit"/> - </div> - <div class=" ui-controlgroup ui-controlgroup-horizontal"> - <div class="ui-controlgroup-controls "> - <g:Anchor ui:field="changePwd" styleName="btn-validate ui-link"> - <span class="ui-btn-text"><ui:text from="{msg.changePwd}"/></span> - </g:Anchor> - </div> - </div> - <h2><ui:safehtml from="{msg.titleStatus}"/></h2> <div id="champs-statut"> <div class="ouverture-bulle"></div> @@ -58,6 +42,25 @@ </g:Anchor> </div> </div> + + <div ui:field="changePwdArea"> + <h2><ui:safehtml from="{msg.titlePwd}"/></h2> + <div id="champs-password"> + <span class="ui-btn-text"><ui:text from="{msg.newPwd}"/></span> + <g:PasswordTextBox ui:field="pwd1" styleName="ui-input-text ui-body-inherit"/> + <br/> + <span class="ui-btn-text"><ui:text from="{msg.repeatNewPwd}"/></span> + <g:PasswordTextBox ui:field="pwd2" styleName="ui-input-text ui-body-inherit"/> + </div> + <div class=" ui-controlgroup ui-controlgroup-horizontal"> + <div class="ui-controlgroup-controls "> + <g:Anchor ui:field="changePwd" styleName="btn-validate ui-link"> + <span class="ui-btn-text"><ui:text from="{msg.changePwd}"/></span> + </g:Anchor> + </div> + </div> + </div> + </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 7d075e3b0..2facb2ac7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -3029,3 +3029,11 @@ a.popin-btn { right: 1em; } +/** Profil Page **/ + +#champs-password input { + display: block; + background-color: white; + height: 2em; + width: calc(100vw - 2em); +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java index 84effe6f7..ded67d292 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/UserHelper.java @@ -72,6 +72,8 @@ public DetailUserDTO populate(UserDetail user) { dto.setLanguage(user.getUserPreferences().getLanguage()); dto.setToken(user.getToken()); dto.setZone(user.getUserPreferences().getZoneId().getId()); + dto.setLdap(!user.getDomain().getDriverClassName() + .equals("org.silverpeas.core.admin.domain.driver.SilverpeasDomainDriver")); boolean notificationBox = false; List<Properties> channels = null; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java index ed1d6840a..df729367e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/DetailUserDTO.java @@ -46,6 +46,7 @@ public class DetailUserDTO implements Serializable{ private String sessionKey; private boolean connected; private boolean notificationBox; + private boolean ldap; private List<PropertyDTO> properties = new ArrayList<>(); public void addProperty(String key, String value) { @@ -176,4 +177,12 @@ public void setNotificationBox(final boolean notificationBox) { public boolean isNotificationBox() { return notificationBox; } + + public void setLdap(boolean ldap) { + this.ldap = ldap; + } + + public boolean isLdap() { + return ldap; + } } From 419d5b9b1a71131024a1d1380da6d1d0fa483f59 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 15 Feb 2024 16:22:02 +0100 Subject: [PATCH 193/228] Fix #14002 --- .../mobile/client/pages/cookies/CookiesPage.ui.xml | 10 +++++----- .../java/org/silverpeas/mobile/public/spmobile.css | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.ui.xml index 324fac6ef..5287bacae 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/cookies/CookiesPage.ui.xml @@ -31,13 +31,13 @@ <g:HTMLPanel> <div id="header"> - <h1 id="page-cookies-title"><ui:safehtml from="{msg.informationTitle}"/></h1> + <h1 id="page-infos-title"><ui:safehtml from="{msg.informationTitle}"/></h1> </div> - <div id="page-cookies" class="ui-content ui-body-a"> - <div class="cookiesTextContainer"> - <g:HTML ui:field="text" styleName="cookiesText"></g:HTML> - <div class="cookiesTextActions"> + <div id="page-infos" class="ui-content ui-body-a"> + <div class="infosTextContainer"> + <g:HTML ui:field="text" styleName="infosText"></g:HTML> + <div class="infosTextActions"> <g:Anchor ui:field="accept" styleName="btn-validate ui-link smaller multiple"><ui:safehtml from="{msg.accept}"/></g:Anchor> </div> </div> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 2facb2ac7..3122b155d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -3005,7 +3005,7 @@ a.popin-btn { } /**** Cookies information page ****/ -.cookiesTextContainer { +.infosTextContainer { background-color: white; height: 25vh; padding: 2em; @@ -3015,16 +3015,16 @@ a.popin-btn { border-radius: 0.25em; } -.cookiesText { +.infosText { height: 20vh; text-align: justify; line-height: 1.2em; } -.cookiesTextActions { +.infosTextActions { text-align: right; } -#header #page-cookies-title { +#header #page-infos-title { left: 1em; right: 1em; } From b1a4fe719764636e45d29753e8b94b8f744d4958 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 15 Feb 2024 18:19:00 +0100 Subject: [PATCH 194/228] Fix #14001 --- .../server/services/helpers/NewsHelper.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java index 1d656df19..d33260c09 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/helpers/NewsHelper.java @@ -84,7 +84,7 @@ public List<News> getLastNews(String userId, String spaceId, int maxNews) throws for (String appId : appIds) { news.addAll(service.getVisibleNews(appId)); } - news = sortAndTruncate(maxNews, news); + news = sortAndTruncate(maxNews, news, false); return news; } else { // News on main page @@ -96,11 +96,14 @@ public List<News> getLastNews(String userId, String spaceId, int maxNews) throws } catch (MissingResourceException e) {} if (newsSource != null && newsSource.isEmpty() == false) { if (newsSource.trim().startsWith("quickinfo")) { - news = getNewsByComponentId(newsSource, false, userId, maxNews); - news = sortAndTruncate(maxNews, news); + String [] sources = newsSource.split(" "); + for (String source : sources) { + news.addAll(getNewsByComponentId(source.trim(), false, userId, maxNews)); + } + news = sortAndTruncate(maxNews, news, true); } else if (newsSource.trim().equals("*")) { news = getAllNews(userId, maxNews); - news = sortAndTruncate(maxNews, news); + news = sortAndTruncate(maxNews, news, true); } else { news = getDelegatedNews(userId, maxNews); } @@ -165,7 +168,7 @@ private List<News> getAllNews(String userId, int maxNews) throws AdminException for (String appId : apps) { news.addAll(getNewsByComponentId(appId, false, userId, maxNews)); } - news = sortAndTruncate(maxNews, news); + news = sortAndTruncate(maxNews, news, false); return news; } @@ -181,14 +184,14 @@ private List<News> getNewsByComponentId(String appId, boolean managerAccess, Str news = service.getVisibleNews(appId); } } - news = sortAndTruncate(maxNews, news); + news = sortAndTruncate(maxNews, news, false); return news; } - private static List<News> sortAndTruncate(int maxNews, List<News> news) { + private static List<News> sortAndTruncate(int maxNews, List<News> news, boolean reverse) { Collections.sort(news, (o1, o2) -> o1.getUpdateDate().compareTo(o2.getUpdateDate())); - //Collections.reverse(news); + if (reverse) Collections.reverse(news); if (news != null && news.size() > maxNews) { news = news.subList(0, maxNews); } From 98b0800137f709ce3ee0ec61f2870777e4b843d9 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 16 Feb 2024 15:25:15 +0100 Subject: [PATCH 195/228] favorites mutli selection --- .../client/apps/favorites/FavoritesApp.java | 32 ++++++++-- .../events/app/FavoritesAppEventHandler.java | 1 + .../events/app/FavoritesDeleteEvent.java | 50 +++++++++++++++ .../apps/favorites/pages/FavoritesPage.java | 52 ++++++++++++++- .../favorites/pages/widgets/DeleteButton.java | 61 ++++++++++++++++++ .../pages/widgets/DeleteButton.ui.xml | 31 +++++++++ .../resources/FavoritesMessages.java | 2 + .../resources/FavoritesMessages.properties | 3 +- .../resources/FavoritesMessages_en.properties | 3 +- .../resources/FavoritesMessages_fr.properties | 3 +- .../pages/widgets/FavoriteItem.java | 64 ++++++++++++++++--- .../pages/widgets/FavoriteItem.ui.xml | 11 +++- .../components/homepage/HomePageContent.java | 9 ++- .../org/silverpeas/mobile/public/spmobile.css | 20 +++--- .../shared/services/rest/ServiceMyLinks.java | 11 ++-- 15 files changed, 316 insertions(+), 37 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesDeleteEvent.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.ui.xml diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java index bfc2bc8e5..9e588acaa 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java @@ -26,11 +26,7 @@ import com.google.gwt.core.client.GWT; import org.fusesource.restygwt.client.Method; -import org.silverpeas.mobile.client.apps.favorites.events.app.AbstractFavoritesAppEvent; -import org.silverpeas.mobile.client.apps.favorites.events.app.AddFavoriteEvent; -import org.silverpeas.mobile.client.apps.favorites.events.app.FavoritesAppEventHandler; -import org.silverpeas.mobile.client.apps.favorites.events.app.FavoritesLoadEvent; -import org.silverpeas.mobile.client.apps.favorites.events.app.GotoAppEvent; +import org.silverpeas.mobile.client.apps.favorites.events.app.*; import org.silverpeas.mobile.client.apps.favorites.events.pages.FavoritesLoadedEvent; import org.silverpeas.mobile.client.apps.favorites.pages.FavoritesPage; import org.silverpeas.mobile.client.apps.navigation.events.app.external.AbstractNavigationEvent; @@ -141,7 +137,31 @@ public void onSuccess(final Method method, action.attempt(); } - @Override + @Override + public void deleteFavorites(FavoritesDeleteEvent favoritesDeleteEvent) { + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<Void>() { + private int i = 1; + @Override + public void attempt() { + super.attempt(); + for (MyLinkDTO dto : favoritesDeleteEvent.getSelection()) { + ServicesLocator.getServiceMyLinks().deleteLink(String.valueOf(dto.getLinkId()), this); + } + } + + @Override + public void onSuccess(Method method, Void unused) { + i++; + if (i > favoritesDeleteEvent.getSelection().size()) { + super.onSuccess(method, unused); + loadFavorites(new FavoritesLoadEvent()); + } + } + }; + action.attempt(); + } + + @Override public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { /* only one instance */ } @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesAppEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesAppEventHandler.java index 115e37785..5220a5b59 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesAppEventHandler.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesAppEventHandler.java @@ -30,4 +30,5 @@ public interface FavoritesAppEventHandler extends EventHandler{ void loadFavorites(FavoritesLoadEvent event); void addFavorite(AddFavoriteEvent event); void gotoApp(GotoAppEvent event); + void deleteFavorites(FavoritesDeleteEvent favoritesDeleteEvent); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesDeleteEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesDeleteEvent.java new file mode 100644 index 000000000..01d8e3d5a --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/app/FavoritesDeleteEvent.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.favorites.events.app; + + +import org.silverpeas.mobile.shared.dto.MyLinkDTO; + +import java.util.List; + +public class FavoritesDeleteEvent extends AbstractFavoritesAppEvent { + + private List<MyLinkDTO> selection; + public FavoritesDeleteEvent(){ + super(); + } + @Override + protected void dispatch(FavoritesAppEventHandler handler) { + handler.deleteFavorites(this); + } + + public void setSelection(List<MyLinkDTO> selection) { + this.selection = selection; + } + + public List<MyLinkDTO> getSelection() { + return selection; + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java index 413e6ce74..55ee6b564 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java @@ -27,19 +27,24 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.apps.favorites.events.app.FavoritesDeleteEvent; import org.silverpeas.mobile.client.apps.favorites.events.app.FavoritesLoadEvent; import org.silverpeas.mobile.client.apps.favorites.events.pages.AbstractFavoritesPagesEvent; import org.silverpeas.mobile.client.apps.favorites.events.pages.FavoritesLoadedEvent; import org.silverpeas.mobile.client.apps.favorites.events.pages.FavoritesPagesEventHandler; +import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages; import org.silverpeas.mobile.client.apps.navigation.pages.widgets.FavoriteItem; +import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.DeleteButton; import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.resources.ApplicationMessages; -import org.silverpeas.mobile.shared.dto.FavoriteDTO; import org.silverpeas.mobile.shared.dto.MyLinkDTO; +import java.util.ArrayList; import java.util.List; public class FavoritesPage extends PageContent implements FavoritesPagesEventHandler { @@ -50,6 +55,10 @@ public class FavoritesPage extends PageContent implements FavoritesPagesEventHan @UiField UnorderedList favorites; + private DeleteButton buttonDelete = new DeleteButton(); + + private FavoritesMessages msgApp = GWT.create(FavoritesMessages .class); + interface FavoritesPageUiBinder extends UiBinder<Widget, FavoritesPage> { } @@ -69,12 +78,51 @@ public void stop() { @Override public void onFavoritesLoaded(final FavoritesLoadedEvent event) { - + favorites.clear(); List<MyLinkDTO> favoritesList = event.getFavorites(); for (MyLinkDTO favoriteDTO : favoritesList) { FavoriteItem item = new FavoriteItem(); + item.setParent(this); item.setData(favoriteDTO); favorites.add(item); } } + + @Override + public void setSelectionMode(boolean selectionMode) { + super.setSelectionMode(selectionMode); + if (selectionMode) { + clearActions(); + buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedFavoris();}}); + addActionShortcut(buttonDelete); + } else { + clearActions(); + } + } + + private void deleteSelectedFavoris() { + PopinConfirmation popin = new PopinConfirmation(msgApp.deleteConfirmation()); + popin.setYesCallback(new Command() { + @Override + public void execute() { + List<MyLinkDTO> selection = getSelectedFavorites(); + FavoritesDeleteEvent deleteEvent = new FavoritesDeleteEvent(); + deleteEvent.setSelection(selection); + if (!selection.isEmpty()) EventBus.getInstance().fireEvent(deleteEvent); + clearActions(); + } + }); + popin.show(); + } + + private List<MyLinkDTO> getSelectedFavorites() { + List<MyLinkDTO> selection = new ArrayList<>(); + for (int i = 0; i < favorites.getCount(); i++) { + FavoriteItem item = (FavoriteItem) favorites.getWidget(i); + if (item.isSelected()) { + selection.add(item.getData()); + } + } + return selection; + } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.java new file mode 100644 index 000000000..4520925de --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.favorites.pages.widgets; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.HTMLPanel; +import org.silverpeas.mobile.client.apps.notificationsbox.pages.NotificationsBoxPage; +import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages; +import org.silverpeas.mobile.client.components.base.ActionItem; + +/** + * @author: svu + */ +public class DeleteButton extends ActionItem { + + interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} + + private static DeleteButtonUiBinder uiBinder = GWT.create(DeleteButtonUiBinder.class); + + @UiField + HTMLPanel container; + @UiField + Anchor link; + + public DeleteButton() { + initWidget(uiBinder.createAndBindUi(this)); + setId("delete-favoris"); + } + + @UiHandler("link") + void delete(ClickEvent event) { + getCallback().execute(); + } +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.ui.xml new file mode 100644 index 000000000..0c03aa73a --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.ui.xml @@ -0,0 +1,31 @@ +<!-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "https://www.silverpeas.org/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui'> + + <g:HTMLPanel tag="li" ui:field="container" styleName="delete-favoris"> + <g:Anchor ui:field="link"/> + </g:HTMLPanel> +</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java index 994ee4daa..721681946 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.java @@ -30,4 +30,6 @@ public interface FavoritesMessages extends Messages { String addToFavoritesContent(); String favoriteAdded(); + String deleteConfirmation(); + } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties index b8480eb24..fb99e1826 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages.properties @@ -23,4 +23,5 @@ # addToFavoritesContent=Ajouter en favoris -favoriteAdded=Favoris ajouté ! \ No newline at end of file +favoriteAdded=Favoris ajouté ! +deleteConfirmation=Etes-vous sur de supprimer ces favoris ? \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties index 27dc8e7b3..b7f87c2e8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_en.properties @@ -23,4 +23,5 @@ # addToFavoritesContent=Add to favorites -favoriteAdded=Favorite added ! \ No newline at end of file +favoriteAdded=Favorite added ! +deleteConfirmation=Delete those favortis ? \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties index b8480eb24..fb99e1826 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/resources/FavoritesMessages_fr.properties @@ -23,4 +23,5 @@ # addToFavoritesContent=Ajouter en favoris -favoriteAdded=Favoris ajouté ! \ No newline at end of file +favoriteAdded=Favoris ajouté ! +deleteConfirmation=Etes-vous sur de supprimer ces favoris ? \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java index 0f18f0e5c..a9a4d50b5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.java @@ -26,31 +26,48 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.TouchEndEvent; +import com.google.gwt.event.dom.client.TouchMoveEvent; +import com.google.gwt.event.dom.client.TouchStartEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.apps.notificationsbox.events.app.NotificationReadenEvent; +import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.navigation.LinksManager; +import org.silverpeas.mobile.client.components.base.widgets.SelectableItem; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.client.resources.ApplicationResources; +import org.silverpeas.mobile.shared.dto.FavoriteDTO; import org.silverpeas.mobile.shared.dto.MyLinkDTO; import org.silverpeas.mobile.shared.dto.hyperlink.HyperLinkDTO; +import org.silverpeas.mobile.shared.dto.notifications.NotificationReceivedDTO; +import org.silverpeas.mobile.shared.dto.notifications.NotificationSendedDTO; -public class FavoriteItem extends Composite { +public class FavoriteItem extends SelectableItem { private MyLinkDTO data; private static FavoriteItemUiBinder uiBinder = GWT.create(FavoriteItemUiBinder.class); + + @UiField + HTMLPanel container; @UiField Anchor link; protected ApplicationMessages msg = null; private ApplicationResources resources = GWT.create(ApplicationResources.class); @UiField - SpanElement icon; + SpanElement icon, title, desc; + private boolean minimalView = true; interface FavoriteItemUiBinder extends UiBinder<Widget, FavoriteItem> { } @@ -59,11 +76,24 @@ public FavoriteItem() { initWidget(uiBinder.createAndBindUi(this)); msg = GWT.create(ApplicationMessages.class); icon.setInnerHTML(resources.favorite().getText()); + setContainer(container); + } + + public void setMinimalView(boolean minimalView) { + this.minimalView = minimalView; + if (minimalView) { + desc.getStyle().setDisplay(Style.Display.NONE); + } else { + desc.getStyle().setDisplay(Style.Display.BLOCK); + } } public void setData(MyLinkDTO data) { this.data = data; - link.setText(data.getName()); + title.setInnerHTML(data.getName()); + if (!data.getName().equals(data.getDescription())) { + desc.setInnerHTML(data.getDescription()); + } if(data.getUrl().startsWith("/")) { // internal link @@ -72,14 +102,32 @@ public void setData(MyLinkDTO data) { link.setHref(data.getUrl()); link.setTarget("_blank"); } - link.setStyleName("ui-btn ui-icon-carat-r"); + } + + public MyLinkDTO getData() { + return data; + } + + @UiHandler("link") + protected void startTouch(TouchStartEvent event) { + startTouch(event, minimalView); + } + + @UiHandler("link") + protected void moveTouch(TouchMoveEvent event) { + super.moveTouch(event); } @UiHandler("link") - protected void onClick(ClickEvent event) { - HyperLinkDTO link = new HyperLinkDTO(); - link.setUrl(data.getUrl()); - LinksManager.processLink(link); + protected void endTouch(TouchEndEvent event) { + endTouch(event, minimalView, new Command() { + @Override + public void execute() { + HyperLinkDTO link = new HyperLinkDTO(); + link.setUrl(data.getUrl()); + LinksManager.processLink(link); + } + }); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml index ace0654ff..3a8b7afff 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/FavoriteItem.ui.xml @@ -24,8 +24,13 @@ <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> - <g:HTMLPanel tag="li"> - <span ui:field="icon" class="icon-app"></span> - <g:Anchor ui:field="link"></g:Anchor> + + <g:HTMLPanel tag="li" ui:field="container" styleName="favorite"> + <g:Anchor ui:field="link" styleName="ui-btn"> + <span ui:field="icon" class="icon-app"></span> + <span ui:field="title" class="favorite-title"></span> + <span ui:field="desc" class="favorite-desc"></span> + </g:Anchor> </g:HTMLPanel> + </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java index a53eaa78f..6f774e6b7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.java @@ -145,9 +145,12 @@ public void setData(HomePageDTO data) { List<MyLinkDTO> favoritesList = data.getFavorites(); favorisSection.setVisible(!favoritesList.isEmpty() && config.isFavoritesDisplay()); for (MyLinkDTO favoriteDTO : favoritesList) { - FavoriteItem item = new FavoriteItem(); - item.setData(favoriteDTO); - favoris.add(item); + if (favoriteDTO.getVisible()) { + FavoriteItem item = new FavoriteItem(); + item.setMinimalView(true); + item.setData(favoriteDTO); + favoris.add(item); + } } shortcutstools.clear(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 3122b155d..40ab7a495 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -1479,7 +1479,7 @@ li > #operations { } #notification .list-notifications > li.selected, .list-resources > li.selected, #tasks > li.selected, -.notifications > li.selected, .shares > li.selected { +.notifications > li.selected, .shares > li.selected, .favoris > li.selected { border-left: 8px solid #7eb73a; color: #000 } @@ -2160,6 +2160,8 @@ form .forms .fields > li:nth-child(even) { width: calc( 90% - 104px ); margin:0 5%; text-align: center; + z-index: 999; + position: absolute; } .popin-btns { @@ -2787,12 +2789,6 @@ a.popin-btn { padding-right: 1em; } -/*.sharesBox .ui-listview.shares .notification-title{ - margin-bottom:0.75em; - color: #000; - user-select: none; -}*/ - .ui-listview.shares li span { display:block; } @@ -2815,6 +2811,14 @@ a.popin-btn { background-color: #FFF; } +/********* favorites **************/ +.favorite-desc { + display: block; + padding-top: 1em; +} + + + /********* notification **************/ .notificationBox .ui-listview.notifications input { position:absolute; @@ -2874,7 +2878,7 @@ a.popin-btn { right: 1em; } -.delete-notification, .delete-share a { +.delete-notification, .delete-share a, .delete-favoris { height: 24px; width: 24px; filter: invert(1); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java index 67579cf80..38d7951f6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java @@ -29,10 +29,8 @@ import org.silverpeas.mobile.shared.dto.MyLinkDTO; import org.silverpeas.mobile.shared.dto.comments.CommentDTO; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; import java.util.List; /** @@ -50,4 +48,9 @@ public interface ServiceMyLinks extends RestService { @Path("/") public void getMyLinks(MethodCallback<List<MyLinkDTO>> callback); + @DELETE + @Path("{linkId}") + public void deleteLink(final @PathParam("linkId") String linkId, MethodCallback<Void> callback); + + } From e575c85d7f067b948e8d2ba5b5869baeb8c6859a Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 16 Feb 2024 16:18:21 +0100 Subject: [PATCH 196/228] refactoring delete button --- .../apps/favorites/pages/FavoritesPage.java | 3 +- .../pages/NotificationsBoxPage.java | 4 +- .../pages/widgets/DeleteButton.java | 78 --------- .../pages/widgets/DeleteButton.ui.xml | 33 ---- .../apps/sharesbox/pages/SharesBoxPage.java | 3 +- .../sharesbox/pages/widgets/DeleteButton.java | 65 ------- .../pages/widgets/DeleteButton.ui.xml | 34 ---- .../mobile/client/apps/tasks/TasksPage.java | 158 ++++++++++++++++++ .../client/apps/tasks/pages/TasksPage.java | 1 - .../tasks/pages/widgets/DeleteTaskButton.java | 59 ------- .../pages/widgets/DeleteTaskButton.ui.xml | 32 ---- .../base}/widgets/DeleteButton.java | 5 +- .../base}/widgets/DeleteButton.ui.xml | 2 +- .../org/silverpeas/mobile/public/spmobile.css | 16 +- 14 files changed, 171 insertions(+), 322 deletions(-) delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.ui.xml delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.ui.xml create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.java delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.ui.xml rename mobile-war/src/main/java/org/silverpeas/mobile/client/{apps/favorites/pages => components/base}/widgets/DeleteButton.java (87%) rename mobile-war/src/main/java/org/silverpeas/mobile/client/{apps/favorites/pages => components/base}/widgets/DeleteButton.ui.xml (99%) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java index 55ee6b564..e0edc3a40 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java @@ -36,11 +36,11 @@ import org.silverpeas.mobile.client.apps.favorites.events.pages.FavoritesPagesEventHandler; import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages; import org.silverpeas.mobile.client.apps.navigation.pages.widgets.FavoriteItem; -import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.DeleteButton; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.DeleteButton; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.MyLinkDTO; @@ -94,6 +94,7 @@ public void setSelectionMode(boolean selectionMode) { if (selectionMode) { clearActions(); buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedFavoris();}}); + buttonDelete.setId("delete-favoris"); addActionShortcut(buttonDelete); } else { clearActions(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java index 7e0063f60..426b9df10 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/NotificationsBoxPage.java @@ -40,7 +40,6 @@ import org.silverpeas.mobile.client.apps.notificationsbox.events.pages.NotificationsBoxPagesEventHandler; import org.silverpeas.mobile.client.apps.notificationsbox.events.pages.NotificationsLoadedEvent; import org.silverpeas.mobile.client.apps.notificationsbox.events.pages.NotificationsSendedLoadedEvent; -import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.DeleteButton; import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.MarkAsReadButton; import org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets.NotificationItem; import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages; @@ -48,6 +47,7 @@ import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.DeleteButton; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.notifications.NotificationBoxDTO; import org.silverpeas.mobile.shared.dto.notifications.NotificationReceivedDTO; @@ -80,8 +80,8 @@ public NotificationsBoxPage() { initWidget(uiBinder.createAndBindUi(this)); EventBus.getInstance().addHandler(AbstractNotificationsBoxPagesEvent.TYPE, this); EventBus.getInstance().fireEvent(new NotificationsLoadEvent()); - buttonDelete.setParentPage(this); buttonNotRead.setParentPage(this); + buttonDelete.setId("delete-notifications"); } @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java deleted file mode 100644 index 4ec466bdf..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2000 - 2022 Silverpeas - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * As a special exception to the terms and conditions of version 3.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * Open Source Software ("FLOSS") applications as described in Silverpeas's - * FLOSS exception. You should have received a copy of the text describing - * the FLOSS exception, and it is also available here: - * "https://www.silverpeas.org/legal/floss_exception.html" - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package org.silverpeas.mobile.client.apps.notificationsbox.pages.widgets; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.notificationsbox.events.app.DeleteNotificationsEvent; -import org.silverpeas.mobile.client.apps.notificationsbox.pages.NotificationsBoxPage; -import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages; -import org.silverpeas.mobile.client.common.EventBus; -import org.silverpeas.mobile.client.components.base.ActionItem; -import org.silverpeas.mobile.client.components.base.ActionsMenu; -import org.silverpeas.mobile.shared.dto.notifications.NotificationBoxDTO; - -import java.util.List; - -/** - * @author: svu - */ -public class DeleteButton extends ActionItem { - - interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} - - private static DeleteButtonUiBinder uiBinder = GWT.create(DeleteButtonUiBinder.class); - - private NotificationsBoxPage parentPage; - - @UiField - HTMLPanel container; - @UiField - Anchor link; - - @UiField(provided = true) - protected NotificationsMessages msg = null; - - - public DeleteButton() { - msg = GWT.create(NotificationsMessages.class); - initWidget(uiBinder.createAndBindUi(this)); - setId("delete-notification"); - } - - @UiHandler("link") - void delete(ClickEvent event) { - getCallback().execute(); - } - - public void setParentPage(final NotificationsBoxPage parentPage) { - this.parentPage = parentPage; - } -} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.ui.xml deleted file mode 100644 index 4cd11cd25..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/notificationsbox/pages/widgets/DeleteButton.ui.xml +++ /dev/null @@ -1,33 +0,0 @@ -<!-- - ~ Copyright (C) 2000 - 2022 Silverpeas - ~ - ~ This program is free software: you can redistribute it and/or modify - ~ it under the terms of the GNU Affero General Public License as - ~ published by the Free Software Foundation, either version 3 of the - ~ License, or (at your option) any later version. - ~ - ~ As a special exception to the terms and conditions of version 3.0 of - ~ the GPL, you may redistribute this Program in connection with Free/Libre - ~ Open Source Software ("FLOSS") applications as described in Silverpeas's - ~ FLOSS exception. You should have received a copy of the text describing - ~ the FLOSS exception, and it is also available here: - ~ "https://www.silverpeas.org/legal/floss_exception.html" - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU Affero General Public License for more details. - ~ - ~ You should have received a copy of the GNU Affero General Public License - ~ along with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' - xmlns:g='urn:import:com.google.gwt.user.client.ui'> - - <ui:with field='msg' type='org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages'/> - - <g:HTMLPanel tag="li" ui:field="container" styleName="delete-notification"> - <g:Anchor ui:field="link"/> - </g:HTMLPanel> -</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java index cc7b6a7fc..cbec0f486 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/SharesBoxPage.java @@ -33,13 +33,13 @@ import org.silverpeas.mobile.client.apps.sharesbox.events.pages.AbstractSharesBoxPagesEvent; import org.silverpeas.mobile.client.apps.sharesbox.events.pages.SharesBoxPagesEventHandler; import org.silverpeas.mobile.client.apps.sharesbox.events.pages.SharesDeletedEvent; -import org.silverpeas.mobile.client.apps.sharesbox.pages.widgets.DeleteButton; import org.silverpeas.mobile.client.apps.sharesbox.pages.widgets.ShareItem; import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.DeleteButton; import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; import java.util.ArrayList; @@ -99,6 +99,7 @@ public SharesBoxPage() { setPageTitle(msg.title()); initWidget(uiBinder.createAndBindUi(this)); EventBus.getInstance().addHandler(AbstractSharesBoxPagesEvent.TYPE, this); + buttonDelete.setId("delete-share"); } @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java deleted file mode 100644 index 24c593333..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2000 - 2022 Silverpeas - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * As a special exception to the terms and conditions of version 3.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * Open Source Software ("FLOSS") applications as described in Silverpeas's - * FLOSS exception. You should have received a copy of the text describing - * the FLOSS exception, and it is also available here: - * "https://www.silverpeas.org/legal/floss_exception.html" - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package org.silverpeas.mobile.client.apps.sharesbox.pages.widgets; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages; -import org.silverpeas.mobile.client.components.base.ActionItem; - -/** - * @author: svu - */ -public class DeleteButton extends ActionItem { - - interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} - - private static DeleteButtonUiBinder uiBinder = GWT.create(DeleteButtonUiBinder.class); - - @UiField - HTMLPanel container; - @UiField - Anchor link; - - @UiField(provided = true) - protected ShareMessages msg = null; - - - public DeleteButton() { - msg = GWT.create(ShareMessages.class); - initWidget(uiBinder.createAndBindUi(this)); - setId("delete-share"); - } - - @UiHandler("link") - void delete(ClickEvent event) { - getCallback().execute(); - } -} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.ui.xml deleted file mode 100644 index 0c882f21f..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/sharesbox/pages/widgets/DeleteButton.ui.xml +++ /dev/null @@ -1,34 +0,0 @@ -<!-- - ~ Copyright (C) 2000 - 2022 Silverpeas - ~ - ~ This program is free software: you can redistribute it and/or modify - ~ it under the terms of the GNU Affero General Public License as - ~ published by the Free Software Foundation, either version 3 of the - ~ License, or (at your option) any later version. - ~ - ~ As a special exception to the terms and conditions of version 3.0 of - ~ the GPL, you may redistribute this Program in connection with Free/Libre - ~ Open Source Software ("FLOSS") applications as described in Silverpeas's - ~ FLOSS exception. You should have received a copy of the text describing - ~ the FLOSS exception, and it is also available here: - ~ "https://www.silverpeas.org/legal/floss_exception.html" - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU Affero General Public License for more details. - ~ - ~ You should have received a copy of the GNU Affero General Public License - ~ along with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' - xmlns:g='urn:import:com.google.gwt.user.client.ui'> - - <ui:with field='msg' type='org.silverpeas.mobile.client.apps.sharesbox.resources.ShareMessages'/> - - <g:HTMLPanel tag="li" ui:field="container" styleName="delete-share"> - <g:Anchor ui:field="link"/> - </g:HTMLPanel> - -</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java new file mode 100644 index 000000000..666ecf5f6 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.tasks; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.ui.HTMLPanel; +import org.silverpeas.mobile.client.apps.tasks.events.app.TasksDeleteEvent; +import org.silverpeas.mobile.client.apps.tasks.events.app.TasksLoadEvent; +import org.silverpeas.mobile.client.apps.tasks.events.pages.AbstractTasksPagesEvent; +import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskCreatedEvent; +import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskUpdatedEvent; +import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksLoadedEvent; +import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksPagesEventHandler; +import org.silverpeas.mobile.client.apps.tasks.pages.widgets.AddTaskButton; +import org.silverpeas.mobile.client.apps.tasks.pages.widgets.TaskItem; +import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; +import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.common.Notification; +import org.silverpeas.mobile.client.components.PopinConfirmation; +import org.silverpeas.mobile.client.components.UnorderedList; +import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.DeleteButton; +import org.silverpeas.mobile.shared.dto.TaskDTO; + +import java.util.ArrayList; +import java.util.Iterator; + +/** + * @author: svu + */ +public class TasksPage extends PageContent implements TasksPagesEventHandler { + + interface TasksPageUiBinder extends UiBinder<HTMLPanel, TasksPage> { } + private static TasksPageUiBinder uiBinder = GWT.create(TasksPageUiBinder.class); + private AddTaskButton buttonCreate = new AddTaskButton(); + + private DeleteButton buttonDelete = new DeleteButton(); + @UiField HTMLPanel container; + @UiField + UnorderedList list; + + private TasksMessages msg = GWT.create(TasksMessages .class); + + public TasksPage() { + initWidget(uiBinder.createAndBindUi(this)); + list.getElement().setId("tasks"); + EventBus.getInstance().fireEvent(new TasksLoadEvent()); + EventBus.getInstance().addHandler(AbstractTasksPagesEvent.TYPE, this); + buttonDelete.setId("delete-task"); + } + + @Override + public void onTaskLoad(final TasksLoadedEvent event) { + Notification.activityStop(); + list.clear(); + clearActions(); + addActionShortcut(buttonCreate); + Iterator<TaskDTO> i = event.getTasks().iterator(); + while (i.hasNext()) { + TaskDTO task = i.next(); + if (task != null) { + TaskItem item = new TaskItem(); + item.setParent(this); + item.setData(task); + list.add(item); + } + } + } + + @Override + public void onTaskCreated(final TaskCreatedEvent taskCreatedEvent) { + TaskItem item = new TaskItem(); + item.setParent(this); + item.setData(taskCreatedEvent.getTask()); + list.add(item); + } + + @Override + public void onTaskUpdated(TaskUpdatedEvent taskUpdatedEvent) { + int i = 0; + while (i < list.getWidgetCount()) { + if (list.getWidget(i) instanceof TaskItem) { + TaskItem t = (TaskItem) list.getWidget(i); + if (t.getData().getId() == taskUpdatedEvent.getTask().getId()) { + list.remove(t); + TaskItem item = new TaskItem(); + item.setData(taskUpdatedEvent.getTask()); + list.add(item); + break; + } + } + i++; + } + } + + @Override + public void stop() { + super.stop(); + EventBus.getInstance().removeHandler(AbstractTasksPagesEvent.TYPE, this); + } + + private void deleteSelectedTasks() { + PopinConfirmation popin = new PopinConfirmation(msg.deleteConfirmation()); + popin.setYesCallback(new Command() { + @Override + public void execute() { + ArrayList<TaskDTO> selection = new ArrayList<>(); + for (int i = 0; i < list.getCount(); i++) { + TaskItem item = (TaskItem) list.getWidget(i); + if (item.isSelected()) { + selection.add(item.getData()); + } + } + EventBus.getInstance().fireEvent(new TasksDeleteEvent(selection)); + } + }); + popin.show(); + } + + @Override + public void setSelectionMode(boolean selectionMode) { + super.setSelectionMode(selectionMode); + + if (selectionMode) { + clearActions(); + buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedTasks();}}); + addActionShortcut(buttonDelete); + } else { + clearActions(); + addActionShortcut(buttonCreate); + } + } +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java index 67d17709e..166dffa0f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java @@ -37,7 +37,6 @@ import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksLoadedEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksPagesEventHandler; import org.silverpeas.mobile.client.apps.tasks.pages.widgets.AddTaskButton; -import org.silverpeas.mobile.client.apps.tasks.pages.widgets.DeleteTaskButton; import org.silverpeas.mobile.client.apps.tasks.pages.widgets.TaskItem; import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; import org.silverpeas.mobile.client.common.EventBus; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.java deleted file mode 100644 index 736e6c613..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2000 - 2022 Silverpeas - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * As a special exception to the terms and conditions of version 3.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * Open Source Software ("FLOSS") applications as described in Silverpeas's - * FLOSS exception. You should have received a copy of the text describing - * the FLOSS exception, and it is also available here: - * "https://www.silverpeas.org/legal/floss_exception.html" - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package org.silverpeas.mobile.client.apps.tasks.pages.widgets; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Widget; -import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; -import org.silverpeas.mobile.client.components.base.ActionItem; - -/** - * @author: svu - */ -public class DeleteTaskButton extends ActionItem { - - interface DeleteTaskItemUiBinder extends UiBinder<Widget, DeleteTaskButton> { - } - - @UiField Anchor link; - @UiField(provided = true) protected TasksMessages msg = null; - - private static DeleteTaskItemUiBinder uiBinder = GWT.create(DeleteTaskItemUiBinder.class); - public DeleteTaskButton() { - setId("delete-task"); - msg = GWT.create(TasksMessages.class); - initWidget(uiBinder.createAndBindUi(this)); - } - - @UiHandler("link") - void deleteTasks(ClickEvent event) { - getCallback().execute(); - } -} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.ui.xml deleted file mode 100644 index 93e99db44..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/DeleteTaskButton.ui.xml +++ /dev/null @@ -1,32 +0,0 @@ -<!-- - ~ Copyright (C) 2000 - 2022 Silverpeas - ~ - ~ This program is free software: you can redistribute it and/or modify - ~ it under the terms of the GNU Affero General Public License as - ~ published by the Free Software Foundation, either version 3 of the - ~ License, or (at your option) any later version. - ~ - ~ As a special exception to the terms and conditions of version 3.0 of - ~ the GPL, you may redistribute this Program in connection with Free/Libre - ~ Open Source Software ("FLOSS") applications as described in Silverpeas's - ~ FLOSS exception. You should have received a copy of the text describing - ~ the FLOSS exception, and it is also available here: - ~ "https://www.silverpeas.org/legal/floss_exception.html" - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU Affero General Public License for more details. - ~ - ~ You should have received a copy of the GNU Affero General Public License - ~ along with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> - <ui:with field='msg' type='org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages'/> - - <g:HTMLPanel tag="li" ui:field="container" styleName="delete-task"> - <g:Anchor ui:field="link"/> - </g:HTMLPanel> -</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.java similarity index 87% rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.java rename to mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.java index 4520925de..dc177911b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.java @@ -22,7 +22,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -package org.silverpeas.mobile.client.apps.favorites.pages.widgets; +package org.silverpeas.mobile.client.components.base.widgets; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; @@ -31,8 +31,6 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.notificationsbox.pages.NotificationsBoxPage; -import org.silverpeas.mobile.client.apps.notificationsbox.resources.NotificationsMessages; import org.silverpeas.mobile.client.components.base.ActionItem; /** @@ -51,7 +49,6 @@ interface DeleteButtonUiBinder extends UiBinder<HTMLPanel, DeleteButton> {} public DeleteButton() { initWidget(uiBinder.createAndBindUi(this)); - setId("delete-favoris"); } @UiHandler("link") diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.ui.xml similarity index 99% rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.ui.xml rename to mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.ui.xml index 0c03aa73a..e4cc3f063 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/DeleteButton.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/DeleteButton.ui.xml @@ -25,7 +25,7 @@ <ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui'> - <g:HTMLPanel tag="li" ui:field="container" styleName="delete-favoris"> + <g:HTMLPanel tag="li" ui:field="container" styleName="delete-action"> <g:Anchor ui:field="link"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 40ab7a495..af9a2b7d1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -817,7 +817,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { padding-left: 0em; } -#actionsList:has(.add-task), #actionsList:has(.delete-task), #actionsList:has(.delete-share) { +#actionsList:has(.add-task) { right: 1em; } @@ -827,14 +827,8 @@ html .ui-controlgroup-controls .ui-btn-up-c { filter: invert(1); background: url('icons/add.svg') no-repeat; } -.delete-task { - height: 24px; - width: 24px; - filter: invert(1); - background: url('icons/delete.svg') no-repeat; -} -.add-task a, .delete-task a { +.add-task a { height: 24px; width: 24px; display: block; @@ -2874,11 +2868,11 @@ a.popin-btn { background-color: #FFF; } -#actionsList:has(.delete-notification) { +#actionsList:has(.delete-action) { right: 1em; } -.delete-notification, .delete-share a, .delete-favoris { +.delete-action { height: 24px; width: 24px; filter: invert(1); @@ -2892,7 +2886,7 @@ a.popin-btn { background: url('icons/mark_read.svg') no-repeat; } -.delete-notification a, .markAsRead-notification a, .delete-share a { +.delete-action a, .markAsRead-notification a { height: 24px; width: 24px; display: block; From b8358ec38fada6aeb0237bc0f7d97ba04d6b2b2b Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 19 Feb 2024 11:42:44 +0100 Subject: [PATCH 197/228] display favorites categories --- .../client/apps/favorites/FavoritesApp.java | 84 +++++++++++++++---- .../events/pages/FavoritesLoadedEvent.java | 8 +- .../apps/favorites/pages/FavoritesPage.java | 21 +++-- .../favorites/pages/widgets/CategoryItem.java | 76 +++++++++++++++++ .../pages/widgets/CategoryItem.ui.xml | 36 ++++++++ .../resources/ApplicationResources.java | 8 ++ .../client/resources/icons/expand_less.svg | 1 + .../client/resources/icons/expand_more.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 23 +++++ .../server/services/ServiceMyLinks.java | 61 ++++++++++++++ .../mobile/shared/dto/MyLinkCategoryDTO.java | 81 ++++++++++++++++++ .../mobile/shared/dto/MyLinkDTO.java | 10 +++ 12 files changed, 384 insertions(+), 26 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.ui.xml create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_less.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_more.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMyLinks.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkCategoryDTO.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java index 9e588acaa..43396f476 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java @@ -25,6 +25,7 @@ package org.silverpeas.mobile.client.apps.favorites; import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Window; import org.fusesource.restygwt.client.Method; import org.silverpeas.mobile.client.apps.favorites.events.app.*; import org.silverpeas.mobile.client.apps.favorites.events.pages.FavoritesLoadedEvent; @@ -40,10 +41,11 @@ import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.shared.dto.ContentsTypes; +import org.silverpeas.mobile.shared.dto.MyLinkCategoryDTO; import org.silverpeas.mobile.shared.dto.MyLinkDTO; import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; -import java.util.List; +import java.util.*; public class FavoritesApp extends App implements FavoritesAppEventHandler, NavigationEventHandler { @@ -67,23 +69,75 @@ public void stop() { @Override public void loadFavorites(final FavoritesLoadEvent event) { - MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<MyLinkDTO>>() { - @Override - public void onSuccess(final Method method, final List<MyLinkDTO> result) { - super.onSuccess(method, result); - EventBus.getInstance().fireEvent(new FavoritesLoadedEvent(result)); - } - @Override - public void attempt() { - super.attempt(); - ServicesLocator.getServiceMyLinks().getMyLinks(this); - } - }; - action.attempt(); + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<MyLinkCategoryDTO>>() { + @Override + public void attempt() { + super.attempt(); + ServicesLocator.getServiceMyLinks().getMyCategories(this); + } + + @Override + public void onSuccess(Method method, List<MyLinkCategoryDTO> categories) { + super.onSuccess(method, categories); + loadMyLinks(categories); + } + }; + action.attempt(); + } + private void loadMyLinks(List<MyLinkCategoryDTO> categories) { + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<MyLinkDTO>>() { + @Override + public void onSuccess(final Method method, final List<MyLinkDTO> links) { + super.onSuccess(method, links); + //TODO : autre favoris et ordre + List groupedList = new ArrayList<>(); + List noCatList = new ArrayList<>(); + MyLinkCategoryDTO itemNoCat = new MyLinkCategoryDTO(); + itemNoCat.setName("Autres favoris"); + groupedList.add(itemNoCat); + for(MyLinkDTO link : links) { + if (link.getCategoryId() == null) { + noCatList.add(link); + } + } + Collections.sort(noCatList, new Comparator<MyLinkDTO>() { + @Override + public int compare(MyLinkDTO o1, MyLinkDTO o2) { + return o1.getPosition() - o2.getPosition(); + } + }); + groupedList.addAll(noCatList); + + for (MyLinkCategoryDTO category : categories) { + groupedList.add(category); + for(MyLinkDTO link : links) { + List catList = new ArrayList<>(); + if (link.getCategoryId() != null && link.getCategoryId().equals(category.getCatId())) { + catList.add(link); + } + Collections.sort(catList, new Comparator<MyLinkDTO>() { + @Override + public int compare(MyLinkDTO o1, MyLinkDTO o2) { + return o1.getPosition() - o2.getPosition(); + } + }); + groupedList.addAll(catList); + } + } + EventBus.getInstance().fireEvent(new FavoritesLoadedEvent(groupedList)); + } + + @Override + public void attempt() { + super.attempt(); + ServicesLocator.getServiceMyLinks().getMyLinks(this); + } + }; + action.attempt(); } - @Override + @Override public void addFavorite(final AddFavoriteEvent event) { MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<MyLinkDTO>() { @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/pages/FavoritesLoadedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/pages/FavoritesLoadedEvent.java index 79b85fbcd..627db28e3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/pages/FavoritesLoadedEvent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/events/pages/FavoritesLoadedEvent.java @@ -24,15 +24,13 @@ package org.silverpeas.mobile.client.apps.favorites.events.pages; -import org.silverpeas.mobile.shared.dto.MyLinkDTO; - import java.util.List; public class FavoritesLoadedEvent extends AbstractFavoritesPagesEvent { - List<MyLinkDTO> favorites; + List favorites; - public FavoritesLoadedEvent(List<MyLinkDTO> favorites) { + public FavoritesLoadedEvent(List favorites) { super(); this.favorites = favorites; } @@ -42,7 +40,7 @@ protected void dispatch(FavoritesPagesEventHandler handler) { handler.onFavoritesLoaded(this); } - public List<MyLinkDTO> getFavorites() { + public List getFavorites() { return favorites; } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java index e0edc3a40..4bf43b6c2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java @@ -28,12 +28,14 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.favorites.events.app.FavoritesDeleteEvent; import org.silverpeas.mobile.client.apps.favorites.events.app.FavoritesLoadEvent; import org.silverpeas.mobile.client.apps.favorites.events.pages.AbstractFavoritesPagesEvent; import org.silverpeas.mobile.client.apps.favorites.events.pages.FavoritesLoadedEvent; import org.silverpeas.mobile.client.apps.favorites.events.pages.FavoritesPagesEventHandler; +import org.silverpeas.mobile.client.apps.favorites.pages.widgets.CategoryItem; import org.silverpeas.mobile.client.apps.favorites.resources.FavoritesMessages; import org.silverpeas.mobile.client.apps.navigation.pages.widgets.FavoriteItem; import org.silverpeas.mobile.client.common.EventBus; @@ -42,6 +44,7 @@ import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.base.widgets.DeleteButton; import org.silverpeas.mobile.client.resources.ApplicationMessages; +import org.silverpeas.mobile.shared.dto.MyLinkCategoryDTO; import org.silverpeas.mobile.shared.dto.MyLinkDTO; import java.util.ArrayList; @@ -79,12 +82,18 @@ public void stop() { @Override public void onFavoritesLoaded(final FavoritesLoadedEvent event) { favorites.clear(); - List<MyLinkDTO> favoritesList = event.getFavorites(); - for (MyLinkDTO favoriteDTO : favoritesList) { - FavoriteItem item = new FavoriteItem(); - item.setParent(this); - item.setData(favoriteDTO); - favorites.add(item); + List favoritesList = event.getFavorites(); + for (Object it : favoritesList) { + if (it instanceof MyLinkDTO) { + FavoriteItem item = new FavoriteItem(); + item.setParent(this); + item.setData((MyLinkDTO) it); + favorites.add(item); + } else if (it instanceof MyLinkCategoryDTO) { + CategoryItem item = new CategoryItem(); + item.setData((MyLinkCategoryDTO) it); + favorites.add(item); + } } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java new file mode 100644 index 000000000..6444cf348 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.favorites.pages.widgets; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.components.base.widgets.SelectableItem; +import org.silverpeas.mobile.client.resources.ApplicationMessages; +import org.silverpeas.mobile.client.resources.ApplicationResources; +import org.silverpeas.mobile.shared.dto.MyLinkCategoryDTO; + +public class CategoryItem extends SelectableItem { + + private MyLinkCategoryDTO data; + private static CategoryItemUiBinder uiBinder = GWT.create(CategoryItemUiBinder.class); + + @UiField + HTMLPanel container; + @UiField Anchor link; + protected ApplicationMessages msg = null; + + private ApplicationResources resources = GWT.create(ApplicationResources.class); + + @UiField + SpanElement title, desc, icon; + + + interface CategoryItemUiBinder extends UiBinder<Widget, CategoryItem> { + } + + public CategoryItem() { + initWidget(uiBinder.createAndBindUi(this)); + msg = GWT.create(ApplicationMessages.class); + setContainer(container); + icon.setInnerHTML(resources.less().getText()); + + } + public void setData(MyLinkCategoryDTO data) { + this.data = data; + title.setInnerHTML(data.getName()); + if (!data.getName().equals(data.getDescription())) { + desc.setInnerHTML(data.getDescription()); + } + } + public MyLinkCategoryDTO getData() { + return data; + } + +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.ui.xml new file mode 100644 index 000000000..d5286d2cf --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.ui.xml @@ -0,0 +1,36 @@ +<!-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "https://www.silverpeas.org/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> + + <g:HTMLPanel tag="li" ui:field="container" styleName="category"> + <g:Anchor ui:field="link" styleName="ui-btn"> + <span ui:field="icon" class="category-icon"></span> + <span ui:field="title" class="category-title"></span> + <span ui:field="desc" class="category-desc"></span> + </g:Anchor> + </g:HTMLPanel> + +</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java index df93d10f4..4ef94393d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java @@ -47,6 +47,14 @@ public interface ApplicationResources extends ClientBundle { @DataResource.MimeType("image/svg+xml") TextResource favorite(); + @Source("icons/expand_more.svg") + @DataResource.MimeType("image/svg+xml") + TextResource more(); + + @Source("icons/expand_less.svg") + @DataResource.MimeType("image/svg+xml") + TextResource less(); + @Source("icons/call.svg") @DataResource.MimeType("image/svg+xml") TextResource call(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_less.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_less.svg new file mode 100644 index 000000000..2d2595701 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_less.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_more.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_more.svg new file mode 100644 index 000000000..c55bd7ff5 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/expand_more.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index af9a2b7d1..6c115e289 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -2135,6 +2135,29 @@ form .forms .fields > li:nth-child(even) { fill : #a9a9a9; } +.ui-listview.favoris .category { + +} + +.ui-listview.favoris .category .category-title { + font-weight: bold; +} + +.ui-listview.favoris .category .category-desc { + display: block; +} + +.ui-listview.favoris .category .category-icon { + position: absolute; + right: 0.5em; + fill: black; +} + +.ui-listview.favoris .category a { + background-color: #7eb73b; + padding-left: 1em; +} + /*** Popup ***/ .gwt-PopupPanel { left: 0; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMyLinks.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMyLinks.java new file mode 100644 index 000000000..39bdd1838 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceMyLinks.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.server.services; + +import org.fusesource.restygwt.client.MethodCallback; +import org.fusesource.restygwt.client.RestService; +import org.silverpeas.mobile.shared.dto.MyLinkCategoryDTO; +import org.silverpeas.mobile.shared.dto.MyLinkDTO; +import org.silverpeas.mobile.shared.dto.comments.CommentDTO; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.List; + +/** + * @author svu + */ +@Path("/mylinks") +public interface ServiceMyLinks extends RestService { + + + @POST + @Path("/") + public void addLink(MyLinkDTO newLink, MethodCallback<MyLinkDTO> callback); + + @GET + @Path("/") + public void getMyLinks(MethodCallback<List<MyLinkDTO>> callback); + + @DELETE + @Path("{linkId}") + public void deleteLink(final @PathParam("linkId") String linkId, MethodCallback<Void> callback); + + @GET + @Path("categories") + @Produces(MediaType.APPLICATION_JSON) + public void getMyCategories(MethodCallback<List<MyLinkCategoryDTO>> callback); + +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkCategoryDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkCategoryDTO.java new file mode 100644 index 000000000..5344b02a6 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkCategoryDTO.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.shared.dto; + +import java.io.Serializable; + +/** + * @author svu + */ +public class MyLinkCategoryDTO implements Serializable { + + private String catId; + + private String position; + private String name; + private String description; + + private String userId; + + public String getCatId() { + return catId; + } + + public void setCatId(String catId) { + this.catId = catId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkDTO.java index ecc12c09a..382edf0f8 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/MyLinkDTO.java @@ -43,6 +43,8 @@ public class MyLinkDTO implements Serializable { private String instanceId = ""; private String objectId = ""; + private String categoryId = ""; + public String getUri() { return uri; } @@ -130,4 +132,12 @@ public String getObjectId() { public void setObjectId(final String objectId) { this.objectId = objectId; } + + public String getCategoryId() { + return categoryId; + } + + public void setCategoryId(String categoryId) { + this.categoryId = categoryId; + } } From a2a3baf6563a137d81d3c0410db207e503dde281 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 19 Feb 2024 18:53:05 +0100 Subject: [PATCH 198/228] enhance favorites categories --- .../client/apps/favorites/FavoritesApp.java | 3 +- .../apps/favorites/pages/FavoritesPage.java | 4 +++ .../favorites/pages/widgets/CategoryItem.java | 36 +++++++++++++++++++ .../client/resources/ApplicationMessages.java | 3 ++ .../ApplicationMessages_en.properties | 4 ++- .../ApplicationMessages_fr.properties | 4 ++- .../org/silverpeas/mobile/public/spmobile.css | 20 +++++++++-- 7 files changed, 68 insertions(+), 6 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java index 43396f476..873fecb0d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/FavoritesApp.java @@ -90,11 +90,10 @@ private void loadMyLinks(List<MyLinkCategoryDTO> categories) { @Override public void onSuccess(final Method method, final List<MyLinkDTO> links) { super.onSuccess(method, links); - //TODO : autre favoris et ordre List groupedList = new ArrayList<>(); List noCatList = new ArrayList<>(); MyLinkCategoryDTO itemNoCat = new MyLinkCategoryDTO(); - itemNoCat.setName("Autres favoris"); + itemNoCat.setName(msg.favoritesWithoutCategory()); groupedList.add(itemNoCat); for(MyLinkDTO link : links) { if (link.getCategoryId() == null) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java index 4bf43b6c2..8aeab4e2f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/FavoritesPage.java @@ -83,16 +83,20 @@ public void stop() { public void onFavoritesLoaded(final FavoritesLoadedEvent event) { favorites.clear(); List favoritesList = event.getFavorites(); + CategoryItem currentCategory = null; for (Object it : favoritesList) { if (it instanceof MyLinkDTO) { FavoriteItem item = new FavoriteItem(); item.setParent(this); item.setData((MyLinkDTO) it); + currentCategory.addFavorite(item); + item.getElement().addClassName("item-open"); favorites.add(item); } else if (it instanceof MyLinkCategoryDTO) { CategoryItem item = new CategoryItem(); item.setData((MyLinkCategoryDTO) it); favorites.add(item); + currentCategory = item; } } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java index 6444cf348..4f0d168ee 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java @@ -26,19 +26,29 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.apps.navigation.pages.widgets.FavoriteItem; import org.silverpeas.mobile.client.components.base.widgets.SelectableItem; import org.silverpeas.mobile.client.resources.ApplicationMessages; import org.silverpeas.mobile.client.resources.ApplicationResources; import org.silverpeas.mobile.shared.dto.MyLinkCategoryDTO; +import java.util.ArrayList; +import java.util.List; + public class CategoryItem extends SelectableItem { private MyLinkCategoryDTO data; + private boolean expanded = true; + + private List<FavoriteItem> favorites = new ArrayList<>(); private static CategoryItemUiBinder uiBinder = GWT.create(CategoryItemUiBinder.class); @UiField @@ -69,8 +79,34 @@ public void setData(MyLinkCategoryDTO data) { desc.setInnerHTML(data.getDescription()); } } + + public void addFavorite(FavoriteItem item) { + favorites.add(item); + } + + public MyLinkCategoryDTO getData() { return data; } + @UiHandler("link") + protected void onClick(ClickEvent event) { + expanded = !expanded; + if (expanded) { + icon.setInnerHTML(resources.more().getText()); + } else { + icon.setInnerHTML(resources.less().getText()); + } + for (FavoriteItem item : favorites) { + //item.setVisible(expanded); + if (expanded) { + item.getElement().addClassName("item-open"); + item.getElement().removeClassName("item-closed"); + + } else { + item.getElement().addClassName("item-closed"); + item.getElement().removeClassName("item-open"); + } + } + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java index 362e7e880..35c210e0b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java @@ -200,4 +200,7 @@ public interface ApplicationMessages extends Messages { @DefaultMessage("Partager") String share(); + + @DefaultMessage("Autres favoris") + String favoritesWithoutCategory(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties index 924bf0a65..5fe780552 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties @@ -85,4 +85,6 @@ sended=Sended notfoundError=Ressource not found -share=Share \ No newline at end of file +share=Share + +favoritesWithoutCategory=Others favorites \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties index 5671729fb..3eacdf2f2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties @@ -90,4 +90,6 @@ sended=Envoyées notfoundError=Ressource non trouv�e -share=Partager \ No newline at end of file +share=Partager + +favoritesWithoutCategory=Autres favoris \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 6c115e289..0b29b5c25 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -511,7 +511,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { .ui-page-content { padding: 0; - min-height: 100vh; + min-height: calc(100vh - 92px); } #menu-principal { @@ -1342,6 +1342,18 @@ audio::-webkit-media-controls-enclosure { margin-bottom:0px; } +.item-open { + transition: all .25s ease-in-out; + color: transparent; + max-height: 600px; +} + +.item-closed { + transition: all .25s ease-in-out; + max-height: 0px; +} + + li > #operations { padding:0em; } @@ -2126,6 +2138,10 @@ form .forms .fields > li:nth-child(even) { padding-left: 1em; } +.ui-listview.favoris { + overflow: hidden; +} + .ui-listview.favoris a { padding-left: 2.5em; } @@ -2136,7 +2152,7 @@ form .forms .fields > li:nth-child(even) { } .ui-listview.favoris .category { - + z-index: 3; } .ui-listview.favoris .category .category-title { From de2664388a8eb52d671628e878b5650851c6d916 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 20 Feb 2024 22:14:39 +0100 Subject: [PATCH 199/228] enhance popup --- .../client/components/PopinConfirmation.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/PopinConfirmation.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/PopinConfirmation.java index 3140a2d23..961bf627e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/PopinConfirmation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/PopinConfirmation.java @@ -24,9 +24,11 @@ package org.silverpeas.mobile.client.components; +import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; @@ -65,9 +67,21 @@ public void onClick(final ClickEvent clickEvent) { buttons.add(no); content.add(buttons); - setWidget(content); - center(); + recenter(); + getElement().setAttribute("style", getElement().getAttribute("style") + " height: -webkit-fill-available;"); + } + + @Override + public void show() { + super.show(); + int popupHeight = getElement().getFirstChildElement().getOffsetHeight(); + int popupPaddingTop = Integer.parseInt(getElement().getStyle().getPaddingTop().replace("px","")); + getElement().getStyle().setPaddingTop(popupPaddingTop - (popupHeight/2) , Style.Unit.PX); + } + + public void recenter() { + getElement().getStyle().setPaddingTop(getElement().getAbsoluteTop() + (Window.getClientHeight() /2), Style.Unit.PX); } public void setYesCallback(Command callback) { From a9ab8cea6cd8c25bfa774fda95c3d14a8679a7ae Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 21 Feb 2024 19:02:35 +0100 Subject: [PATCH 200/228] avoid unwanted actions --- .../components/attachments/Attachment.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java index 55ee5cf51..5b6c85457 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/attachments/Attachment.java @@ -201,20 +201,27 @@ private void toogleOperations() { } } + private boolean isVisibleOperations() { + return operations.getStylePrimaryName().equals("ops-open"); + } + private void viewDocument() { AttachmentsManager.viewDocument(data.getId(), data.getLang()); } @UiHandler("share") protected void share(ClickEvent event) { - SharingPage page = new SharingPage(); - page.setData("Attachment", data.getSpId(), data.getInstanceId()); - page.show(); + if (isVisibleOperations()) { + SharingPage page = new SharingPage(); + page.setData("Attachment", data.getSpId(), data.getInstanceId()); + page.show(); + } } @UiHandler("download") protected void download(ClickEvent event) { - if (MobilUtils.isIOS()) { + if (isVisibleOperations()) { + if (MobilUtils.isIOS()) { if (data.isDownloadable()) { String u = link.getHref(); if (NetworkHelper.isOnline()) { @@ -235,16 +242,19 @@ protected void download(ClickEvent event) { viewDocument(); } } + } } @UiHandler("view") protected void view(ClickEvent event) { - viewDocument(); + if (isVisibleOperations()) viewDocument(); } @UiHandler("notify") protected void notify(ClickEvent event) { - NotificationsApp app = new NotificationsApp(data.getInstanceId(), data.getId(), NotificationDTO.TYPE_DOCUMENT, data.getFileName(), data.getFileName()); - app.start(); + if (isVisibleOperations()) { + NotificationsApp app = new NotificationsApp(data.getInstanceId(), data.getId(), NotificationDTO.TYPE_DOCUMENT, data.getFileName(), data.getFileName()); + app.start(); + } } } From 509bb383ecefe06be30f495c7bf0552c7737f673 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 22 Feb 2024 16:40:04 +0100 Subject: [PATCH 201/228] draftout publication --- .../client/apps/documents/DocumentsApp.java | 26 ++++++- .../events/app/DocumentsAppEventHandler.java | 2 + .../events/app/DocumentsPublishEvent.java | 48 ++++++++++++ .../navigation/GedItemPublishedEvent.java | 50 ++++++++++++ .../GedNavigationPagesEventHandler.java | 2 + .../publication/PublicationLoadedEvent.java | 10 ++- ...ublicationNavigationPagesEventHandler.java | 7 +- .../PublicationPublishedEvent.java | 48 ++++++++++++ .../documents/pages/GedNavigationPage.java | 18 ++++- .../apps/documents/pages/PublicationPage.java | 29 +++++-- .../pages/widgets/DraftOutButton.java | 77 +++++++++++++++++++ .../pages/widgets/DraftOutButton.ui.xml | 33 ++++++++ .../apps/documents/pages/widgets/GedItem.java | 12 +++ .../resources/DocumentsMessages.java | 2 + .../resources/DocumentsMessages.properties | 4 +- .../resources/DocumentsMessages_en.properties | 4 +- .../resources/DocumentsMessages_fr.properties | 4 +- .../client/apps/tasks/pages/TasksPage.java | 3 +- .../services/AbstractRestWebService.java | 7 +- .../server/services/ServiceDocuments.java | 41 +++++++--- .../shared/dto/documents/PublicationDTO.java | 20 +++++ .../navigation/ApplicationInstanceDTO.java | 9 +++ .../services/rest/ServiceDocuments.java | 5 ++ .../shared/services/rest/ServiceMyLinks.java | 5 ++ 24 files changed, 431 insertions(+), 35 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsPublishEvent.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemPublishedEvent.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationPublishedEvent.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.ui.xml diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java index e580ce63d..973870e06 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java @@ -33,9 +33,11 @@ import org.fusesource.restygwt.client.MethodCallback; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.apps.documents.events.app.*; +import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemPublishedEvent; import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemsLoadedEvent; import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationAttachmentsLoadedEvent; import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationLoadedEvent; +import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationPublishedEvent; import org.silverpeas.mobile.client.apps.documents.pages.GedNavigationPage; import org.silverpeas.mobile.client.apps.documents.pages.PublicationPage; import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; @@ -278,7 +280,7 @@ public void onSuccess(final Method method, final PublicationDTO result) { new PublicationLoadedEvent(result, getApplicationInstance().getCommentable(), getApplicationInstance().getAbleToStoreContent(), getApplicationInstance().getNotifiable(), getApplicationInstance().getPublicationSharing(), - event.getContent().getType(), getCanImport())); + event.getContent().getType(), getCanImport(), result.isPublishable())); } }; action.attempt(); @@ -344,4 +346,26 @@ public void onSuccess(Method method, PublicationDTO publicationDTO) { } }); } + + @Override + public void publish(DocumentsPublishEvent event) { + + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<PublicationDTO>() { + @Override + public void attempt() { + super.attempt(); + ServicesLocator.getServiceDocuments().publish(event.getPublication().getInstanceId(), + event.getPublication().getId(), this); + } + + @Override + public void onSuccess(Method method, PublicationDTO publication) { + super.onSuccess(method, publication); + EventBus.getInstance().fireEvent(new PublicationPublishedEvent(publication)); + //TODO : update folder + EventBus.getInstance().fireEvent(new GedItemPublishedEvent(event.getPublication())); + } + }; + action.attempt(); + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java index 7a7a7f67f..fb30682ce 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsAppEventHandler.java @@ -33,4 +33,6 @@ public interface DocumentsAppEventHandler extends EventHandler { void share(DocumentsSharingEvent event); void nextPublication(DocumentsNextPublicationEvent event); + + void publish(DocumentsPublishEvent documentsPublishEvent); } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsPublishEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsPublishEvent.java new file mode 100644 index 000000000..ff7fae520 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/app/DocumentsPublishEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.documents.events.app; + + +import org.silverpeas.mobile.shared.dto.documents.PublicationDTO; +import org.silverpeas.mobile.shared.dto.tickets.TicketDTO; + +public class DocumentsPublishEvent extends AbstractDocumentsAppEvent { + + private PublicationDTO publication; + + public DocumentsPublishEvent(PublicationDTO publication) { + super(); + this.publication = publication; + } + + @Override + protected void dispatch(DocumentsAppEventHandler handler) { + handler.publish(this); + } + + public PublicationDTO getPublication() { + return publication; + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemPublishedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemPublishedEvent.java new file mode 100644 index 000000000..4c2d100d3 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedItemPublishedEvent.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.documents.events.pages.navigation; + +import org.silverpeas.mobile.shared.dto.BaseDTO; +import org.silverpeas.mobile.shared.dto.documents.PublicationDTO; + +import java.util.List; + +public class GedItemPublishedEvent extends AbstractGedNavigationPagesEvent { + + + private PublicationDTO publication; + + public GedItemPublishedEvent(PublicationDTO publication) { + super(); + this.publication = publication; + } + + @Override + protected void dispatch(GedNavigationPagesEventHandler handler) { + handler.onPublicationPublished(this); + } + + public PublicationDTO getPublication() { + return publication; + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedNavigationPagesEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedNavigationPagesEventHandler.java index c7ae2fdc1..4d97b8ec5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedNavigationPagesEventHandler.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/navigation/GedNavigationPagesEventHandler.java @@ -29,4 +29,6 @@ public interface GedNavigationPagesEventHandler extends EventHandler { void onLoadedTopics(GedItemsLoadedEvent event); void onGedItemClicked(GedItemClickEvent event); + + void onPublicationPublished(GedItemPublishedEvent gedItemPublishedEvent); } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java index b46067105..963792a8c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationLoadedEvent.java @@ -35,7 +35,10 @@ public class PublicationLoadedEvent extends AbstractPublicationPagesEvent { private boolean canImport = false; - public PublicationLoadedEvent(PublicationDTO publication, boolean commentable, boolean ableToStoreContent, boolean notifiable, int sharing, String type, boolean canImport) { + private boolean canPublish = false; + + public PublicationLoadedEvent(PublicationDTO publication, boolean commentable, boolean ableToStoreContent, + boolean notifiable, int sharing, String type, boolean canImport, boolean canPublish) { super(); this.notifiable = notifiable; this.publication = publication; @@ -44,6 +47,7 @@ public PublicationLoadedEvent(PublicationDTO publication, boolean commentable, b this.sharing = sharing; this.type = type; this.canImport = canImport; + this.canPublish = canPublish; } @Override @@ -72,4 +76,8 @@ public boolean isNotifiable() { public int getSharing() { return sharing; } public boolean isCanImport() { return canImport; } + + public boolean isCanPublish() { + return canPublish; + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationNavigationPagesEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationNavigationPagesEventHandler.java index 8994b5a6a..babbd5a0d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationNavigationPagesEventHandler.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationNavigationPagesEventHandler.java @@ -27,6 +27,9 @@ import com.google.gwt.event.shared.EventHandler; public interface PublicationNavigationPagesEventHandler extends EventHandler { - void onLoadedPublication(PublicationLoadedEvent event); - void onLoadedPublicationAttachments(PublicationAttachmentsLoadedEvent event); + void onLoadedPublication(PublicationLoadedEvent event); + + void onLoadedPublicationAttachments(PublicationAttachmentsLoadedEvent event); + + void publishedPublication(PublicationPublishedEvent publicationPublishedEvent); } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationPublishedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationPublishedEvent.java new file mode 100644 index 000000000..83bde6b3f --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/events/pages/publication/PublicationPublishedEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.documents.events.pages.publication; + +import org.silverpeas.mobile.shared.dto.documents.PublicationDTO; + +public class PublicationPublishedEvent extends AbstractPublicationPagesEvent { + + private PublicationDTO publication; + + public PublicationPublishedEvent(PublicationDTO publication) { + super(); + this.publication = publication; + } + + @Override + protected void dispatch(PublicationNavigationPagesEventHandler handler) { + handler.publishedPublication(this); + } + + public PublicationDTO getPublication() { + return publication; + } + + +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java index 85a690de5..079a5d16f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java @@ -30,10 +30,7 @@ import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadGedItemsEvent; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.AbstractGedNavigationPagesEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemClickEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedItemsLoadedEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.GedNavigationPagesEventHandler; +import org.silverpeas.mobile.client.apps.documents.events.pages.navigation.*; import org.silverpeas.mobile.client.apps.documents.pages.widgets.AddFileButton; import org.silverpeas.mobile.client.apps.documents.pages.widgets.GedItem; import org.silverpeas.mobile.client.apps.documents.pages.widgets.ShareButton; @@ -177,6 +174,19 @@ public void onGedItemClicked(GedItemClickEvent event) { } } + @Override + public void onPublicationPublished(GedItemPublishedEvent event) { + for (int i = 0; i < list.getCount(); i++) { + GedItem item = (GedItem) list.getWidget(i); + Object data = item.getData(); + if (data instanceof PublicationDTO) { + if (event.getPublication().getId().equals(((PublicationDTO) data).getId())) { + item.setPublicationName(event.getPublication().getName()); + } + } + } + } + public String getRootTopicId() { return rootTopicId; } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index 3e44a3511..db8628b64 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -33,6 +33,7 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.HTMLPanel; @@ -41,11 +42,10 @@ import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadAttachmentsEvent; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsNextPublicationEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.publication.AbstractPublicationPagesEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationAttachmentsLoadedEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationLoadedEvent; -import org.silverpeas.mobile.client.apps.documents.events.pages.publication.PublicationNavigationPagesEventHandler; +import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsPublishEvent; +import org.silverpeas.mobile.client.apps.documents.events.pages.publication.*; import org.silverpeas.mobile.client.apps.documents.pages.widgets.AddFileButton; +import org.silverpeas.mobile.client.apps.documents.pages.widgets.DraftOutButton; import org.silverpeas.mobile.client.apps.documents.pages.widgets.LinkedPublicationItem; import org.silverpeas.mobile.client.apps.documents.pages.widgets.ShareButton; import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; @@ -101,7 +101,7 @@ public class PublicationPage extends PageContent private AddToFavoritesButton favorite = new AddToFavoritesButton(); private AddFileButton buttonImport = new AddFileButton(); - + private DraftOutButton buttonDraftOut = new DraftOutButton(); private ShareButton share = new ShareButton(); private ContentDTO contentDTO = null; private boolean canImport = false; @@ -135,6 +135,7 @@ public PublicationPage() { linkedPublications.getElement().setId("linkedPublications"); content.setId("content"); buttonImport.setId("import"); + buttonDraftOut.setId("publish"); content.getStyle().setDisplay(Style.Display.NONE); EventBus.getInstance().addHandler(AbstractPublicationPagesEvent.TYPE, this); EventBus.getInstance().addHandler(SwipeEndEvent.getType(), this); @@ -197,6 +198,16 @@ public void onLoadedPublication(PublicationLoadedEvent event) { buttonImport.init(event.getPublication().getInstanceId(), event.getPublication().getId(), true); addActionShortcut(buttonImport); } + + if (publication.isDraft() && event.isCanPublish()) { + buttonDraftOut.setCallback(new Command() { + @Override + public void execute() { + EventBus.getInstance().fireEvent(new DocumentsPublishEvent(publication)); + } + }); + addActionMenu(buttonDraftOut); + } } @Override @@ -220,8 +231,14 @@ public void onLoadedPublicationAttachments(final PublicationAttachmentsLoadedEve } } + @Override + public void publishedPublication(PublicationPublishedEvent event) { + title.setInnerHTML(event.getPublication().getName()); + publication.setName(event.getPublication().getName()); + } + /** - * Refesh view informations. + * Refresh view informations. */ private void display(boolean commentable, boolean ableToStoreContent, String type) { if (isVisible()) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.java new file mode 100644 index 000000000..6edffd784 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.documents.pages.widgets; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.Style; +import com.google.gwt.event.dom.client.ChangeEvent; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.FileUpload; +import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.SpMobil; +import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadGedItemsEvent; +import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent; +import org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages; +import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.common.Notification; +import org.silverpeas.mobile.client.common.navigation.UrlUtils; +import org.silverpeas.mobile.client.common.network.NetworkHelper; +import org.silverpeas.mobile.client.components.base.ActionItem; +import org.silverpeas.mobile.client.components.base.ActionsMenu; +import org.silverpeas.mobile.client.resources.ApplicationMessages; +import org.silverpeas.mobile.shared.dto.ContentDTO; +import org.silverpeas.mobile.shared.dto.ContentsTypes; + + +/** + * @author: svu + */ +public class DraftOutButton extends ActionItem { + interface DraftOutButtonUiBinder extends UiBinder<Widget, DraftOutButton> { + } + + @UiField Anchor link; + @UiField(provided = true) protected DocumentsMessages msg = null; + + private ApplicationMessages globalMsg = GWT.create(ApplicationMessages.class); + + private static DraftOutButtonUiBinder uiBinder = GWT.create(DraftOutButtonUiBinder.class); + + public DraftOutButton() { + msg = GWT.create(DocumentsMessages.class); + initWidget(uiBinder.createAndBindUi(this)); + } + + @UiHandler("link") + void upload(ClickEvent event) { + getCallback().execute(); + ActionsMenu.close(getElement()); + } +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.ui.xml new file mode 100644 index 000000000..13a16a33d --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/DraftOutButton.ui.xml @@ -0,0 +1,33 @@ +<!-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "https://www.silverpeas.org/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui'> + + <ui:with field='msg' type='org.silverpeas.mobile.client.apps.documents.resources.DocumentsMessages'/> + + <g:HTMLPanel tag="li" ui:field="container" styleName=""> + <g:Anchor styleName="" ui:field="link" text="{msg.draftOut}"/> + </g:HTMLPanel> +</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java index 57cee45f2..6f5a1ec64 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java @@ -59,6 +59,10 @@ public GedItem() { msg = GWT.create(ApplicationMessages.class); } + public Object getData() { + return data; + } + public void setData(Object data) { this.data = data; if (data instanceof TopicDTO) { @@ -88,6 +92,14 @@ public void setData(Object data) { } + public void setPublicationName(String name) { + if (dataPublication != null) { + dataPublication.setName(name); + ((PublicationDTO) data).setName(name); + link.setHTML(name); + } + } + @UiHandler("link") protected void onClick(ClickEvent event) { EventBus.getInstance().fireEvent(new GedItemClickEvent(data)); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java index 984af7e8e..4cbca0cb0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.java @@ -62,4 +62,6 @@ public interface DocumentsMessages extends Messages { String maxUploadError(); String fileNotSupportedError(); + + String draftOut(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties index 78720b514..7d958d399 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages.properties @@ -55,4 +55,6 @@ commentsLabel=Message complémentaire importFile=Importer un fichier maxUploadError=Média trop volumineux -fileNotSupportedError=Format non pris en charge \ No newline at end of file +fileNotSupportedError=Format non pris en charge + +draftOut=Publier \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties index 6e8ec5f84..5ff952de1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_en.properties @@ -55,4 +55,6 @@ commentsLabel=Additional message importFile=File import maxUploadError=Media too large -fileNotSupportedError=Unsupported format \ No newline at end of file +fileNotSupportedError=Unsupported format + +draftOut=Publish \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties index 78720b514..7d958d399 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/resources/DocumentsMessages_fr.properties @@ -55,4 +55,6 @@ commentsLabel=Message complémentaire importFile=Importer un fichier maxUploadError=Média trop volumineux -fileNotSupportedError=Format non pris en charge \ No newline at end of file +fileNotSupportedError=Format non pris en charge + +draftOut=Publier \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java index 166dffa0f..dd61cee14 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java @@ -44,6 +44,7 @@ import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.DeleteButton; import org.silverpeas.mobile.shared.dto.TaskDTO; import java.util.ArrayList; @@ -58,7 +59,7 @@ interface TasksPageUiBinder extends UiBinder<HTMLPanel, TasksPage> { } private static TasksPageUiBinder uiBinder = GWT.create(TasksPageUiBinder.class); private AddTaskButton buttonCreate = new AddTaskButton(); - private DeleteTaskButton buttonDelete = new DeleteTaskButton(); + private DeleteButton buttonDelete = new DeleteButton(); @UiField HTMLPanel container; @UiField UnorderedList list; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java index 26a29000b..f2c7df9b9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/AbstractRestWebService.java @@ -2,7 +2,6 @@ import org.silverpeas.core.SilverpeasException; import org.silverpeas.core.security.authentication.AuthenticationCredential; -import org.silverpeas.core.security.authentication.AuthenticationResponse; import org.silverpeas.core.security.authentication.AuthenticationService; import org.silverpeas.core.security.authentication.AuthenticationServiceProvider; import org.silverpeas.core.security.session.SessionInfo; @@ -42,15 +41,13 @@ protected void setMainsessioncontroller(String login, String password, String do throws SilverpeasException { AuthenticationService authService = AuthenticationServiceProvider.getService(); AuthenticationCredential credential = AuthenticationCredential.newWithAsLogin(login); - AuthenticationResponse response = + String response = authService.authenticate(credential.withAsPassword(password).withAsDomainId(domainId)); String key; if (response == null) { key = null; - } else if (response.getStatus().succeeded()) { - key = response.getToken(); } else { - key = response.getStatus().getCode(); + key = response; } MainSessionController mainSessionController = new MainSessionController(key, getHttpRequest().getSession()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java index d6d837dd8..f4a448b74 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceDocuments.java @@ -37,12 +37,10 @@ import org.silverpeas.core.admin.user.model.User; import org.silverpeas.core.annotation.WebService; import org.silverpeas.core.comment.service.CommentServiceProvider; -import org.silverpeas.core.contribution.attachment.AttachmentService; import org.silverpeas.core.contribution.attachment.AttachmentServiceProvider; import org.silverpeas.core.contribution.attachment.model.SimpleDocument; import org.silverpeas.core.contribution.attachment.model.SimpleDocumentPK; import org.silverpeas.core.contribution.attachment.util.SimpleDocumentList; -import org.silverpeas.core.contribution.publication.dao.PublicationCriteria; import org.silverpeas.core.contribution.publication.model.*; import org.silverpeas.core.contribution.publication.service.PublicationService; import org.silverpeas.core.io.media.image.thumbnail.ThumbnailSettings; @@ -50,13 +48,8 @@ import org.silverpeas.core.node.model.NodePK; import org.silverpeas.core.node.service.NodeService; import org.silverpeas.core.sharing.services.SharingServiceProvider; -import org.silverpeas.core.sharing.services.SharingTicketService; import org.silverpeas.core.silverstatistics.access.service.StatisticService; -import org.silverpeas.core.util.LocalizationBundle; -import org.silverpeas.core.util.ResourceLocator; -import org.silverpeas.core.util.ServiceProvider; -import org.silverpeas.core.util.SettingBundle; -import org.silverpeas.core.util.StringUtil; +import org.silverpeas.core.util.*; import org.silverpeas.core.util.file.FileServerUtils; import org.silverpeas.core.util.logging.SilverLogger; import org.silverpeas.core.web.rs.UserPrivilegeValidation; @@ -76,7 +69,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Optional; import java.util.concurrent.CopyOnWriteArrayList; /** @@ -348,6 +340,8 @@ public List<PublicationDTO> getPublications(@PathParam("appId") String instanceI PublicationDTO dto = new PublicationDTO(); dto.setId(publicationDetail.getId()); dto.setVignette(getVignetteUrl(publicationDetail)); + dto.setDraft(publicationDetail.isDraft()); + dto.setPublishable(isPublishable(publicationDetail)); if (publicationDetail.isDraft()) { if (publicationDetail.getUpdaterId().equals(getUser().getId())) { @@ -423,6 +417,10 @@ public PublicationDTO getPublication(@PathParam("id") String id, .debug("ServiceDocumentsImpl.getPublication", "getPublication for id " + id); try { + final String userLanguage = getUser().getUserPreferences().getLanguage(); + LocalizationBundle resource = + ResourceLocator.getLocalizationBundle("org.silverpeas.mobile.multilang.mobileBundle", + userLanguage); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); PublicationDetail pub = getPubBm().getDetail(new PublicationPK(id)); @@ -431,8 +429,12 @@ public PublicationDTO getPublication(@PathParam("id") String id, dto.setId(pub.getId()); dto.setName(pub.getName()); dto.setCreator(pub.getCreator().getDisplayedName()); + dto.setPublishable(isPublishable(pub)); dto.setUpdater(organizationController.getUserDetail(pub.getUpdaterId()).getDisplayedName()); dto.setVersion(pub.getVersion()); + dto.setDraft(pub.isDraft()); + if (pub.isDraft()) dto.setName(pub.getName() + " (" + resource.getString("publication.draft") + ")"); + dto.setDescription(pub.getDescription()); dto.setUpdateDate(sdf.format(pub.getLastUpdateDate())); dto.setCreationDate(sdf.format(pub.getCreationDate())); @@ -647,7 +649,6 @@ public PublicationDTO getNextPublication(@PathParam("appId") String instanceId, } new KmeliaPublicationSort(sort).withContentLanguage(getUser().getUserPreferences().getLanguage()).sort(publications); - KmeliaPublication next = null; for (int i = 0; i < publications.size(); i++) { if (publications.get(i).getId().equals(id)) { @@ -666,8 +667,7 @@ public PublicationDTO getNextPublication(@PathParam("appId") String instanceId, } } } - - + dto.setId(next.getId()); dto.setName(next.getName()); dto.setDescription(next.getDescription()); @@ -681,6 +681,23 @@ public PublicationDTO getNextPublication(@PathParam("appId") String instanceId, return dto; } + private boolean isPublishable(PublicationDetail pub) { + return pub.canBeModifiedBy(getUser()); + } + + @POST + @Path("publish/{pubId}") + @Produces(MediaType.APPLICATION_JSON) + public PublicationDTO publish(@PathParam("appId") String appId, @PathParam("pubId") String pubId) throws Exception { + CompletePublication pub = PublicationService.get().getCompletePublication(new PublicationPK(pubId)); + NodePK nodePK = KmeliaService.get().getPublicationFatherPK(new PublicationPK(pubId, pub.getPublicationDetail().getInstanceId())); + String profile = getUserTopicProfile(nodePK.getId(), appId); + KmeliaService.get().draftOutPublication(new PublicationPK(pubId), new NodePK(nodePK.getId(), appId), profile); + PublicationDTO dto = new PublicationDTO(); + dto.setName(pub.getPublicationDetail().getName(getUser().getUserPreferences().getLanguage())); + return dto; + } + @Override protected String getResourceBasePath() { return PATH; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java index 4c223c998..b991141c0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/documents/PublicationDTO.java @@ -43,6 +43,10 @@ public class PublicationDTO extends BaseDTO implements Serializable, Comparable< private int commentsNumber = 0; private String instanceId; private boolean content; + + private boolean draft; + + private boolean publishable; private List<PublicationDTO> linkedPublications; private String vignette; private int viewsNumber; @@ -145,4 +149,20 @@ public void setNotAllowedDownloads(List<String> notAllowedDownloads) { public List<String> getNotAllowedDownloads() { return notAllowedDownloads; } + + public boolean isDraft() { + return draft; + } + + public void setDraft(boolean draft) { + this.draft = draft; + } + + public boolean isPublishable() { + return publishable; + } + + public void setPublishable(boolean publishable) { + this.publishable = publishable; + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java index 49d1d5df7..98569dc55 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java @@ -42,6 +42,8 @@ public class ApplicationInstanceDTO extends SilverpeasObjectDTO implements Seria private int publicationSharing; private int fileSharing; + private boolean personnal; + public String getType() { return type; } @@ -105,4 +107,11 @@ public void setExtraId(final String extraId) { public int getPublicationSharing() { return publicationSharing; } public int getFileSharing() { return fileSharing; } + public boolean isPersonnal() { + return personnal; + } + + public void setPersonnal(boolean personnal) { + this.personnal = personnal; + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java index 7bc2263a1..743df139e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceDocuments.java @@ -89,4 +89,9 @@ public void getNextPublication(@PathParam("appId") String appId, @PathParam("id") String id, @PathParam("direction") String direction, MethodCallback<PublicationDTO> callback); + @POST + @Produces(MediaType.APPLICATION_JSON) + @Path("{appId}/publish/{pubId}") + public void publish(@PathParam("appId") String appId, @PathParam("pubId") String pubId, MethodCallback<PublicationDTO> callback); + } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java index 38d7951f6..244277c31 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceMyLinks.java @@ -26,6 +26,7 @@ import org.fusesource.restygwt.client.MethodCallback; import org.fusesource.restygwt.client.RestService; +import org.silverpeas.mobile.shared.dto.MyLinkCategoryDTO; import org.silverpeas.mobile.shared.dto.MyLinkDTO; import org.silverpeas.mobile.shared.dto.comments.CommentDTO; @@ -52,5 +53,9 @@ public interface ServiceMyLinks extends RestService { @Path("{linkId}") public void deleteLink(final @PathParam("linkId") String linkId, MethodCallback<Void> callback); + @GET + @Path("categories") + @Produces(MediaType.APPLICATION_JSON) + public void getMyCategories(MethodCallback<List<MyLinkCategoryDTO>> callback); } From 4d154957909df272b706069e667568fe8ff87994 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 23 Feb 2024 18:14:15 +0100 Subject: [PATCH 202/228] font size refactoring --- .../org/silverpeas/mobile/public/spmobile.css | 40 +++++++++---------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 0b29b5c25..056c7a300 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -52,7 +52,7 @@ legend, .ui-input-text input, .ui-input-search input { /* Form labels (overrides font-weight bold in bars, and mini font-size) */ .ui-mobile label, div.ui-controlgroup-label { font-weight: normal; - font-size: 16px; + font-size: 1.2em; } /* Separators @@ -1002,7 +1002,6 @@ audio::-webkit-media-controls-enclosure { color: #848484; padding: 1em; margin: 0; - font-size: 10pt; } .lastUpdate { @@ -1010,7 +1009,6 @@ audio::-webkit-media-controls-enclosure { padding-top: 1em; padding-left: 1em; margin: 0; - font-size: 10pt; } .nbViews { @@ -1018,7 +1016,6 @@ audio::-webkit-media-controls-enclosure { padding-top: 1em; padding-left: 1em; margin: 0; - font-size: 10pt; font-style: italic; } @@ -1038,7 +1035,7 @@ audio::-webkit-media-controls-enclosure { .appHeader { padding: 0 1em; margin: 0; - font-size: 12pt; + font-size: 1.2em; font-weight: normal; height: 3em; line-height: 3em; @@ -1237,7 +1234,7 @@ audio::-webkit-media-controls-enclosure { } #add-comment h3 { - font-size: 10pt; + font-size: 1em; font-weight: normal; margin: 0; padding: 0; @@ -1250,13 +1247,13 @@ audio::-webkit-media-controls-enclosure { } #add-comment textarea.ui-input-text { - font-size: 9pt; + font-size: 0.9em; height: 7em; border-radius: 10px; } #add-comment .btn-publicate { - font-size: 10pt; + font-size: 1em; color: #ec9c01; display: block; text-align: right; @@ -1458,7 +1455,7 @@ li > #operations { line-height: 1.4em; position: relative; color: #000; - font-size: 80%; + font-size: 0.8em; min-height: 3.4em; } @@ -1491,12 +1488,12 @@ li > #operations { } #notification .list-notifications { - font-size: 80%; + font-size: 0.8em; } #notification .title-instruction { display: inline-block; - font-size: 80%; + font-size: 0.8em; font-style: italic; } @@ -1515,7 +1512,7 @@ li > #operations { padding-left: 1%; line-height: 2.5em; background-color: #FFF; - font-size: 80%; + font-size: 0.8em; } .ui-controlgroup-horizontal .ui-controlgroup-controls > .ui-btn, .ui-controlgroup-horizontal .ui-controlgroup-controls li > .ui-btn, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-checkbox, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-radio, .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-select { @@ -1541,7 +1538,7 @@ input.filter-contacts { .list-contacts, .list-comments, .list-notifications, { - font-size: 10pt; + font-size: 1em; line-height: 1.8em; } @@ -1598,7 +1595,7 @@ input.filter-contacts { } #update-statut h2, #send-message h2 { - font-size: 13pt; + font-size: 1.3em; font-weight: normal } @@ -1769,7 +1766,7 @@ textarea.ui-input-text { #page-login #copyright { bottom: 1em; - font-size: 80%; + font-size: 0.8em; left: 0; position: fixed; right: 0; @@ -1894,7 +1891,7 @@ textarea.ui-input-text { } .liste-news li p, .liste-annonces li p { - font-size: 11px; + font-size: 0.82em; color: #666; } @@ -1909,7 +1906,6 @@ textarea.ui-input-text { border: 0 none; margin: 0; text-align: left; - /*background:#fff url(packImagesNavigation.png) 0.5625em -386px no-repeat;*/ padding-left: 2.5625em; } @@ -1920,7 +1916,7 @@ textarea.ui-input-text { .forms .form-title { color: #333333; - font-size: 130%; + font-size: 1.3em; font-weight: bold; margin: 0 0 5px; padding: 0; @@ -2272,7 +2268,7 @@ a.popin-btn { .forms-list .gwt-Label{ padding-bottom:0.5em; color:#333; - font-size:11pt; + font-size:1.1em; } .workflow-form li:nth-child(odd), @@ -2413,8 +2409,8 @@ a.popin-btn { .liste-news li h2 a, .forms-list h2, .liste-annonces li h2 a { - font-size: 14px; - line-height: 16px; + font-size: 1.05em; + line-height: 1.2em; color: #555; text-decoration: none; font-weight:500; @@ -2962,7 +2958,7 @@ a.popin-btn { #resourcesManager .reservationDate { font-weight: 600; - font-size: 11pt; + font-size: 1.1em; padding-bottom: 0.5em; } From ec6b50a3247f245307eb8af05731f27331793c47 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 23 Feb 2024 18:20:35 +0100 Subject: [PATCH 203/228] font size centralization --- .../src/main/java/org/silverpeas/mobile/public/spmobile.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 056c7a300..0283c1635 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -39,12 +39,16 @@ body.ui-panel-wrapper { background-color: #ececec; } -body, input, select, textarea, button, .ui-btn { +body { font-size: 10pt; line-height: 1em; font-family: Open Sans, sans-serif } +input, select, textarea, button, .ui-btn { + font-size: 1em; +} + legend, .ui-input-text input, .ui-input-search input { color: inherit; } From 86483e0d6b9a3683e3afd93d1bc2d70aadee5af4 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 26 Feb 2024 18:22:13 +0100 Subject: [PATCH 204/228] Feature #13922 --- .../org/silverpeas/mobile/client/SpMobil.java | 6 + .../client/apps/config/pages/ConfigPage.java | 26 ++- .../apps/config/pages/ConfigPage.ui.xml | 2 + .../favorites/pages/widgets/CategoryItem.java | 5 +- .../components/base/NavigationMenu.java | 18 +- .../components/base/NavigationMenu.ui.xml | 17 +- .../resources/ApplicationResources.java | 15 ++ .../resources/icons/menu}/inbox.svg | 0 .../client/resources/icons/menu/search.svg | 1 + .../client/resources/icons/menu/sharebox.svg | 1 + .../resources/icons/menu/usercalendar.svg} | 0 .../org/silverpeas/mobile/public/spmobile.css | 164 ++++++++++-------- .../shared/dto/configuration/Config.java | 13 ++ .../shared/dto/configuration/IConfig.java | 4 + 14 files changed, 187 insertions(+), 85 deletions(-) rename mobile-war/src/main/java/org/silverpeas/mobile/{public/icons => client/resources/icons/menu}/inbox.svg (100%) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/search.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/sharebox.svg rename mobile-war/src/main/java/org/silverpeas/mobile/{public/icons/calendar.svg => client/resources/icons/menu/usercalendar.svg} (100%) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index 918205ae8..29229d97a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -152,6 +152,8 @@ public void onModuleLoad() { // init connexion supervision NetworkHelper.getInstance(); + setFontSize(getConfiguration().getFontSize()); + instance = this; shortcutAppId = Window.Location.getParameter("shortcutAppId"); shortcutContentType = Window.Location.getParameter("shortcutContentType"); @@ -584,4 +586,8 @@ public void onAuthenticationError(final AbstractAuthenticationErrorEvent event) public static native void exportNativeFunctions()/*-{ $wnd.navigateTo = $entry(@org.silverpeas.mobile.client.common.navigation.LinksManager::navigateToPermalink(*)); }-*/; + + public static void setFontSize(int value) { + Document.get().getBody().setAttribute("style", "font-size:"+value+"pt;"); + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java index 80833e570..6d50e6260 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java @@ -25,11 +25,14 @@ package org.silverpeas.mobile.client.apps.config.pages; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.InputElement; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.HTMLPanel; +import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.apps.config.events.app.LoadConfigEvent; import org.silverpeas.mobile.client.apps.config.events.app.UpdateConfigEvent; import org.silverpeas.mobile.client.apps.config.events.pages.AbstractConfigPagesEvent; @@ -54,11 +57,32 @@ public class ConfigPage extends PageContent implements ConfigPagesEventHandler { CheckBox lastPublicationsDisplay, lastEventsDisplay; @UiField CheckBox favoritesDisplay, shortCutsDisplay, shortCutsToolsDisplay; + + @UiField + InputElement fontSize; + private Config config; public ConfigPage() { initWidget(uiBinder.createAndBindUi(this)); EventBus.getInstance().addHandler(AbstractConfigPagesEvent.TYPE, this); EventBus.getInstance().fireEvent(new LoadConfigEvent()); + fontSize.setAttribute("min", "9"); + fontSize.setAttribute("max", "17"); + fontSize.setAttribute("step", "1"); + fontSize.setAttribute("value", String.valueOf(SpMobil.getConfiguration().getFontSize())); + addListenerInput(fontSize, this); + } + + public native void addListenerInput(Element range, ConfigPage page) /*-{ + range.addEventListener('input', function () { + page.@org.silverpeas.mobile.client.apps.config.pages.ConfigPage::updateFontSize(I)(range.value); + }, false); + }-*/; + + private void updateFontSize(final int value) { + fontSize.setAttribute("value", String.valueOf(value)); + SpMobil.setFontSize(value); + save(); } @Override @@ -73,7 +97,6 @@ public void onPreviewNativeEvent(Event.NativePreviewEvent event) { public void stop() { super.stop(); EventBus.getInstance().removeHandler(AbstractConfigPagesEvent.TYPE, this); - } @Override @@ -94,6 +117,7 @@ private void save() { config.setLastEventsDisplay(lastEventsDisplay.getValue()); config.setShortCutsDisplay(shortCutsDisplay.getValue()); config.setShortCutsToolsDisplay(shortCutsToolsDisplay.getValue()); + config.setFontSize(Integer.parseInt(fontSize.getAttribute("value"))); EventBus.getInstance().fireEvent(new UpdateConfigEvent(config)); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml index 91f03d3c5..5e9c2dcd3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml @@ -61,6 +61,8 @@ </a> </li> </ul> + <h3 class="title-bloc-part ui-title">Taille du texte</h3> + <input type="range" ui:field="fontSize" class="font-percent-size"></input> </g:HTMLPanel> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java index 4f0d168ee..d2231bbe7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/favorites/pages/widgets/CategoryItem.java @@ -93,12 +93,11 @@ public MyLinkCategoryDTO getData() { protected void onClick(ClickEvent event) { expanded = !expanded; if (expanded) { - icon.setInnerHTML(resources.more().getText()); - } else { icon.setInnerHTML(resources.less().getText()); + } else { + icon.setInnerHTML(resources.more().getText()); } for (FavoriteItem item : favorites) { - //item.setVisible(expanded); if (expanded) { item.getElement().addClassName("item-open"); item.getElement().removeClassName("item-closed"); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java index f8b650d5b..e11e592e7 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java @@ -26,6 +26,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; +import com.google.gwt.dom.client.AnchorElement; import com.google.gwt.dom.client.SpanElement; import com.google.gwt.dom.client.Style; import com.google.gwt.dom.client.Style.Unit; @@ -80,11 +81,14 @@ public class NavigationMenu extends Composite implements PageEventHandler { private static NavigationMenuUiBinder uiBinder = GWT.create(NavigationMenuUiBinder.class); @UiField HTMLPanel container, user; - @UiField Anchor home, disconnect, updateStatus, searchButton, help, config, calendar, notifications, shares; - @UiField SpanElement status, iconHelp, iconSettings, iconHome, iconLogout; + @UiField Anchor home, disconnect, updateStatus, help, config, calendar, notifications, shares; + @UiField SpanElement status, iconHelp, iconSettings, iconHome, iconLogout, iconUserCalendar, iconInbox, iconShareBox; @UiField TextBox search; @UiField AvatarUpload avatar; + @UiField + AnchorElement searchButton; + @UiField(provided = true) protected ApplicationMessages msg = null; @UiField UnorderedList listApplications; @@ -120,6 +124,11 @@ public NavigationMenu() { iconHelp.setInnerHTML(resources.help().getText()); iconLogout.setInnerHTML(resources.logout().getText()); iconHome.setInnerHTML(resources.home().getText()); + iconUserCalendar.setInnerHTML(resources.usercalendar().getText()); + iconInbox.setInnerHTML(resources.inbox().getText()); + iconShareBox.setInnerHTML(resources.sharebox().getText()); + searchButton.setInnerHTML(resources.search().getText()); + //searchButton. EventBus.getInstance().addHandler(AbstractPageEvent.TYPE, this); } @@ -132,6 +141,7 @@ public void setPersonalApps(List<ApplicationInstanceDTO> applicationInstanceDTOS app.setLabel(msg.myDocuments()); } NavigationItem item = new NavigationItem(); + item.getElement().getFirstChildElement().removeClassName("icon-app");//TODO item.setData(app); listApplications.add(item); } @@ -197,10 +207,10 @@ protected void search(KeyDownEvent event) { } } - @UiHandler("searchButton") + /*@UiHandler("searchButton") protected void searchIos(ClickEvent event) { SpMobil.search(search.getText()); - } + }*/ @UiHandler("home") protected void goHome(ClickEvent event) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml index 0bd6a609a..062d07205 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.ui.xml @@ -39,13 +39,22 @@ <div id="menu-search"> <g:TextBox ui:field="search" styleName="searchBox"/> - <g:Anchor ui:field="searchButton" styleName="searchButton" text="{msg.search}"/> + <a ui:field="searchButton" class="searchButton"></a> </div> <ul id="navmenu-panel"> - <li id="menu-usercalendar"><g:Anchor ui:field="calendar" styleName="ui-link" text="{msg.usercalendar}"/></li> - <li id="menu-notificationsbox"><g:Anchor ui:field="notifications" styleName="ui-link" text="{msg.notifications}"/></li> - <li id="menu-sharesbox"><g:Anchor ui:field="shares" styleName="ui-link" text="{msg.shares}"/></li> + <li id="menu-usercalendar"> + <span ui:field="iconUserCalendar"></span> + <g:Anchor ui:field="calendar" styleName="ui-link" text="{msg.usercalendar}"/> + </li> + <li id="menu-notificationsbox"> + <span ui:field="iconInbox"></span> + <g:Anchor ui:field="notifications" styleName="ui-link" text="{msg.notifications}"/> + </li> + <li id="menu-sharesbox"> + <span ui:field="iconShareBox"></span> + <g:Anchor ui:field="shares" styleName="ui-link" text="{msg.shares}"/> + </li> </ul> <components:UnorderedList ui:field="listApplications" /> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java index 4ef94393d..5e1d8c4fe 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationResources.java @@ -175,5 +175,20 @@ public interface ApplicationResources extends ClientBundle { @DataResource.MimeType("image/svg+xml") TextResource logout(); + @Source("icons/menu/usercalendar.svg") + @DataResource.MimeType("image/svg+xml") + TextResource usercalendar(); + + @Source("icons/menu/sharebox.svg") + @DataResource.MimeType("image/svg+xml") + TextResource sharebox(); + + @Source("icons/menu/inbox.svg") + @DataResource.MimeType("image/svg+xml") + TextResource inbox(); + + @Source("icons/menu/search.svg") + @DataResource.MimeType("image/svg+xml") + TextResource search(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/inbox.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/inbox.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/inbox.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/inbox.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/search.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/search.svg new file mode 100644 index 000000000..7c2111eb7 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/search.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/sharebox.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/sharebox.svg new file mode 100644 index 000000000..07fc6639e --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/sharebox.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar.svg b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/usercalendar.svg similarity index 100% rename from mobile-war/src/main/java/org/silverpeas/mobile/public/icons/calendar.svg rename to mobile-war/src/main/java/org/silverpeas/mobile/client/resources/icons/menu/usercalendar.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 0283c1635..de2321c8d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -609,6 +609,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { .carroussel-news li { height: 90px; position: relative; + overflow: hidden; } .carroussel-news img { @@ -637,7 +638,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { .carroussel-news p { font-size: 0.75em; - line-height: 1em; + line-height: inherit; color: #666666; padding: 0; margin: 0; @@ -645,7 +646,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { .carroussel-news .nbIndication { position: absolute; - bottom: -0.7em; + bottom: 0em; right: 0.5em; font-size: 0.85em; } @@ -675,10 +676,10 @@ html .ui-controlgroup-controls .ui-btn-up-c { #silverpeas-navmenu-panel #user img { float: left; - width: 30px; + width: 2.5em; vertical-align: middle; margin-right: 0.25em; - border-radius: 30px; + border-radius: 100%; margin-right: 0.5em; border: 1px solid #9d9c9c; } @@ -696,86 +697,106 @@ html .ui-controlgroup-controls .ui-btn-up-c { height: 18px; } -#silverpeas-navmenu-panel #navmenu-panel, #silverpeas-navmenu-panel #actions-menu { +#silverpeas-navmenu-panel #navmenu-panel { border-top: 1px solid #d3d3d3; - list-style-type: none; - padding: 0; margin: 0; -} - -#silverpeas-navmenu-panel #navmenu-panel li, #silverpeas-navmenu-panel #actions-menu li { padding: 0; - margin: 0; } -#silverpeas-navmenu-panel #navmenu-panel li a, #silverpeas-navmenu-panel #actions-menu li a { - text-decoration: none; - color: #333333; - display: block; - padding: 0.25em 0 0.5em 32px; - font-size: 1.25em; - line-height: 1.6em; - margin-left: 0.5em; +#silverpeas-navmenu-panel #navmenu-panel li { + list-style-type: none; + display: flex; + align-items: center; } -#actions-menu { - position: absolute; - bottom: 48px; - width: 100%; - border: 0; +#silverpeas-navmenu-panel #navmenu-panel li span { + position: relative; + display: inline; + margin-left: 0.5em; + font-size: 1.25em; } -#personals-apps { - padding: inherit; - border-top: 1px solid #d3d3d3; +#silverpeas-navmenu-panel #navmenu-panel li span svg { + height: 2em; + width: 2em; } -#personals-apps .icon-app { - top: auto; -} -#personals-apps a { +#silverpeas-navmenu-panel #navmenu-panel li a { + position: relative; + display: inline; border: none; + font-size: 1.25em; padding-left: 0.5em; - padding-top: 0.5em; + color: #333333; } -#personals-apps a:after { - background: none; +#actions-menu > :first-child, #navmenu-panel > :first-child, #personals-apps > :first-child { + padding-top: 1em; } -#actions-menu li { - fill: #7eb73b; +#personals-apps { + border-top: 1px solid #d3d3d3; + margin: 0; + padding: 0; } -#actions-menu li span { - position: absolute; - left: 0.5em; +#personals-apps li { + list-style-type: none; + display: flex; + align-items: center; } -#silverpeas-navmenu-panel #navmenu-panel li#menu-notificationsbox a { - background: transparent url('icons/inbox.svg') no-repeat; +#personals-apps li span { + position: relative; + display: inline; + margin-left: 0.5em; + font-size: 1.25em; } - -#silverpeas-navmenu-panel #navmenu-panel li#menu-sharesbox a { - background: transparent url('icons/share.svg') no-repeat; +#personals-apps li span svg { + height: 2em; + width: 2em; } -#silverpeas-navmenu-panel #actions-menu li#menu-parameter a { - +#personals-apps li a { + position: relative; + display: inline; + border: none; + font-size: 1.25em; + padding-left: 0.5em; } -#silverpeas-navmenu-panel #actions-menu li#menu-home a { - +#actions-menu { + border-top: 1px solid #d3d3d3 !important; + position: absolute; + bottom: 48px; + width: 100%; + border: 0; + padding-left: 0.5em; } -#silverpeas-navmenu-panel #actions-menu li#menu-logout a { +#actions-menu li { + list-style-type: none; + display: flex; + align-items: center; + fill: #7eb73b; +} +#actions-menu li span svg { + height: 2em; + width: 2em; } -#silverpeas-navmenu-panel #navmenu-panel li#menu-usercalendar a { - background: transparent url('icons/calendar.svg') no-repeat; +#actions-menu li a { + text-decoration: none; + color: #333333; + display: block; + padding-bottom: 0.5em; + padding-top: 0.5em; + font-size: 1.25em; + margin-left: 0.5em; } + #menu-principal li a strong { color: #333333; } @@ -1811,18 +1832,17 @@ textarea.ui-input-text { .searchBox { border: 1px solid #d3d3d3; border-radius: 3px; - width:calc( 100% - 2em - 20px ); + width:calc( 100% - 4em ); background-color: #FFF; color: #666; padding: 5px; outline-style: none; + height: 1.5em; } -.searchButton { - width: 24px; - height: 24px; - background: url('icons/search.svg') no-repeat; - text-indent: -300em; +.searchButton svg { + width: 2em; + height: 2em; display: inline-block; position: absolute; } @@ -1833,14 +1853,6 @@ textarea.ui-input-text { border-top: 1px solid #d3d3d3; } -#menu-config { - /*display:none;*/ -} - -#menu-tasks { - /*display:none;*/ -} - .bloc-actu-vignette, .bloc-actu-content { float: left; } @@ -1858,11 +1870,11 @@ textarea.ui-input-text { padding: 0; } -.ui-content .carroussel-news li { +.carroussel-news li { height: auto !important; clear: both; border-bottom: 1px solid #eee; - margin-bottom: 1em + margin-bottom: 1em; } .ui-content .carroussel-news .caption { @@ -2056,7 +2068,7 @@ form .forms .fields > li:nth-child(even) { #actions { position: absolute; - right: 0.5em; + right: 8px; top: 11px; filter: invert(1); z-index: 9999; @@ -2068,19 +2080,19 @@ form .forms .fields > li:nth-child(even) { width: 16px; height: 24px; text-indent: -3000px; - right: 0.5em; + right: 8px; background: transparent url("qvf.svg") 0 0 no-repeat; outline: none; z-index: 999; - padding-left: 1em; - padding-right: 1em; + padding-left: 12px; + padding-right: 12px; } #action-bloc { border: 0; position: absolute; top: 37px; - right: 0.1em; + right: 2px; padding: 0; margin: 0; width: 10em; @@ -2105,7 +2117,7 @@ form .forms .fields > li:nth-child(even) { #actionsList { position: absolute; top: 11px; - right: 4em; + right: 50px; z-index: 9999; } @@ -2138,6 +2150,12 @@ form .forms .fields > li:nth-child(even) { padding-left: 1em; } +.font-percent-size { + margin-left: 1em; + margin-bottom: 3em; + width: calc(100% - 2em); +} + .ui-listview.favoris { overflow: hidden; } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java index 97099e20f..b9d074a1b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java @@ -38,6 +38,8 @@ public class Config { private boolean freeZoneDisplay; private boolean freeZoneThinDisplay; + private int fontSize; + public Config() { } @@ -51,6 +53,7 @@ public static Config getDefaultConfig() { c.setShortCutsToolsDisplay(true); c.setFreeZoneDisplay(true); c.setFreeZoneThinDisplay(true); + c.setFontSize(10); return c; } @@ -118,6 +121,14 @@ public void setShortCutsToolsDisplay(final boolean shortCutsToolsDisplay) { this.shortCutsToolsDisplay = shortCutsToolsDisplay; } + public int getFontSize() { + return fontSize; + } + + public void setFontSize(int fontSize) { + this.fontSize = fontSize; + } + public AutoBean<IConfig> getAutoBean () { AutoBean<IConfig> b = LocalStorageHelper.factory.iconfig(); b.as().setFreeZoneDisplay(isFreeZoneDisplay()); @@ -128,6 +139,7 @@ public AutoBean<IConfig> getAutoBean () { b.as().setLastPublicationsDisplay(isLastPublicationsDisplay()); b.as().setShortCutsDisplay(isShortCutsDisplay()); b.as().setShortCutsToolsDisplay(isShortCutsToolsDisplay()); + b.as().setFontSize(getFontSize()); return b; } @@ -141,6 +153,7 @@ public static Config getBean (AutoBean<IConfig> b) { conf.setLastPublicationsDisplay(b.as().isLastPublicationsDisplay()); conf.setShortCutsDisplay(b.as().isShortCutsDisplay()); conf.setShortCutsToolsDisplay(b.as().isShortCutsToolsDisplay()); + conf.setFontSize(b.as().getFontSize()); return conf; } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java index ab93b6c1a..187fac429 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java @@ -42,4 +42,8 @@ public interface IConfig { public void setShortCutsToolsDisplay(final boolean shortCutsToolsDisplay); + public int getFontSize(); + + public void setFontSize(int fontSize); + } From 2a3d81d7877ce960edb19b6915b830b12fc31b69 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 27 Feb 2024 16:09:32 +0100 Subject: [PATCH 205/228] Feature #13922 --- .../documents/pages/GedNavigationPage.java | 3 + .../documents/pages/GedNavigationPage.ui.xml | 2 +- .../pages/widgets/ShortCutItem.ui.xml | 2 +- .../components/base/NavigationMenu.java | 4 +- .../org/silverpeas/mobile/public/spmobile.css | 69 +++++++++++-------- 5 files changed, 47 insertions(+), 33 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java index 079a5d16f..6af09d67c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java @@ -27,6 +27,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadGedItemsEvent; import org.silverpeas.mobile.client.apps.documents.events.app.DocumentsLoadPublicationEvent; @@ -54,6 +55,7 @@ public class GedNavigationPage extends PageContent implements View, GedNavigatio private DocumentsMessages msg; + @UiField HTMLPanel container; @UiField UnorderedList list; private TopicDTO root; @@ -81,6 +83,7 @@ interface GedNavigationPageUiBinder extends UiBinder<Widget, GedNavigationPage> public GedNavigationPage() { msg = GWT.create(DocumentsMessages.class); initWidget(uiBinder.createAndBindUi(this)); + container.getElement().setId("edm"); buttonImport.setId("import"); EventBus.getInstance().addHandler(AbstractGedNavigationPagesEvent.TYPE, this); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml index 72a5a68b3..5fbb6e601 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.ui.xml @@ -28,7 +28,7 @@ xmlns:base="urn:import:org.silverpeas.mobile.client.components.base" xmlns:components="urn:import:org.silverpeas.mobile.client.components"> - <g:HTMLPanel styleName="content"> + <g:HTMLPanel ui:field="container" styleName="content"> <components:UnorderedList ui:field="list" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.ui.xml index c8b724e68..dc8d51092 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/pages/widgets/ShortCutItem.ui.xml @@ -26,7 +26,7 @@ <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> <g:HTMLPanel tag="li"> - <g:Image ui:field="icon" styleName="icon"></g:Image> + <g:Image ui:field="icon" styleName="icon-item"></g:Image> <g:Anchor ui:field="link"></g:Anchor> </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java index e11e592e7..1ea9c9b01 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java @@ -128,8 +128,6 @@ public NavigationMenu() { iconInbox.setInnerHTML(resources.inbox().getText()); iconShareBox.setInnerHTML(resources.sharebox().getText()); searchButton.setInnerHTML(resources.search().getText()); - //searchButton. - EventBus.getInstance().addHandler(AbstractPageEvent.TYPE, this); } @@ -141,7 +139,7 @@ public void setPersonalApps(List<ApplicationInstanceDTO> applicationInstanceDTOS app.setLabel(msg.myDocuments()); } NavigationItem item = new NavigationItem(); - item.getElement().getFirstChildElement().removeClassName("icon-app");//TODO + item.getElement().getFirstChildElement().removeClassName("icon-app"); item.setData(app); listApplications.add(item); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index de2321c8d..ffcf6579b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -262,7 +262,7 @@ legend, .ui-input-text input, .ui-input-search input { background-color: #FFF; background-image: url('icons/search.svg'); background-repeat: no-repeat; - width: 92%; + width: calc( 100vw - 4em); padding-left: 2em; } @@ -382,18 +382,6 @@ html .ui-controlgroup-controls .ui-btn-up-c { .last-event-bloc h3.title-bloc-part{ position:relative; } -.last-event-bloc h3.title-bloc-part::after{ - content:''; - display:block; - width:16px; - height:16px; - background-image: url('icons/calendar_today.svg'); - background-repeat: no-repeat; - background-size: contain; - position:absolute; - top:0; - right:1.25em; -} .last-event-bloc .ui-listview .date { float:right; @@ -503,7 +491,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { border: none; height: 36px; width: 36px; - margin: 3px 0 0 0; + margin: 0 0 0 0; padding: 0 0 0 0; left:0; } @@ -556,7 +544,6 @@ html .ui-controlgroup-controls .ui-btn-up-c { } .favoris-bloc span { - top:0.25em; fill : #a9a9a9; } @@ -588,8 +575,8 @@ html .ui-controlgroup-controls .ui-btn-up-c { } .last-publication-bloc .ui-listview li .ui-btn { - text-overflow: initial; - overflow: auto; + text-overflow: ellipsis; + overflow: hidden; white-space: inherit; } @@ -655,6 +642,15 @@ html .ui-controlgroup-controls .ui-btn-up-c { color: #1c94d4 } +#shortCuts ul li { + display: flex; + align-items: center; +} + +#shortCuts ul li a { + width: 100%; +} + /***** MENU****/ #silverpeas-navmenu-panel { padding: 0; @@ -717,8 +713,8 @@ html .ui-controlgroup-controls .ui-btn-up-c { } #silverpeas-navmenu-panel #navmenu-panel li span svg { - height: 2em; - width: 2em; + height: 1.5em; + width: 1.5em; } #silverpeas-navmenu-panel #navmenu-panel li a { @@ -734,6 +730,10 @@ html .ui-controlgroup-controls .ui-btn-up-c { padding-top: 1em; } +#actions-menu > :last-child, #navmenu-panel > :last-child, #personals-apps > :last-child { + padding-bottom: 1em; +} + #personals-apps { border-top: 1px solid #d3d3d3; margin: 0; @@ -753,8 +753,8 @@ html .ui-controlgroup-controls .ui-btn-up-c { font-size: 1.25em; } #personals-apps li span svg { - height: 2em; - width: 2em; + height: 1.5em; + width: 1.5em; } #personals-apps li a { @@ -762,7 +762,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { display: inline; border: none; font-size: 1.25em; - padding-left: 0.5em; + padding : 0 0 0 0.5em; } #actions-menu { @@ -782,8 +782,8 @@ html .ui-controlgroup-controls .ui-btn-up-c { } #actions-menu li span svg { - height: 2em; - width: 2em; + height: 1.5em; + width: 1.5em; } #actions-menu li a { @@ -821,9 +821,19 @@ html .ui-controlgroup-controls .ui-btn-up-c { /***** NAVIGATION ****/ +#spaces ul li, #favoris ul li, #edm li { + display: flex; + align-items: center; +} + +#spaces ul li a, #favoris ul li a, #edm li a { + width: 100%; + overflow: hidden; + text-overflow: ellipsis; +} + .icon-app, .icon-item { position: absolute; - top: 0.5em; left: 0.5em; z-index: 2; } @@ -1684,7 +1694,7 @@ input.filter-contacts { .ui-btn-left, .ui-btn-right { position: absolute; - top: .24em; + top: 5px; } .ui-btn { @@ -2431,8 +2441,8 @@ a.popin-btn { .liste-news li h2 a, .forms-list h2, .liste-annonces li h2 a { - font-size: 1.05em; - line-height: 1.2em; + font-size: 1em; + line-height: 1.1em; color: #555; text-decoration: none; font-weight:500; @@ -2866,6 +2876,9 @@ a.popin-btn { .favorite-desc { display: block; padding-top: 1em; + overflow:hidden; + white-space: nowrap; + text-overflow: ellipsis; } From 2d17908839979a342bb99c02dfbd3c7f78a98daa Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 27 Feb 2024 18:02:27 +0100 Subject: [PATCH 206/228] Feature #13922 --- .../org/silverpeas/mobile/client/SpMobil.java | 8 +++- .../client/apps/config/pages/ConfigPage.java | 5 +++ .../apps/config/pages/ConfigPage.ui.xml | 19 +++++---- .../apps/config/resources/ConfigMessages.java | 41 +++++++++++++++++++ .../resources/ConfigMessages.properties | 32 +++++++++++++++ .../resources/ConfigMessages_en.properties | 32 +++++++++++++++ .../resources/ConfigMessages_fr.properties | 32 +++++++++++++++ .../client/apps/navigation/NavigationApp.java | 2 +- .../common/PublicationContentHelper.java | 4 +- .../server/services/ServiceNavigation.java | 23 +++++------ .../services/rest/ServiceNavigation.java | 4 +- 11 files changed, 177 insertions(+), 25 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index 29229d97a..1e226d9e9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -33,6 +33,7 @@ import com.google.gwt.dom.client.Style; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; +import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Cookies; import com.google.gwt.user.client.Window; @@ -302,7 +303,7 @@ public static void displayMainPage() { @Override public void attempt() { - ServicesLocator.getServiceNavigation().getHomePageData(null, this); + ServicesLocator.getServiceNavigation().getHomePageData(null, SpMobil.getContentZoomLevel(), this); } @Override @@ -578,6 +579,11 @@ public static Config getConfiguration() { return config; } + public static String getContentZoomLevel() { + double z = getConfiguration().getFontSize() / 10d; + return String.valueOf(z); + } + @Override public void onAuthenticationError(final AbstractAuthenticationErrorEvent event) { displayLoginPage(((AuthenticationException) event.getException())); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java index 6d50e6260..b6e746df0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java @@ -38,6 +38,7 @@ import org.silverpeas.mobile.client.apps.config.events.pages.AbstractConfigPagesEvent; import org.silverpeas.mobile.client.apps.config.events.pages.ConfigLoadedEvent; import org.silverpeas.mobile.client.apps.config.events.pages.ConfigPagesEventHandler; +import org.silverpeas.mobile.client.apps.config.resources.ConfigMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.shared.dto.configuration.Config; @@ -61,8 +62,12 @@ public class ConfigPage extends PageContent implements ConfigPagesEventHandler { @UiField InputElement fontSize; + @UiField(provided = true) + protected ConfigMessages msg; + private Config config; public ConfigPage() { + msg = GWT.create(ConfigMessages.class); initWidget(uiBinder.createAndBindUi(this)); EventBus.getInstance().addHandler(AbstractConfigPagesEvent.TYPE, this); EventBus.getInstance().fireEvent(new LoadConfigEvent()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml index 5e9c2dcd3..a885831bf 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml @@ -25,43 +25,46 @@ <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> + + <ui:with field='msg' type='org.silverpeas.mobile.client.apps.config.resources.ConfigMessages'/> + <g:HTMLPanel ui:field="container" styleName="ui-content ui-body-a"> <g:HTMLPanel stylePrimaryName="last-publication-bloc bloc"> - <h3 class="title-bloc-part ui-title">Page d'accueil</h3> + <h3 class="title-bloc-part ui-title"><ui:text from="{msg.homePage}"/></h3> <ul class="ui-listview ui-listview-inset ui-corner-all ui-shadow config"> <li class="actuality"> <a class="ui-btn"> - <g:CheckBox ui:field="newsDisplay" text="Afficher les dernières actualités"></g:CheckBox> + <g:CheckBox ui:field="newsDisplay" text="{msg.lastNews}"></g:CheckBox> </a> </li> <li class="publication"> <a class="ui-btn"> - <g:CheckBox ui:field="lastPublicationsDisplay" text="Afficher les dernières publications"></g:CheckBox> + <g:CheckBox ui:field="lastPublicationsDisplay" text="{msg.lastPublications}"></g:CheckBox> </a> </li> <li class="event"> <a class="ui-btn"> - <g:CheckBox ui:field="lastEventsDisplay" text="Afficher les prochains événements"></g:CheckBox> + <g:CheckBox ui:field="lastEventsDisplay" text="{msg.events}"></g:CheckBox> </a> </li> <li class="favoris"> <a class="ui-btn"> - <g:CheckBox ui:field="favoritesDisplay" text="Afficher les favoris"></g:CheckBox> + <g:CheckBox ui:field="favoritesDisplay" text="{msg.favorites}"></g:CheckBox> </a> </li> <li class="shortcut"> <a class="ui-btn"> - <g:CheckBox ui:field="shortCutsDisplay" text="Afficher les raccourcis"></g:CheckBox> + <g:CheckBox ui:field="shortCutsDisplay" text="{msg.shortcurts}"></g:CheckBox> </a> </li> <li class="shortcutools"> <a class="ui-btn"> - <g:CheckBox ui:field="shortCutsToolsDisplay" text="Afficher les outils"></g:CheckBox> + <g:CheckBox ui:field="shortCutsToolsDisplay" text="{msg.tools}"></g:CheckBox> </a> </li> </ul> - <h3 class="title-bloc-part ui-title">Taille du texte</h3> + <h3 class="title-bloc-part ui-title"><ui:text from="{msg.fontSize}"/></h3> <input type="range" ui:field="fontSize" class="font-percent-size"></input> </g:HTMLPanel> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java new file mode 100644 index 000000000..6647fff42 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.config.resources; + +import com.google.gwt.i18n.client.Messages; +import com.google.gwt.safehtml.shared.SafeHtml; + +public interface ConfigMessages extends Messages { + String homePage(); + String fontSize(); + String tools(); + String shortcurts(); + String favorites(); + + String events(); + String lastPublications(); + String lastNews(); + +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties new file mode 100644 index 000000000..a90b1b75b --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties @@ -0,0 +1,32 @@ +# +# Copyright (C) 2000 - 2022 Silverpeas +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# As a special exception to the terms and conditions of version 3.0 of +# the GPL, you may redistribute this Program in connection with Free/Libre +# Open Source Software ("FLOSS") applications as described in Silverpeas's +# FLOSS exception. You should have received a copy of the text describing +# the FLOSS exception, and it is also available here: +# "https://www.silverpeas.org/legal/floss_exception.html" +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +fontSize=Taille du texte +homePage=Page d''accueil +tools=Afficher les outils +shortcurts=Afficher les raccourcis +favorites=Afficher les favoris +events=Afficher les prochains événements +lastPublications=Afficher les dernières publications +lastNews=Afficher les dernières actualités diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties new file mode 100644 index 000000000..b0aa3dd19 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties @@ -0,0 +1,32 @@ +# +# Copyright (C) 2000 - 2022 Silverpeas +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# As a special exception to the terms and conditions of version 3.0 of +# the GPL, you may redistribute this Program in connection with Free/Libre +# Open Source Software ("FLOSS") applications as described in Silverpeas's +# FLOSS exception. You should have received a copy of the text describing +# the FLOSS exception, and it is also available here: +# "https://www.silverpeas.org/legal/floss_exception.html" +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +fontSize=Text size +homePage=Home page +tools=Display tools +shortcurts=Display shortcuts +favorites=Display favorites +events=Display last events +lastPublications=Display last publications +lastNews=Display last news \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties new file mode 100644 index 000000000..7fcf045fb --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties @@ -0,0 +1,32 @@ +# +# Copyright (C) 2000 - 2022 Silverpeas +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# As a special exception to the terms and conditions of version 3.0 of +# the GPL, you may redistribute this Program in connection with Free/Libre +# Open Source Software ("FLOSS") applications as described in Silverpeas's +# FLOSS exception. You should have received a copy of the text describing +# the FLOSS exception, and it is also available here: +# "https://www.silverpeas.org/legal/floss_exception.html" +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +fontSize=Taille du texte +homePage=Page d''accueil +tools=Afficher les outils +shortcurts=Afficher les raccourcis +favorites=Afficher les favoris +events=Afficher les prochains événements +lastPublications=Afficher les dernières publications +lastNews=Afficher les dernières actualités \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java index 2c57117d6..9e9bae28e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/navigation/NavigationApp.java @@ -86,7 +86,7 @@ public void loadSpacesAndApps(final LoadSpacesAndAppsEvent event) { @Override public void attempt() { - ServicesLocator.getServiceNavigation().getHomePageData(event.getRootSpaceId(), this); + ServicesLocator.getServiceNavigation().getHomePageData(event.getRootSpaceId(), SpMobil.getContentZoomLevel(), this); } @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java index 045a64932..0cfd0d326 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java @@ -77,9 +77,11 @@ public void onError(final Request request, final Throwable throwable) { public static void showContent(String pubId, String appId, Element basement) { final String url = UrlUtils.getServicesLocation() + "PublicationContent" + "?id=" + pubId + "&componentId=" + appId; + String zoom = SpMobil.getContentZoomLevel(); IFrameElement iframeC = Document.get().createIFrameElement(); iframeC.setSrc(url); - iframeC.setAttribute("onload", "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';}(this));"); + iframeC.setAttribute("onload", "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';" + + "o.contentWindow.document.body.style='zoom:"+zoom+";'}(this));"); String s = "border-style: none; width: 100%; overflow: hidden;"; iframeC.setAttribute("style", s); basement.appendChild(iframeC); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index 1b11e503e..b9c88d51a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -24,13 +24,10 @@ package org.silverpeas.mobile.server.services; -import com.google.gwt.dom.client.Document; -import com.google.gwt.dom.client.IFrameElement; import org.apache.commons.lang3.EnumUtils; import org.silverpeas.components.gallery.model.Media; import org.silverpeas.components.gallery.model.MediaPK; import org.silverpeas.components.gallery.service.MediaServiceProvider; -import org.silverpeas.components.kmelia.service.KmeliaService; import org.silverpeas.components.quickinfo.model.News; import org.silverpeas.core.admin.component.model.ComponentInst; import org.silverpeas.core.admin.component.model.ComponentInstLight; @@ -47,9 +44,9 @@ import org.silverpeas.core.contribution.publication.service.PublicationService; import org.silverpeas.core.mylinks.model.LinkDetail; import org.silverpeas.core.security.token.synchronizer.SynchronizerToken; -import org.silverpeas.core.util.SettingBundle; -import org.silverpeas.core.util.StringUtil; -import org.silverpeas.core.util.logging.SilverLogger; +import org.silverpeas.kernel.bundle.SettingBundle; +import org.silverpeas.kernel.util.StringUtil; +import org.silverpeas.kernel.logging.SilverLogger; import org.silverpeas.core.web.look.PublicationHelper; import org.silverpeas.core.web.rs.UserPrivilegeValidation; import org.silverpeas.core.web.rs.annotation.Authorized; @@ -189,8 +186,8 @@ protected UserDetail getUserInSession() { @GET @Produces(MediaType.APPLICATION_JSON) - @Path("homepage/{spaceId}/") - public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { + @Path("homepage/{spaceId}/{zoom}/") + public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId, @PathParam("zoom") String zoom) { if (spaceId.equals("null")) spaceId = null; initSilverpeasSession(request); @@ -356,6 +353,7 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { String pageWebAppId = settings.getString("home.freezone.appId", ""); if (pageWebAppId != null && !pageWebAppId.isEmpty() && isComponentAvailable(pageWebAppId)) { String html = WysiwygController.loadForReadOnly(pageWebAppId, pageWebAppId, lang); + html = "<div style='zoom:"+zoom+"'>" + html + "</div>"; data.setHtmlFreeZone(html); } } else if (spaceId != null) { @@ -364,12 +362,12 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { getSettings().getBoolean("spacehomepage.displayUrlType")) { String url = space.getFirstPageExtraParam(); if (url.startsWith("/") && !url.startsWith("/silverpeas") && !url.startsWith("$")) url = "/silverpeas" + url; - String html = getIframe(url); + String html = getIframe(url, zoom); data.setHtmlFreeZone(html); } else if (space.getFirstPageType() == HomePages.APP.getValue() && space.getFirstPageExtraParam().startsWith("webPage")) { String appId = space.getFirstPageExtraParam(); String url = "/silverpeas/services/spmobile/PublicationContent" + "?id=" + appId + "&componentId=" + appId; - String html = getIframe(url); + String html = getIframe(url, zoom); data.setHtmlFreeZone(html); } } @@ -391,9 +389,10 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId) { return data; } - private String getIframe(String url) { + private String getIframe(String url, String zoom) { String style = "border-style: none; width: 100%; overflow: hidden;"; - String script = "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';}(this));"; + String script = "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';" + + "o.contentWindow.document.body.style='zoom:"+zoom+"';}(this));"; String html = "<iframe style='" + style + "' src='" + url + "' onload=\"" + script + "\">"; html += "</iframe>"; return html; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java index 81e1292d3..b216b9059 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceNavigation.java @@ -88,8 +88,8 @@ public void getApp(@PathParam("instanceId") String instanceId, @GET @Produces(MediaType.APPLICATION_JSON) - @Path("homepage/{spaceId}/") - public void getHomePageData(@PathParam("spaceId") String spaceId, MethodCallback<HomePageDTO> callback); + @Path("homepage/{spaceId}/{zoom}/") + public void getHomePageData(@PathParam("spaceId") String spaceId, @PathParam("zoom") String zoom, MethodCallback<HomePageDTO> callback); @GET @Produces(MediaType.APPLICATION_JSON) From 72642ce954c4acb22ea8e1bc848877f032ccf858 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 27 Feb 2024 20:25:48 +0100 Subject: [PATCH 207/228] Fix zoom on content --- .../mobile/client/common/PublicationContentHelper.java | 9 +++++++-- .../client/components/homepage/HomePageContent.ui.xml | 10 +++++----- .../java/org/silverpeas/mobile/public/spmobile.css | 2 +- .../mobile/server/services/ServiceNavigation.java | 9 ++++++--- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java index 0cfd0d326..8a8ee7c8d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java @@ -79,9 +79,14 @@ public static void showContent(String pubId, String appId, Element basement) { final String url = UrlUtils.getServicesLocation() + "PublicationContent" + "?id=" + pubId + "&componentId=" + appId; String zoom = SpMobil.getContentZoomLevel(); IFrameElement iframeC = Document.get().createIFrameElement(); + iframeC.setAttribute("scrolling", "no"); iframeC.setSrc(url); - iframeC.setAttribute("onload", "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';" + - "o.contentWindow.document.body.style='zoom:"+zoom+";'}(this));"); + + String script = "o.contentWindow.document.body.style='zoom:" + zoom + "'; "; + script += "var h = o.contentWindow.document.body.scrollHeight;"; + script += "o.style.height=h+'px'; "; + + iframeC.setAttribute("onload", "javascript:(function(o){" + script + "}(this));"); String s = "border-style: none; width: 100%; overflow: hidden;"; iframeC.setAttribute("style", s); basement.appendChild(iframeC); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.ui.xml index 2012e3bfb..9ce29683a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/homepage/HomePageContent.ui.xml @@ -39,27 +39,27 @@ <div id="spaces"> <components:UnorderedList ui:field="spaces" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/> </div> - <g:HTMLPanel stylePrimaryName="favoris-bloc bloc" ui:field="favorisSection"> + <g:HTMLPanel stylePrimaryName="favoris-bloc bloc" ui:field="favorisSection" visible="false"> <h3 class="title-bloc-part ui-title"><ui:safehtml from="{msg.favorites}"/></h3> <components:UnorderedList ui:field="favoris" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/> </g:HTMLPanel> - <g:HTMLPanel stylePrimaryName="tools-bloc bloc" ui:field="shortCutsToolsSection"> + <g:HTMLPanel stylePrimaryName="tools-bloc bloc" ui:field="shortCutsToolsSection" visible="false"> <h3 class="title-bloc-part ui-title"><ui:safehtml from="{msg.shortcutstools}"/></h3> <components:UnorderedList ui:field="shortcutstools" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/> </g:HTMLPanel> - <g:HTMLPanel stylePrimaryName="racourcis-bloc bloc" ui:field="shortCutsSection"> + <g:HTMLPanel stylePrimaryName="racourcis-bloc bloc" ui:field="shortCutsSection" visible="false"> <h3 class="title-bloc-part ui-title"><ui:safehtml from="{msg.shortcuts}"/></h3> <components:UnorderedList ui:field="shortcuts" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/> </g:HTMLPanel> - <g:HTMLPanel stylePrimaryName="last-publication-bloc bloc" ui:field="lastPublicationsSection"> + <g:HTMLPanel stylePrimaryName="last-publication-bloc bloc" ui:field="lastPublicationsSection" visible="false"> <h3 class="title-bloc-part ui-title"><ui:safehtml from="{msg.lastPublications}"/></h3> <components:UnorderedList ui:field="lastPublications" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/> </g:HTMLPanel> - <g:HTMLPanel stylePrimaryName="last-event-bloc bloc" ui:field="lastEventsSection"> + <g:HTMLPanel stylePrimaryName="last-event-bloc bloc" ui:field="lastEventsSection" visible="false"> <h3 class="title-bloc-part ui-title"><ui:safehtml from="{msg.lastEvents}"/></h3> <components:UnorderedList ui:field="lastEvents" styleName="ui-listview ui-listview-inset ui-corner-all ui-shadow"/> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index ffcf6579b..c1149ae36 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -441,7 +441,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { } #navigation-footer a { - margin: auto; + margin: 12px; text-align: center; flex: 1; transform: scale(1.5); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index b9c88d51a..3010c747e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -391,9 +391,12 @@ public HomePageDTO getHomePageData(@PathParam("spaceId") String spaceId, @PathPa private String getIframe(String url, String zoom) { String style = "border-style: none; width: 100%; overflow: hidden;"; - String script = "javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+'px';" + - "o.contentWindow.document.body.style='zoom:"+zoom+"';}(this));"; - String html = "<iframe style='" + style + "' src='" + url + "' onload=\"" + script + "\">"; + + String script = "o.contentWindow.document.body.style='zoom:" + zoom + "'; "; + script += "var h = o.contentWindow.document.body.scrollHeight;"; + script += "o.style.height=h+'px'; "; + + String html = "<iframe style='" + style + "' src='" + url + "' onload=\"" + script + "\" scrolling='no'>"; html += "</iframe>"; return html; } From 5f99d83f8e0e406bc63ce88aef18bccf6137513b Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 28 Feb 2024 17:22:14 +0100 Subject: [PATCH 208/228] Fix kernel package --- .../mobile/server/services/ServiceNavigation.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index 3010c747e..33f063843 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -44,9 +44,9 @@ import org.silverpeas.core.contribution.publication.service.PublicationService; import org.silverpeas.core.mylinks.model.LinkDetail; import org.silverpeas.core.security.token.synchronizer.SynchronizerToken; -import org.silverpeas.kernel.bundle.SettingBundle; -import org.silverpeas.kernel.util.StringUtil; -import org.silverpeas.kernel.logging.SilverLogger; +import org.silverpeas.core.util.SettingBundle; +import org.silverpeas.core.util.StringUtil; +import org.silverpeas.core.util.logging.SilverLogger; import org.silverpeas.core.web.look.PublicationHelper; import org.silverpeas.core.web.rs.UserPrivilegeValidation; import org.silverpeas.core.web.rs.annotation.Authorized; From a47fc1b8d16c92b7aea325b486f6546e1367d88b Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 28 Feb 2024 17:57:09 +0100 Subject: [PATCH 209/228] Fix pageweb homepage --- .../src/main/java/org/silverpeas/mobile/public/spmobile.css | 5 +++++ .../silverpeas/mobile/server/services/ServiceNavigation.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index c1149ae36..352d1f0c5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -2881,6 +2881,11 @@ a.popin-btn { text-overflow: ellipsis; } +#favoris ul li a { + display: flex; + align-items: center; +} + /********* notification **************/ diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index 33f063843..4c10ec994 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -396,7 +396,7 @@ private String getIframe(String url, String zoom) { script += "var h = o.contentWindow.document.body.scrollHeight;"; script += "o.style.height=h+'px'; "; - String html = "<iframe style='" + style + "' src='" + url + "' onload=\"" + script + "\" scrolling='no'>"; + String html = "<iframe style='" + style + "' src='" + url + "' onload=\"" + "javascript:(function(o){" + script + "}(this));" + "\" scrolling='no'>"; html += "</iframe>"; return html; } From 26a303aeca0a8797b5ab4daa2d5f1477eaab67e2 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 29 Feb 2024 11:50:26 +0100 Subject: [PATCH 210/228] refactoring --- .../mobile/client/apps/tasks/TasksPage.java | 1 - .../client/apps/tasks/pages/TasksPage.java | 14 +++++++-- .../base/widgets/AddButton.java} | 29 ++++++++----------- .../base/widgets/AddButton.ui.xml} | 13 ++++----- .../org/silverpeas/mobile/public/spmobile.css | 13 ++++++--- 5 files changed, 39 insertions(+), 31 deletions(-) rename mobile-war/src/main/java/org/silverpeas/mobile/client/{apps/tasks/pages/widgets/AddTaskButton.java => components/base/widgets/AddButton.java} (67%) rename mobile-war/src/main/java/org/silverpeas/mobile/client/{apps/tasks/pages/widgets/AddTaskButton.ui.xml => components/base/widgets/AddButton.ui.xml} (74%) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java index 666ecf5f6..a52e2d936 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java @@ -36,7 +36,6 @@ import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskUpdatedEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksLoadedEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksPagesEventHandler; -import org.silverpeas.mobile.client.apps.tasks.pages.widgets.AddTaskButton; import org.silverpeas.mobile.client.apps.tasks.pages.widgets.TaskItem; import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; import org.silverpeas.mobile.client.common.EventBus; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java index dd61cee14..dc84eac63 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java @@ -36,7 +36,6 @@ import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskUpdatedEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksLoadedEvent; import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksPagesEventHandler; -import org.silverpeas.mobile.client.apps.tasks.pages.widgets.AddTaskButton; import org.silverpeas.mobile.client.apps.tasks.pages.widgets.TaskItem; import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; import org.silverpeas.mobile.client.common.EventBus; @@ -44,6 +43,7 @@ import org.silverpeas.mobile.client.components.PopinConfirmation; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.AddButton; import org.silverpeas.mobile.client.components.base.widgets.DeleteButton; import org.silverpeas.mobile.shared.dto.TaskDTO; @@ -57,7 +57,7 @@ public class TasksPage extends PageContent implements TasksPagesEventHandler { interface TasksPageUiBinder extends UiBinder<HTMLPanel, TasksPage> { } private static TasksPageUiBinder uiBinder = GWT.create(TasksPageUiBinder.class); - private AddTaskButton buttonCreate = new AddTaskButton(); + private AddButton buttonCreate = new AddButton(); private DeleteButton buttonDelete = new DeleteButton(); @UiField HTMLPanel container; @@ -71,6 +71,16 @@ public TasksPage() { list.getElement().setId("tasks"); EventBus.getInstance().fireEvent(new TasksLoadEvent()); EventBus.getInstance().addHandler(AbstractTasksPagesEvent.TYPE, this); + buttonDelete.setId("delete-task"); + buttonCreate.setId("add-task"); + buttonCreate.setCallback(new Command() { + @Override + public void execute() { + TaskPage page = new TaskPage(); + page.setPageTitle(msg.create()); + page.show(); + } + }); } @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.java similarity index 67% rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.java rename to mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.java index 41753a157..2448b67f0 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.java @@ -22,7 +22,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -package org.silverpeas.mobile.client.apps.tasks.pages.widgets; +package org.silverpeas.mobile.client.components.base.widgets; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; @@ -30,34 +30,29 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Widget; -import org.silverpeas.mobile.client.apps.tasks.pages.TaskPage; -import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; +import com.google.gwt.user.client.ui.HTMLPanel; import org.silverpeas.mobile.client.components.base.ActionItem; /** * @author: svu */ -public class AddTaskButton extends ActionItem { +public class AddButton extends ActionItem { - interface AddTaskItemUiBinder extends UiBinder<Widget, AddTaskButton> { - } + interface AddButtonUiBinder extends UiBinder<HTMLPanel, AddButton> {} - @UiField Anchor link; - @UiField(provided = true) protected TasksMessages msg = null; + private static AddButtonUiBinder uiBinder = GWT.create(AddButtonUiBinder.class); - private static AddTaskItemUiBinder uiBinder = GWT.create(AddTaskItemUiBinder.class); + @UiField + HTMLPanel container; + @UiField + Anchor link; - public AddTaskButton() { - msg = GWT.create(TasksMessages.class); - setId("add-task"); + public AddButton() { initWidget(uiBinder.createAndBindUi(this)); } @UiHandler("link") - void createTask(ClickEvent event) { - TaskPage page = new TaskPage(); - page.setPageTitle(msg.create()); - page.show(); + void delete(ClickEvent event) { + getCallback().execute(); } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.ui.xml similarity index 74% rename from mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.ui.xml rename to mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.ui.xml index c5917f472..8e183de3b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/widgets/AddTaskButton.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/AddButton.ui.xml @@ -22,11 +22,10 @@ ~ along with this program. If not, see <http://www.gnu.org/licenses/>. --> -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> - <ui:with field='msg' type='org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages'/> +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui'> - <g:HTMLPanel tag="li" ui:field="container" styleName="add-task"> - <g:Anchor ui:field="link"/> - </g:HTMLPanel> -</ui:UiBinder> \ No newline at end of file + <g:HTMLPanel tag="li" ui:field="container" styleName="add-action"> + <g:Anchor ui:field="link"/> + </g:HTMLPanel> +</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 352d1f0c5..904c4e32f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -262,8 +262,6 @@ legend, .ui-input-text input, .ui-input-search input { background-color: #FFF; background-image: url('icons/search.svg'); background-repeat: no-repeat; - width: calc( 100vw - 4em); - padding-left: 2em; } .ui-page-theme-a textarea.ui-body-inherit { @@ -2943,7 +2941,7 @@ a.popin-btn { background-color: #FFF; } -#actionsList:has(.delete-action) { +#actionsList:has(.delete-action), #actionsList:has(.add-action) { right: 1em; } @@ -2954,6 +2952,13 @@ a.popin-btn { background: url('icons/delete.svg') no-repeat; } +.add-action { + height: 24px; + width: 24px; + filter: invert(1); + background: url('icons/add.svg') no-repeat; +} + .markAsRead-notification { height: 24px; width: 24px; @@ -2961,7 +2966,7 @@ a.popin-btn { background: url('icons/mark_read.svg') no-repeat; } -.delete-action a, .markAsRead-notification a { +.add-action a, .delete-action a, .markAsRead-notification a { height: 24px; width: 24px; display: block; From 9e230c37161d2b7e6976fb1ed47674b0f64e3823 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 1 Mar 2024 16:23:40 +0100 Subject: [PATCH 211/228] Refactoring --- .../client/apps/agenda/pages/AgendaPage.java | 8 ++-- .../client/apps/documents/DocumentsApp.java | 2 +- .../documents/pages/GedNavigationPage.java | 9 ++-- .../client/components/base/ActionsList.java | 8 ++-- .../client/components/base/ActionsMenu.java | 23 +++++++-- .../components/base/NavigationMenu.java | 1 + .../client/components/base/PageHeader.java | 2 + .../silverpeas/mobile/public/components.css | 2 +- .../org/silverpeas/mobile/public/spmobile.css | 48 +++++++++---------- .../server/services/ServiceNavigation.java | 15 +++--- .../navigation/ApplicationInstanceDTO.java | 2 +- 11 files changed, 71 insertions(+), 49 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java index ea71e303c..e271d2145 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java @@ -81,7 +81,7 @@ public class AgendaPage extends PageContent implements AgendaPagesEventHandler { @UiField SpanElement message; - private AddToFavoritesButton favorite = new AddToFavoritesButton(); + private AddToFavoritesButton buttonFavorite = new AddToFavoritesButton(); interface AgendaPageUiBinder extends UiBinder<Widget, AgendaPage> { } @@ -211,8 +211,10 @@ public void onCalendarEventsLoaded(final CalendarLoadedEvent event) { } else { message.setInnerText(msg.noEvent()); } - addActionMenu(favorite); - favorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle()); + if (!event.getInstance().getPersonnal()) { + addActionMenu(buttonFavorite); + buttonFavorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle()); + } } private CalendarDTO getCalendar(final String calendarId) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java index 973870e06..25ce72168 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java @@ -196,7 +196,7 @@ public void appInstanceChanged(NavigationAppInstanceChangedEvent event) { page.setPageTitle(event.getInstance().getLabel()); page.setInstanceId(event.getInstance().getId()); page.setTopicId(null); - page.setPersonnal(event.getInstance().isPersonnal()); + page.setPersonnal(event.getInstance().getPersonnal()); page.show(); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java index 6af09d67c..75d8371b6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/GedNavigationPage.java @@ -61,7 +61,7 @@ public class GedNavigationPage extends PageContent implements View, GedNavigatio private TopicDTO root; private String rootTopicId, instanceId; private boolean dataLoaded = false; - private AddToFavoritesButton favorite = new AddToFavoritesButton(); + private AddToFavoritesButton buttonFavorite = new AddToFavoritesButton(); private AddFileButton buttonImport = new AddFileButton(); private ShareButton share = new ShareButton(); @@ -121,6 +121,7 @@ public void onLoadedTopics(GedItemsLoadedEvent event) { setPageTitle(globalMsg.myDocuments()); } else { setPageTitle(((TopicDTO) dataItem).getName()); + addActionMenu(buttonFavorite); } root = (TopicDTO) dataItem; } else { @@ -131,13 +132,11 @@ public void onLoadedTopics(GedItemsLoadedEvent event) { } dataLoaded = true; - addActionMenu(favorite); - if (root.getId() == null) { - favorite.init(instanceId, instanceId, ContentsTypes.Component.name(), root.getName()); + buttonFavorite.init(instanceId, instanceId, ContentsTypes.Component.name(), root.getName()); buttonImport.init(instanceId, "0", false); } else { - favorite.init(instanceId, root.getId(), ContentsTypes.Folder.name(), root.getName()); + buttonFavorite.init(instanceId, root.getId(), ContentsTypes.Folder.name(), root.getName()); buttonImport.init(instanceId, rootTopicId, false); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java index 1c67a9a6e..4e775e429 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsList.java @@ -51,7 +51,7 @@ public ActionsList() { initWidget(uiBinder.createAndBindUi(this)); listActions.setId("actionList-bloc"); container.getElement().setId("actionsList"); - container.getElement().getStyle().setDisplay(Style.Display.NONE); + container.getElement().addClassName("empty"); } public boolean isEmpty() { return (listActions.getWidgetCount() == 0); @@ -63,12 +63,12 @@ public void addAction(ActionItem action) { if (act.getId().equals(action.getId())) return; } listActions.add(action); - container.getElement().getStyle().setDisplay(Style.Display.BLOCK); + container.getElement().removeClassName("empty"); } public void clear() { listActions.clear(); - container.getElement().getStyle().setDisplay(Style.Display.NONE); + container.getElement().addClassName("empty"); } public void removeAction(String id, boolean silently) { @@ -80,7 +80,7 @@ public void removeAction(String id, boolean silently) { } } if (isEmpty()) { - container.getElement().getStyle().setDisplay(Style.Display.NONE); + container.getElement().addClassName("empty"); } } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java index 91aed772c..38432b7be 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java @@ -49,6 +49,7 @@ interface ActionsMenuUiBinder extends UiBinder<Widget, ActionsMenu> { private static ActionsMenuUiBinder uiBinder = GWT.create(ActionsMenuUiBinder.class); + private ActionsList actionsShortcuts; @UiField HTMLPanel container; @UiField UnorderedList listActions; @@ -59,10 +60,14 @@ public ActionsMenu() { listActions.setId("action-bloc"); actions.getElement().setId("action-button"); container.getElement().setId("actions"); - container.getElement().getStyle().setDisplay(Style.Display.NONE); listActions.getElement().addClassName("closed-qvf-menu"); } + public void setActionsShortcuts(ActionsList actionsShortcuts) { + this.actionsShortcuts = actionsShortcuts; + hide(); + } + @UiHandler("actions") protected void showActions(ClickEvent event) { if (listActions.getElement().getClassName().equals("closed-qvf-menu")) { @@ -96,12 +101,12 @@ public void addAction(ActionItem action) { if (act.getId().equals(action.getId())) return; } listActions.add(action); - container.getElement().getStyle().setDisplay(Style.Display.BLOCK); + show(); } public void clear() { listActions.clear(); - container.getElement().getStyle().setDisplay(Style.Display.NONE); + hide(); } public void removeAction(String id, boolean silently) { @@ -114,7 +119,17 @@ public void removeAction(String id, boolean silently) { } } if (isEmpty()) { - container.getElement().getStyle().setDisplay(Style.Display.NONE); + hide(); } } + + private void show() { + container.getElement().removeClassName("empty"); + this.actionsShortcuts.getElement().removeClassName("menu-empty"); + } + + private void hide() { + container.getElement().addClassName("empty"); + this.actionsShortcuts.getElement().addClassName("menu-empty"); + } } \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java index 1ea9c9b01..d4f82c379 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/NavigationMenu.java @@ -271,6 +271,7 @@ protected void disconnect(ClickEvent event) { @UiHandler("calendar") protected void calendar(ClickEvent event) { ApplicationInstanceDTO app = new ApplicationInstanceDTO(); + app.setPersonnal(true); app.setId("userCalendar" + SpMobil.getUser().getId() + "_PCI"); app.setType(Apps.userCalendar.name()); EventBus.getInstance().fireEvent(new NavigationAppInstanceChangedEvent(app)); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java index 252da0279..d48c3a6bd 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java @@ -30,6 +30,7 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.*; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.common.navigation.PageHistory; @@ -65,6 +66,7 @@ public PageHeader() { menu.getElement().setId("menu"); ressources.css().ensureInjected(); title.setInnerText(ResourcesManager.getLabel("mainpage.title")); + actionsMenu.setActionsShortcuts(actionsShortcuts); } public void addActionShortcut(ActionItem action) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css index 0f423a3e0..b4627bf57 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/components.css @@ -13,7 +13,7 @@ } .checkbox-wrapper label { - --size: 50px; + --size: 4em; cursor: pointer; width: var(--size); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 904c4e32f..79507d89c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -850,10 +850,6 @@ html .ui-controlgroup-controls .ui-btn-up-c { padding-left: 0em; } -#actionsList:has(.add-task) { - right: 1em; -} - .add-task { height: 24px; width: 24px; @@ -2138,6 +2134,28 @@ form .forms .fields > li:nth-child(even) { list-style: none; } +#actionsList.menu-empty { + right: 8px; +} + +.empty { + display: none; +} + +.delete-action { + height: 24px; + width: 24px; + filter: invert(1); + background: url('icons/delete.svg') no-repeat; +} + +.add-action { + height: 24px; + width: 24px; + filter: invert(1); + background: url('icons/add.svg') no-repeat; +} + .config .actuality a { } @@ -2941,24 +2959,6 @@ a.popin-btn { background-color: #FFF; } -#actionsList:has(.delete-action), #actionsList:has(.add-action) { - right: 1em; -} - -.delete-action { - height: 24px; - width: 24px; - filter: invert(1); - background: url('icons/delete.svg') no-repeat; -} - -.add-action { - height: 24px; - width: 24px; - filter: invert(1); - background: url('icons/add.svg') no-repeat; -} - .markAsRead-notification { height: 24px; width: 24px; @@ -3085,7 +3085,7 @@ a.popin-btn { /**** Cookies information page ****/ .infosTextContainer { background-color: white; - height: 25vh; + min-height: 25vh; padding: 2em; margin-left: 1em; margin-right: 1em; @@ -3094,7 +3094,7 @@ a.popin-btn { } .infosText { - height: 20vh; + min-height: 20vh; text-align: justify; line-height: 1.2em; } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java index 4c10ec994..760a66821 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/server/services/ServiceNavigation.java @@ -489,8 +489,7 @@ public List<ApplicationInstanceDTO> getPersonnalSpaceContent(@PathParam("userId" SpaceInst space = Administration.get().getPersonalSpace(userId); List<ApplicationInstanceDTO> apps = new ArrayList<>(); for (ComponentInst app : space.getAllComponentsInst()) { - ApplicationInstanceDTO dto = populate(app); - dto.setPersonnal(true); + ApplicationInstanceDTO dto = populate(app, true); apps.add(dto); } return apps; @@ -558,7 +557,8 @@ public List<SilverpeasObjectDTO> getSpacesAndApps(@PathParam("rootSpaceId") Stri ComponentInstLight app = Administration.get().getComponentInstLight(appId); if (isSupportedApp(app) && app.getDomainFatherId().equals(rootSpaceId)) { if (!app.isHidden()) { - partialResults.add(populate(app)); + SpaceInst space = Administration.get().getSpaceInstById(app.getDomainFatherId()); + partialResults.add(populate(app, space.isPersonalSpace())); } } } @@ -606,7 +606,8 @@ private ApplicationInstanceDTO getApplicationInstanceDTO(final String instanceId ApplicationInstanceDTO dto = null; try { ComponentInstLight app = Administration.get().getComponentInstLight(instanceId); - dto = populate(app); + SpaceInst space = Administration.get().getSpaceInstById(app.getDomainFatherId()); + dto = populate(app,space.isPersonalSpace()); } catch (Exception e) { SilverLogger.getLogger(this).error(e); } @@ -663,22 +664,24 @@ private SpaceDTO populate(SpaceInst space) { return dto; } - private ApplicationInstanceDTO populate(ComponentInst app) { + private ApplicationInstanceDTO populate(ComponentInst app, boolean personal) { ApplicationInstanceDTO dto = new ApplicationInstanceDTO(); dto.setId(app.getId()); dto.setLabel(app.getLabel()); dto.setType(app.getName()); dto.setOrderNum(app.getOrderNum()); + dto.setPersonnal(personal); return dto; } - private ApplicationInstanceDTO populate(ComponentInstLight app) { + private ApplicationInstanceDTO populate(ComponentInstLight app,boolean personal) { ApplicationInstanceDTO dto = new ApplicationInstanceDTO(); dto.setId(app.getId()); dto.setLabel(app.getLabel()); dto.setType(app.getName()); dto.setOrderNum(app.getOrderNum()); dto.setWorkflow(isWorkflowApp(app)); + dto.setPersonnal(personal); RightDTO rights = new RightDTO(); String[] roles = getUserRoles(app.getId(), getUser().getId()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java index 98569dc55..94a8f302e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/navigation/ApplicationInstanceDTO.java @@ -107,7 +107,7 @@ public void setExtraId(final String extraId) { public int getPublicationSharing() { return publicationSharing; } public int getFileSharing() { return fileSharing; } - public boolean isPersonnal() { + public boolean getPersonnal() { return personnal; } From 1db2d4c9ba28be1e8ba43b6a3e43107de1082c9a Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 4 Mar 2024 19:37:38 +0100 Subject: [PATCH 212/228] Feature #14040 --- .../client/apps/agenda/pages/AgendaPage.java | 17 ++ .../apps/agenda/pages/EditEventPage.java | 169 ++++++++++++++++++ .../apps/agenda/pages/EditEventPage.ui.xml | 84 +++++++++ .../apps/agenda/resources/AgendaMessages.java | 3 + .../resources/AgendaMessages.properties | 4 +- .../resources/AgendaMessages_en.properties | 4 +- .../resources/AgendaMessages_fr.properties | 4 +- .../client/apps/tasks/pages/TasksPage.java | 4 +- .../client/components/base/ActionsMenu.java | 15 +- .../org/silverpeas/mobile/public/spmobile.css | 92 ++++++++++ 10 files changed, 386 insertions(+), 10 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java index e271d2145..10dcf3765 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java @@ -32,6 +32,8 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.ListBox; @@ -49,6 +51,7 @@ import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.AddButton; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO; @@ -82,6 +85,7 @@ public class AgendaPage extends PageContent implements AgendaPagesEventHandler { SpanElement message; private AddToFavoritesButton buttonFavorite = new AddToFavoritesButton(); + private AddButton buttonCreate = new AddButton(); interface AgendaPageUiBinder extends UiBinder<Widget, AgendaPage> { } @@ -94,6 +98,14 @@ public AgendaPage() { week.getElement().setId("btn-week"); mouth.getElement().setId("btn-month"); EventBus.getInstance().addHandler(AbstractAgendaPagesEvent.TYPE, this); + buttonCreate.setCallback(new Command() { + @Override + public void execute() { + EditEventPage edit = new EditEventPage(); + edit.setData(getApp().getApplicationInstance(), calendars); + edit.show(); + } + }); } public void setCalendars(final List<CalendarDTO> cals) { @@ -214,6 +226,11 @@ public void onCalendarEventsLoaded(final CalendarLoadedEvent event) { if (!event.getInstance().getPersonnal()) { addActionMenu(buttonFavorite); buttonFavorite.init(getApp().getApplicationInstance().getId(), getApp().getApplicationInstance().getId(), ContentsTypes.Component.name(), getPageTitle()); + if (event.getInstance().getRights().getWriter() || event.getInstance().getRights().getPublisher() || event.getInstance().getRights().getManager()) { + addActionShortcut(buttonCreate); + } + } else { + addActionShortcut(buttonCreate); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java new file mode 100644 index 000000000..b1ed7a3c7 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java @@ -0,0 +1,169 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.agenda.pages; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.logical.shared.ValueChangeEvent; +import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.*; +import org.silverpeas.mobile.client.apps.agenda.events.pages.*; +import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages; +import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.userselection.UserSelectionPage; +import org.silverpeas.mobile.client.components.userselection.events.components.UserSelectionComponentEventHandler; +import org.silverpeas.mobile.client.components.userselection.events.components.UsersAndGroupsSelectedEvent; +import org.silverpeas.mobile.client.resources.ApplicationResources; +import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO; +import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; + +import java.util.List; + +/** + * @author svu + */ +public class EditEventPage extends PageContent implements EventPagesEventHandler, UserSelectionComponentEventHandler { + private static EditEventPageUiBinder uiBinder = GWT.create(EditEventPageUiBinder.class); + private ApplicationResources resources = GWT.create(ApplicationResources.class); + + @UiField(provided = true) protected AgendaMessages msg = null; + + @UiField + HTMLPanel container; + + @UiField + TextBox title, startDate, endDate; + + @UiField + TextArea description; + + @UiField + CheckBox allDay; + + @UiField + RadioButton important, notimportant, publique, prive; + + @UiField + ListBox frequency, calendars; + + @UiField + Anchor submit, selectionButton; + + @UiField + SpanElement selection; + + @Override + public void onUsersAndGroupSelected(UsersAndGroupsSelectedEvent event) { + //TODO + } + + interface EditEventPageUiBinder extends UiBinder<Widget, EditEventPage> { + } + + public EditEventPage() { + msg = GWT.create(AgendaMessages.class); + setPageTitle(msg.newtitleEvent()); + initWidget(uiBinder.createAndBindUi(this)); + container.getElement().setId("eventForm"); + title.getElement().setAttribute("placeholder", "Titre"); + description.getElement().setAttribute("placeholder", "Description"); + description.getElement().setAttribute("rows", "6"); + startDate.getElement().setAttribute("type", "date"); + endDate.getElement().setAttribute("type", "date"); + important.setValue(true); + publique.setValue(true); + EventBus.getInstance().addHandler(AbstractEventPagesEvent.TYPE, this); + allDay.addValueChangeHandler(new ValueChangeHandler<Boolean>() { + @Override + public void onValueChange(ValueChangeEvent<Boolean> valueChangeEvent) { + if (valueChangeEvent.getValue()) { + startDate.getElement().setAttribute("type", "date"); + endDate.getElement().setAttribute("type", "date"); + } else { + startDate.getElement().setAttribute("type", "datetime-local"); + endDate.getElement().setAttribute("type", "datetime-local"); + } + } + }); + + frequency.addItem("Aucune", "string:NONE"); + frequency.addItem("Tous les jours", "string:DAY"); + frequency.addItem("Toutes les semaines", "string:WEEK"); + frequency.addItem("Tous les mois", "string:MONTH"); + frequency.addItem("Tous les ans", "string:YEAR"); + + selectionButton.getElement().setInnerHTML(resources.peoples().getText() + selectionButton.getElement().getInnerHTML()); + } + + public void setData(ApplicationInstanceDTO instance, List<CalendarDTO> calendarsDTO) { + for (CalendarDTO dto : calendarsDTO) { + calendars.addItem(dto.getTitle(), dto.getId()); + } + } + + @UiHandler("submit") + protected void save(ClickEvent event) { + back(); + } + + @UiHandler("selectionButton") + protected void onUserSelection(ClickEvent event) { + UserSelectionPage page = new UserSelectionPage(); + + //page.setPreSelectedIds(ids); + //sendEventToGetPossibleUsers(fieldName); + page.show(); + } + + @Override + public void onRemindersLoaded(final RemindersLoadedEvent event) { } + + @Override + public void onRemindersDeleted(final ReminderDeletedEvent event) {} + + @Override + public void onAttachmentLoaded(final AttachmentsLoadedEvent event) {} + + @Override + public void onRemindersAdding(final RemindersAddingEvent remindersAddingEvent) {} + + @Override + public void onReminderAdded(final ReminderAddedEvent event) {} + + @Override + public void onParticipationUpdated(final ParticipationUpdatedEvent event) {} + + @Override + public void stop() { + EventBus.getInstance().removeHandler(AbstractEventPagesEvent.TYPE, this); + super.stop(); + } + +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml new file mode 100644 index 000000000..be2d495df --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml @@ -0,0 +1,84 @@ +<!-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "https://www.silverpeas.org/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" + xmlns:g="urn:import:com.google.gwt.user.client.ui" + xmlns:base="urn:import:org.silverpeas.mobile.client.components.base" + xmlns:components="urn:import:org.silverpeas.mobile.client.components"> + + <ui:with field='msg' type='org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages' /> + + <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> + + <span class="calendars"> + <label>Calendrier :</label> + <g:ListBox ui:field="calendars"></g:ListBox> + </span> + + <g:TextBox ui:field="title" styleName="title"/> + <g:CheckBox ui:field="allDay" text="Toute la journée" styleName="allDay" value="true"/> + + <span class="startDate"> + <label>Début: </label> + <g:TextBox ui:field="startDate"/> + </span> + <span class="endDate"> + <label>Fin: </label> + <g:TextBox ui:field="endDate"/> + </span> + <g:TextArea ui:field="description" styleName="description"/> + + <span class="priority"> + <label>Important :</label> + <g:RadioButton ui:field="important" name="priority">Oui</g:RadioButton> + <g:RadioButton ui:field="notimportant" name="priority">Non</g:RadioButton> + </span> + <span class="visibility"> + <label>Visibilité :</label> + <g:RadioButton ui:field="publique" name="visibility">Publique</g:RadioButton> + <g:RadioButton ui:field="prive" name="visibility">Privé</g:RadioButton> + </span> + + <span class="frequency"> + <label>Récurrence :</label> + <g:ListBox ui:field="frequency"></g:ListBox> + </span> + + <span class="participants"> + <label>Participants :</label> + <g:Anchor ui:field="selectionButton"> + <span ui:field="selection" class="selection"></span> + </g:Anchor> + </span> + + <div class=" ui-controlgroup ui-controlgroup-horizontal"> + <div class="ui-controlgroup-controls "> + <g:Anchor ui:field="submit" styleName="btn-validate ui-link"> + <span class="ui-btn-text"><ui:text from="{msg.create}"/></span> + </g:Anchor> + </div> + </div> + </g:HTMLPanel> +</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java index d4eccf8d5..48a1d8aee 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java @@ -96,4 +96,7 @@ public interface AgendaMessages extends Messages { String noEvent(); String the(); + String create(); + + String newtitleEvent(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties index b50db1a4f..57c5d9ba9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties @@ -86,4 +86,6 @@ friday=Vendredi saturday=Samedi sunday=Dimanche -noEvent=Pas d''événements à venir \ No newline at end of file +noEvent=Pas d''événements à venir +create=Créer +newtitleEvent= Nouvel événement \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties index 038d1d63f..9c40c64d4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties @@ -86,4 +86,6 @@ friday=Friday saturday=Saturday sunday=Sunday -noEvent=No upcoming events \ No newline at end of file +noEvent=No upcoming events +create=Create +newtitleEvent= New event \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties index b50db1a4f..57c5d9ba9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties @@ -86,4 +86,6 @@ friday=Vendredi saturday=Samedi sunday=Dimanche -noEvent=Pas d''événements à venir \ No newline at end of file +noEvent=Pas d''événements à venir +create=Créer +newtitleEvent= Nouvel événement \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java index dc84eac63..9b34571cd 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java @@ -116,10 +116,8 @@ public void onTaskUpdated(TaskUpdatedEvent taskUpdatedEvent) { if (list.getWidget(i) instanceof TaskItem) { TaskItem t = (TaskItem) list.getWidget(i); if (t.getData().getId() == taskUpdatedEvent.getTask().getId()) { - list.remove(t); - TaskItem item = new TaskItem(); + TaskItem item = (TaskItem) list.getWidget(i); item.setData(taskUpdatedEvent.getTask()); - list.add(item); break; } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java index 38432b7be..d246f9a63 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java @@ -37,6 +37,7 @@ import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Widget; +import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.components.UnorderedList; /** @@ -77,18 +78,24 @@ protected void showActions(ClickEvent event) { listActions.getElement().removeClassName("open-qvf-menu"); listActions.getElement().addClassName("closed-qvf-menu"); } + enableAllItem(true); } public static void close(Element action) { - if (action.getParentElement() != null) { - action.getParentElement().removeClassName("open-qvf-menu"); - action.getParentElement().addClassName("closed-qvf-menu"); - } + SpMobil.getMainPage().getHeader().actionsMenu.close(); } public void close() { listActions.getElement().removeClassName("open-qvf-menu"); listActions.getElement().addClassName("closed-qvf-menu"); + enableAllItem(false); + } + + private void enableAllItem(boolean enable) { + for (int i = 0; i < listActions.getCount(); i++) { + ActionItem item = (ActionItem) listActions.getWidget(i); + item.setVisible(enable); + } } public boolean isEmpty() { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 79507d89c..c94856645 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -31,6 +31,7 @@ html { font-size: 100%; height: 100%; + scrollbar-width: none; } body.ui-panel-wrapper { @@ -543,6 +544,7 @@ html .ui-controlgroup-controls .ui-btn-up-c { .favoris-bloc span { fill : #a9a9a9; + white-space: normal; } .favoris-bloc a { @@ -2621,6 +2623,96 @@ a.popin-btn { padding-left: 1em; } +#eventForm { + padding-top: 2em; +} + +#eventForm .title, #eventForm .allDay { + width: calc(100vw - 4em); + margin-top: 1em; + margin-bottom: 1em; + margin-left: 2em; + line-height: 2em; +} + +#eventForm .title::placeholder { + color: #ec8001; +} + +#eventForm .description { + width: calc(100vw - 4em); + margin-top: 1em; + margin-bottom: 1em; + margin-left: 2em; + border: none; +} + +#eventForm .priority, #eventForm .visibility { + margin-left: 2em; + margin-top: 1em; + margin-bottom: 1em; + display: inline-block; +} + +#eventForm .startDate > label, #eventForm .endDate > label { + width: 3em; + display: inline-block; +} + +#eventForm .title, #eventForm .startDate > input, #eventForm .endDate > input { + line-height: 2em; + border: none; + border-radius: 2px; +} + +#eventForm .startDate, #eventForm .endDate { + display: block; + margin-bottom: 1em; + margin-left: 2em; + float: none; +} + +#eventForm .calendars { + display: block; + margin-left: 2em; +} + +#eventForm .frequency { + display: block; + margin-left: 2em; + margin-bottom: 1em; +} + +#eventForm .calendars > select, #eventForm .frequency > select { + box-sizing: border-box; + padding: 0.5em; + background-color: white; + border-radius: 0.25em; + border: none; +} + +#eventForm .participants { + +} + +#eventForm .participants > label { + margin-left: 2em; +} + +#eventForm .participants > a { + background-color: white; + height: 4em; + display: inline-block; + width: calc(100vw - 4em); + margin-left: 2em; + margin-top: 1em; + vertical-align: middle; +} + +#eventForm .participants > a .selecection { + vertical-align: super; +} + .termsOfServiceText { text-align: center; margin-top: 2em; From 3a20951f049f82a66bf8fbe12e1952369637386b Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 5 Mar 2024 18:55:04 +0100 Subject: [PATCH 213/228] Feature #14040 --- .../mobile/client/apps/agenda/AgendaApp.java | 59 ++++++- .../events/app/AgendaAppEventHandler.java | 2 + .../agenda/events/app/EventCreateEvent.java | 48 ++++++ .../client/apps/agenda/pages/AgendaPage.java | 14 +- .../apps/agenda/pages/EditEventPage.java | 163 ++++++++++++++++-- .../apps/agenda/pages/EditEventPage.ui.xml | 7 +- .../formsonline/pages/FormOnlineEditPage.java | 6 +- .../components/forms/FieldEditable.java | 7 +- .../userselection/UserSelectionPage.java | 27 ++- .../org/silverpeas/mobile/public/spmobile.css | 16 +- .../almanach/CalendarEventCreationDTO.java | 158 +++++++++++++++++ .../shared/services/rest/ServiceAlmanach.java | 14 +- 12 files changed, 476 insertions(+), 45 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/EventCreateEvent.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/almanach/CalendarEventCreationDTO.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java index fbbe8239e..9747e71c1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java @@ -31,15 +31,7 @@ import org.fusesource.restygwt.client.Method; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.apps.agenda.events.TimeRange; -import org.silverpeas.mobile.client.apps.agenda.events.app.AbstractAgendaAppEvent; -import org.silverpeas.mobile.client.apps.agenda.events.app.AgendaAppEventHandler; -import org.silverpeas.mobile.client.apps.agenda.events.app.AttachmentsLoadEvent; -import org.silverpeas.mobile.client.apps.agenda.events.app.CalendarLoadEvent; -import org.silverpeas.mobile.client.apps.agenda.events.app.ParticipationEvent; -import org.silverpeas.mobile.client.apps.agenda.events.app.ReminderCreateEvent; -import org.silverpeas.mobile.client.apps.agenda.events.app.ReminderDeleteEvent; -import org.silverpeas.mobile.client.apps.agenda.events.app.ReminderUpdateEvent; -import org.silverpeas.mobile.client.apps.agenda.events.app.RemindersLoadEvent; +import org.silverpeas.mobile.client.apps.agenda.events.app.*; import org.silverpeas.mobile.client.apps.agenda.events.pages.AbstractAgendaPagesEvent; import org.silverpeas.mobile.client.apps.agenda.events.pages.AgendaPagesEventHandler; import org.silverpeas.mobile.client.apps.agenda.events.pages.AttachmentsLoadedEvent; @@ -60,7 +52,9 @@ import org.silverpeas.mobile.client.common.ServicesLocator; import org.silverpeas.mobile.client.common.app.App; import org.silverpeas.mobile.client.common.network.MethodCallbackOnlineOnly; +import org.silverpeas.mobile.shared.dto.BaseDTO; import org.silverpeas.mobile.shared.dto.ContentsTypes; +import org.silverpeas.mobile.shared.dto.UserDTO; import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventAttendeeDTO; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO; @@ -140,6 +134,7 @@ public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { AgendaPage page = new AgendaPage(); page.setPageTitle(event.getInstance().getLabel()); + loadUsersAndGroups(page); MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<CalendarDTO>>() { @Override @@ -438,6 +433,24 @@ public void attempt() { action.attempt(); } + @Override + public void createEvent(EventCreateEvent event) { + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<CalendarEventDTO>() { + @Override + public void attempt() { + super.attempt(); + ServicesLocator.getServiceAlmanach().createEvent(getApplicationInstance().getId(), event.getEvent().getCalendar().getId(), event.getEvent(), this); + } + + @Override + public void onSuccess(Method method, CalendarEventDTO event) { + super.onSuccess(method, event); + //TODO + } + }; + action.attempt(); + } + private CalendarEventAttendeeDTO getUserAttendee(final List<CalendarEventAttendeeDTO> attendees) { CalendarEventAttendeeDTO attendee = null; for (CalendarEventAttendeeDTO attendeeDTO : attendees) { @@ -448,5 +461,33 @@ private CalendarEventAttendeeDTO getUserAttendee(final List<CalendarEventAttende } return attendee; } + + public void loadUsersAndGroups(AgendaPage page) { + + MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<List<BaseDTO>>() { + @Override + public void attempt() { + super.attempt(); + String appId = getApplicationInstance().getId(); + if (getApplicationInstance().getPersonnal()) appId = null; + ServicesLocator.getServiceNotifications() + .getAllowedUsersAndGroups(appId, null, this); + } + + @Override + public void onSuccess(final Method method, final List<BaseDTO> baseDTOS) { + super.onSuccess(method, baseDTOS); + List<BaseDTO> users = new ArrayList<>(); + for (BaseDTO dto : baseDTOS) { + if (dto instanceof UserDTO) { + users.add(dto); + } + } + page.setAllowedUsersAndGroups(users); + } + }; + action.attempt(); + } + } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/AgendaAppEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/AgendaAppEventHandler.java index db193ad9c..88638ee05 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/AgendaAppEventHandler.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/AgendaAppEventHandler.java @@ -37,4 +37,6 @@ public interface AgendaAppEventHandler extends EventHandler{ void loadAttachments(AttachmentsLoadEvent event); void participation(ParticipationEvent participationEvent); + + void createEvent(EventCreateEvent event); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/EventCreateEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/EventCreateEvent.java new file mode 100644 index 000000000..23e0817f4 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/app/EventCreateEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.agenda.events.app; + +import org.silverpeas.mobile.shared.dto.almanach.CalendarEventCreationDTO; +import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO; +import org.silverpeas.mobile.shared.dto.reminder.ReminderDTO; + +public class EventCreateEvent extends AbstractAgendaAppEvent { + private CalendarEventCreationDTO event; + + public EventCreateEvent(CalendarEventCreationDTO event) { + super(); + this.event = event; + } + + @Override + protected void dispatch(AgendaAppEventHandler handler) { + handler.createEvent(this); + } + + + public CalendarEventCreationDTO getEvent() { + return event; + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java index 10dcf3765..e6c75b4c2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java @@ -52,6 +52,7 @@ import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.base.widgets.AddButton; +import org.silverpeas.mobile.shared.dto.BaseDTO; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO; @@ -87,7 +88,17 @@ public class AgendaPage extends PageContent implements AgendaPagesEventHandler { private AddToFavoritesButton buttonFavorite = new AddToFavoritesButton(); private AddButton buttonCreate = new AddButton(); - interface AgendaPageUiBinder extends UiBinder<Widget, AgendaPage> { + private List<BaseDTO> allowedUsersAndGroups; + + public void setAllowedUsersAndGroups(List<BaseDTO> baseDTOS) { + this.allowedUsersAndGroups = baseDTOS; + } + + public List<BaseDTO> getAllowedUsersAndGroups() { + return this.allowedUsersAndGroups; + } + + interface AgendaPageUiBinder extends UiBinder<Widget, AgendaPage> { } public AgendaPage() { @@ -103,6 +114,7 @@ public AgendaPage() { public void execute() { EditEventPage edit = new EditEventPage(); edit.setData(getApp().getApplicationInstance(), calendars); + edit.setAllowedUsersAndGroups(getAllowedUsersAndGroups()); edit.show(); } }); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java index b1ed7a3c7..9ddf4ba04 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java @@ -25,7 +25,8 @@ package org.silverpeas.mobile.client.apps.agenda.pages; import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; @@ -33,17 +34,25 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.*; +import org.silverpeas.mobile.client.apps.agenda.events.app.EventCreateEvent; import org.silverpeas.mobile.client.apps.agenda.events.pages.*; import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.PageContent; import org.silverpeas.mobile.client.components.userselection.UserSelectionPage; +import org.silverpeas.mobile.client.components.userselection.events.components.AbstractUserSelectionComponentEvent; import org.silverpeas.mobile.client.components.userselection.events.components.UserSelectionComponentEventHandler; import org.silverpeas.mobile.client.components.userselection.events.components.UsersAndGroupsSelectedEvent; +import org.silverpeas.mobile.client.components.userselection.events.pages.AllowedUsersAndGroupsLoadedEvent; import org.silverpeas.mobile.client.resources.ApplicationResources; -import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO; +import org.silverpeas.mobile.shared.dto.BaseDTO; +import org.silverpeas.mobile.shared.dto.GroupDTO; +import org.silverpeas.mobile.shared.dto.UserDTO; +import org.silverpeas.mobile.shared.dto.almanach.*; import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; +import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -77,11 +86,14 @@ public class EditEventPage extends PageContent implements EventPagesEventHandler Anchor submit, selectionButton; @UiField - SpanElement selection; + DivElement participantsSelected, icon; - @Override - public void onUsersAndGroupSelected(UsersAndGroupsSelectedEvent event) { - //TODO + private List<BaseDTO> allowedUsersAndGroups; + + private List<BaseDTO> selectedUsersAndGroups; + + public void setAllowedUsersAndGroups(List<BaseDTO> allowedUsersAndGroups) { + this.allowedUsersAndGroups = allowedUsersAndGroups; } interface EditEventPageUiBinder extends UiBinder<Widget, EditEventPage> { @@ -97,9 +109,11 @@ public EditEventPage() { description.getElement().setAttribute("rows", "6"); startDate.getElement().setAttribute("type", "date"); endDate.getElement().setAttribute("type", "date"); - important.setValue(true); + notimportant.setValue(true); publique.setValue(true); + submit.getElement().addClassName("formIncomplete"); EventBus.getInstance().addHandler(AbstractEventPagesEvent.TYPE, this); + EventBus.getInstance().addHandler(AbstractUserSelectionComponentEvent.TYPE, this); allDay.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> valueChangeEvent) { @@ -113,13 +127,13 @@ public void onValueChange(ValueChangeEvent<Boolean> valueChangeEvent) { } }); - frequency.addItem("Aucune", "string:NONE"); - frequency.addItem("Tous les jours", "string:DAY"); - frequency.addItem("Toutes les semaines", "string:WEEK"); - frequency.addItem("Tous les mois", "string:MONTH"); - frequency.addItem("Tous les ans", "string:YEAR"); + frequency.addItem("Aucune", "NONE"); + frequency.addItem("Tous les jours", "DAY"); + frequency.addItem("Toutes les semaines", "WEEK"); + frequency.addItem("Tous les mois", "MONTH"); + frequency.addItem("Tous les ans", "YEAR"); - selectionButton.getElement().setInnerHTML(resources.peoples().getText() + selectionButton.getElement().getInnerHTML()); + icon.setInnerHTML(resources.peoples().getText()); } public void setData(ApplicationInstanceDTO instance, List<CalendarDTO> calendarsDTO) { @@ -128,18 +142,134 @@ public void setData(ApplicationInstanceDTO instance, List<CalendarDTO> calendars } } + @UiHandler("title") + protected void changeTitle(ChangeEvent event) { + validateForm(); + } + + @UiHandler("startDate") + protected void changeStartDate(ChangeEvent event) { + endDate.getElement().setAttribute("min", startDate.getValue()); + if (startDate.getText().isEmpty()) { + startDate.getElement().addClassName("formMandatoryField"); + } else { + startDate.getElement().removeClassName("formMandatoryField"); + } + validateForm(); + } + + @UiHandler("endDate") + protected void changeEndDate(ChangeEvent event) { + startDate.getElement().setAttribute("max", endDate.getValue()); + if (endDate.getText().isEmpty()) { + endDate.getElement().addClassName("formMandatoryField"); + } else { + endDate.getElement().removeClassName("formMandatoryField"); + } + validateForm(); + } + + private boolean validateForm() { + boolean valid = !startDate.getText().isEmpty() && !endDate.getText().isEmpty() && !title.getText().isEmpty(); + if (valid) { + submit.getElement().removeClassName("formIncomplete"); + } else { + submit.getElement().addClassName("formIncomplete"); + } + return valid; + } + @UiHandler("submit") protected void save(ClickEvent event) { - back(); + if (!submit.getElement().hasClassName("formIncomplete")) { + CalendarEventCreationDTO dto = new CalendarEventCreationDTO(); + dto.setEventType("CalendarEvent"); + dto.setOccurrenceType("CalendarEventOccurrence"); + dto.setEventId("volatile-" + new Date().getTime()); + + CalendarDTO calendarDTO = new CalendarDTO(); + calendarDTO.setId(calendars.getSelectedValue()); + dto.setCalendar(calendarDTO); + dto.setTitle(title.getText()); + dto.setOnAllDay(allDay.getValue()); + if (allDay.getValue()) { + dto.setStartDate(startDate.getText()); + dto.setEndDate(endDate.getText()); + } else { + dto.setStartDate(startDate.getText()+":00+01:00"); + dto.setEndDate(endDate.getText()+":00+01:00"); + } + dto.setDescription(description.getText()); + if (important.getValue()) dto.setPriority(PriorityDTO.HIGH.name()); + if (notimportant.getValue()) dto.setPriority(PriorityDTO.NORMAL.name()); + if (publique.getValue()) dto.setVisibility(VisibilityLevelDTO.PUBLIC.name()); + if (prive.getValue()) dto.setVisibility(VisibilityLevelDTO.PRIVATE.name()); + if (!frequency.getSelectedValue().equals("NONE")) { + CalendarEventRecurrenceDTO rec = new CalendarEventRecurrenceDTO(); + CalendarEventRecurrenceDTO.FrequencyDTO freq = new CalendarEventRecurrenceDTO.FrequencyDTO(); + freq.setTimeUnit(TimeUnitDTO.valueOf(frequency.getSelectedValue())); + freq.setInterval(1); + rec.setFrequency(freq); + dto.setRecurrence(rec); + } + dto.setAttendees(getAttendees()); + EventCreateEvent ev = new EventCreateEvent(dto); + EventBus.getInstance().fireEvent(ev); + back(); //TODO : update parent page + } + } + + private List<CalendarEventAttendeeDTO> getAttendees() { + List<CalendarEventAttendeeDTO> attendees = new ArrayList<>(); + if (selectedUsersAndGroups != null) { + for (BaseDTO sel : selectedUsersAndGroups) { + CalendarEventAttendeeDTO a = new CalendarEventAttendeeDTO(); + a.setId(sel.getId()); + if (sel instanceof UserDTO) { + a.setFullName(((UserDTO) sel).getFirstName() + ((UserDTO) sel).getLastName()); + } + a.setParticipationStatus(ParticipationStatusDTO.AWAITING); + a.setPresenceStatus(PresenceStatusDTO.INFORMATIVE); + attendees.add(a); + } + } + return attendees; } @UiHandler("selectionButton") protected void onUserSelection(ClickEvent event) { UserSelectionPage page = new UserSelectionPage(); + if (selectedUsersAndGroups != null) { - //page.setPreSelectedIds(ids); - //sendEventToGetPossibleUsers(fieldName); + + List<String> ids = new ArrayList<>(); + for (BaseDTO sel : selectedUsersAndGroups) { + if (sel instanceof UserDTO) ids.add(sel.getId()); + } + page.setPreSelectedUsersIds(ids); + } page.show(); + AllowedUsersAndGroupsLoadedEvent ev = new AllowedUsersAndGroupsLoadedEvent(allowedUsersAndGroups, true); + EventBus.getInstance().fireEvent(ev); + } + + @Override + public void onUsersAndGroupSelected(UsersAndGroupsSelectedEvent event) { + + this.selectedUsersAndGroups = event.getUsersAndGroupsSelected(); + String selectionNames = ""; + for (BaseDTO sel : selectedUsersAndGroups) { + + if (sel instanceof UserDTO) { + selectionNames += ((UserDTO) sel).getFirstName() + " " + ((UserDTO) sel).getLastName() + " , "; + } else if (sel instanceof GroupDTO) { + selectionNames += ((GroupDTO) sel).getName() + " , "; + } + } + selectionNames = selectionNames.substring(0, selectionNames.length() - 2); + + participantsSelected.setInnerText(selectionNames); + } @Override @@ -162,6 +292,7 @@ public void onParticipationUpdated(final ParticipationUpdatedEvent event) {} @Override public void stop() { + EventBus.getInstance().removeHandler(AbstractUserSelectionComponentEvent.TYPE, this); EventBus.getInstance().removeHandler(AbstractEventPagesEvent.TYPE, this); super.stop(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml index be2d495df..1ddfe3b37 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml @@ -42,11 +42,11 @@ <span class="startDate"> <label>Début: </label> - <g:TextBox ui:field="startDate"/> + <g:TextBox ui:field="startDate" stylePrimaryName="formMandatoryField"/> </span> <span class="endDate"> <label>Fin: </label> - <g:TextBox ui:field="endDate"/> + <g:TextBox ui:field="endDate" stylePrimaryName="formMandatoryField"/> </span> <g:TextArea ui:field="description" styleName="description"/> @@ -69,7 +69,8 @@ <span class="participants"> <label>Participants :</label> <g:Anchor ui:field="selectionButton"> - <span ui:field="selection" class="selection"></span> + <div ui:field="icon"></div> + <div ui:field="participantsSelected" class="selection"></div> </g:Anchor> </span> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java index bccf8c1a1..9a73bef1d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/formsonline/pages/FormOnlineEditPage.java @@ -272,7 +272,11 @@ public static void showUserSelection(String fieldName, String type) { // get users or groups selected before TextAreaElement tx = getUserField(fieldName); List<String> ids = Arrays.asList(tx.getAttribute("data").split(",")); - page.setPreSelectedIds(ids); + if (type.equalsIgnoreCase("user")) { + page.setPreSelectedUsersIds(ids); + } else if (type.equalsIgnoreCase("group")) { + page.setPreSelectedGroupsIds(ids); + } sendEventToGetPossibleUsers(fieldName); page.show(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/forms/FieldEditable.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/forms/FieldEditable.java index 8feccd262..bda28421a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/forms/FieldEditable.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/forms/FieldEditable.java @@ -292,7 +292,12 @@ public void onClick(final ClickEvent clickEvent) { // get users or groups selected before TextArea tx = ((TextArea) clickEvent.getSource()); List<String> ids = Arrays.asList(tx.getElement().getAttribute("data").split(",")); - page.setPreSelectedIds(ids); + if (type.equalsIgnoreCase("user")) { + page.setPreSelectedUsersIds(ids); + } else if (type.equalsIgnoreCase("group")) { + page.setPreSelectedGroupsIds(ids); + } + sendEventToGetPossibleUsers(); page.show(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/UserSelectionPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/UserSelectionPage.java index 52be92ce0..266dfc4b2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/UserSelectionPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/userselection/UserSelectionPage.java @@ -35,6 +35,7 @@ import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.TextBox; +import org.silverpeas.core.admin.user.model.User; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.common.app.View; import org.silverpeas.mobile.client.components.UnorderedList; @@ -68,14 +69,21 @@ public class UserSelectionPage extends PageContent private static UserSelectionPageUiBinder uiBinder = GWT.create(UserSelectionPageUiBinder.class); private String contentId; - private List<String> preSelectedIds = new ArrayList<String>(); + private List<String> preSelectedUsersIds = new ArrayList<String>(); + private List<String> preSelectedGroupsIds = new ArrayList<String>(); public void setMaxSelection(final int maxSelection) { this.maxSelection = maxSelection; } - public void setPreSelectedIds(final List<String> preSelectedIds) { - this.preSelectedIds = preSelectedIds; + public void setPreSelectedUsersIds(final List<String> preSelectedUsersIds) { + this.preSelectedUsersIds = preSelectedUsersIds; + if (preSelectedUsersIds != null && !preSelectedUsersIds.isEmpty()) continu.setVisible(true); + } + + public void setPreSelectedGroupsIds(final List<String> preSelectedGroupsIds) { + this.preSelectedGroupsIds = preSelectedGroupsIds; + if (preSelectedGroupsIds != null && !preSelectedGroupsIds.isEmpty()) continu.setVisible(true); } interface UserSelectionPageUiBinder extends UiBinder<HTMLPanel, UserSelectionPage> { @@ -111,10 +119,17 @@ public void onAllowedUsersAndGroupsLoaded(AllowedUsersAndGroupsLoadedEvent allow for (BaseDTO data : allowedUsersAndGroupsLoadedEvent.getListAllowedUsersAndGroups()) { UserGroupItem item = new UserGroupItem(); item.setData(data); - if (preSelectedIds.contains(data.getId())) { - item.select(); + if (data instanceof UserDTO) { + if (preSelectedUsersIds.contains(data.getId())) { + item.select(); + } + list.add(item); + } else if (data instanceof GroupDTO) { + if (preSelectedGroupsIds.contains(data.getId())) { + item.select(); + } + list.add(item); } - list.add(item); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index c94856645..0e55cab0d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -2701,7 +2701,7 @@ a.popin-btn { #eventForm .participants > a { background-color: white; - height: 4em; + min-height: 4em; display: inline-block; width: calc(100vw - 4em); margin-left: 2em; @@ -2709,10 +2709,20 @@ a.popin-btn { vertical-align: middle; } -#eventForm .participants > a .selecection { - vertical-align: super; +#eventForm .participants > a .selection { + color: #333333; +} + +.formMandatoryField { + color: #ec8001; } +.formIncomplete { + filter: grayscale(1); +} + + + .termsOfServiceText { text-align: center; margin-top: 2em; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/almanach/CalendarEventCreationDTO.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/almanach/CalendarEventCreationDTO.java new file mode 100644 index 000000000..bccb19874 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/almanach/CalendarEventCreationDTO.java @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.shared.dto.almanach; + +import org.silverpeas.mobile.shared.dto.reminder.ReminderDTO; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * @author svu + */ +public class CalendarEventCreationDTO implements Serializable { + + private String eventType; + private String occurrenceType; + private String startDate; + private String endDate; + private String eventId; + private CalendarDTO calendar; + private String title; + private boolean onAllDay; + private String visibility; + private String priority; + private String description; + private CalendarEventRecurrenceDTO recurrence; + + // "attributes": [{"name": "externalUrl"}], + // attachmentParameters": [] + private List<CalendarEventAttendeeDTO> attendees; + + public String getEventType() { + return eventType; + } + + public void setEventType(String eventType) { + this.eventType = eventType; + } + + public String getOccurrenceType() { + return occurrenceType; + } + + public void setOccurrenceType(String occurrenceType) { + this.occurrenceType = occurrenceType; + } + + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } + + public String getEventId() { + return eventId; + } + + public void setEventId(String eventId) { + this.eventId = eventId; + } + + public CalendarDTO getCalendar() { + return calendar; + } + + public void setCalendar(CalendarDTO calendar) { + this.calendar = calendar; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public boolean getOnAllDay() { + return onAllDay; + } + + public void setOnAllDay(boolean onAllDay) { + this.onAllDay = onAllDay; + } + + public String getVisibility() { + return visibility; + } + + public void setVisibility(String visibility) { + this.visibility = visibility; + } + + public String getPriority() { + return priority; + } + + public void setPriority(String priority) { + this.priority = priority; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public CalendarEventRecurrenceDTO getRecurrence() { + return recurrence; + } + + public void setRecurrence(CalendarEventRecurrenceDTO recurrence) { + this.recurrence = recurrence; + } + + public List<CalendarEventAttendeeDTO> getAttendees() { + return attendees; + } + + public void setAttendees(List<CalendarEventAttendeeDTO> attendees) { + this.attendees = attendees; + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceAlmanach.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceAlmanach.java index 79a82b79f..d63aa879c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceAlmanach.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/services/rest/ServiceAlmanach.java @@ -28,13 +28,11 @@ import org.fusesource.restygwt.client.RestService; import org.silverpeas.mobile.shared.dto.almanach.CalendarDTO; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventAttendeeDTO; +import org.silverpeas.mobile.shared.dto.almanach.CalendarEventCreationDTO; import org.silverpeas.mobile.shared.dto.almanach.CalendarEventDTO; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; import java.util.List; /** @@ -72,4 +70,10 @@ public void updateParticipation(@PathParam("componentInstanceId") String compone @QueryParam("zoneid") String zoneid, CalendarEventAttendeeDTO dto, MethodCallback<CalendarEventDTO> callback); + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("{componentInstanceId}/{calendarId}/events") + public void createEvent(@PathParam("componentInstanceId") String componentInstanceId, + @PathParam("calendarId") String calendarId, CalendarEventCreationDTO event, MethodCallback<CalendarEventDTO> callback); + } From 3143bd187b9973ef94862eb07e8934252938bff1 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 5 Mar 2024 18:59:41 +0100 Subject: [PATCH 214/228] Fix code report --- .../mobile/client/apps/tasks/TasksPage.java | 157 ------------------ 1 file changed, 157 deletions(-) delete mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java deleted file mode 100644 index a52e2d936..000000000 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/TasksPage.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (C) 2000 - 2022 Silverpeas - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * As a special exception to the terms and conditions of version 3.0 of - * the GPL, you may redistribute this Program in connection with Free/Libre - * Open Source Software ("FLOSS") applications as described in Silverpeas's - * FLOSS exception. You should have received a copy of the text describing - * the FLOSS exception, and it is also available here: - * "https://www.silverpeas.org/legal/floss_exception.html" - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package org.silverpeas.mobile.client.apps.tasks; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.HTMLPanel; -import org.silverpeas.mobile.client.apps.tasks.events.app.TasksDeleteEvent; -import org.silverpeas.mobile.client.apps.tasks.events.app.TasksLoadEvent; -import org.silverpeas.mobile.client.apps.tasks.events.pages.AbstractTasksPagesEvent; -import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskCreatedEvent; -import org.silverpeas.mobile.client.apps.tasks.events.pages.TaskUpdatedEvent; -import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksLoadedEvent; -import org.silverpeas.mobile.client.apps.tasks.events.pages.TasksPagesEventHandler; -import org.silverpeas.mobile.client.apps.tasks.pages.widgets.TaskItem; -import org.silverpeas.mobile.client.apps.tasks.resources.TasksMessages; -import org.silverpeas.mobile.client.common.EventBus; -import org.silverpeas.mobile.client.common.Notification; -import org.silverpeas.mobile.client.components.PopinConfirmation; -import org.silverpeas.mobile.client.components.UnorderedList; -import org.silverpeas.mobile.client.components.base.PageContent; -import org.silverpeas.mobile.client.components.base.widgets.DeleteButton; -import org.silverpeas.mobile.shared.dto.TaskDTO; - -import java.util.ArrayList; -import java.util.Iterator; - -/** - * @author: svu - */ -public class TasksPage extends PageContent implements TasksPagesEventHandler { - - interface TasksPageUiBinder extends UiBinder<HTMLPanel, TasksPage> { } - private static TasksPageUiBinder uiBinder = GWT.create(TasksPageUiBinder.class); - private AddTaskButton buttonCreate = new AddTaskButton(); - - private DeleteButton buttonDelete = new DeleteButton(); - @UiField HTMLPanel container; - @UiField - UnorderedList list; - - private TasksMessages msg = GWT.create(TasksMessages .class); - - public TasksPage() { - initWidget(uiBinder.createAndBindUi(this)); - list.getElement().setId("tasks"); - EventBus.getInstance().fireEvent(new TasksLoadEvent()); - EventBus.getInstance().addHandler(AbstractTasksPagesEvent.TYPE, this); - buttonDelete.setId("delete-task"); - } - - @Override - public void onTaskLoad(final TasksLoadedEvent event) { - Notification.activityStop(); - list.clear(); - clearActions(); - addActionShortcut(buttonCreate); - Iterator<TaskDTO> i = event.getTasks().iterator(); - while (i.hasNext()) { - TaskDTO task = i.next(); - if (task != null) { - TaskItem item = new TaskItem(); - item.setParent(this); - item.setData(task); - list.add(item); - } - } - } - - @Override - public void onTaskCreated(final TaskCreatedEvent taskCreatedEvent) { - TaskItem item = new TaskItem(); - item.setParent(this); - item.setData(taskCreatedEvent.getTask()); - list.add(item); - } - - @Override - public void onTaskUpdated(TaskUpdatedEvent taskUpdatedEvent) { - int i = 0; - while (i < list.getWidgetCount()) { - if (list.getWidget(i) instanceof TaskItem) { - TaskItem t = (TaskItem) list.getWidget(i); - if (t.getData().getId() == taskUpdatedEvent.getTask().getId()) { - list.remove(t); - TaskItem item = new TaskItem(); - item.setData(taskUpdatedEvent.getTask()); - list.add(item); - break; - } - } - i++; - } - } - - @Override - public void stop() { - super.stop(); - EventBus.getInstance().removeHandler(AbstractTasksPagesEvent.TYPE, this); - } - - private void deleteSelectedTasks() { - PopinConfirmation popin = new PopinConfirmation(msg.deleteConfirmation()); - popin.setYesCallback(new Command() { - @Override - public void execute() { - ArrayList<TaskDTO> selection = new ArrayList<>(); - for (int i = 0; i < list.getCount(); i++) { - TaskItem item = (TaskItem) list.getWidget(i); - if (item.isSelected()) { - selection.add(item.getData()); - } - } - EventBus.getInstance().fireEvent(new TasksDeleteEvent(selection)); - } - }); - popin.show(); - } - - @Override - public void setSelectionMode(boolean selectionMode) { - super.setSelectionMode(selectionMode); - - if (selectionMode) { - clearActions(); - buttonDelete.setCallback(new Command() {@Override public void execute() {deleteSelectedTasks();}}); - addActionShortcut(buttonDelete); - } else { - clearActions(); - addActionShortcut(buttonCreate); - } - } -} \ No newline at end of file From 40adb3bdb4d8638ed3790b28eea315a56c891274 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 6 Mar 2024 10:28:48 +0100 Subject: [PATCH 215/228] Fix Bug #14047 --- .../client/apps/documents/pages/PublicationPage.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index db8628b64..e7db4704c 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -111,14 +111,14 @@ public class PublicationPage extends PageContent @Override public void onSwipeEnd(SwipeEndEvent event) { if (!isVisible()) return; - String direction = "left"; + String direction = ""; if (event.getDirection() == SwipeEvent.DIRECTION.RIGHT_TO_LEFT) { // next direction = "right"; - } else if (event.getDirection() == SwipeEvent.DIRECTION.LEFT_TO_RIGHT) { + } /*else if (event.getDirection() == SwipeEvent.DIRECTION.LEFT_TO_RIGHT) { // previous direction = "left"; - } + }*/ if (!direction.isEmpty()) { EventBus.getInstance().fireEvent(new DocumentsNextPublicationEvent(publication, direction)); } @@ -169,6 +169,7 @@ public void setPublicationId(String id, String type) { @Override public void onLoadedPublication(PublicationLoadedEvent event) { + if (!isVisible()) return; Notification.activityStop(); attachments.clear(); setCanImport(event.isCanImport()); @@ -212,6 +213,7 @@ public void execute() { @Override public void onLoadedPublicationAttachments(final PublicationAttachmentsLoadedEvent event) { + if (!isVisible()) return; for (SimpleDocumentDTO attachment : event.getAttachments()) { if (!publication.getNotAllowedDownloads().isEmpty()) { attachment.setDownloadable(true); From 073bbaeb4959412639d02b1c5216a27478dfd2bf Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 6 Mar 2024 11:52:28 +0100 Subject: [PATCH 216/228] Feature #14040 --- .../mobile/client/apps/agenda/AgendaApp.java | 12 +---- .../pages/AbstractEditEventPagesEvent.java | 44 +++++++++++++++++++ .../pages/EditEventPagesEventHandler.java | 32 ++++++++++++++ .../agenda/events/pages/EventSavedEvent.java | 38 ++++++++++++++++ .../client/apps/agenda/pages/AgendaPage.java | 25 +++++++---- .../apps/agenda/pages/EditEventPage.java | 42 +++++++----------- .../apps/agenda/pages/widgets/EventItem.java | 1 - 7 files changed, 147 insertions(+), 47 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/AbstractEditEventPagesEvent.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EditEventPagesEventHandler.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EventSavedEvent.java diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java index 9747e71c1..27709beec 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/AgendaApp.java @@ -26,20 +26,12 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.DateTimeFormat; -import com.google.gwt.user.client.Window; import com.google.gwt.user.datepicker.client.CalendarUtil; import org.fusesource.restygwt.client.Method; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.apps.agenda.events.TimeRange; import org.silverpeas.mobile.client.apps.agenda.events.app.*; -import org.silverpeas.mobile.client.apps.agenda.events.pages.AbstractAgendaPagesEvent; -import org.silverpeas.mobile.client.apps.agenda.events.pages.AgendaPagesEventHandler; -import org.silverpeas.mobile.client.apps.agenda.events.pages.AttachmentsLoadedEvent; -import org.silverpeas.mobile.client.apps.agenda.events.pages.CalendarLoadedEvent; -import org.silverpeas.mobile.client.apps.agenda.events.pages.ParticipationUpdatedEvent; -import org.silverpeas.mobile.client.apps.agenda.events.pages.ReminderAddedEvent; -import org.silverpeas.mobile.client.apps.agenda.events.pages.ReminderDeletedEvent; -import org.silverpeas.mobile.client.apps.agenda.events.pages.RemindersLoadedEvent; +import org.silverpeas.mobile.client.apps.agenda.events.pages.*; import org.silverpeas.mobile.client.apps.agenda.pages.AgendaPage; import org.silverpeas.mobile.client.apps.agenda.pages.EventPage; import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages; @@ -445,7 +437,7 @@ public void attempt() { @Override public void onSuccess(Method method, CalendarEventDTO event) { super.onSuccess(method, event); - //TODO + EventBus.getInstance().fireEvent(new EventSavedEvent()); } }; action.attempt(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/AbstractEditEventPagesEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/AbstractEditEventPagesEvent.java new file mode 100644 index 000000000..0157c4b01 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/AbstractEditEventPagesEvent.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.agenda.events.pages; + +import com.google.gwt.event.shared.GwtEvent; + +public abstract class AbstractEditEventPagesEvent extends GwtEvent<EditEventPagesEventHandler> { + + public static Type<EditEventPagesEventHandler> TYPE = new Type<EditEventPagesEventHandler>(); + + public AbstractEditEventPagesEvent() { + } + + public static Type<EditEventPagesEventHandler> getTYPE() { + return TYPE; + } + + @Override + public Type<EditEventPagesEventHandler> getAssociatedType() { + return TYPE; + } +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EditEventPagesEventHandler.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EditEventPagesEventHandler.java new file mode 100644 index 000000000..cc8918ede --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EditEventPagesEventHandler.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.agenda.events.pages; + +import com.google.gwt.event.shared.EventHandler; + +public interface EditEventPagesEventHandler extends EventHandler { + void onEventSaved(EventSavedEvent event); + +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EventSavedEvent.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EventSavedEvent.java new file mode 100644 index 000000000..a566bc059 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/events/pages/EventSavedEvent.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.apps.agenda.events.pages; + +public class EventSavedEvent extends AbstractEditEventPagesEvent { + + public EventSavedEvent(){ + super(); + } + + @Override + protected void dispatch(EditEventPagesEventHandler handler) { + handler.onEventSaved(this); + } + +} diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java index e6c75b4c2..595a09367 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/AgendaPage.java @@ -33,7 +33,6 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.ListBox; @@ -115,9 +114,11 @@ public void execute() { EditEventPage edit = new EditEventPage(); edit.setData(getApp().getApplicationInstance(), calendars); edit.setAllowedUsersAndGroups(getAllowedUsersAndGroups()); + edit.setCurrentTimeRange(currentTimeRange); edit.show(); } }); + buttonCreate.setId("create-event"); } public void setCalendars(final List<CalendarDTO> cals) { @@ -172,10 +173,13 @@ public void onCalendarEventsLoaded(final CalendarLoadedEvent event) { int endYear = DateUtil.getYear(endDate); for (GroupItem groupItem : groups) { if ((groupItem.getNumber() >= startWeek && groupItem.getNumber() <= endWeek) || (groupItem.getNumber() >= startWeek && endYear > startYear)) { - EventItem item = new EventItem(); - item.showCalendarName(isMultiCalendar()); - item.setData(event.getInstance(), dto, getCalendar(dto.getCalendarId())); - groupItem.addEvent(item); + CalendarDTO cal = getCalendar(dto.getCalendarId()); + if (cal != null) { + EventItem item = new EventItem(); + item.showCalendarName(isMultiCalendar()); + item.setData(event.getInstance(), dto, cal); + groupItem.addEvent(item); + } } } } @@ -216,10 +220,13 @@ public void onCalendarEventsLoaded(final CalendarLoadedEvent event) { for (GroupItem groupItem : groups) { if ((groupItem.getNumber() >= startMonth && groupItem.getNumber() <= endMonth) && groupItem.getYear() == startYear && groupItem.getYear() == endYear || (groupItem.getNumber() >= startMonth && endYear > startYear)) { - EventItem item = new EventItem(); - item.showCalendarName(isMultiCalendar()); - item.setData(event.getInstance(), dto, getCalendar(dto.getCalendarId())); - groupItem.addEvent(item); + CalendarDTO cal = getCalendar(dto.getCalendarId()); + if (cal != null) { + EventItem item = new EventItem(); + item.showCalendarName(isMultiCalendar()); + item.setData(event.getInstance(), dto, cal); + groupItem.addEvent(item); + } } } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java index 9ddf4ba04..619c73135 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java @@ -34,6 +34,8 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.*; +import org.silverpeas.mobile.client.apps.agenda.events.TimeRange; +import org.silverpeas.mobile.client.apps.agenda.events.app.CalendarLoadEvent; import org.silverpeas.mobile.client.apps.agenda.events.app.EventCreateEvent; import org.silverpeas.mobile.client.apps.agenda.events.pages.*; import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages; @@ -58,7 +60,7 @@ /** * @author svu */ -public class EditEventPage extends PageContent implements EventPagesEventHandler, UserSelectionComponentEventHandler { +public class EditEventPage extends PageContent implements EditEventPagesEventHandler, UserSelectionComponentEventHandler { private static EditEventPageUiBinder uiBinder = GWT.create(EditEventPageUiBinder.class); private ApplicationResources resources = GWT.create(ApplicationResources.class); @@ -92,10 +94,16 @@ public class EditEventPage extends PageContent implements EventPagesEventHandler private List<BaseDTO> selectedUsersAndGroups; + private TimeRange currentTimeRange; + public void setAllowedUsersAndGroups(List<BaseDTO> allowedUsersAndGroups) { this.allowedUsersAndGroups = allowedUsersAndGroups; } + public void setCurrentTimeRange(TimeRange currentTimeRange) { + this.currentTimeRange = currentTimeRange; + } + interface EditEventPageUiBinder extends UiBinder<Widget, EditEventPage> { } @@ -112,7 +120,7 @@ public EditEventPage() { notimportant.setValue(true); publique.setValue(true); submit.getElement().addClassName("formIncomplete"); - EventBus.getInstance().addHandler(AbstractEventPagesEvent.TYPE, this); + EventBus.getInstance().addHandler(AbstractEditEventPagesEvent.TYPE, this); EventBus.getInstance().addHandler(AbstractUserSelectionComponentEvent.TYPE, this); allDay.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override @@ -186,7 +194,6 @@ protected void save(ClickEvent event) { dto.setEventType("CalendarEvent"); dto.setOccurrenceType("CalendarEventOccurrence"); dto.setEventId("volatile-" + new Date().getTime()); - CalendarDTO calendarDTO = new CalendarDTO(); calendarDTO.setId(calendars.getSelectedValue()); dto.setCalendar(calendarDTO); @@ -215,7 +222,6 @@ protected void save(ClickEvent event) { dto.setAttendees(getAttendees()); EventCreateEvent ev = new EventCreateEvent(dto); EventBus.getInstance().fireEvent(ev); - back(); //TODO : update parent page } } @@ -240,8 +246,6 @@ private List<CalendarEventAttendeeDTO> getAttendees() { protected void onUserSelection(ClickEvent event) { UserSelectionPage page = new UserSelectionPage(); if (selectedUsersAndGroups != null) { - - List<String> ids = new ArrayList<>(); for (BaseDTO sel : selectedUsersAndGroups) { if (sel instanceof UserDTO) ids.add(sel.getId()); @@ -255,11 +259,9 @@ protected void onUserSelection(ClickEvent event) { @Override public void onUsersAndGroupSelected(UsersAndGroupsSelectedEvent event) { - this.selectedUsersAndGroups = event.getUsersAndGroupsSelected(); String selectionNames = ""; for (BaseDTO sel : selectedUsersAndGroups) { - if (sel instanceof UserDTO) { selectionNames += ((UserDTO) sel).getFirstName() + " " + ((UserDTO) sel).getLastName() + " , "; } else if (sel instanceof GroupDTO) { @@ -267,33 +269,19 @@ public void onUsersAndGroupSelected(UsersAndGroupsSelectedEvent event) { } } selectionNames = selectionNames.substring(0, selectionNames.length() - 2); - participantsSelected.setInnerText(selectionNames); - } @Override - public void onRemindersLoaded(final RemindersLoadedEvent event) { } - - @Override - public void onRemindersDeleted(final ReminderDeletedEvent event) {} - - @Override - public void onAttachmentLoaded(final AttachmentsLoadedEvent event) {} - - @Override - public void onRemindersAdding(final RemindersAddingEvent remindersAddingEvent) {} - - @Override - public void onReminderAdded(final ReminderAddedEvent event) {} - - @Override - public void onParticipationUpdated(final ParticipationUpdatedEvent event) {} + public void onEventSaved(EventSavedEvent event) { + back(); + EventBus.getInstance().fireEvent(new CalendarLoadEvent(null, currentTimeRange)); + } @Override public void stop() { EventBus.getInstance().removeHandler(AbstractUserSelectionComponentEvent.TYPE, this); - EventBus.getInstance().removeHandler(AbstractEventPagesEvent.TYPE, this); + EventBus.getInstance().removeHandler(AbstractEditEventPagesEvent.TYPE, this); super.stop(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/EventItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/EventItem.java index 260d0fa19..b004f77d2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/EventItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/widgets/EventItem.java @@ -34,7 +34,6 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Widget; import org.silverpeas.mobile.client.apps.agenda.pages.EventPage; import org.silverpeas.mobile.client.apps.agenda.resources.AgendaMessages; From 6347abf9db80f78767098fb163e6ea66e33b5d93 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 7 Mar 2024 17:02:27 +0100 Subject: [PATCH 217/228] Feature #14046 --- mobile-configuration/pom.xml | 18 ++++++- .../mobile/mobileSettings.properties | 3 ++ .../org/silverpeas/mobile/client/SpMobil.java | 23 +++++++-- .../mobile/client/apps/config/ConfigApp.java | 47 +++++++++++++++++++ .../common/AuthentificationManager.java | 24 +++++----- .../common/storage/LocalStorageHelper.java | 25 +++++++--- .../client/components/base/PageHeader.java | 1 - 7 files changed, 115 insertions(+), 26 deletions(-) diff --git a/mobile-configuration/pom.xml b/mobile-configuration/pom.xml index 6134753ed..4b56b0924 100644 --- a/mobile-configuration/pom.xml +++ b/mobile-configuration/pom.xml @@ -23,14 +23,19 @@ --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.silverpeas.components</groupId> <artifactId>mobile</artifactId> - <version>6.4-JR-SNAPSHOT</version> + <version>6.4-SNAPSHOT</version> </parent> + <properties> + <timestamp>${maven.build.timestamp}</timestamp> + <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format> + </properties> + <groupId>org.silverpeas.components.mobile</groupId> <artifactId>silverpeas-mobile-configuration</artifactId> <packaging>jar</packaging> @@ -40,8 +45,17 @@ <resources> <resource> <directory>src/main/config</directory> + <filtering>true</filtering> </resource> </resources> + + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + </plugin> + </plugins> + </build> </project> diff --git a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties index c7c84ee5a..bc4c4014b 100644 --- a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties +++ b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties @@ -1,3 +1,6 @@ +version=${project.version} +build.date=${timestamp} + # css skin file url styleSheet= diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index 1e226d9e9..c595fa34d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -33,7 +33,6 @@ import com.google.gwt.dom.client.Style; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; -import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Cookies; import com.google.gwt.user.client.Window; @@ -99,7 +98,6 @@ import org.silverpeas.mobile.shared.dto.configuration.Config; import org.silverpeas.mobile.shared.dto.configuration.IConfig; import org.silverpeas.mobile.shared.dto.navigation.ApplicationInstanceDTO; -import org.silverpeas.mobile.shared.dto.navigation.SpaceDTO; import org.silverpeas.mobile.shared.dto.search.ResultDTO; import org.silverpeas.mobile.shared.exceptions.AuthenticationException; @@ -150,6 +148,8 @@ public static void setUser(final DetailUserDTO user) { */ public void onModuleLoad() { exportNativeFunctions(); + checkVersion(); + // init connexion supervision NetworkHelper.getInstance(); @@ -234,7 +234,18 @@ public void onResize(final ResizeEvent resizeEvent) { apps.add(new ResourcesManagerApp()); } + private static void checkVersion() { + String buildDate = ResourcesManager.getParam("build.date"); + String lastBuild = LocalStorageHelper.getInstance().load("build.date"); + if (lastBuild != null && !buildDate.equals(lastBuild)) { + // clear cache + AuthentificationManager.getInstance().clearCache(); + } + if (lastBuild == null || lastBuild.isEmpty()) LocalStorageHelper.getInstance().storeBuildDate(); + } + public void displayFirstPage() { + checkVersion(); boolean displayCookiesInformation = Boolean.parseBoolean(ResourcesManager.getParam("displayCookiesInformation")); String cookie = Cookies.getCookie("accept_cookies"); if (displayCookiesInformation && (cookie == null || cookie.isEmpty())) { @@ -278,7 +289,7 @@ private static void login(final FullUserDTO user, final String password, Command } public static void displayMainPage() { - + SpMobil.getMainPage().showFooter(); if (!Window.Location.getHref().contains("?locale=") && !user.getLanguage().equalsIgnoreCase("fr")) { Window.Location.replace(Window.Location.getHref() + "?locale=" + user.getLanguage()); @@ -383,7 +394,7 @@ public void onSuccess(final Method method, final DetailUserDTO detailUserDTO) { super.onSuccess(method, detailUserDTO); setUser(detailUserDTO); setUserProfile(UserProfileDTO.getBean( - LocalStorageHelper.load(AuthentificationManager.USER_PROFIL, IUserProfile.class))); + LocalStorageHelper.getInstance().load(AuthentificationManager.USER_PROFIL, IUserProfile.class))); if (getUserProfile() == null) { UserProfileDTO p = new UserProfileDTO(); p.setFullName(detailUserDTO.getFirstName() + " " + detailUserDTO.getLastName()); @@ -433,6 +444,7 @@ public static boolean isSSO() { } private void tryToRelogin(final Command attempt) { + checkVersion(); FullUserDTO user = AuthentificationManager.getInstance().loadUser(); if (user != null) { String password = AuthentificationManager.getInstance().decryptPassword(user.getPassword()); @@ -492,6 +504,7 @@ public void onSuccess(final Method method, final Boolean desktopMode) { } public static void displayLoginPage(AuthenticationException error) { + checkVersion(); ConnexionPage connexionPage = new ConnexionPage(); connexionPage.setAuthenticateError(error); RootPanel.get().clear(); @@ -568,7 +581,7 @@ public static void destroyMainPage() { } public static Config getConfiguration() { - AutoBean<IConfig> conf = LocalStorageHelper.load("config", IConfig.class); + AutoBean<IConfig> conf = LocalStorageHelper.getInstance().load("config", IConfig.class); Config config = null; if (conf == null) { config = Config.getDefaultConfig(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/ConfigApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/ConfigApp.java index fba938c3a..b29b8658a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/ConfigApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/ConfigApp.java @@ -82,4 +82,51 @@ public void loadConfig(LoadConfigEvent event) { public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { } + + public static class ConfigApp extends App implements ConfigAppEventHandler { + + private static ConfigApp instance = null; + + public ConfigApp() { + super(); + EventBus.getInstance().addHandler(AbstractConfigAppEvent.TYPE, this); + } + + public void start() { + setMainPage(new ConfigPage()); + super.start(); + } + + + @Override + public void stop() { + EventBus.getInstance().removeHandler(AbstractConfigAppEvent.TYPE, this); + super.stop(); + } + + + public static ConfigApp getInstance() { + if (instance == null) { + instance = new ConfigApp(); + } + return instance; + } + + @Override + public void updateConfig(UpdateConfigEvent event) { + Config conf = event.getConfig(); + LocalStorageHelper.getInstance().store("config", conf.getAutoBean()); + } + + @Override + public void loadConfig(LoadConfigEvent event) { + Config conf = SpMobil.getConfiguration(); + EventBus.getInstance().fireEvent(new ConfigLoadedEvent(conf)); + } + + @Override + public void appInstanceChanged(final NavigationAppInstanceChangedEvent event) { + + } + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java index 3e3895d57..7a83af672 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/AuthentificationManager.java @@ -75,11 +75,11 @@ public static AuthentificationManager getInstance() { } public void addHeader(String key, String value) { - LocalStorageHelper.store(key, value); + LocalStorageHelper.getInstance().store(key, value); } public String getHeader(String key) { - return LocalStorageHelper.load(key); + return LocalStorageHelper.getInstance().load(key); } public void storeUser(final DetailUserDTO user, final UserProfileDTO profil, String login, @@ -96,20 +96,20 @@ public void storeUser(final DetailUserDTO user, final UserProfileDTO profil, Str String maintainSession = ResourcesManager.getParam("maintain.session"); if (maintainSession.equalsIgnoreCase("true")) { - LocalStorageHelper.store(USER_CONNECTED_KEY, u.getAutoBean()); - LocalStorageHelper.store(USER_PROFIL, profil.getAutoBean()); + LocalStorageHelper.getInstance().store(USER_CONNECTED_KEY, u.getAutoBean()); + LocalStorageHelper.getInstance().store(USER_PROFIL, profil.getAutoBean()); } } public void updateAvatarInCache(final String avatarData) { SpMobil.getUser().setAvatar(avatarData); SpMobil.getUserProfile().setAvatar(avatarData); - FullUserDTO user = FullUserDTO.getBean(LocalStorageHelper.load(USER_CONNECTED_KEY, IFullUser.class)); + FullUserDTO user = FullUserDTO.getBean(LocalStorageHelper.getInstance().load(USER_CONNECTED_KEY, IFullUser.class)); user.setAvatar(avatarData); String maintainSession = ResourcesManager.getParam("maintain.session"); if (maintainSession.equalsIgnoreCase("true")) { - LocalStorageHelper.store(USER_CONNECTED_KEY, user.getAutoBean()); - LocalStorageHelper.store(USER_PROFIL, SpMobil.getUserProfile().getAutoBean()); + LocalStorageHelper.getInstance().store(USER_CONNECTED_KEY, user.getAutoBean()); + LocalStorageHelper.getInstance().store(USER_PROFIL, SpMobil.getUserProfile().getAutoBean()); } } @@ -117,14 +117,14 @@ public void updateAvatarInCache(final String avatarData) { * Clean data in local storage. */ public void clearLocalStorage() { - LocalStorageHelper.clear(); + LocalStorageHelper.getInstance().clear(); } public FullUserDTO loadUser() { - FullUserDTO user = FullUserDTO.getBean(LocalStorageHelper.load(USER_CONNECTED_KEY, IFullUser.class)); + FullUserDTO user = FullUserDTO.getBean(LocalStorageHelper.getInstance().load(USER_CONNECTED_KEY, IFullUser.class)); SpMobil.setUser(user); UserProfileDTO profil = - UserProfileDTO.getBean(LocalStorageHelper.load(USER_PROFIL, IUserProfile.class)); + UserProfileDTO.getBean(LocalStorageHelper.getInstance().load(USER_PROFIL, IUserProfile.class)); SpMobil.setUserProfile(profil); return user; } @@ -309,7 +309,7 @@ public void onResponseReceived(final Request request, final Response response) { } @Override public void onError(final Request request, final Throwable throwable) { - + LocalStorageHelper.getInstance().storeBuildDate(); } }); } catch (RequestException e) { @@ -317,7 +317,7 @@ public void onError(final Request request, final Throwable throwable) { } } - private void clearCache() { + public void clearCache() { // clear app cache MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<Void>() { @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/storage/LocalStorageHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/storage/LocalStorageHelper.java index 0b8be9451..9274cbc81 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/storage/LocalStorageHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/storage/LocalStorageHelper.java @@ -28,6 +28,7 @@ import com.google.gwt.storage.client.Storage; import com.google.web.bindery.autobean.shared.AutoBean; import com.google.web.bindery.autobean.shared.AutoBeanCodex; +import org.silverpeas.mobile.client.common.resources.ResourcesManager; /** @@ -36,9 +37,16 @@ public class LocalStorageHelper { public static AutoBeanFactory factory = GWT.create(AutoBeanFactory.class); + public static LocalStorageHelper instance; + public static LocalStorageHelper getInstance() { + if (instance == null) { + instance = new LocalStorageHelper(); + } + return instance; + } - public static <T> void store(String key, AutoBean<T> autobean) { + public <T> void store(String key, AutoBean<T> autobean) { Storage storage = Storage.getLocalStorageIfSupported(); if (storage != null) { @@ -51,7 +59,7 @@ public static <T> void store(String key, AutoBean<T> autobean) { } } - public static void store(String key, String data) { + public void store(String key, String data) { Storage storage = Storage.getLocalStorageIfSupported(); if (storage != null) { try { @@ -60,7 +68,7 @@ public static void store(String key, String data) { } } - public static String load(String key) { + public String load(String key) { Storage storage = Storage.getLocalStorageIfSupported(); if (storage != null) { String dataItem = storage.getItem(key); @@ -68,7 +76,7 @@ public static String load(String key) { } return null; } - public static <T> AutoBean<T> load(String key, Class<T> beanClass) { + public <T> AutoBean<T> load(String key, Class<T> beanClass) { Storage storage = Storage.getLocalStorageIfSupported(); if (storage != null) { String dataItem = storage.getItem(key); @@ -85,15 +93,20 @@ public static <T> AutoBean<T> load(String key, Class<T> beanClass) { return null; } - public static void clear() { + public void clear() { Storage storage = Storage.getLocalStorageIfSupported(); if (storage != null) storage.clear(); } - public static void remove(String key) { + public void remove(String key) { Storage storage = Storage.getLocalStorageIfSupported(); if (storage != null) { storage.removeItem(key); } } + + public void storeBuildDate() { + String buildDate = ResourcesManager.getParam("build.date"); + store("build.date", buildDate); + } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java index d48c3a6bd..1ea01f5e5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java @@ -30,7 +30,6 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.*; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.common.navigation.PageHistory; From b9585afa65c59c0eb6d939188381b9b2fc55cdc9 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 7 Mar 2024 18:03:56 +0100 Subject: [PATCH 218/228] Fix ghost menu --- .../mobile/client/components/base/ActionsMenu.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java index d246f9a63..cdbcfacd4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/ActionsMenu.java @@ -25,14 +25,11 @@ package org.silverpeas.mobile.client.components.base; import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.Element; -import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; @@ -74,11 +71,10 @@ protected void showActions(ClickEvent event) { if (listActions.getElement().getClassName().equals("closed-qvf-menu")) { listActions.getElement().addClassName("open-qvf-menu"); listActions.getElement().removeClassName("closed-qvf-menu"); + enableAllItem(true); } else { - listActions.getElement().removeClassName("open-qvf-menu"); - listActions.getElement().addClassName("closed-qvf-menu"); + close(); } - enableAllItem(true); } public static void close(Element action) { @@ -108,6 +104,7 @@ public void addAction(ActionItem action) { if (act.getId().equals(action.getId())) return; } listActions.add(action); + action.setVisible(false); show(); } From 464c303934068ab9851a9920b0e684c31f2bc114 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 8 Mar 2024 16:43:38 +0100 Subject: [PATCH 219/228] enhance cache management --- .../mobile/client/pages/connexion/ConnexionPage.java | 7 ++++++- .../mobile/client/pages/connexion/ConnexionPage.ui.xml | 1 + .../mobile/client/resources/ApplicationMessages.java | 5 ++++- .../client/resources/ApplicationMessages_en.properties | 6 ++++-- .../client/resources/ApplicationMessages_fr.properties | 6 ++++-- .../main/java/org/silverpeas/mobile/public/spmobile.css | 9 +++++++++ 6 files changed, 28 insertions(+), 6 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java index d4a81fb4c..f31631326 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.java @@ -26,6 +26,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; +import com.google.gwt.dom.client.DivElement; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; @@ -69,6 +70,9 @@ public class ConnexionPage extends PageContent { @UiField InlineHTML labelTooglePasswordView; + @UiField + DivElement version; + public void setAuthenticateError(final AuthenticationException authenticateError) { if (authenticateError == null) { checkCredentials("init","init"); @@ -105,7 +109,8 @@ public ConnexionPage() { form.getElement().setId("formLogin"); form.getElement().setAttribute("autocomplete","off"); - + version.setId("version"); + version.setInnerText(msg.version() + " " + ResourcesManager.getVersion()); Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { @Override diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml index 78ac985a6..0a2d8c8d6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/pages/connexion/ConnexionPage.ui.xml @@ -61,6 +61,7 @@ <div id="copyright"> <ui:safehtml from="{msg.copyright}"/> </div> + <div ui:field="version"></div> </g:HTMLPanel> </g:FormPanel> </div> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java index 35c210e0b..f1d1b85f1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages.java @@ -52,7 +52,7 @@ public interface ApplicationMessages extends Messages { @DefaultMessage("Corriger") String correctBtnLabel(); - @DefaultMessage("© 2001-2023 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - Tous droits réservés") + @DefaultMessage("© 2001-2024 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - Tous droits réservés") SafeHtml copyright(); @DefaultMessage("Parcourir la plateforme") @@ -203,4 +203,7 @@ public interface ApplicationMessages extends Messages { @DefaultMessage("Autres favoris") String favoritesWithoutCategory(); + + @DefaultMessage("Version") + String version(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties index 5fe780552..aa125a752 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_en.properties @@ -31,7 +31,7 @@ confirmBtnLabel=Confirm cancelBtnLabel=Cancel correctBtnLabel=Correct -copyright=© 2001-2023 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - All rights reserved +copyright=© 2001-2024 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - All rights reserved infoTitle=Information ok=OK @@ -87,4 +87,6 @@ notfoundError=Ressource not found share=Share -favoritesWithoutCategory=Others favorites \ No newline at end of file +favoritesWithoutCategory=Others favorites + +version=Version \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties index 3eacdf2f2..2f3c417fe 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/resources/ApplicationMessages_fr.properties @@ -32,7 +32,7 @@ confirmBtnLabel=Confirmer cancelBtnLabel=Annuler correctBtnLabel=Corriger -copyright=© 2001-2023 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - Tous droits réservés +copyright=© 2001-2024 <a target='_blank' href='http://www.silverpeas.com'>Silverpeas</a> - Tous droits réservés infoTitle=Information ok=OK @@ -92,4 +92,6 @@ notfoundError=Ressource non trouv�e share=Partager -favoritesWithoutCategory=Autres favoris \ No newline at end of file +favoritesWithoutCategory=Autres favoris + +version=Version \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index 0e55cab0d..c77db066a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -1796,6 +1796,15 @@ textarea.ui-input-text { } #page-login #copyright { + bottom: 3em; + font-size: 0.8em; + left: 0; + position: fixed; + right: 0; + text-align: center; +} + +#page-login #version { bottom: 1em; font-size: 0.8em; left: 0; From 6118f5e019d4132537fc5d1be6fcbea71d920868 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Mon, 11 Mar 2024 17:13:11 +0100 Subject: [PATCH 220/228] Feature #14040 --- .../apps/agenda/pages/EditEventPage.java | 14 +++++------ .../apps/agenda/pages/EditEventPage.ui.xml | 24 +++++++++---------- .../apps/agenda/resources/AgendaMessages.java | 23 ++++++++++++++++++ .../resources/AgendaMessages.properties | 23 +++++++++++++++++- .../resources/AgendaMessages_en.properties | 23 +++++++++++++++++- .../resources/AgendaMessages_fr.properties | 23 +++++++++++++++++- 6 files changed, 108 insertions(+), 22 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java index 619c73135..3f59d10c9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.java @@ -112,8 +112,8 @@ public EditEventPage() { setPageTitle(msg.newtitleEvent()); initWidget(uiBinder.createAndBindUi(this)); container.getElement().setId("eventForm"); - title.getElement().setAttribute("placeholder", "Titre"); - description.getElement().setAttribute("placeholder", "Description"); + title.getElement().setAttribute("placeholder", msg.titleField()); + description.getElement().setAttribute("placeholder", msg.descriptionField()); description.getElement().setAttribute("rows", "6"); startDate.getElement().setAttribute("type", "date"); endDate.getElement().setAttribute("type", "date"); @@ -135,11 +135,11 @@ public void onValueChange(ValueChangeEvent<Boolean> valueChangeEvent) { } }); - frequency.addItem("Aucune", "NONE"); - frequency.addItem("Tous les jours", "DAY"); - frequency.addItem("Toutes les semaines", "WEEK"); - frequency.addItem("Tous les mois", "MONTH"); - frequency.addItem("Tous les ans", "YEAR"); + frequency.addItem(msg.frequencyNone(), "NONE"); + frequency.addItem(msg.frequencyDay(), "DAY"); + frequency.addItem(msg.frequencyWeek(), "WEEK"); + frequency.addItem(msg.frequencyMouth(), "MONTH"); + frequency.addItem(msg.frequencyYear(), "YEAR"); icon.setInnerHTML(resources.peoples().getText()); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml index 1ddfe3b37..10af8a2c4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/pages/EditEventPage.ui.xml @@ -33,41 +33,41 @@ <g:HTMLPanel ui:field="container" styleName="content ui-content ui-body-a"> <span class="calendars"> - <label>Calendrier :</label> + <label><ui:text from="{msg.calendarField}" /></label> <g:ListBox ui:field="calendars"></g:ListBox> </span> <g:TextBox ui:field="title" styleName="title"/> - <g:CheckBox ui:field="allDay" text="Toute la journée" styleName="allDay" value="true"/> + <g:CheckBox ui:field="allDay" text="{msg.allDay}" styleName="allDay" value="true"/> <span class="startDate"> - <label>Début: </label> + <label><ui:text from="{msg.startDate}" /></label> <g:TextBox ui:field="startDate" stylePrimaryName="formMandatoryField"/> </span> <span class="endDate"> - <label>Fin: </label> + <label><ui:text from="{msg.endDate}" /></label> <g:TextBox ui:field="endDate" stylePrimaryName="formMandatoryField"/> </span> <g:TextArea ui:field="description" styleName="description"/> <span class="priority"> - <label>Important :</label> - <g:RadioButton ui:field="important" name="priority">Oui</g:RadioButton> - <g:RadioButton ui:field="notimportant" name="priority">Non</g:RadioButton> + <label><ui:text from="{msg.importantField}" /></label> + <g:RadioButton ui:field="important" name="priority"><ui:text from="{msg.yes}" /></g:RadioButton> + <g:RadioButton ui:field="notimportant" name="priority"><ui:text from="{msg.no}" /></g:RadioButton> </span> <span class="visibility"> - <label>Visibilité :</label> - <g:RadioButton ui:field="publique" name="visibility">Publique</g:RadioButton> - <g:RadioButton ui:field="prive" name="visibility">Privé</g:RadioButton> + <label><ui:text from="{msg.visibilityField}" /></label> + <g:RadioButton ui:field="publique" name="visibility"><ui:text from="{msg.publicValue}" /></g:RadioButton> + <g:RadioButton ui:field="prive" name="visibility"><ui:text from="{msg.privateValue}" /></g:RadioButton> </span> <span class="frequency"> - <label>Récurrence :</label> + <label><ui:text from="{msg.frequencyField}" /></label> <g:ListBox ui:field="frequency"></g:ListBox> </span> <span class="participants"> - <label>Participants :</label> + <label><ui:text from="{msg.attendeesField}" /></label> <g:Anchor ui:field="selectionButton"> <div ui:field="icon"></div> <div ui:field="participantsSelected" class="selection"></div> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java index 48a1d8aee..e850517d2 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.java @@ -99,4 +99,27 @@ public interface AgendaMessages extends Messages { String create(); String newtitleEvent(); + + String calendarField(); + String allDay(); + + String startDate(); + String endDate(); + + String titleField(); + String descriptionField(); + String importantField(); + String visibilityField(); + String yes(); + String no(); + String publicValue(); + String privateValue(); + String frequencyField(); + String attendeesField(); + + String frequencyNone(); + String frequencyDay(); + String frequencyWeek(); + String frequencyMouth(); + String frequencyYear(); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties index 57c5d9ba9..d231d19f1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages.properties @@ -88,4 +88,25 @@ sunday=Dimanche noEvent=Pas d''événements à venir create=Créer -newtitleEvent= Nouvel événement \ No newline at end of file +newtitleEvent= Nouvel événement + +calendarField=Calendrier : +allDay=Toute la journée +startDate=Début: +endDate=Fin: +titleField=Titre +descriptionField=Description +importantField=Important : +visibilityField=Visibilité : +yes=Oui +no=Non +publicValue=Publique +privateValue=Privé +frequencyField=Récurrence : +attendeesField=Participants : + +frequencyNone=Aucune +frequencyDay=Tous les jours +frequencyWeek=Toutes les semaines +frequencyMouth=Tous les mois +frequencyYear=Tous les ans \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties index 9c40c64d4..ceb193128 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_en.properties @@ -88,4 +88,25 @@ sunday=Sunday noEvent=No upcoming events create=Create -newtitleEvent= New event \ No newline at end of file +newtitleEvent= New event + +calendarField=Calendar : +allDay= All day +startDate=Start: +endDate=End: +titleField=Title +descriptionField=Description +importantField=Important : +visibilityField=Visibilité : +yes=Yes +no=No +publicValue=Public +privateValue=Private +frequencyField=Frequency : +attendeesField=Attendees + +frequencyNone=None +frequencyDay=Every days +frequencyWeek=Every weeks +frequencyMouth=Every mouths +frequencyYear=Every years \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties index 57c5d9ba9..d231d19f1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/agenda/resources/AgendaMessages_fr.properties @@ -88,4 +88,25 @@ sunday=Dimanche noEvent=Pas d''événements à venir create=Créer -newtitleEvent= Nouvel événement \ No newline at end of file +newtitleEvent= Nouvel événement + +calendarField=Calendrier : +allDay=Toute la journée +startDate=Début: +endDate=Fin: +titleField=Titre +descriptionField=Description +importantField=Important : +visibilityField=Visibilité : +yes=Oui +no=Non +publicValue=Publique +privateValue=Privé +frequencyField=Récurrence : +attendeesField=Participants : + +frequencyNone=Aucune +frequencyDay=Tous les jours +frequencyWeek=Toutes les semaines +frequencyMouth=Tous les mois +frequencyYear=Tous les ans \ No newline at end of file From 46e74575a2e44ec4bc88a26b35d7b6b4bc7e6c0e Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Tue, 12 Mar 2024 20:11:01 +0100 Subject: [PATCH 221/228] add filter configuration --- .../org/silverpeas/mobile/client/SpMobil.java | 14 ++++ .../client/apps/config/pages/ConfigPage.java | 46 +++++++++++++ .../apps/config/pages/ConfigPage.ui.xml | 9 +++ .../apps/config/resources/ConfigMessages.java | 6 ++ .../resources/ConfigMessages.properties | 6 ++ .../resources/ConfigMessages_en.properties | 8 ++- .../resources/ConfigMessages_fr.properties | 8 ++- .../org/silverpeas/mobile/public/spmobile.css | 5 ++ .../shared/dto/configuration/Config.java | 69 +++++++++++++++++++ .../shared/dto/configuration/IConfig.java | 15 ++++ 10 files changed, 184 insertions(+), 2 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java index c595fa34d..a480e82a5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/SpMobil.java @@ -154,6 +154,7 @@ public void onModuleLoad() { NetworkHelper.getInstance(); setFontSize(getConfiguration().getFontSize()); + setFilter(getConfiguration()); instance = this; shortcutAppId = Window.Location.getParameter("shortcutAppId"); @@ -609,4 +610,17 @@ public static native void exportNativeFunctions()/*-{ public static void setFontSize(int value) { Document.get().getBody().setAttribute("style", "font-size:"+value+"pt;"); } + + public static void setFilter(Config configuration) { + if (configuration.isStandard()) { + Document.get().getElementsByTagName("html").getItem(0).setAttribute("style",""); + } else if (configuration.isGrayscale()) { + Document.get().getElementsByTagName("html").getItem(0).setAttribute("style","filter:grayscale(1);"); + } else if (configuration.isSepia()) { + Document.get().getElementsByTagName("html").getItem(0).setAttribute("style","filter:sepia(1);"); + } else if (configuration.isInverse()) { + Document.get().getElementsByTagName("html").getItem(0).setAttribute("style","filter:invert(1);"); + } + } + } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java index b6e746df0..0237bd6dc 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java @@ -25,13 +25,18 @@ package org.silverpeas.mobile.client.apps.config.pages; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.InputElement; +import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.RadioButton; import org.silverpeas.mobile.client.SpMobil; import org.silverpeas.mobile.client.apps.config.events.app.LoadConfigEvent; import org.silverpeas.mobile.client.apps.config.events.app.UpdateConfigEvent; @@ -41,8 +46,11 @@ import org.silverpeas.mobile.client.apps.config.resources.ConfigMessages; import org.silverpeas.mobile.client.common.EventBus; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.userselection.widgets.events.ChangeEvent; import org.silverpeas.mobile.shared.dto.configuration.Config; +import javax.print.Doc; + /** * @author: svu */ @@ -59,6 +67,9 @@ public class ConfigPage extends PageContent implements ConfigPagesEventHandler { @UiField CheckBox favoritesDisplay, shortCutsDisplay, shortCutsToolsDisplay; + @UiField + RadioButton standard, grayscale, sepia, inverse; + @UiField InputElement fontSize; @@ -104,6 +115,33 @@ public void stop() { EventBus.getInstance().removeHandler(AbstractConfigPagesEvent.TYPE, this); } + @UiHandler("standard") + protected void standard(ClickEvent event) { + Config c = new Config(); + c.setStandard(true); + SpMobil.setFilter(c); + } + @UiHandler("grayscale") + protected void grayscale(ClickEvent event) { + Config c = new Config(); + c.setGrayscale(true); + SpMobil.setFilter(c); + } + + @UiHandler("sepia") + protected void sepia(ClickEvent event) { + Config c = new Config(); + c.setSepia(true); + SpMobil.setFilter(c); + } + + @UiHandler("inverse") + protected void inverse(ClickEvent event) { + Config c = new Config(); + c.setInverse(true); + SpMobil.setFilter(c); + } + @Override public void onConfigLoaded(ConfigLoadedEvent event) { config = event.getConfig(); @@ -113,6 +151,10 @@ public void onConfigLoaded(ConfigLoadedEvent event) { lastEventsDisplay.setValue(config.isLastEventsDisplay()); shortCutsDisplay.setValue(config.isShortCutsDisplay()); shortCutsToolsDisplay.setValue(config.isShortCutsToolsDisplay()); + standard.setValue(config.isStandard()); + grayscale.setValue(config.isGrayscale()); + sepia.setValue(config.isSepia()); + inverse.setValue(config.isInverse()); } private void save() { @@ -123,6 +165,10 @@ private void save() { config.setShortCutsDisplay(shortCutsDisplay.getValue()); config.setShortCutsToolsDisplay(shortCutsToolsDisplay.getValue()); config.setFontSize(Integer.parseInt(fontSize.getAttribute("value"))); + config.setStandard(standard.getValue()); + config.setGrayscale(grayscale.getValue()); + config.setSepia(sepia.getValue()); + config.setInverse(inverse.getValue()); EventBus.getInstance().fireEvent(new UpdateConfigEvent(config)); } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml index a885831bf..19997fc06 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.ui.xml @@ -66,6 +66,15 @@ </ul> <h3 class="title-bloc-part ui-title"><ui:text from="{msg.fontSize}"/></h3> <input type="range" ui:field="fontSize" class="font-percent-size"></input> + + <h3 class="title-bloc-part ui-title"><ui:text from="{msg.filters}"/></h3> + <span class="filters"> + <g:RadioButton ui:field="standard" name="filters" stylePrimaryName="filter"><ui:text from="{msg.standard}"/></g:RadioButton> + <g:RadioButton ui:field="grayscale" name="filters" stylePrimaryName="filter"><ui:text from="{msg.grayscale}" /></g:RadioButton> + <g:RadioButton ui:field="sepia" name="filters" stylePrimaryName="filter"><ui:text from="{msg.sepia}" /></g:RadioButton> + <g:RadioButton ui:field="inverse" name="filters" stylePrimaryName="filter"><ui:text from="{msg.inverse}" /></g:RadioButton> + </span> + </g:HTMLPanel> </g:HTMLPanel> diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java index 6647fff42..e94ae9d61 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java @@ -38,4 +38,10 @@ public interface ConfigMessages extends Messages { String lastPublications(); String lastNews(); + String filters(); + String grayscale(); + String sepia(); + String inverse(); + String standard(); + } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties index a90b1b75b..f5c64fc3b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties @@ -30,3 +30,9 @@ favorites=Afficher les favoris events=Afficher les prochains événements lastPublications=Afficher les dernières publications lastNews=Afficher les dernières actualités + +filters=Filtres +grayscale=Niveau de gris +sepia=Sepia +inverse=Inversé +standard=Standard diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties index b0aa3dd19..21c6f7f70 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties @@ -29,4 +29,10 @@ shortcurts=Display shortcuts favorites=Display favorites events=Display last events lastPublications=Display last publications -lastNews=Display last news \ No newline at end of file +lastNews=Display last news + +filters=Filters +grayscale=Grayscales +sepia=Sepia +inverse=Inverse +standard=Standard \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties index 7fcf045fb..daca9892a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties @@ -29,4 +29,10 @@ shortcurts=Afficher les raccourcis favorites=Afficher les favoris events=Afficher les prochains événements lastPublications=Afficher les dernières publications -lastNews=Afficher les dernières actualités \ No newline at end of file +lastNews=Afficher les dernières actualités + +filters=Filtres +grayscale=Niveau de gris +sepia=Sepia +inverse=Inversé +standard=Standard \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index c77db066a..e668bd33e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -2193,6 +2193,11 @@ form .forms .fields > li:nth-child(even) { width: calc(100% - 2em); } +.filters > span { + display: block; + margin-left: 1em; +} + .ui-listview.favoris { overflow: hidden; } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java index b9d074a1b..1cf35b56a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/Config.java @@ -38,6 +38,11 @@ public class Config { private boolean freeZoneDisplay; private boolean freeZoneThinDisplay; + private boolean standard; + private boolean grayscale; + private boolean sepia; + private boolean inverse; + private int fontSize; public Config() { @@ -54,6 +59,10 @@ public static Config getDefaultConfig() { c.setFreeZoneDisplay(true); c.setFreeZoneThinDisplay(true); c.setFontSize(10); + c.setStandard(true); + c.setGrayscale(false); + c.setSepia(false); + c.setInverse(false); return c; } @@ -129,6 +138,58 @@ public void setFontSize(int fontSize) { this.fontSize = fontSize; } + public boolean isStandard() { + return standard; + } + + public void setStandard(boolean standard) { + this.standard = standard; + if (standard) { + setSepia(false); + setInverse(false); + setGrayscale(false); + } + } + + public boolean isGrayscale() { + return grayscale; + } + + public void setGrayscale(boolean grayscale) { + this.grayscale = grayscale; + if (grayscale) { + setStandard(false); + setSepia(false); + setInverse(false); + } + } + + public boolean isSepia() { + return sepia; + } + + public void setSepia(boolean sepia) { + this.sepia = sepia; + if (sepia) { + setStandard(false); + setInverse(false); + setGrayscale(false); + } + } + + public boolean isInverse() { + return inverse; + } + + public void setInverse(boolean inverse) { + this.inverse = inverse; + if (inverse) { + setStandard(false); + setSepia(false); + setGrayscale(false); + } + } + public AutoBean<IConfig> getAutoBean () { AutoBean<IConfig> b = LocalStorageHelper.factory.iconfig(); b.as().setFreeZoneDisplay(isFreeZoneDisplay()); @@ -140,6 +201,10 @@ public AutoBean<IConfig> getAutoBean () { b.as().setShortCutsDisplay(isShortCutsDisplay()); b.as().setShortCutsToolsDisplay(isShortCutsToolsDisplay()); b.as().setFontSize(getFontSize()); + b.as().setStandard(isStandard()); + b.as().setGrayscale(isGrayscale()); + b.as().setSepia(isSepia()); + b.as().setInverse(isInverse()); return b; } @@ -154,6 +219,10 @@ public static Config getBean (AutoBean<IConfig> b) { conf.setShortCutsDisplay(b.as().isShortCutsDisplay()); conf.setShortCutsToolsDisplay(b.as().isShortCutsToolsDisplay()); conf.setFontSize(b.as().getFontSize()); + conf.setStandard(b.as().isStandard()); + conf.setGrayscale(b.as().isGrayscale()); + conf.setSepia(b.as().isSepia()); + conf.setInverse(b.as().isInverse()); return conf; } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java index 187fac429..e684e67e5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/shared/dto/configuration/IConfig.java @@ -46,4 +46,19 @@ public interface IConfig { public void setFontSize(int fontSize); + boolean isStandard(); + + void setStandard(final boolean standard); + + void setGrayscale(final boolean grayscale); + + boolean isGrayscale(); + + void setSepia(final boolean sepia); + + boolean isSepia(); + + void setInverse(final boolean inverse); + + boolean isInverse(); } From 10fff7c2817f0b3828c22071355053eb716b8439 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 13 Mar 2024 10:55:52 +0100 Subject: [PATCH 222/228] add missing label --- .../silverpeas/mobile/client/apps/config/pages/ConfigPage.java | 1 + .../mobile/client/apps/config/resources/ConfigMessages.java | 2 ++ .../client/apps/config/resources/ConfigMessages.properties | 1 + .../client/apps/config/resources/ConfigMessages_en.properties | 1 + .../client/apps/config/resources/ConfigMessages_fr.properties | 1 + .../silverpeas/mobile/client/apps/tasks/pages/TasksPage.java | 1 + .../mobile/client/apps/tasks/resources/TasksMessages.java | 1 + .../mobile/client/apps/tasks/resources/TasksMessages.properties | 1 + .../client/apps/tasks/resources/TasksMessages_en.properties | 1 + .../client/apps/tasks/resources/TasksMessages_fr.properties | 1 + 10 files changed, 11 insertions(+) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java index 0237bd6dc..9ee94312b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/pages/ConfigPage.java @@ -82,6 +82,7 @@ public ConfigPage() { initWidget(uiBinder.createAndBindUi(this)); EventBus.getInstance().addHandler(AbstractConfigPagesEvent.TYPE, this); EventBus.getInstance().fireEvent(new LoadConfigEvent()); + setPageTitle(msg.title()); fontSize.setAttribute("min", "9"); fontSize.setAttribute("max", "17"); fontSize.setAttribute("step", "1"); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java index e94ae9d61..896f49e10 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.java @@ -28,6 +28,8 @@ import com.google.gwt.safehtml.shared.SafeHtml; public interface ConfigMessages extends Messages { + + String title(); String homePage(); String fontSize(); String tools(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties index f5c64fc3b..9ddd28f98 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages.properties @@ -22,6 +22,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # +title=Configuration fontSize=Taille du texte homePage=Page d''accueil tools=Afficher les outils diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties index 21c6f7f70..baefd989f 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_en.properties @@ -22,6 +22,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # +title=Settings fontSize=Text size homePage=Home page tools=Display tools diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties index daca9892a..347a889d1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/config/resources/ConfigMessages_fr.properties @@ -22,6 +22,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # +title=Configuration fontSize=Taille du texte homePage=Page d''accueil tools=Afficher les outils diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java index 9b34571cd..ec70025d4 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/pages/TasksPage.java @@ -68,6 +68,7 @@ interface TasksPageUiBinder extends UiBinder<HTMLPanel, TasksPage> { } public TasksPage() { initWidget(uiBinder.createAndBindUi(this)); + setPageTitle(msg.title()); list.getElement().setId("tasks"); EventBus.getInstance().fireEvent(new TasksLoadEvent()); EventBus.getInstance().addHandler(AbstractTasksPagesEvent.TYPE, this); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java index eed5d5f93..977ad62f5 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.java @@ -27,6 +27,7 @@ import com.google.gwt.i18n.client.Messages; public interface TasksMessages extends Messages { + String title(); String create(); String actionCreate(); String actionEdit(); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties index 0202fdb34..74ee876e3 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages.properties @@ -22,6 +22,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # +title=Mes tâches create=Créer une tâche actionCreate=Créer actionEdit=Modifier diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties index ecf0696df..f65635c01 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_en.properties @@ -22,6 +22,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # +title=My tasks create=Create task actionCreate=Create actionEdit=Modify diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties index ba18574b9..932455040 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/tasks/resources/TasksMessages_fr.properties @@ -22,6 +22,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # +title=Mes tâches create=Créer une tâche actionCreate=Créer actionEdit=Modifier From 111370e71c1a1860f4f0a1545cbd21992c55462f Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 14 Mar 2024 10:50:02 +0100 Subject: [PATCH 223/228] Fix #14067 --- mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java index a982ae4bb..9da23ad1a 100644 --- a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java +++ b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java @@ -110,6 +110,7 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) !url.contains(URLUtil.getApplicationURL() + "/util/") && (!tablet) && !url.contains("attached_file") && !url.contains("Ticket") && !url.contains("LinkFile/Key") && + !url.contains("Logout") && !url.contains("FileServer/thumbnail") && redirect) { String params = ""; if (url.contains("Publication")) { From 06a4f6b66d2e2d5bb04130c59da34ca9a463cdf6 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Thu, 14 Mar 2024 13:07:24 +0100 Subject: [PATCH 224/228] Feature #14068 --- .../apps/documents/pages/PublicationPage.java | 24 +++++-- .../mobile/client/common/Html5Utils.java | 20 +++++- .../common/PublicationContentHelper.java | 1 + .../components/base/widgets/SpeakButton.java | 66 +++++++++++++++++++ .../base/widgets/SpeakButton.ui.xml | 31 +++++++++ .../mobile/public/icons/speaker_phone.svg | 1 + .../silverpeas/mobile/public/icons/stop.svg | 1 + .../org/silverpeas/mobile/public/spmobile.css | 25 ++++++- 8 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.java create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.ui.xml create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/speaker_phone.svg create mode 100644 mobile-war/src/main/java/org/silverpeas/mobile/public/icons/stop.svg diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index e7db4704c..92785d961 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -25,15 +25,14 @@ package org.silverpeas.mobile.client.apps.documents.pages; import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.DivElement; -import com.google.gwt.dom.client.HeadingElement; -import com.google.gwt.dom.client.ParagraphElement; -import com.google.gwt.dom.client.Style; +import com.google.gwt.dom.client.*; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.HTMLPanel; @@ -52,6 +51,7 @@ import org.silverpeas.mobile.client.apps.favorites.pages.widgets.AddToFavoritesButton; import org.silverpeas.mobile.client.apps.notifications.pages.widgets.NotifyButton; import org.silverpeas.mobile.client.common.EventBus; +import org.silverpeas.mobile.client.common.Html5Utils; import org.silverpeas.mobile.client.common.Notification; import org.silverpeas.mobile.client.common.PublicationContentHelper; import org.silverpeas.mobile.client.common.app.View; @@ -63,6 +63,7 @@ import org.silverpeas.mobile.client.components.UnorderedList; import org.silverpeas.mobile.client.components.attachments.Attachment; import org.silverpeas.mobile.client.components.base.PageContent; +import org.silverpeas.mobile.client.components.base.widgets.SpeakButton; import org.silverpeas.mobile.shared.dto.ContentDTO; import org.silverpeas.mobile.shared.dto.ContentsTypes; import org.silverpeas.mobile.shared.dto.documents.PublicationDTO; @@ -100,6 +101,8 @@ public class PublicationPage extends PageContent private NotifyButton notification = new NotifyButton(); private AddToFavoritesButton favorite = new AddToFavoritesButton(); + private SpeakButton speak = new SpeakButton(); + private AddFileButton buttonImport = new AddFileButton(); private DraftOutButton buttonDraftOut = new DraftOutButton(); private ShareButton share = new ShareButton(); @@ -187,6 +190,19 @@ public void onLoadedPublication(PublicationLoadedEvent event) { addActionMenu(share); } + if (publication.getContent()) { + speak.setCallback(new Command() { + @Override + public void execute() { + IFrameElement c = IFrameElement.as(Document.get().getElementById("htmlContent")); + String mainText = c.getContentDocument().getBody().getInnerText().trim(); + + String[] text = {publication.getName(), publication.getDescription(), mainText}; + Html5Utils.readText(text); + } + }); + addActionShortcut(speak); + } if (Boolean.parseBoolean(ResourcesManager.getParam("content.display.embedded")) && publication.getContent()) { PublicationContentHelper.showContent(publication.getId(), publication.getInstanceId(), content); contentLink.setVisible(false); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java index 5a17bab77..28ef0127a 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java @@ -24,6 +24,7 @@ package org.silverpeas.mobile.client.common; +import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Element; import com.google.gwt.user.client.Window; @@ -130,16 +131,29 @@ public static native JsArray<Voice> getVoices() /*-{ return window.speechSynthesis.getVoices(); }-*/; - public static native void speak(String text) /*-{ + public static void readText(String[] text) { + Html5Utils.cancelSpeaking(); + for (int i = 0; i < text.length; i++) { + String [] sentences = text[i].split("\\."); + if (sentences.length==0) speak(text[i]); + for (int j = 0; j < sentences.length; j++) { + speak(sentences[j]); + } + } + } + + private static native void speak(String text) /*-{ var msg = new SpeechSynthesisUtterance(); msg.text = text; + msg.addEventListener("end", function (){}); speechSynthesis.speak(msg); + }-*/; public static native void cancelSpeaking() /*-{ speechSynthesis.cancel(); }-*/; - public static native void speak(String text, double volume, double rate, double pitch, String language) /*-{ + private static native void speak(String text, double volume, double rate, double pitch, String language) /*-{ var msg = new SpeechSynthesisUtterance(); msg.volume = volume; // From 0 to 1 msg.rate = rate; // From 0.1 to 10 @@ -149,7 +163,7 @@ public static native void speak(String text, double volume, double rate, double speechSynthesis.speak(msg); }-*/; - public static native void speak(String text, double volume, double rate, double pitch, String language, String desiredVoice) /*-{ + private static native void speak(String text, double volume, double rate, double pitch, String language, String desiredVoice) /*-{ var msg = new SpeechSynthesisUtterance(); for (var i = 0; i < speechSynthesis.getVoices().length; i++) { if (speechSynthesis.getVoices()[i].name === desiredVoice) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java index 8a8ee7c8d..16a899af9 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/PublicationContentHelper.java @@ -79,6 +79,7 @@ public static void showContent(String pubId, String appId, Element basement) { final String url = UrlUtils.getServicesLocation() + "PublicationContent" + "?id=" + pubId + "&componentId=" + appId; String zoom = SpMobil.getContentZoomLevel(); IFrameElement iframeC = Document.get().createIFrameElement(); + iframeC.setId("htmlContent"); iframeC.setAttribute("scrolling", "no"); iframeC.setSrc(url); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.java new file mode 100644 index 000000000..a00cb6ce2 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2000 - 2022 Silverpeas + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * As a special exception to the terms and conditions of version 3.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * Open Source Software ("FLOSS") applications as described in Silverpeas's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * "https://www.silverpeas.org/legal/floss_exception.html" + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.silverpeas.mobile.client.components.base.widgets; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.HTMLPanel; +import org.silverpeas.mobile.client.common.Html5Utils; +import org.silverpeas.mobile.client.components.base.ActionItem; + +/** + * @author: svu + */ +public class SpeakButton extends ActionItem { + + interface SpeakButtonUiBinder extends UiBinder<HTMLPanel, SpeakButton> {} + + private static SpeakButtonUiBinder uiBinder = GWT.create(SpeakButtonUiBinder.class); + + @UiField + HTMLPanel container; + @UiField + Anchor link; + + public SpeakButton() { + initWidget(uiBinder.createAndBindUi(this)); + setId("speak"); + } + + @UiHandler("link") + void speak(ClickEvent event) { + if (container.getElement().hasClassName("running")) { + container.getElement().removeClassName("running"); + Html5Utils.cancelSpeaking(); + } else { + container.getElement().addClassName("running"); + getCallback().execute(); + } + } +} \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.ui.xml b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.ui.xml new file mode 100644 index 000000000..1ffa7c4cd --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.ui.xml @@ -0,0 +1,31 @@ +<!-- + ~ Copyright (C) 2000 - 2022 Silverpeas + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU Affero General Public License as + ~ published by the Free Software Foundation, either version 3 of the + ~ License, or (at your option) any later version. + ~ + ~ As a special exception to the terms and conditions of version 3.0 of + ~ the GPL, you may redistribute this Program in connection with Free/Libre + ~ Open Source Software ("FLOSS") applications as described in Silverpeas's + ~ FLOSS exception. You should have received a copy of the text describing + ~ the FLOSS exception, and it is also available here: + ~ "https://www.silverpeas.org/legal/floss_exception.html" + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU Affero General Public License for more details. + ~ + ~ You should have received a copy of the GNU Affero General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> + +<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' + xmlns:g='urn:import:com.google.gwt.user.client.ui'> + + <g:HTMLPanel tag="li" ui:field="container" styleName="speak-action"> + <g:Anchor ui:field="link"/> + </g:HTMLPanel> +</ui:UiBinder> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/speaker_phone.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/speaker_phone.svg new file mode 100644 index 000000000..a8e09c349 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/speaker_phone.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0zm0 0h24v24H0V0z" fill="none"/><path d="M7 7.07L8.43 8.5c.91-.91 2.18-1.48 3.57-1.48s2.66.57 3.57 1.48L17 7.07C15.72 5.79 13.95 5 12 5s-3.72.79-5 2.07zM12 1C8.98 1 6.24 2.23 4.25 4.21l1.41 1.41C7.28 4 9.53 3 12 3s4.72 1 6.34 2.62l1.41-1.41C17.76 2.23 15.02 1 12 1zm2.86 9.01L9.14 10C8.51 10 8 10.51 8 11.14v9.71c0 .63.51 1.14 1.14 1.14h5.71c.63 0 1.14-.51 1.14-1.14v-9.71c.01-.63-.5-1.13-1.13-1.13zM15 20H9v-8h6v8z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/stop.svg b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/stop.svg new file mode 100644 index 000000000..f6976ad79 --- /dev/null +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/icons/stop.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M6 6h12v12H6z"/></svg> \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index e668bd33e..cf8f4c4ec 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -2167,6 +2167,29 @@ form .forms .fields > li:nth-child(even) { background: url('icons/add.svg') no-repeat; } +.speak-action { + height: 24px; + width: 24px; + filter: invert(1); + background: url('icons/speaker_phone.svg') no-repeat; +} + +.speak-action.running { + background: url('icons/stop.svg') no-repeat; + animation: stopSpeak 2s infinite; +} + +@-webkit-keyframes stopSpeak { + 50% { + transform: scale(1.5); + opacity: 50 + } + 100% { + transform: scale(1.5); + opacity: 50 + } +} + .config .actuality a { } @@ -3082,7 +3105,7 @@ a.popin-btn { background: url('icons/mark_read.svg') no-repeat; } -.add-action a, .delete-action a, .markAsRead-notification a { +.add-action a, .delete-action a, .markAsRead-notification a, .speak-action a { height: 24px; width: 24px; display: block; From a1553ebdf691ed4f4c08c6bd4f55ecbab752fa1c Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 15 Mar 2024 12:25:09 +0100 Subject: [PATCH 225/228] Feature #14068 --- .../mobile/mobileSettings.properties | 5 ++- .../apps/documents/pages/PublicationPage.java | 35 +++++++++++-------- .../mobile/client/common/Html5Utils.java | 26 ++++++++++---- .../components/base/widgets/SpeakButton.java | 18 +++++++++- 4 files changed, 60 insertions(+), 24 deletions(-) diff --git a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties index bc4c4014b..f061b3c17 100644 --- a/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties +++ b/mobile-configuration/src/main/config/properties/org/silverpeas/mobile/mobileSettings.properties @@ -151,4 +151,7 @@ nocache=false form.htmllayer.display=false # maintain http session (store ids in local storage) -maintain.session=true \ No newline at end of file +maintain.session=true + +# speaking configuration +speaking=true \ No newline at end of file diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index 92785d961..79439b9a1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -31,8 +31,6 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Timer; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.HTMLPanel; @@ -190,19 +188,7 @@ public void onLoadedPublication(PublicationLoadedEvent event) { addActionMenu(share); } - if (publication.getContent()) { - speak.setCallback(new Command() { - @Override - public void execute() { - IFrameElement c = IFrameElement.as(Document.get().getElementById("htmlContent")); - String mainText = c.getContentDocument().getBody().getInnerText().trim(); - - String[] text = {publication.getName(), publication.getDescription(), mainText}; - Html5Utils.readText(text); - } - }); - addActionShortcut(speak); - } + addSpeakingCapacity(); if (Boolean.parseBoolean(ResourcesManager.getParam("content.display.embedded")) && publication.getContent()) { PublicationContentHelper.showContent(publication.getId(), publication.getInstanceId(), content); contentLink.setVisible(false); @@ -227,6 +213,25 @@ public void execute() { } } + private void addSpeakingCapacity() { + if (Boolean.parseBoolean(ResourcesManager.getParam("speaking"))) { + speak.setCallback(new Command() { + @Override + public void execute() { + Element el = Document.get().getElementById("htmlContent"); + String mainText = ""; + if (el != null) { + IFrameElement c = IFrameElement.as(el); + mainText = c.getContentDocument().getBody().getInnerText().trim(); + } + String[] text = {publication.getName(), publication.getDescription(), mainText}; + Html5Utils.readText(text, speak.getEndCallback()); + } + }); + addActionShortcut(speak); + } + } + @Override public void onLoadedPublicationAttachments(final PublicationAttachmentsLoadedEvent event) { if (!isVisible()) return; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java index 28ef0127a..6d843d4b6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/common/Html5Utils.java @@ -24,10 +24,9 @@ package org.silverpeas.mobile.client.common; -import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Element; -import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Anchor; import org.silverpeas.mobile.client.common.event.speech.SpeechErrorEvent; import org.silverpeas.mobile.client.common.event.speech.SpeechResultEvent; @@ -131,21 +130,34 @@ public static native JsArray<Voice> getVoices() /*-{ return window.speechSynthesis.getVoices(); }-*/; - public static void readText(String[] text) { + public static void readText(String[] text, Command endCallback) { Html5Utils.cancelSpeaking(); for (int i = 0; i < text.length; i++) { + boolean last = (i == text.length -1); String [] sentences = text[i].split("\\."); - if (sentences.length==0) speak(text[i]); + if (sentences.length==0) { + if (last) { + speak(text[i], endCallback); + } else { + speak(text[i], null); + } + } for (int j = 0; j < sentences.length; j++) { - speak(sentences[j]); + if (last && j == sentences.length -1) { + speak(sentences[j], endCallback); + } else { + speak(sentences[j], null); + } } } } - private static native void speak(String text) /*-{ + private static native void speak(String text, Command endCallback) /*-{ var msg = new SpeechSynthesisUtterance(); msg.text = text; - msg.addEventListener("end", function (){}); + msg.addEventListener("end", function (event) { + if (endCallback != null) endCallback.@com.google.gwt.user.client.Command::execute(*)(); + }); speechSynthesis.speak(msg); }-*/; diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.java index a00cb6ce2..71755d81e 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/widgets/SpeakButton.java @@ -29,6 +29,7 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTMLPanel; import org.silverpeas.mobile.client.common.Html5Utils; @@ -39,10 +40,14 @@ */ public class SpeakButton extends ActionItem { + + interface SpeakButtonUiBinder extends UiBinder<HTMLPanel, SpeakButton> {} private static SpeakButtonUiBinder uiBinder = GWT.create(SpeakButtonUiBinder.class); + private Command onEndSpeaking; + @UiField HTMLPanel container; @UiField @@ -51,10 +56,21 @@ interface SpeakButtonUiBinder extends UiBinder<HTMLPanel, SpeakButton> {} public SpeakButton() { initWidget(uiBinder.createAndBindUi(this)); setId("speak"); + + onEndSpeaking = new Command() { + @Override + public void execute() { + onClick(null); + } + }; + } + + public Command getEndCallback() { + return onEndSpeaking; } @UiHandler("link") - void speak(ClickEvent event) { + void onClick(ClickEvent event) { if (container.getElement().hasClassName("running")) { container.getElement().removeClassName("running"); Html5Utils.cancelSpeaking(); From 7647993e229b7c030300629c2675f1cb5eb3c6c1 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Fri, 15 Mar 2024 14:34:13 +0100 Subject: [PATCH 226/228] disable browser refresh --- .../src/main/java/org/silverpeas/mobile/public/spmobile.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css index cf8f4c4ec..917e75da6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css +++ b/mobile-war/src/main/java/org/silverpeas/mobile/public/spmobile.css @@ -43,7 +43,8 @@ body.ui-panel-wrapper { body { font-size: 10pt; line-height: 1em; - font-family: Open Sans, sans-serif + font-family: Open Sans, sans-serif; + overscroll-behavior-y: contain; } input, select, textarea, button, .ui-btn { From af335ce353dd8e9f5c1890f1221ac76f85263a91 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 20 Mar 2024 16:45:30 +0100 Subject: [PATCH 227/228] Fix publication page title --- .../mobile/client/apps/documents/DocumentsApp.java | 3 +-- .../mobile/client/apps/documents/pages/PublicationPage.java | 1 + .../mobile/client/apps/documents/pages/widgets/GedItem.java | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java index 25ce72168..6ee45ca9b 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/DocumentsApp.java @@ -140,8 +140,6 @@ private void displayContent(final ContentDTO content) { NavigationAppInstanceChangedEvent event = new NavigationAppInstanceChangedEvent(data); appInstanceChanged(event); } else if (content.getType().equals(ContentsTypes.Attachment.toString())) { - final DocumentsApp app = this; - MethodCallbackOnlineOnly action = new MethodCallbackOnlineOnly<AttachmentDTO>() { @Override @@ -175,6 +173,7 @@ public void onSuccess(final Method method, final AttachmentDTO attachement) { } } }; + action.attempt(); } } diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java index 79439b9a1..511fe0b3d 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/PublicationPage.java @@ -266,6 +266,7 @@ public void publishedPublication(PublicationPublishedEvent event) { private void display(boolean commentable, boolean ableToStoreContent, String type) { if (isVisible()) { EventBus.getInstance().fireEvent(new DocumentsLoadAttachmentsEvent(publication.getId(), publication.getInstanceId())); + setPageTitle(publication.getName()); title.setInnerHTML(publication.getName()); desc.setInnerHTML(publication.getDescription()); diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java index 6f5a1ec64..f1df845e6 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/apps/documents/pages/widgets/GedItem.java @@ -83,9 +83,10 @@ public void setData(Object data) { setStyleName("publication"); icon.setHTML(resources.publication().getText()); if (dataPublication.getVignette() != null) { - String style = "background-image:url("+dataPublication.getVignette(); - style += ");background-position:5px 5px;background-size:20px 20px;"; + String style = "background:url("+dataPublication.getVignette(); + style += ") no-repeat;background-position:0.5em;background-size:24px 24px;"; link.getElement().setAttribute("style", style); + icon.setVisible(false); } link.setStyleName("ui-btn ui-icon-carat-r"); } From 912d3ad79245bd234f0513bcd148fafb85bd4d64 Mon Sep 17 00:00:00 2001 From: svuillet <svu@silvepeas.com> Date: Wed, 20 Mar 2024 17:37:17 +0100 Subject: [PATCH 228/228] Adjust title page --- .../src/main/java/org/silverpeas/bridge/MobilFilter.java | 8 ++++---- .../mobile/client/components/base/PageHeader.java | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java index 9da23ad1a..65bb4b9a2 100644 --- a/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java +++ b/mobile-war/src/main/java/org/silverpeas/bridge/MobilFilter.java @@ -39,8 +39,8 @@ import org.silverpeas.core.security.token.TokenGenerator; import org.silverpeas.core.security.token.TokenGeneratorProvider; import org.silverpeas.core.security.token.synchronizer.SynchronizerToken; -import org.silverpeas.core.util.ResourceLocator; -import org.silverpeas.core.util.SettingBundle; +import org.silverpeas.kernel.bundle.ResourceLocator; +import org.silverpeas.kernel.bundle.SettingBundle; import org.silverpeas.core.util.URLUtil; import org.silverpeas.core.web.mvc.controller.MainSessionController; @@ -102,7 +102,6 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) final boolean tablet = session.getAttribute("tablet", Boolean.class, false); boolean redirect = isRedirect(url); - if (isMobile && !url.contains("sso") && !url.contains("services") && !url.contains("spmobile") && !url.contains(URLUtil.getApplicationURL() + "/chat/") && !url.contains(URLUtil.getApplicationURL() + "/media/") && @@ -110,7 +109,8 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) !url.contains(URLUtil.getApplicationURL() + "/util/") && (!tablet) && !url.contains("attached_file") && !url.contains("Ticket") && !url.contains("LinkFile/Key") && - !url.contains("Logout") && + !url.contains("Logout") && + !url.contains("FileServer/vignette") && !url.contains("FileServer/thumbnail") && redirect) { String params = ""; if (url.contains("Publication")) { diff --git a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java index 1ea01f5e5..6dadcb6d1 100644 --- a/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java +++ b/mobile-war/src/main/java/org/silverpeas/mobile/client/components/base/PageHeader.java @@ -70,10 +70,17 @@ public PageHeader() { public void addActionShortcut(ActionItem action) { actionsShortcuts.addAction(action); + adjustTitle(); + } + + private void adjustTitle() { + float offset = actionsShortcuts.listActions.getCount() * 2.5f; + title.setAttribute("style", "width : calc(100vw - 50px - 2.5em - "+offset+"em);"); } public void removeActionShortcut(ActionItem action) { actionsShortcuts.removeAction(action.getId(), true); + adjustTitle(); } public void addActionMenu(ActionItem action) {