Please see the attached video pertaining to the description below.
I have an ABMPage, in which the user navigates on a tree-like table, and then makes a selection from another table on a ModalSheet.
Then the ModalSheet is closed and the NavigateToPageNewTab is called succesfully.
However, the source page (i.e. the page in which the call to NavigatetoPageNewTab is made) is reset and all user's selection up to that point is lost.
(In the Log list, the log data of the websocket_connected of the target page (which opens in the new tab), appear, followed by the log data of Line 25 (see below) of the websocket_connected of the source page.
Is there a way to maintain the user's selection in the source page up to that point, i.e. the changes made to the tree-like table (not the Modal Sheet).
This is where the call to NavigateToPageNewTab is made:
This is the main part of the Web_Socket_connected of the source page
This is the main part of the Web_Socket_connected of the target page
This is the NavigateToPageNewTab
I have an ABMPage, in which the user navigates on a tree-like table, and then makes a selection from another table on a ModalSheet.
Then the ModalSheet is closed and the NavigateToPageNewTab is called succesfully.
However, the source page (i.e. the page in which the call to NavigatetoPageNewTab is made) is reset and all user's selection up to that point is lost.
(In the Log list, the log data of the websocket_connected of the target page (which opens in the new tab), appear, followed by the log data of Line 25 (see below) of the websocket_connected of the source page.
Is there a way to maintain the user's selection in the source page up to that point, i.e. the changes made to the tree-like table (not the Modal Sheet).
This is where the call to NavigateToPageNewTab is made:
Call to NavigateToPageNewTab:
Sub OpenArticlesModal(row As Int, col As Int)
' Log(row)
' Log(col)
Dim myModal As ABMModalSheet = page.ModalSheet("ArticlesModal")
Dim tblArtList As ABMTable = myModal.content.Component("tblArtList")
If col = 3 Then ' view article button was clicked
Dim ActiveArticle As Long= tblArtList.GetString(row,0)
page.CloseModalSheet("ArticlesModal")
ABMShared.NavigateToPageNewTab(ws, ABMPageId, "../Article/?prmtr="& ActiveArticle, True)
End If
End Sub
This is the main part of the Web_Socket_connected of the source page
B4X:
Private Sub WebSocket_Connected (WebSocket1 As WebSocket)
'----------------------MODIFICATION-------------------------------
'log("connected")
ws = WebSocket1
ABMPageId = ABM.GetPageID(page, Name,ws)
DateTime.DateFormat="dd/MM/yyyy"
DateTime.timeFormat="HH:mm"
Dim session As HttpSession = ABM.GetSession(ws, ABMShared.SessionMaxInactiveIntervalSeconds)
If session.IsNew Then
session.Invalidate
ABMShared.NavigateToPage(ws, "", "./")
Return
End If
If ABMShared.NeedsAuthorization Then
If session.GetAttribute2("IsAuthorized", "") = "" Then
ABMShared.NavigateToPage(ws, ABMPageId, "../")
Return
End If
End If
UserId=session.GetAttribute("UserId")
ABMShared.UpdateUserTimestamp(UserId)
Log("*PAGE: " & Name & " ***" & ws.Session.GetAttribute("authName") & "@" & ABMShared.timestamp & ", Expired Subscription: " & ws.Session.GetAttribute("Expired"))
If session.GetAttribute("Expired")="Yes" Then
ABMShared.NavigateToPage(ws, ABMPageId, "../UserInfo")
Return
End If
ABM.UpdateFromCache(Me, ABMShared.CachedPages, ABMPageId, ws)
If page.ComesFromPageCache Then
' when we have a page that is cached it doesn't matter if it comes or not from a new connection we serve the cached version.
'Log("comes from cache")
page.Refresh
page.FinishedLoading
Else
If page.WebsocketReconnected Then
Log("websocket reconnected")
' when we have a client that doesn't have the page in cache and it's websocket reconnected and also it's session is new - basically when the client
' had internet problems and it's session (and also cache) expired before he reconnected so the user has content in the browser but we don't have
' any on the server. So we need to reload the page.
' when a client that doesn't have the page in cache and it's websocket reconnected but it's session is not new - when the client had internet
' problems and when he reconnected it's session was valid but he had no cache for this page we need to reload the page as the user browser has
' content, reconnected but we have no content in cache
ABMShared.NavigateToPage (ws, ABMPageId, "./" & page.PageHTMLName)
Else
' when the client did not reconnected it doesn't matter if the session was new or not because this is the websockets first connection so no dynamic
' content in the browser ... we are going to serve the dynamic content...
Log("websocket first connection")
page.Prepare
ConnectPage
End If
End If
'log("abmPageId)
'----------------------MODIFICATION-------------------------------
This is the main part of the Web_Socket_connected of the target page
B4X:
Private Sub WebSocket_Connected (WebSocket1 As WebSocket)
'----------------------MODIFICATION-------------------------------
'log("connected")
ws = WebSocket1
Dim txt As String = ws.UpgradeRequest.GetParameter("prmtr")
ActiveArticle = txt.Replace("/","")
' Log(ActiveArticle)
ABMPageId = ABM.GetPageID(page, Name,ws)
DateTime.DateFormat="dd/MM/yyyy"
DateTime.timeFormat="HH:mm"
Dim session As HttpSession = ABM.GetSession(ws, ABMShared.SessionMaxInactiveIntervalSeconds)
If session.IsNew Then
session.Invalidate
ABMShared.NavigateToPage(ws, "", "./")
Return
End If
If ABMShared.NeedsAuthorization Then
If session.GetAttribute2("IsAuthorized", "") = "" Then
ABMShared.NavigateToPage(ws, ABMPageId, "../")
Return
End If
End If
UserId=session.GetAttribute("UserId")
ABMShared.UpdateUserTimestamp(UserId)
Log("*PAGE: " & Name & " ***" & ws.Session.GetAttribute("authName") & "@" & ABMShared.timestamp & ", Expired Subscription: " & ws.Session.GetAttribute("Expired"))
ABM.UpdateFromCache(Me, ABMShared.CachedPages, ABMPageId, ws)
If page.ComesFromPageCache Then
' when we have a page that is cached it doesn't matter if it comes or not from a new connection we serve the cached version.
'log("comes from cache")
page.Refresh
page.FinishedLoading
Else
If page.WebsocketReconnected Then
'log("websocket reconnected")
' when we have a client that doesn't have the page in cache and it's websocket reconnected and also it's session is new - basically when the client
' had internet problems and it's session (and also cache) expired before he reconnected so the user has content in the browser but we don't have
' any on the server. So we need to reload the page.
' when a client that doesn't have the page in cache and it's websocket reconnected but it's session is not new - when the client had internet
' problems and when he reconnected it's session was valid but he had no cache for this page we need to reload the page as the user browser has
' content, reconnected but we have no content in cache
ABMShared.NavigateToPage (ws, ABMPageId, "./" & page.PageHTMLName)
Else
' when the client did not reconnected it doesn't matter if the session was new or not because this is the websockets first connection so no dynamic
' content in the browser ... we are going to serve the dynamic content...
'log("websocket first connection")
page.Prepare
ConnectPage
End If
End If
'log("abmPageId)
'----------------------MODIFICATION-------------------------------
This is the NavigateToPageNewTab
B4X:
'----------------------START MODIFICATION 4.00-------------------------------
Public Sub NavigateToPageNewTab(ws As WebSocket, PageId As String, TargetUrl As String, OpenInNewTab As Boolean) 'ignore
Dim testTargetUrl As String = TargetUrl
If Not(testTargetUrl.EndsWith(".htm") Or testTargetUrl.EndsWith(".html") Or testTargetUrl.EndsWith("/")) Then
TargetUrl = TargetUrl & "/"
End If
If PageId.Length > 0 Then ABM.RemoveMeFromCache(CachedPages, PageId)
If ws.Open Then
If OpenInNewTab Then
Dim s As String
' check if a mobile phone only
' s = $"var check = false;
' (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
' if (check) {
' window.location = arguments[0];
' } else {
' window.open(arguments[0],'_blank');
' }"$
' check if a mobile phone or a tablet
s = $"var check = false;
(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
if (check) {
window.location = arguments[0];
} else {
window.open(arguments[0],'_blank');
}"$
ws.Eval(s, Array As Object(TargetUrl))
Else
ws.Eval("window.location = arguments[0]", Array As Object(TargetUrl))
End If
ws.Flush
ws.Close ' ALSO NEW 4.00
End If
End Sub
'----------------------END MODIFICATION 4.00-------------------------------
Attachments
Last edited: