Vue offline - #1962

Merged
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline
Jul 1, 2020
Merged

Vue offline#1962
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 18, 2020

Copy link
Copy Markdown
Contributor

Description

Added offline indicators to all pages/modals (except for import). Since it touches all the pages, it's best to get this PR merged first #1952

Screenshots (if applicable)

Channel edit modal

image
image

Channel list

image
image
image

Channel collection modal

image
image

Move modal

image

Trash modal

image

Edit modal

image
image

Settings

image
image
image

Steps to Test

  • Go to all the pages and try disabling your connection

Implementation Notes (optional)

Does this introduce any tech-debt items?

Noticed that there's a lot to update on the import modal, so will address that in a separate PR

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all user-facing strings translated properly (if applicable)?
  • Has the notranslate class been added to elements that shouldn't be translated by Google Chrome's automatic translation feature (e.g. icons, user-generated text)?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are there any new interactions that need to be added to the QA Sheet?
  • Are there opportunities for using Google Analytics here (if applicable)?

@jayoshihjayoshih removed the WIP label Jun 18, 2020
@jayoshihjayoshih added the qa-ready Create a demo server for this pull request label Jun 18, 2020
@codecov

codecovBot commented Jun 18, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1962 into vue-refactor will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## vue-refactor #1962 +/- ##
=============================================
Coverage 78.87% 78.87% =============================================
Files 274 274 Lines 13659 13659 =============================================
Hits 10773 10773 Misses 2886 2886 

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 794737d...d0a7fca. Read the comment docs.

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Looks like the suites are passing, Travis just hasn't detected that it's done

@micahscopesmicahscopes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, this looks really great. I'm especially pleased that you can just drop the offline status component into any component that needs it, that it's not built into the top navbar.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things for clarification - the need to repeatedly offset and position, and the HTML scroll behaviours.

The actual offline indicator stuff looks great, and has a good balance between being insertable anywhere it is needed, but also being present by default wherever possible.

},
},
watch: {
value(val) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we generally controlling the display of FullscreenModals via the values prop, or more often via a route?

Might be good to add a destroy handler here that calls this.hideHTMLScroll(false) in case it is just being cleaned up as part of a client side navigation.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had tried that originally, but there were some difficulties with using the keep-alive option on the router-view tags. Should we avoid using this attribute in general?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh right - so what we really want is a 'when rendered' handler. Going to take a look at what the equivalent work flow is when you are using the keep-alive property.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh... we should use the activated and deactivated life cycle hooks: https://vuejs.org/v2/api/#keep-alive

These will be called whenever the kept alive component is brought back into use, and then when shut down!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filed a follow up issue here: #1978

</VTabs>
</template>
</VToolbar>
<OfflineText toolbar :offset="topToolbarHeight" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hrm - these offsets feel a bit odd to me, is this a Vuetify issue that the components would overlap each other otherwise? Seems like an odd design decision on their part.

@jayoshihjayoshihJun 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I tried to use their app attribute, but the problem there is that it affects the layout of the main page because it's used on a modal (everything outside of the modal also shifts to the sizing on the modal). This is sort of a way to get the same behavior without causing problems (also some weird handling because there are multiple toolbars on the page)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think this may be where my decision to use nested routes is not helping us at all. I think we had tentatively decided to go back on this previously, but don't think we've actually acted on it.

If each full screen modal was its own independent route, then it wouldn't have the same issue of the app attribute causing issues on the page it is covering.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be nice! Next pass :)

@rtibbles
rtibbles changed the base branch from vue-refactor to developJune 29, 2020 21:53
@jayoshihjayoshih mentioned this pull request Jun 30, 2020
8 tasks
@rtibbles
rtibbles merged commit 7b8b14f into learningequality:developJul 1, 2020
@jayoshih
jayoshih deleted the vue-offline branch August 24, 2020 21:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

qa-readyCreate a demo server for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jayoshih@micahscopes@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Vue offline - #1962

Merged
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline
Jul 1, 2020
Merged

Vue offline#1962
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 18, 2020

Copy link
Copy Markdown
Contributor

Description

Added offline indicators to all pages/modals (except for import). Since it touches all the pages, it's best to get this PR merged first #1952

Screenshots (if applicable)

Channel edit modal

image
image

Channel list

image
image
image

Channel collection modal

image
image

Move modal

image

Trash modal

image

Edit modal

image
image

Settings

image
image
image

Steps to Test

  • Go to all the pages and try disabling your connection

Implementation Notes (optional)

Does this introduce any tech-debt items?

Noticed that there's a lot to update on the import modal, so will address that in a separate PR

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all user-facing strings translated properly (if applicable)?
  • Has the notranslate class been added to elements that shouldn't be translated by Google Chrome's automatic translation feature (e.g. icons, user-generated text)?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are there any new interactions that need to be added to the QA Sheet?
  • Are there opportunities for using Google Analytics here (if applicable)?

@jayoshihjayoshih removed the WIP label Jun 18, 2020
@jayoshihjayoshih added the qa-ready Create a demo server for this pull request label Jun 18, 2020
@codecov

codecovBot commented Jun 18, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1962 into vue-refactor will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## vue-refactor #1962 +/- ##
=============================================
Coverage 78.87% 78.87% =============================================
Files 274 274 Lines 13659 13659 =============================================
Hits 10773 10773 Misses 2886 2886 

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 794737d...d0a7fca. Read the comment docs.

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Looks like the suites are passing, Travis just hasn't detected that it's done

@micahscopesmicahscopes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, this looks really great. I'm especially pleased that you can just drop the offline status component into any component that needs it, that it's not built into the top navbar.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things for clarification - the need to repeatedly offset and position, and the HTML scroll behaviours.

The actual offline indicator stuff looks great, and has a good balance between being insertable anywhere it is needed, but also being present by default wherever possible.

},
},
watch: {
value(val) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we generally controlling the display of FullscreenModals via the values prop, or more often via a route?

Might be good to add a destroy handler here that calls this.hideHTMLScroll(false) in case it is just being cleaned up as part of a client side navigation.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had tried that originally, but there were some difficulties with using the keep-alive option on the router-view tags. Should we avoid using this attribute in general?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh right - so what we really want is a 'when rendered' handler. Going to take a look at what the equivalent work flow is when you are using the keep-alive property.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh... we should use the activated and deactivated life cycle hooks: https://vuejs.org/v2/api/#keep-alive

These will be called whenever the kept alive component is brought back into use, and then when shut down!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filed a follow up issue here: #1978

</VTabs>
</template>
</VToolbar>
<OfflineText toolbar :offset="topToolbarHeight" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hrm - these offsets feel a bit odd to me, is this a Vuetify issue that the components would overlap each other otherwise? Seems like an odd design decision on their part.

@jayoshihjayoshihJun 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I tried to use their app attribute, but the problem there is that it affects the layout of the main page because it's used on a modal (everything outside of the modal also shifts to the sizing on the modal). This is sort of a way to get the same behavior without causing problems (also some weird handling because there are multiple toolbars on the page)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think this may be where my decision to use nested routes is not helping us at all. I think we had tentatively decided to go back on this previously, but don't think we've actually acted on it.

If each full screen modal was its own independent route, then it wouldn't have the same issue of the app attribute causing issues on the page it is covering.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be nice! Next pass :)

@rtibbles
rtibbles changed the base branch from vue-refactor to developJune 29, 2020 21:53
@jayoshihjayoshih mentioned this pull request Jun 30, 2020
8 tasks
@rtibbles
rtibbles merged commit 7b8b14f into learningequality:developJul 1, 2020
@jayoshih
jayoshih deleted the vue-offline branch August 24, 2020 21:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

qa-readyCreate a demo server for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jayoshih@micahscopes@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Vue offline - #1962

Merged
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline
Jul 1, 2020
Merged

Vue offline#1962
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 18, 2020

Copy link
Copy Markdown
Contributor

Description

Added offline indicators to all pages/modals (except for import). Since it touches all the pages, it's best to get this PR merged first #1952

Screenshots (if applicable)

Channel edit modal

image
image

Channel list

image
image
image

Channel collection modal

image
image

Move modal

image

Trash modal

image

Edit modal

image
image

Settings

image
image
image

Steps to Test

  • Go to all the pages and try disabling your connection

Implementation Notes (optional)

Does this introduce any tech-debt items?

Noticed that there's a lot to update on the import modal, so will address that in a separate PR

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all user-facing strings translated properly (if applicable)?
  • Has the notranslate class been added to elements that shouldn't be translated by Google Chrome's automatic translation feature (e.g. icons, user-generated text)?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are there any new interactions that need to be added to the QA Sheet?
  • Are there opportunities for using Google Analytics here (if applicable)?

@jayoshihjayoshih removed the WIP label Jun 18, 2020
@jayoshihjayoshih added the qa-ready Create a demo server for this pull request label Jun 18, 2020
@codecov

codecovBot commented Jun 18, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1962 into vue-refactor will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## vue-refactor #1962 +/- ##
=============================================
Coverage 78.87% 78.87% =============================================
Files 274 274 Lines 13659 13659 =============================================
Hits 10773 10773 Misses 2886 2886 

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 794737d...d0a7fca. Read the comment docs.

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Looks like the suites are passing, Travis just hasn't detected that it's done

@micahscopesmicahscopes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, this looks really great. I'm especially pleased that you can just drop the offline status component into any component that needs it, that it's not built into the top navbar.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things for clarification - the need to repeatedly offset and position, and the HTML scroll behaviours.

The actual offline indicator stuff looks great, and has a good balance between being insertable anywhere it is needed, but also being present by default wherever possible.

},
},
watch: {
value(val) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we generally controlling the display of FullscreenModals via the values prop, or more often via a route?

Might be good to add a destroy handler here that calls this.hideHTMLScroll(false) in case it is just being cleaned up as part of a client side navigation.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had tried that originally, but there were some difficulties with using the keep-alive option on the router-view tags. Should we avoid using this attribute in general?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh right - so what we really want is a 'when rendered' handler. Going to take a look at what the equivalent work flow is when you are using the keep-alive property.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh... we should use the activated and deactivated life cycle hooks: https://vuejs.org/v2/api/#keep-alive

These will be called whenever the kept alive component is brought back into use, and then when shut down!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filed a follow up issue here: #1978

</VTabs>
</template>
</VToolbar>
<OfflineText toolbar :offset="topToolbarHeight" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hrm - these offsets feel a bit odd to me, is this a Vuetify issue that the components would overlap each other otherwise? Seems like an odd design decision on their part.

@jayoshihjayoshihJun 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I tried to use their app attribute, but the problem there is that it affects the layout of the main page because it's used on a modal (everything outside of the modal also shifts to the sizing on the modal). This is sort of a way to get the same behavior without causing problems (also some weird handling because there are multiple toolbars on the page)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think this may be where my decision to use nested routes is not helping us at all. I think we had tentatively decided to go back on this previously, but don't think we've actually acted on it.

If each full screen modal was its own independent route, then it wouldn't have the same issue of the app attribute causing issues on the page it is covering.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be nice! Next pass :)

@rtibbles
rtibbles changed the base branch from vue-refactor to developJune 29, 2020 21:53
@jayoshihjayoshih mentioned this pull request Jun 30, 2020
8 tasks
@rtibbles
rtibbles merged commit 7b8b14f into learningequality:developJul 1, 2020
@jayoshih
jayoshih deleted the vue-offline branch August 24, 2020 21:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

qa-readyCreate a demo server for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jayoshih@micahscopes@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Vue offline - #1962

Merged
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline
Jul 1, 2020
Merged

Vue offline#1962
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 18, 2020

Copy link
Copy Markdown
Contributor

Description

Added offline indicators to all pages/modals (except for import). Since it touches all the pages, it's best to get this PR merged first #1952

Screenshots (if applicable)

Channel edit modal

image
image

Channel list

image
image
image

Channel collection modal

image
image

Move modal

image

Trash modal

image

Edit modal

image
image

Settings

image
image
image

Steps to Test

  • Go to all the pages and try disabling your connection

Implementation Notes (optional)

Does this introduce any tech-debt items?

Noticed that there's a lot to update on the import modal, so will address that in a separate PR

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all user-facing strings translated properly (if applicable)?
  • Has the notranslate class been added to elements that shouldn't be translated by Google Chrome's automatic translation feature (e.g. icons, user-generated text)?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are there any new interactions that need to be added to the QA Sheet?
  • Are there opportunities for using Google Analytics here (if applicable)?

@jayoshihjayoshih removed the WIP label Jun 18, 2020
@jayoshihjayoshih added the qa-ready Create a demo server for this pull request label Jun 18, 2020
@codecov

codecovBot commented Jun 18, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1962 into vue-refactor will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## vue-refactor #1962 +/- ##
=============================================
Coverage 78.87% 78.87% =============================================
Files 274 274 Lines 13659 13659 =============================================
Hits 10773 10773 Misses 2886 2886 

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 794737d...d0a7fca. Read the comment docs.

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Looks like the suites are passing, Travis just hasn't detected that it's done

@micahscopesmicahscopes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, this looks really great. I'm especially pleased that you can just drop the offline status component into any component that needs it, that it's not built into the top navbar.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things for clarification - the need to repeatedly offset and position, and the HTML scroll behaviours.

The actual offline indicator stuff looks great, and has a good balance between being insertable anywhere it is needed, but also being present by default wherever possible.

},
},
watch: {
value(val) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we generally controlling the display of FullscreenModals via the values prop, or more often via a route?

Might be good to add a destroy handler here that calls this.hideHTMLScroll(false) in case it is just being cleaned up as part of a client side navigation.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had tried that originally, but there were some difficulties with using the keep-alive option on the router-view tags. Should we avoid using this attribute in general?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh right - so what we really want is a 'when rendered' handler. Going to take a look at what the equivalent work flow is when you are using the keep-alive property.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh... we should use the activated and deactivated life cycle hooks: https://vuejs.org/v2/api/#keep-alive

These will be called whenever the kept alive component is brought back into use, and then when shut down!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filed a follow up issue here: #1978

</VTabs>
</template>
</VToolbar>
<OfflineText toolbar :offset="topToolbarHeight" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hrm - these offsets feel a bit odd to me, is this a Vuetify issue that the components would overlap each other otherwise? Seems like an odd design decision on their part.

@jayoshihjayoshihJun 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I tried to use their app attribute, but the problem there is that it affects the layout of the main page because it's used on a modal (everything outside of the modal also shifts to the sizing on the modal). This is sort of a way to get the same behavior without causing problems (also some weird handling because there are multiple toolbars on the page)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think this may be where my decision to use nested routes is not helping us at all. I think we had tentatively decided to go back on this previously, but don't think we've actually acted on it.

If each full screen modal was its own independent route, then it wouldn't have the same issue of the app attribute causing issues on the page it is covering.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be nice! Next pass :)

@rtibbles
rtibbles changed the base branch from vue-refactor to developJune 29, 2020 21:53
@jayoshihjayoshih mentioned this pull request Jun 30, 2020
8 tasks
@rtibbles
rtibbles merged commit 7b8b14f into learningequality:developJul 1, 2020
@jayoshih
jayoshih deleted the vue-offline branch August 24, 2020 21:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

qa-readyCreate a demo server for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jayoshih@micahscopes@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Vue offline - #1962

Merged
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline
Jul 1, 2020
Merged

Vue offline#1962
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 18, 2020

Copy link
Copy Markdown
Contributor

Description

Added offline indicators to all pages/modals (except for import). Since it touches all the pages, it's best to get this PR merged first #1952

Screenshots (if applicable)

Channel edit modal

image
image

Channel list

image
image
image

Channel collection modal

image
image

Move modal

image

Trash modal

image

Edit modal

image
image

Settings

image
image
image

Steps to Test

  • Go to all the pages and try disabling your connection

Implementation Notes (optional)

Does this introduce any tech-debt items?

Noticed that there's a lot to update on the import modal, so will address that in a separate PR

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all user-facing strings translated properly (if applicable)?
  • Has the notranslate class been added to elements that shouldn't be translated by Google Chrome's automatic translation feature (e.g. icons, user-generated text)?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are there any new interactions that need to be added to the QA Sheet?
  • Are there opportunities for using Google Analytics here (if applicable)?

@jayoshihjayoshih removed the WIP label Jun 18, 2020
@jayoshihjayoshih added the qa-ready Create a demo server for this pull request label Jun 18, 2020
@codecov

codecovBot commented Jun 18, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1962 into vue-refactor will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## vue-refactor #1962 +/- ##
=============================================
Coverage 78.87% 78.87% =============================================
Files 274 274 Lines 13659 13659 =============================================
Hits 10773 10773 Misses 2886 2886 

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 794737d...d0a7fca. Read the comment docs.

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Looks like the suites are passing, Travis just hasn't detected that it's done

@micahscopesmicahscopes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, this looks really great. I'm especially pleased that you can just drop the offline status component into any component that needs it, that it's not built into the top navbar.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things for clarification - the need to repeatedly offset and position, and the HTML scroll behaviours.

The actual offline indicator stuff looks great, and has a good balance between being insertable anywhere it is needed, but also being present by default wherever possible.

},
},
watch: {
value(val) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we generally controlling the display of FullscreenModals via the values prop, or more often via a route?

Might be good to add a destroy handler here that calls this.hideHTMLScroll(false) in case it is just being cleaned up as part of a client side navigation.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had tried that originally, but there were some difficulties with using the keep-alive option on the router-view tags. Should we avoid using this attribute in general?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh right - so what we really want is a 'when rendered' handler. Going to take a look at what the equivalent work flow is when you are using the keep-alive property.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh... we should use the activated and deactivated life cycle hooks: https://vuejs.org/v2/api/#keep-alive

These will be called whenever the kept alive component is brought back into use, and then when shut down!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filed a follow up issue here: #1978

</VTabs>
</template>
</VToolbar>
<OfflineText toolbar :offset="topToolbarHeight" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hrm - these offsets feel a bit odd to me, is this a Vuetify issue that the components would overlap each other otherwise? Seems like an odd design decision on their part.

@jayoshihjayoshihJun 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I tried to use their app attribute, but the problem there is that it affects the layout of the main page because it's used on a modal (everything outside of the modal also shifts to the sizing on the modal). This is sort of a way to get the same behavior without causing problems (also some weird handling because there are multiple toolbars on the page)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think this may be where my decision to use nested routes is not helping us at all. I think we had tentatively decided to go back on this previously, but don't think we've actually acted on it.

If each full screen modal was its own independent route, then it wouldn't have the same issue of the app attribute causing issues on the page it is covering.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be nice! Next pass :)

@rtibbles
rtibbles changed the base branch from vue-refactor to developJune 29, 2020 21:53
@jayoshihjayoshih mentioned this pull request Jun 30, 2020
8 tasks
@rtibbles
rtibbles merged commit 7b8b14f into learningequality:developJul 1, 2020
@jayoshih
jayoshih deleted the vue-offline branch August 24, 2020 21:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

qa-readyCreate a demo server for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jayoshih@micahscopes@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Vue offline - #1962

Merged
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline
Jul 1, 2020
Merged

Vue offline#1962
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 18, 2020

Copy link
Copy Markdown
Contributor

Description

Added offline indicators to all pages/modals (except for import). Since it touches all the pages, it's best to get this PR merged first #1952

Screenshots (if applicable)

Channel edit modal

image
image

Channel list

image
image
image

Channel collection modal

image
image

Move modal

image

Trash modal

image

Edit modal

image
image

Settings

image
image
image

Steps to Test

  • Go to all the pages and try disabling your connection

Implementation Notes (optional)

Does this introduce any tech-debt items?

Noticed that there's a lot to update on the import modal, so will address that in a separate PR

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all user-facing strings translated properly (if applicable)?
  • Has the notranslate class been added to elements that shouldn't be translated by Google Chrome's automatic translation feature (e.g. icons, user-generated text)?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are there any new interactions that need to be added to the QA Sheet?
  • Are there opportunities for using Google Analytics here (if applicable)?

@jayoshihjayoshih removed the WIP label Jun 18, 2020
@jayoshihjayoshih added the qa-ready Create a demo server for this pull request label Jun 18, 2020
@codecov

codecovBot commented Jun 18, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1962 into vue-refactor will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## vue-refactor #1962 +/- ##
=============================================
Coverage 78.87% 78.87% =============================================
Files 274 274 Lines 13659 13659 =============================================
Hits 10773 10773 Misses 2886 2886 

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 794737d...d0a7fca. Read the comment docs.

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Looks like the suites are passing, Travis just hasn't detected that it's done

@micahscopesmicahscopes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, this looks really great. I'm especially pleased that you can just drop the offline status component into any component that needs it, that it's not built into the top navbar.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things for clarification - the need to repeatedly offset and position, and the HTML scroll behaviours.

The actual offline indicator stuff looks great, and has a good balance between being insertable anywhere it is needed, but also being present by default wherever possible.

},
},
watch: {
value(val) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we generally controlling the display of FullscreenModals via the values prop, or more often via a route?

Might be good to add a destroy handler here that calls this.hideHTMLScroll(false) in case it is just being cleaned up as part of a client side navigation.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had tried that originally, but there were some difficulties with using the keep-alive option on the router-view tags. Should we avoid using this attribute in general?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh right - so what we really want is a 'when rendered' handler. Going to take a look at what the equivalent work flow is when you are using the keep-alive property.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh... we should use the activated and deactivated life cycle hooks: https://vuejs.org/v2/api/#keep-alive

These will be called whenever the kept alive component is brought back into use, and then when shut down!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filed a follow up issue here: #1978

</VTabs>
</template>
</VToolbar>
<OfflineText toolbar :offset="topToolbarHeight" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hrm - these offsets feel a bit odd to me, is this a Vuetify issue that the components would overlap each other otherwise? Seems like an odd design decision on their part.

@jayoshihjayoshihJun 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I tried to use their app attribute, but the problem there is that it affects the layout of the main page because it's used on a modal (everything outside of the modal also shifts to the sizing on the modal). This is sort of a way to get the same behavior without causing problems (also some weird handling because there are multiple toolbars on the page)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think this may be where my decision to use nested routes is not helping us at all. I think we had tentatively decided to go back on this previously, but don't think we've actually acted on it.

If each full screen modal was its own independent route, then it wouldn't have the same issue of the app attribute causing issues on the page it is covering.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be nice! Next pass :)

@rtibbles
rtibbles changed the base branch from vue-refactor to developJune 29, 2020 21:53
@jayoshihjayoshih mentioned this pull request Jun 30, 2020
8 tasks
@rtibbles
rtibbles merged commit 7b8b14f into learningequality:developJul 1, 2020
@jayoshih
jayoshih deleted the vue-offline branch August 24, 2020 21:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

qa-readyCreate a demo server for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jayoshih@micahscopes@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Vue offline - #1962

Merged
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline
Jul 1, 2020
Merged

Vue offline#1962
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 18, 2020

Copy link
Copy Markdown
Contributor

Description

Added offline indicators to all pages/modals (except for import). Since it touches all the pages, it's best to get this PR merged first #1952

Screenshots (if applicable)

Channel edit modal

image
image

Channel list

image
image
image

Channel collection modal

image
image

Move modal

image

Trash modal

image

Edit modal

image
image

Settings

image
image
image

Steps to Test

  • Go to all the pages and try disabling your connection

Implementation Notes (optional)

Does this introduce any tech-debt items?

Noticed that there's a lot to update on the import modal, so will address that in a separate PR

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all user-facing strings translated properly (if applicable)?
  • Has the notranslate class been added to elements that shouldn't be translated by Google Chrome's automatic translation feature (e.g. icons, user-generated text)?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are there any new interactions that need to be added to the QA Sheet?
  • Are there opportunities for using Google Analytics here (if applicable)?

@jayoshihjayoshih removed the WIP label Jun 18, 2020
@jayoshihjayoshih added the qa-ready Create a demo server for this pull request label Jun 18, 2020
@codecov

codecovBot commented Jun 18, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1962 into vue-refactor will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## vue-refactor #1962 +/- ##
=============================================
Coverage 78.87% 78.87% =============================================
Files 274 274 Lines 13659 13659 =============================================
Hits 10773 10773 Misses 2886 2886 

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 794737d...d0a7fca. Read the comment docs.

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Looks like the suites are passing, Travis just hasn't detected that it's done

@micahscopesmicahscopes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, this looks really great. I'm especially pleased that you can just drop the offline status component into any component that needs it, that it's not built into the top navbar.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things for clarification - the need to repeatedly offset and position, and the HTML scroll behaviours.

The actual offline indicator stuff looks great, and has a good balance between being insertable anywhere it is needed, but also being present by default wherever possible.

},
},
watch: {
value(val) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we generally controlling the display of FullscreenModals via the values prop, or more often via a route?

Might be good to add a destroy handler here that calls this.hideHTMLScroll(false) in case it is just being cleaned up as part of a client side navigation.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had tried that originally, but there were some difficulties with using the keep-alive option on the router-view tags. Should we avoid using this attribute in general?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh right - so what we really want is a 'when rendered' handler. Going to take a look at what the equivalent work flow is when you are using the keep-alive property.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh... we should use the activated and deactivated life cycle hooks: https://vuejs.org/v2/api/#keep-alive

These will be called whenever the kept alive component is brought back into use, and then when shut down!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filed a follow up issue here: #1978

</VTabs>
</template>
</VToolbar>
<OfflineText toolbar :offset="topToolbarHeight" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hrm - these offsets feel a bit odd to me, is this a Vuetify issue that the components would overlap each other otherwise? Seems like an odd design decision on their part.

@jayoshihjayoshihJun 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I tried to use their app attribute, but the problem there is that it affects the layout of the main page because it's used on a modal (everything outside of the modal also shifts to the sizing on the modal). This is sort of a way to get the same behavior without causing problems (also some weird handling because there are multiple toolbars on the page)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think this may be where my decision to use nested routes is not helping us at all. I think we had tentatively decided to go back on this previously, but don't think we've actually acted on it.

If each full screen modal was its own independent route, then it wouldn't have the same issue of the app attribute causing issues on the page it is covering.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be nice! Next pass :)

@rtibbles
rtibbles changed the base branch from vue-refactor to developJune 29, 2020 21:53
@jayoshihjayoshih mentioned this pull request Jun 30, 2020
8 tasks
@rtibbles
rtibbles merged commit 7b8b14f into learningequality:developJul 1, 2020
@jayoshih
jayoshih deleted the vue-offline branch August 24, 2020 21:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

qa-readyCreate a demo server for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jayoshih@micahscopes@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Vue offline - #1962

Merged
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline
Jul 1, 2020
Merged

Vue offline#1962
rtibbles merged 15 commits into
learningequality:developfrom
jayoshih:vue-offline

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 18, 2020

Copy link
Copy Markdown
Contributor

Description

Added offline indicators to all pages/modals (except for import). Since it touches all the pages, it's best to get this PR merged first #1952

Screenshots (if applicable)

Channel edit modal

image
image

Channel list

image
image
image

Channel collection modal

image
image

Move modal

image

Trash modal

image

Edit modal

image
image

Settings

image
image
image

Steps to Test

  • Go to all the pages and try disabling your connection

Implementation Notes (optional)

Does this introduce any tech-debt items?

Noticed that there's a lot to update on the import modal, so will address that in a separate PR

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all user-facing strings translated properly (if applicable)?
  • Has the notranslate class been added to elements that shouldn't be translated by Google Chrome's automatic translation feature (e.g. icons, user-generated text)?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are there any new interactions that need to be added to the QA Sheet?
  • Are there opportunities for using Google Analytics here (if applicable)?

@jayoshihjayoshih removed the WIP label Jun 18, 2020
@jayoshihjayoshih added the qa-ready Create a demo server for this pull request label Jun 18, 2020
@codecov

codecovBot commented Jun 18, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1962 into vue-refactor will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@ Coverage Diff @@## vue-refactor #1962 +/- ##
=============================================
Coverage 78.87% 78.87% =============================================
Files 274 274 Lines 13659 13659 =============================================
Hits 10773 10773 Misses 2886 2886 

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 794737d...d0a7fca. Read the comment docs.

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Looks like the suites are passing, Travis just hasn't detected that it's done

@micahscopesmicahscopes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, this looks really great. I'm especially pleased that you can just drop the offline status component into any component that needs it, that it's not built into the top navbar.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things for clarification - the need to repeatedly offset and position, and the HTML scroll behaviours.

The actual offline indicator stuff looks great, and has a good balance between being insertable anywhere it is needed, but also being present by default wherever possible.

},
},
watch: {
value(val) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we generally controlling the display of FullscreenModals via the values prop, or more often via a route?

Might be good to add a destroy handler here that calls this.hideHTMLScroll(false) in case it is just being cleaned up as part of a client side navigation.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had tried that originally, but there were some difficulties with using the keep-alive option on the router-view tags. Should we avoid using this attribute in general?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh right - so what we really want is a 'when rendered' handler. Going to take a look at what the equivalent work flow is when you are using the keep-alive property.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh... we should use the activated and deactivated life cycle hooks: https://vuejs.org/v2/api/#keep-alive

These will be called whenever the kept alive component is brought back into use, and then when shut down!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filed a follow up issue here: #1978

</VTabs>
</template>
</VToolbar>
<OfflineText toolbar :offset="topToolbarHeight" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hrm - these offsets feel a bit odd to me, is this a Vuetify issue that the components would overlap each other otherwise? Seems like an odd design decision on their part.

@jayoshihjayoshihJun 29, 2020

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I tried to use their app attribute, but the problem there is that it affects the layout of the main page because it's used on a modal (everything outside of the modal also shifts to the sizing on the modal). This is sort of a way to get the same behavior without causing problems (also some weird handling because there are multiple toolbars on the page)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I think this may be where my decision to use nested routes is not helping us at all. I think we had tentatively decided to go back on this previously, but don't think we've actually acted on it.

If each full screen modal was its own independent route, then it wouldn't have the same issue of the app attribute causing issues on the page it is covering.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be nice! Next pass :)

@rtibbles
rtibbles changed the base branch from vue-refactor to developJune 29, 2020 21:53
@jayoshihjayoshih mentioned this pull request Jun 30, 2020
8 tasks
@rtibbles
rtibbles merged commit 7b8b14f into learningequality:developJul 1, 2020
@jayoshih
jayoshih deleted the vue-offline branch August 24, 2020 21:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

qa-readyCreate a demo server for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jayoshih@micahscopes@rtibbles