Commit graph

52 commits

Author SHA1 Message Date
Caolán McNamara
1bd1e5a828 wasm is derived from the mobile, but doesn't have on-screen keyboard
There's a bit of a mobile/wasm munge with wasm considered a subset
of mobile in some places which should be unwound a bit, but for the
purposes of usable wasm by default, don't assume that wasm has an
onscreen keyboard so we don't lose keystrokes on assuming that
there will be an onscreen keyboard appearing when we lose and regain
focus.

Signed-off-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Change-Id: I0baae0d414ce9aafd1c27d74bcdad2276d104ee5
2023-12-08 14:17:27 +00:00
Rash419
67aac9424b indirection: change request interval from 10s -> 3s
Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I43c3bc5e1725f9d364c44638364f836e94f38290
2023-12-01 13:04:40 +05:30
Skyler Grey
e817f03785 Unify touchscreen handling, remove L.Browser.touch
L.Browser.touch is sometimes nice, but it's ultimately a flawed concept
to use it for input events. Using L.Browser.touch for input handicaps
people with mice if it's too liberal in what it classes as touchscreens,
and handicaps people with touchscreens if it's too conservative. There's
also no sweet spot: it's impossible to choose correctly if someone is
using both a touchscreen and a pointer device, as there's no right
option!

Previously many of our event handlers and some of our UI was gated
behind L.Browser.touch. This commit adds a new "window.touch" property
which is used instead. It has functions to help with event detection,
allowing you to easily make event handlers that work for only the input
devices they are designed for, without gating them behind feature
detection. This has the added bonus that - as you register all the
events - switching between a touchscreen and pointer is now not only
possible but already implemented!

For cases which don't have reasonable events to tag onto (e.g. the
teardrop for cursor movement) this commit adds "hasPrimaryTouchscreen"
and "hasAnyTouchscreen" which use the CSS media queries to detect if
there's a touchscreen attached to your device (either as the primary
input mechanism or at all). This works a lot more similarly to
L.Browser.mode, but being dynamically updated allows you to effectively
swich between touchscreen and not at-will. This still has all of the
disadvantages that L.Browser.touch did when used to register event
handlers, so my advice would be to avoid using it with events.

Signed-off-by: Skyler Grey <skyler.grey@collabora.com>
Change-Id: I9016fc15ad3ccb3664af348fdcdca006495b0778
2023-11-22 15:48:06 +01:00
Gabriel Masei
524e70eb47 fix language issue in datepicker control
It seems that datepicker control expects only a language input
in regional property (e.g. fr) instead of language-country (e.g. fr-FR).

Signed-off-by: Gabriel Masei <gabriel.masei@1and1.ro>
Change-Id: I7d5ac40cfa4a72cdc7862a8b4c4d14bdecad6c3b
2023-11-13 19:57:12 +05:30
Skyler Grey
ff1e4eeb57 Add a ui_defaults hint for touchscreens
At the moment, we try to detect whether the browser is running with a
touchscreen, however this is very imperfect. It's possible an integrator
may have more information about whether COOL is running on a device with
a touchscreen, so this ui_defaults option allows us to specify. Touch
mode binds inputs for touchscreen devices (long press for menu, pinch to
zoom, etc.) and does not bind the normal inputs (right click for menu,
etc.), so it's crucial to get it on all touch devices and no desktop
devices, as input is severely hampered if they are the wrong way round.

The option is called TouchscreenHint. Setting it to 'true' will enable
touchscreen mode, setting it to 'false' will disable touchscreen mode.
Leaving it undefined will keep our detection active.

This option must be set at page load so we can register the right
events at creation time. Therefore, ui_defaults is perfect as a method
to override this.

This is not a long-term solution. Instead, "The right thing" is to look
specifically for touch events and specifically for mouse events, rather
than using the default hammer.js behavior which is to look for both...
that should be an eventual followup to this. However, this was a lot
faster to implement and helps with the most pressing issue: not being
able to override our detection when it goes wrong.

Change-Id: Id28a156fe352fe6565ce6b472b7aa54d0869c48e
Signed-off-by: Skyler Grey <skyler.grey@collabora.com>
2023-11-10 23:20:22 +00:00
Skyler Grey
7175c7841b Add a ui_defaults option for onscreen keyboards
The new ui_defaults option OnscreenKeyboardHint is a tristate denoting
whether the device accessing Collabora Online has an onscreen keyboard

If unset, Collabora Online will do its best to guess. At time of
writing, this is the same as checking if the device is a mobile phone
or a tablet (note: only tablets which have the browser registered as a
"mobile" browser will be detected, e.g. the Microsoft Surface tablets
would not be detected)

If "true", Collabora will assume the device has an onscreen keyboard.
This will change when we trigger the keyboard, for example in calc if we
know of an onscreen keyboard we will not automatically focus a cell for
editing when it is selected, as this would pop up the keyboard.

If "false", Collabora will assume the device does not have an onscreen
keyboard, effectively doing the inverse of the "true" option above.

This is a followup to #7580 (0bf054c9a3)
which had Hint_OnscreenKeyboard and Hint_NoOnscreenKeyboard as
postmessage IDs to do the same thing.

Signed-off-by: Skyler Grey <skyler.grey@collabora.com>
Change-Id: I5deeb87a410c135d4cabda7ed24dc37e791800cd
2023-11-08 16:20:49 +00:00
Skyler Grey
13e3846ffe Add touch detection for pointer:course media query
matchMedia allows you to check matches for CSS media queries from
JavaScript. By checking if the primary pointer is 'course' we have a
pretty good shot at guessing that it's a touch device (mice, etc. are
'fine' instead). This expands our current touch detection so it detects
more screens, while making sure it doesn't detect devices which have a
touchscreen but also a mouse/touchpad/whatever. This non-detection is
important, because our touch support currently breaks things like the
rightclick menu on calc.

Touchscreen detection is useful for devices that are being used as touch
devices, because it enables some features like pinch-to-zoom and
hold-for-rightclick-menu which improve usability when you are using a
touchscreen. These are particularly important without a mouse.

Some devices are 2-in-1 laptops, which have a touchscreen and a
touchpad, but can be collapsed so only the touchscreen is active. These
devices will be detected as touch only when they are in their 'tablet'
form. *As we setup parts of the page differently, the page will need to
be refreshed if they change from tablet form to laptop form and
vice-versa*. Hopefully in the future we will make a followup so that
both input schemes can be enabled at the same time and extend this media
query detection to (any-pointer: course)

Signed-off-by: Skyler Grey <skyler.grey@collabora.com>
Change-Id: Ied4f61a1ffb06bd63359bc6d81c6a6c23436cc23
2023-11-08 14:39:47 +00:00
Skyler Grey
0bf054c9a3 Stop onscreen keyboard when panning calc on tablet
Before this change, panning a calc spreadsheet would cause the onscreen
keyboard to pop up when in tablet mode. Dismissing the keyboard would
not stop it from being popped up the next time you panned around. This
made it very difficult to pan around spreadsheets in calc without either
using an external keyboard, the mobile app or another device altogether.

This commit introduces a known regression: when you are on a tablet and
have a physical external keyboard, you could previously select the cell
and start typing. Now you must tap into the cell in the same way you
would if you have an onscreen keyboard. This matches the behavior on
mobile devices. I consider this regression a reasonable tradeoff, so
notwithstanding I believe this should be merged.

Additionally, this commit adds 2 POST messages, "Hint_OnscreenKeyboard"
and "Hint_NoOnscreenKeyboard". These can be used to override our guess
if you know more about whether the device has an onscreen keyboard than
we do.

Signed-off-by: Skyler Grey <skyler.grey@collabora.com>
Change-Id: I8f3683ccb9e57f0c4a5bf8e415f9aabef917dd78
2023-10-31 16:32:33 -04:00
Marco Cecchetti
09c18a4a44 a11y: keep a11y disabled on executing cypress Calc tests
This patch is a temporary workaround for fixing CI failures.
In fact on CI with a11y enabled cypress fails to load spreadsheets.

Signed-off-by: Marco Cecchetti <marco.cecchetti@collabora.com>
Change-Id: Ic661358cd47600ec9c3a329bef361b8087483017
2023-10-29 09:46:40 +00:00
Rash419
e290d07edb indirection: use errorcode to map errormsg and translate it
Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I779bfc658c54255a675e3a047ed371e7e0586327
2023-10-06 15:52:21 +05:30
Marco Cecchetti
97aec60766 Firefox 117 no copy event is emitted by hitting CTRL+C with no selection
The problem affects no-a11y case since the editable area is empty.
Since no copy/cut event is emitted, Clipboard.copy/cut is never
invoked. So we need to emit it manually.
To be honest it seems a Firefox bug. We need to check if they fix it
in later version.

Signed-off-by: Marco Cecchetti <marco.cecchetti@collabora.com>
Change-Id: I036414b5ffb5b35ff1ef1d7de1044e890832c673
2023-09-19 19:16:43 +02:00
Rash419
cc3f12926c indirection: get new routeToken if serverId mismatch
Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I0efb38b714894dffb44cb5e2ca06be12ccf43b89
2023-09-01 13:48:31 +05:30
Aron Budea
80a390f740 Revert "Fix wrong device detection logic."
On actual iPad (2048x1536 native, 1024x768 browser), in
landscape view in Safari, mobile phone view is shown in
online instead of tablet.

This reverts commit f1e9ee72fe.

Signed-off-by: Aron Budea <aron.budea@collabora.com>
Change-Id: I2cd4ba6cdcd616760c06c7db479e6d13be3d83b4
2023-07-26 10:08:58 +02:00
Rash419
55305d0d28 indirection: use Action_Load_Resp to show error msg
Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I682973acfe45b9477bb6df9e8a17adf01e3dda65
2023-07-17 12:18:41 +05:30
Marco Cecchetti
abca8e5dd3 Adding support for enabling/disabling a11y support from the ui
Added toggle button/menu entry for enable/disable accessibility support.
This ui feature is available for Online Writer only.
The button/menu entry is added only when accessibility is enabled at
server level.
That allows to enable/disable accessibility per view.
By default, the accessibility support is disabled.
Anyway the accessibility support state is saved to local storage
if available.

Signed-off-by: Marco Cecchetti <marco.cecchetti@collabora.com>
Change-Id: If5968a47f17922038b9da3d320cbed84ebb7688b
2023-07-10 16:02:18 +02:00
Rash419
b717be603e implement document migration
- updated protocol.txt

Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I67a0515580979e15223ea084c835f5ed801ceb5e
2023-06-29 18:21:33 +02:00
Rash419
ca5517cc24 indirecton:request again if we get 202 status
- also send 'App_LoadingStatus' postMessage with 'Loading_Progress'
  Status to notify integrator

Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: Ie754955c53d4d361d8dfaf083f7734382954d3f9
2023-06-29 18:21:33 +02:00
Henry Castro
3b7026c0e9 browser: add 'lang' property to get the current ...
browser language locale

Change-Id: Ia23d9710a0af97b4838f189e97cc0169d2294045
Signed-off-by: Henry Castro <hcastro@collabora.com>
2023-06-15 18:03:04 -04:00
Rash419
81834bc466 added serverId and routeToken in about dialog
Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I498dd2a9f1fb08d9af116ac27ac645b31b87ed57
2023-06-05 21:27:50 +05:30
Marco Cecchetti
b9f9cef60a a11y: populating editable area with focused paragraph
We handle notification from core about currently focused paragraph:
content, caret position, text selection start/end.
Notifications are sent on any text changes, even when the text has
been modified in another view.
Moreover we can request such info to core at any time.
That allows AT software to read focused paragraph and selected text.
All that keeping editing still working.
A set of new cypress tests for checking clipboard content has been
developed.

failing cpp unit test:
- HTTPWSTest::testInactiveClient
'unexpected message' assertion was failing since an idle client can
receive an a11yfocuschanged message when the same paragraph has focus
in both view and the active view is editing the paragraph.

failing cypress tests:
desktop
- calc/autofilter_spec.js
  - added more wait time before performing clickOnFirstCell
- impress/undo_redo_spec.js
  - Repair Document was broken
    - we need to select 'Hello world' in order to overwrite it

mobile
- impress/spellchecking_spec.js
  - Apply suggestion
    - better use selectTextOfShape instead of Ctrl-A

Signed-off-by: Marco Cecchetti <marco.cecchetti@collabora.com>
Change-Id: I070d390543fa66fe786c4a0661fa09f891b9883e
2023-05-31 22:43:51 +02:00
Gülşah Köse
f1e9ee72fe Fix wrong device detection logic.
window.screen.width/height returns the width/height
of the screen in CSS pixels. window.innerWidth/innerHeight
returns the interior width/height of the window in pixels.
This includes the width of the vertical scroll bar, if one is present.

That gives better result. eg: responsive mode

Signed-off-by: Gülşah Köse <gulsah.kose@collabora.com>
Change-Id: Ibecb9614224cb3bfd6d5d8dc9ad5febe6aa7673b
2023-05-03 12:30:28 +02:00
Michael Meeks
29d7937a46 proxy: get the length right for messages with content outside ASCII.
Interestingly, we've been sending the wrong length, resulting in

[ docbroker_003 ] ERR  #-1: Missing final newline| wsd/ProxyProtocol.cpp:158

type errors, as we read that back in coolwsd.

Change-Id: Iff7d1d38b0ed3e99c1d6903e2663c4335a36aaa3
Signed-off-by: Michael Meeks <michael.meeks@collabora.com>
2023-04-06 11:40:18 +02:00
Andras Timar
b0ff00961b handle Uncaught TypeError: Cannot read properties of null
sheets[i].href can be null. Seen with proxy.php.

Signed-off-by: Andras Timar <andras.timar@collabora.com>
Change-Id: I3d774ace869d141973a92abab8ef9ac83e1e0018
2023-04-05 20:57:16 +02:00
Rash419
d221de8969 fix: date picker always in norwegian
Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: Id03cccad6964e7555de6300b0eac619bf521802b
2023-03-24 13:53:39 +01:00
Rash419
f335d08e09 fix: renaming doesnot work when indirection_endpoint is enabled
Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: Ic79a0436f87d4ab4697597d15fd60fa148050270
2023-03-13 08:07:16 +01:00
Ashod Nakashian
0f9dc9460b wsd: support per-user timezone
Change-Id: I5e2318a34cb39d8d56ec3cf4977ebd75588a7627
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2023-01-31 15:38:08 +01:00
Rash419
7e06860ddf js: get full uri from indirection server
instead of just routeToken

Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I3755fc2536d4358d2c63effdc9e9f9e5da246504
2023-01-31 15:32:30 +01:00
Rash419
b9914a3042 js: added routeToken as parameter in wopisrc
fetch route_token from indirectionurl and add them in wopisrc
parameter

Signed-off-by: Rash419 <rashesh.padia@collabora.com>
Change-Id: I6e724d0c59e12d4f7f6c125ec076e90d20b9b3c8
2023-01-31 15:32:30 +01:00
Tor Lillqvist
cee9bf493a Change hardcoded sample document name and verify that we get it
You now must pass --with-wasm-additional-files=<path> where path
contains a file called sample.docx.

Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: I21e62feb6282833a5d60b31db26328eda63cdaea
2023-01-29 06:56:08 +02:00
Tor Lillqvist
84963dafd1 Temporarily hardcode the document URL and UI lang for WASM in more places
(Note that the existence of a window.ThisIsTheEmscriptenApp property
is also a temporary hack; the eventual goal is for a one same Online
webpage to be able to switch automatically from server-based to
WASM-based and back based on connectivity to the server.)

Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: Ia5e3f4008eaaf1543c08482418635dca0d3983e5
Signed-off-by: Tor Lillqvist <tml@collabora.com>
2023-01-28 10:30:26 +02:00
Tor Lillqvist
7978e74434 Try to send the HULLO message only after the WASM runting has been initialised
Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: Ida3e01482db0e18d17e8e6db0c75667c39adae59
2023-01-16 18:43:21 +02:00
Tor Lillqvist
b248787bfa We do want to temporarily use the idea that a "WASM app" is a separate thing
Only once we have that working will we go back to having a COOL client
that on the fly can switch from a normal COOL server to using local
online and core code in WASM.

Note that the --with-wasm-fallback configure option now then
temporarily is a no-op, and the ENABLE_WASM_FALLBACK Automake
conditional and WASM_BUILDDIR Autoconf macro are not used anywhere.

Once we have something that barely works as a proof of concept, we can
go back to working towards what we really want.

(Yeah, yeah, I know that "temporary" solutions have a tendency to
become more permanent than you expect...)

Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: I2f01acd418686e672fd9d2e12cbbd688b128dfa5
2023-01-15 19:46:37 +01:00
Tor Lillqvist
0a85ca0c2a Some initial thoughts how to handle messaging when WASM fallback is active
Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: I4146c5b93a3f5988b16836231e529640e9126392
2023-01-15 19:46:37 +01:00
Dennis Francis
cb85497cdd Revert "share css-url renamer with branding"
This reverts commit 089b6d235a0e38d5b1d021fab024becc2def0ada.

Reason for revert: For packaging builds the global.js is in minified
form hence marker comments are not present and it is difficult to
extract the css url renamer function without js-language analysis tools
or packages - this needs more thought.

Signed-off-by: Dennis Francis <dennis.francis@collabora.com>
Change-Id: I86755cd74c8f92105b157477f7da8f6e439f1f99
2023-01-11 11:49:36 +01:00
Dennis Francis
a0d86c8a6f share css-url renamer with branding
Signed-off-by: Dennis Francis <dennis.francis@collabora.com>
Change-Id: I849948c69e9cc656c410513f9f95db2e7fb07e03
2023-01-10 11:40:50 +01:00
Tor Lillqvist
4fd6279f6b sendCounter is unused
Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: Ie6f713f062e9c89ed3679d709394089413184d0d
2022-12-06 10:38:39 +02:00
Andras Timar
dcae5fa613 proxy.php: Special case for the remote image
Signed-off-by: Andras Timar <andras.timar@collabora.com>
Change-Id: I98da25735a3b889824a72c2134c495abd26b3a05
2022-06-28 22:03:28 +02:00
Gökay Şatır
df17064597 Add a comment for window.app definition into global.js file.
Signed-off-by: Gökay Şatır <gokaysatir@collabora.com>
Change-Id: I111eda6182235a307b40a297466a1fb4a74ad5bf
2022-04-15 16:37:51 +03:00
Gökay Şatır
4f4c11a886 Moved window.app variable into its own file.
"socket" and "console" variables are used at initialization, so they are left in global.js file.

Debugging of window.app object's variables is now easier.

Signed-off-by: Gökay Şatır <gokaysatir@collabora.com>
Change-Id: Ic2811ff45ce845cb32d15018eaa2fa9e140202d7
2022-04-15 16:37:51 +03:00
Jan Holesovsky
4bef530844 Escape some parameters for a good measure
Signed-off-by: Jan Holesovsky <kendy@collabora.com>
Change-Id: Ie5d2017ed6ce9f38623b42b336c5261be322b025
2022-03-21 21:35:27 +01:00
Mert Tumer
85310c888c fix sidebar can be visible on pdf
it appears that sidebar callback can arrive before
docloaded message when it is already loaded in the background
Also app.file.fileBasedView parameter is set after docloaded
so it wasnt a correct fix. perm: message arrives before document
initialization and we can hide sidebar unless the arrived messsage is
not 'edit'. if the user have edit mode, it will be up to the users preference

Signed-off-by: Mert Tumer <mert.tumer@collabora.com>
Change-Id: Ifb220d8bb8baad0078bcd32f71ee6853d31adfb8
2022-02-16 15:27:14 +03:00
Alexandru Vlăduţu
04b50d5b3b browser: add missing error method for logging
Signed-off-by: Alexandru Vlăduţu <alexandru.vladutu@1and1.ro>
Change-Id: Id4aa67e98779dd0d5c92172425baa753fcaca27c
2022-02-14 15:57:52 +00:00
Michael Meeks
d2d1615b13 Allow protocol logging to be enabled from debug overlay.
Change-Id: Ica0765242b82a2da86722da0b40b6ecdf401d383
Signed-off-by: Michael Meeks <michael.meeks@collabora.com>
2022-02-12 16:23:19 +00:00
Alexandru Vlăduţu
65f8476818 browser: add optional function to process the URLs (internal and user
generated)

Signed-off-by: Alexandru Vlăduţu <alexandru.vladutu@1and1.ro>
Change-Id: If83611cc17d00dd049093de0a35caa7739f10400
2022-01-28 11:40:40 +01:00
Alexandru Vlăduţu
eac3201c05 browser: improve logging by using custom logging methods instead of console ones directly
Signed-off-by: Alexandru Vlăduţu <alexandru.vladutu@1and1.ro>
Change-Id: Id4ad5711c85998ce71ba0849fca5fe6dc580f395
2022-01-24 21:06:42 +00:00
Tor Lillqvist
ed32beef5c Prefer "(no message)" etc to "[object Object]"
At least for me, whenever I have seen the result of that code logged
in Xcode when debugging the iOS app, the lines for the "description"
and "stack" have said just "[object Object]". It is unclear whether
that is because the code explicitly assigns the empty object {} to the
desc and stack variables here, or because err.message and/or err.stack
do exist but are objects, not strings.

Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: I08a2fa361baf20814a40249d30ff49ba39292aa6
2021-12-20 14:46:21 +01:00
Andras Timar
f07ff8c7e0 rename: remaining lool->cool changes
Signed-off-by: Andras Timar <andras.timar@collabora.com>
Change-Id: Ib7d4e804bebe52dead8d53b0e0bbaed0f08bf3d0
2021-11-18 14:14:11 +01:00
Gökay ŞATIR
4da055d695 Cosmetic changes.
Whitespace.

Signed-off-by: Gökay ŞATIR <gokaysatir@gmail.com>
Change-Id: I83ceb3e8c0f04aafb844d548708ecaf5bc565a2f
2021-11-18 15:20:12 +03:00
Andras Timar
de3e09fde0 rename wsd protocol command 'loolclient' to 'coolclient'
Signed-off-by: Andras Timar <andras.timar@collabora.com>
Change-Id: I506fe74bc5ebf183ed21721b40a45210373abf06
2021-11-17 11:59:35 +01:00
Henry Castro
969ca88846 browser: rename 'lool' -> 'cool'
Change-Id: I1abd3448b206e62c016ba13d0c0e052ee55dd5da
Signed-off-by: Henry Castro <hcastro@collabora.com>
2021-11-17 09:17:27 +01:00