Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-72050

Adding a comment, assign or watch an issue from a mobile browser fails in Jira

      Issue Summary

      Adding comment from a mobile browser fails in Jira 8.14, it's also failing to assign or watch an issue to any user. 

      Steps to Reproduce

      1. Deploy Jira 8.14 and create a project with sample data
      2. Either log in to Jira from a browser on a mobile device (Android or iOS), or via Chrome > F12 > Toggle device toolbar > Mid-tier mobile, access a ticket, and try to post a comment
      3. The same process describes above but try to assign any issue to any user or watch any issue

      Expected Results

      Comment should be posted and the assign / watch process should work.

      Actual Results

      The below exception is thrown in the console log:

      batch.js?locale=en-AU:5308 Uncaught TypeError: this.$el.find(...).spin is not a function
          at child._showSpinner (batch.js?locale=en-AU:5308)
          at child.addComment (batch.js?locale=en-AU:5256)
          at HTMLDivElement.<anonymous> (batch.js?locale=en-AU:13437)
          at HTMLDivElement.handler.proxy (batch.js?locale=en-AU:13333)
          at FastClick.JMOB../lib/fastclick/fastclick.js.FastClick.maybeSendClick (batch.js?locale=en-AU:10458)
          at FastClick.JMOB../lib/fastclick/fastclick.js.FastClick.onTouchEnd (batch.js?locale=en-AU:10614)
          at HTMLBodyElement.FastClick.onTouchEnd (batch.js?locale=en-AU:10341)
      
      batch.js?locale=en-US:52 JQMIGRATE: Migrate is installed, version 1.4.1
      batch.js?locale=en-US:1428 ***** Analytics log [mobile.page.view][{"page":"issue/JSP-14"}]
      batch.js?locale=en-US:12566 [Intervention] Images loaded lazily and replaced with placeholders. Load events are deferred. See https://crbug.com/954323
      batch.js?locale=en-US:13741 POST http://192.168.50.3:48132/j8132/plugins/servlet/undefined/rest/analytics/1.0/publish/bulk 404
      JMOB../lib/zepto/zepto.js.$.ajax @ batch.js?locale=en-US:13741
      (anonymous) @ batch.js?locale=en-US:10937
      (anonymous) @ batch.js?locale=en-US:10791
      n @ atlassian-analytics.js:2
      setTimeout (async)
      (anonymous) @ atlassian-analytics.js:5
      (anonymous) @ batch.js?locale=en-US:12792
      Consider disabling Chrome Data Saver while debugging. For more info see: https://support.google.com/chrome/?p=datasaver
      batch.js?locale=en-US:1428 ***** Analytics log [mobile.element.click][{"selector":"span.action-menu-button"}]
      batch.js?locale=en-US:1428 ***** Analytics log [mobile.element.click][{"selector":"button.user-assign-button.aui-button.jmob-action"}]
      batch.js?locale=en-US:13741 POST http://192.168.50.3:48132/j8132/plugins/servlet/undefined/rest/analytics/1.0/publish/bulk 404
      JMOB../lib/zepto/zepto.js.$.ajax @ batch.js?locale=en-US:13741
      (anonymous) @ batch.js?locale=en-US:10937
      (anonymous) @ batch.js?locale=en-US:10791
      n @ atlassian-analytics.js:2
      setTimeout (async)
      (anonymous) @ atlassian-analytics.js:3
      execute @ batch.js?locale=en-US:10801
      (anonymous) @ batch.js?locale=en-US:10839
      (anonymous) @ batch.js?locale=en-US:10952
      (anonymous) @ batch.js?locale=en-US:11613
      setTimeout (async)
      JMOB../lib/underscore/underscore.js._.delay @ batch.js?locale=en-US:11612
      JMOB../lib/underscore/underscore.js._.defer @ batch.js?locale=en-US:11620
      fn @ batch.js?locale=en-US:10951
      execute @ batch.js?locale=en-US:10801
      (anonymous) @ batch.js?locale=en-US:10881
      (anonymous) @ batch.js?locale=en-US:10926
      (anonymous) @ batch.js?locale=en-US:10791
      ajaxError @ batch.js?locale=en-US:13555
      xhr.onreadystatechange @ batch.js?locale=en-US:13719
      XMLHttpRequest.send (async)
      JMOB../lib/zepto/zepto.js.$.ajax @ batch.js?locale=en-US:13741
      (anonymous) @ batch.js?locale=en-US:10937
      (anonymous) @ batch.js?locale=en-US:10791
      n @ atlassian-analytics.js:2
      setTimeout (async)
      (anonymous) @ atlassian-analytics.js:5
      (anonymous) @ batch.js?locale=en-US:12792
      batch.js?locale=en-US:1428 ***** Analytics log [mobile.element.click][{"selector":"a"}]
      batch.js?locale=en-US:1428 ***** Analytics log [mobile.element.click][{"selector":"button.aui-button.main-action"}]
      batch.js?locale=en-US:7812 Uncaught TypeError: $indicator.find(...).spin is not a function
          at child.showLoading (batch.js?locale=en-US:7812)
          at child.showHeaderLoading (batch.js?locale=en-US:7361)
          at child._actionEventPrep (batch.js?locale=en-US:6358)
          at child.assignToUser (batch.js?locale=en-US:6313)
          at child.returnUser (batch.js?locale=en-US:15722)
          at HTMLDivElement.<anonymous> (batch.js?locale=en-US:13422)
          at HTMLDivElement.handler.proxy (batch.js?locale=en-US:13318)
          at FastClick.JMOB../lib/fastclick/fastclick.js.FastClick.maybeSendClick (batch.js?locale=en-US:10443)
          at FastClick.JMOB../lib/fastclick/fastclick.js.FastClick.onTouchEnd (batch.js?locale=en-US:10599)
          at HTMLBodyElement.FastClick.onTouchEnd (batch.js?locale=en-US:10326)
      showLoading @ batch.js?locale=en-US:7812
      showHeaderLoading @ batch.js?locale=en-US:7361
      _actionEventPrep @ batch.js?locale=en-US:6358
      assignToUser @ batch.js?locale=en-US:6313
      returnUser @ batch.js?locale=en-US:15722
      (anonymous) @ batch.js?locale=en-US:13422
      handler.proxy @ batch.js?locale=en-US:13318
      JMOB../lib/fastclick/fastclick.js.FastClick.maybeSendClick @ batch.js?locale=en-US:10443
      JMOB../lib/fastclick/fastclick.js.FastClick.onTouchEnd @ batch.js?locale=en-US:10599
      FastClick.onTouchEnd @ batch.js?locale=en-US:10326
      batch.js?locale=en-US:13741 POST http://192.168.50.3:48132/j8132/plugins/servlet/undefined/rest/analytics/1.0/publish/bulk 404
      JMOB../lib/zepto/zepto.js.$.ajax @ batch.js?locale=en-US:13741
      (anonymous) @ batch.js?locale=en-US:10937
      (anonymous) @ batch.js?locale=en-US:10791
      n @ atlassian-analytics.js:2
      setTimeout (async)
      (anonymous) @ atlassian-analytics.js:3
      execute @ batch.js?locale=en-US:10801
      (anonymous) @ batch.js?locale=en-US:10839
      (anonymous) @ batch.js?locale=en-US:10952
      (anonymous) @ batch.js?locale=en-US:11613
      setTimeout (async)
      JMOB../lib/underscore/underscore.js._.delay @ batch.js?locale=en-US:11612
      JMOB../lib/underscore/underscore.js._.defer @ batch.js?locale=en-US:11620
      fn @ batch.js?locale=en-US:10951
      execute @ batch.js?locale=en-US:10801
      (anonymous) @ batch.js?locale=en-US:10881
      (anonymous) @ batch.js?locale=en-US:10926
      (anonymous) @ batch.js?locale=en-US:10791
      ajaxError @ batch.js?locale=en-US:13555
      xhr.onreadystatechange @ batch.js?locale=en-US:13719
      XMLHttpRequest.send (async)
      JMOB../lib/zepto/zepto.js.$.ajax @ batch.js?locale=en-US:13741
      (anonymous) @ batch.js?locale=en-US:10937
      (anonymous) @ batch.js?locale=en-US:10791
      n @ atlassian-analytics.js:2
      setTimeout (async)
      (anonymous) @ atlassian-analytics.js:3
      execute @ batch.js?locale=en-US:10801
      (anonymous) @ batch.js?locale=en-US:10839
      (anonymous) @ batch.js?locale=en-US:10952
      (anonymous) @ batch.js?locale=en-US:11613
      setTimeout (async)
      JMOB../lib/underscore/underscore.js._.delay @ batch.js?locale=en-US:11612
      JMOB../lib/underscore/underscore.js._.defer @ batch.js?locale=en-US:11620
      fn @ batch.js?locale=en-US:10951
      execute @ batch.js?locale=en-US:10801
      (anonymous) @ batch.js?locale=en-US:10881
      (anonymous) @ batch.js?locale=en-US:10926
      (anonymous) @ batch.js?locale=en-US:10791
      ajaxError @ batch.js?locale=en-US:13555
      xhr.onreadystatechange @ batch.js?locale=en-US:13719
      XMLHttpRequest.send (async)
      JMOB../lib/zepto/zepto.js.$.ajax @ batch.js?locale=en-US:13741
      (anonymous) @ batch.js?locale=en-US:10937
      (anonymous) @ batch.js?locale=en-US:10791
      n @ atlassian-analytics.js:2
      setTimeout (async)
      (anonymous) @ atlassian-analytics.js:5
      (anonymous) @ batch.js?locale=en-US:12792
      
      

      Workaround

      Option 1: The preferred way of accessing Jira is via the mobile app that is available via both Google Play or Apple App Store

      Option 2: Switch to desktop view in the mobile browser

            [JRASERVER-72050] Adding a comment, assign or watch an issue from a mobile browser fails in Jira

            A few more changes to resolve other navigation issues (like watching and showing more results).  This includes the previously mentioned spin.  The diff compares the default from 8.20.8 with the modified version that works for Mobile presentation.

            1a2
            >
            5299c5300
            <             $buttonContainer.find('.loading-spinner').spin('small', {
            ---
            >             /*$buttonContainer.find('.loading-spinner').spin('small', {
            5302c5303
            <             });
            ---
            >             });*/
            8087,8090c8088
            <             const $spinner = $indicator.find('.spinner').spin('small', {
            <                 left: 0,
            <                 top: 'auto'
            <             });
            ---
            >             const $spinner = "";
            8106,8107c8104,8105
            <                 this.loading.spinner.spinStop();
            <                 this.loading.cancel.hide();
            ---
            >                 //this.loading.spinner.spinStop();
            >                 //this.loading.cancel.hide();
            8244,8247c8242
            <             const $spinner = $indicator.find('.spinner').spin('small', {
            <                 left: 0,
            <                 top: 'auto'
            <             });
            ---
            >             const $spinner = "";
            8271c8266
            <                 this.loading.spinner.spinStop();
            ---
            >                 //this.loading.spinner.spinStop();
            16148a16144
             

            Michael Alexander added a comment - A few more changes to resolve other navigation issues (like watching and showing more results).  This includes the previously mentioned spin.  The diff compares the default from 8.20.8 with the modified version that works for Mobile presentation. 1a2 > 5299c5300 <             $buttonContainer.find('.loading-spinner').spin('small', { --- >             /*$buttonContainer.find('.loading-spinner').spin('small', { 5302c5303 <             }); --- >             });*/ 8087,8090c8088 <             const $spinner = $indicator.find('.spinner').spin('small', { <                 left: 0, <                 top: 'auto' <             }); --- >             const $spinner = ""; 8106,8107c8104,8105 <                 this.loading.spinner.spinStop(); <                 this.loading.cancel.hide(); --- >                 //this.loading.spinner.spinStop(); >                 //this.loading.cancel.hide(); 8244,8247c8242 <             const $spinner = $indicator.find('.spinner').spin('small', { <                 left: 0, <                 top: 'auto' <             }); --- >             const $spinner = ""; 8271c8266 <                 this.loading.spinner.spinStop(); --- >                 //this.loading.spinner.spinStop(); 16148a16144

            If you are using a RP, you could put the content in the web server, like in Apache. 

            1. Get the batch.js location depending on your version and path, like with network tools and curl to save
            2. Make the path in your document root:
              mkdir s/397b233c709880650bf0915b41db82d5-CDN/osj13l/820011/178m3jb/8b59e6020e4d5af0f6bd88afb3a68dc4/_/plugins/servlet/mobile/download/contextbatch/js/mob-general/
            1. Edit the file s/397b233c709880650bf0915b41db82d5-CDN/osj13l/820011/178m3jb/8b59e6020e4d5af0f6bd88afb3a68dc4/_/plugins/servlet/mobile/download/contextbatch/js/mob-general/batch.js
            2. Change the affected line with the .spin function that's missing
              /* FROM */
                         const $spinner = $indicator.find('.spinner').spin('small', {
                              left: 0,
                              top: 'auto'
                          });
              /* TO: */
                         const $spinner = "";
              
            1. Edit the RP IN Apache:
              <Location /s/397b233c709880650bf0915b41db82d5-CDN/osj13l/820011/178m3jb/8b59e6020e4d5af0f6bd88afb3a68dc4/_/plugins/servlet/mobile/download/contextbatch/js/mob-general/batch.js >
                ProxyPass !
              </Location>
              

            Every upgrade will need the generated CDN content paths fixed.  Presumably if the content changes, you'd think the $spinner var would be fixed, but probably need to update that as well.

            Michael Alexander added a comment - If you are using a RP, you could put the content in the web server, like in Apache.  Get the batch.js location depending on your version and path, like with network tools and curl to save Make the path in your document root: mkdir s/397b233c709880650bf0915b41db82d5-CDN/osj13l/820011/178m3jb/8b59e6020e4d5af0f6bd88afb3a68dc4/_/plugins/servlet/mobile/download/contextbatch/js/mob-general/ Edit the file s/397b233c709880650bf0915b41db82d5-CDN/osj13l/820011/178m3jb/8b59e6020e4d5af0f6bd88afb3a68dc4/_/plugins/servlet/mobile/download/contextbatch/js/mob-general/batch.js Change the affected line with the .spin function that's missing /* FROM */           const $spinner = $indicator.find( '.spinner' ).spin( 'small' , {                 left: 0,                 top: 'auto'             }); /* TO: */ const $spinner = ""; Edit the RP IN Apache: <Location /s/397b233c709880650bf0915b41db82d5-CDN/osj13l/820011/178m3jb/8b59e6020e4d5af0f6bd88afb3a68dc4/_/plugins/servlet/mobile/download/contextbatch/js/mob-general/batch.js > ProxyPass ! </Location> Every upgrade will need the generated CDN content paths fixed.  Presumably if the content changes, you'd think the $spinner var would be fixed, but probably need to update that as well.

            The workarounds provided are very unsatisfactory - the Mobile app has many other issues (JRASERVER-71693 + many fields are hidden by default, and opening them up shows EVERY field even if it is empty, unlike on desktop Jira), and desktop mode on a mobile device is practically unreadable. Can we reconsider the prioritization?

            ecentria-labs added a comment - The workarounds provided are very unsatisfactory - the Mobile app has many other issues ( JRASERVER-71693 + many fields are hidden by default, and opening them up shows EVERY field even if it is empty, unlike on desktop Jira), and desktop mode on a mobile device is practically unreadable. Can we reconsider the prioritization?

            Adamekbp added a comment -

            +1

            Adamekbp added a comment - +1

            Jira 8.20.11 / 8.20.13 is also affected by this issue.

            Benjamin W. added a comment - Jira 8.20.11 / 8.20.13 is also affected by this issue.

            veronica added a comment -

            This is critical for us, any news? 

            veronica added a comment - This is critical for us, any news? 

            morana1 added a comment -

            +1

            morana1 added a comment - +1

            +1

            Italo Lobato added a comment - +1

            Mobile version was/is still ! needed feature, @Atlassian are you going to fix this ?

            Konrad Siejka added a comment - Mobile version was/is still ! needed feature, @Atlassian are you going to fix this ?

            veronica added a comment -

            For us , DC 8.20.1 still happening

            veronica added a comment - For us , DC 8.20.1 still happening

              Unassigned Unassigned
              soslopov Sergey
              Affected customers:
              30 This affects my team
              Watchers:
              45 Start watching this issue

                Created:
                Updated: