xref: /aosp_15_r20/development/tools/ota_analysis/src/router/index.js (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1*90c8c64dSAndroid Build Coastguard Workerimport { createRouter, createWebHistory } from 'vue-router'
2*90c8c64dSAndroid Build Coastguard Workerimport PackageAnalysis from '@/views/PackageAnalysis.vue'
3*90c8c64dSAndroid Build Coastguard Workerimport Demo from'@/views/Demo.vue'
4*90c8c64dSAndroid Build Coastguard Workerimport About from '@/views/About.vue'
5*90c8c64dSAndroid Build Coastguard Workerimport NotFound from '@/views/NotFound.vue'
6*90c8c64dSAndroid Build Coastguard Worker
7*90c8c64dSAndroid Build Coastguard Workerconst routes = [
8*90c8c64dSAndroid Build Coastguard Worker  {
9*90c8c64dSAndroid Build Coastguard Worker    path: '/',
10*90c8c64dSAndroid Build Coastguard Worker    name: 'Analysis',
11*90c8c64dSAndroid Build Coastguard Worker    component: PackageAnalysis,
12*90c8c64dSAndroid Build Coastguard Worker    meta: {
13*90c8c64dSAndroid Build Coastguard Worker      title: 'Analyse OTA package - from AOSP'
14*90c8c64dSAndroid Build Coastguard Worker    }
15*90c8c64dSAndroid Build Coastguard Worker  },
16*90c8c64dSAndroid Build Coastguard Worker  {
17*90c8c64dSAndroid Build Coastguard Worker    path: '/demo',
18*90c8c64dSAndroid Build Coastguard Worker    name: 'Demo',
19*90c8c64dSAndroid Build Coastguard Worker    component: Demo
20*90c8c64dSAndroid Build Coastguard Worker  },
21*90c8c64dSAndroid Build Coastguard Worker  {
22*90c8c64dSAndroid Build Coastguard Worker    path: '/about',
23*90c8c64dSAndroid Build Coastguard Worker    name: 'About',
24*90c8c64dSAndroid Build Coastguard Worker    component: About
25*90c8c64dSAndroid Build Coastguard Worker  },
26*90c8c64dSAndroid Build Coastguard Worker  {
27*90c8c64dSAndroid Build Coastguard Worker    path: '/:catchAll(.*)',
28*90c8c64dSAndroid Build Coastguard Worker    name: 'Not Found',
29*90c8c64dSAndroid Build Coastguard Worker    component: NotFound
30*90c8c64dSAndroid Build Coastguard Worker  }
31*90c8c64dSAndroid Build Coastguard Worker]
32*90c8c64dSAndroid Build Coastguard Worker
33*90c8c64dSAndroid Build Coastguard Workerconst router = createRouter({
34*90c8c64dSAndroid Build Coastguard Worker  history: createWebHistory(process.env.BASE_URL),
35*90c8c64dSAndroid Build Coastguard Worker  routes
36*90c8c64dSAndroid Build Coastguard Worker})
37*90c8c64dSAndroid Build Coastguard Worker
38*90c8c64dSAndroid Build Coastguard Worker// This callback runs before every route change, including on page load.
39*90c8c64dSAndroid Build Coastguard Workerrouter.beforeEach((to, from, next) => {
40*90c8c64dSAndroid Build Coastguard Worker  // This goes through the matched routes from last to first, finding the closest route with a title.
41*90c8c64dSAndroid Build Coastguard Worker  // e.g., if we have `/some/deep/nested/route` and `/some`, `/deep`, and `/nested` have titles,
42*90c8c64dSAndroid Build Coastguard Worker  // `/nested`'s will be chosen.
43*90c8c64dSAndroid Build Coastguard Worker  const nearestWithTitle = to.matched.slice().reverse().find(r => r.meta && r.meta.title);
44*90c8c64dSAndroid Build Coastguard Worker
45*90c8c64dSAndroid Build Coastguard Worker  // Find the nearest route element with meta tags.
46*90c8c64dSAndroid Build Coastguard Worker  const nearestWithMeta = to.matched.slice().reverse().find(r => r.meta && r.meta.metaTags);
47*90c8c64dSAndroid Build Coastguard Worker
48*90c8c64dSAndroid Build Coastguard Worker  const previousNearestWithMeta = from.matched.slice().reverse().find(r => r.meta && r.meta.metaTags);
49*90c8c64dSAndroid Build Coastguard Worker
50*90c8c64dSAndroid Build Coastguard Worker  // If a route with a title was found, set the document (page) title to that value.
51*90c8c64dSAndroid Build Coastguard Worker  if(nearestWithTitle) {
52*90c8c64dSAndroid Build Coastguard Worker    document.title = nearestWithTitle.meta.title;
53*90c8c64dSAndroid Build Coastguard Worker  } else if(previousNearestWithMeta) {
54*90c8c64dSAndroid Build Coastguard Worker    document.title = previousNearestWithMeta.meta.title;
55*90c8c64dSAndroid Build Coastguard Worker  }
56*90c8c64dSAndroid Build Coastguard Worker
57*90c8c64dSAndroid Build Coastguard Worker  // Remove any stale meta tags from the document using the key attribute we set below.
58*90c8c64dSAndroid Build Coastguard Worker  Array.from(document.querySelectorAll('[data-vue-router-controlled]')).map(el => el.parentNode.removeChild(el));
59*90c8c64dSAndroid Build Coastguard Worker
60*90c8c64dSAndroid Build Coastguard Worker  // Skip rendering meta tags if there are none.
61*90c8c64dSAndroid Build Coastguard Worker  if(!nearestWithMeta) return next();
62*90c8c64dSAndroid Build Coastguard Worker
63*90c8c64dSAndroid Build Coastguard Worker  // Turn the meta tag definitions into actual elements in the head.
64*90c8c64dSAndroid Build Coastguard Worker  nearestWithMeta.meta.metaTags.map(tagDef => {
65*90c8c64dSAndroid Build Coastguard Worker    const tag = document.createElement('meta');
66*90c8c64dSAndroid Build Coastguard Worker
67*90c8c64dSAndroid Build Coastguard Worker    Object.keys(tagDef).forEach(key => {
68*90c8c64dSAndroid Build Coastguard Worker      tag.setAttribute(key, tagDef[key]);
69*90c8c64dSAndroid Build Coastguard Worker    });
70*90c8c64dSAndroid Build Coastguard Worker
71*90c8c64dSAndroid Build Coastguard Worker    // We use this to track which meta tags we create so we don't interfere with other ones.
72*90c8c64dSAndroid Build Coastguard Worker    tag.setAttribute('data-vue-router-controlled', '');
73*90c8c64dSAndroid Build Coastguard Worker
74*90c8c64dSAndroid Build Coastguard Worker    return tag;
75*90c8c64dSAndroid Build Coastguard Worker  })
76*90c8c64dSAndroid Build Coastguard Worker  // Add the meta tags to the document head.
77*90c8c64dSAndroid Build Coastguard Worker    .forEach(tag => document.head.appendChild(tag));
78*90c8c64dSAndroid Build Coastguard Worker
79*90c8c64dSAndroid Build Coastguard Worker  next();
80*90c8c64dSAndroid Build Coastguard Worker});
81*90c8c64dSAndroid Build Coastguard Worker
82*90c8c64dSAndroid Build Coastguard Workerexport default router
83