de> 14
+  "dependencies": {
15
+    "@ionic/vue": "^7.0.0",
16
+    "@ionic/vue-router": "^7.0.0",
17
+    "ionicons": "^7.0.0",
18
+    "vue": "^3.2.45",
19
+    "vue-router": "^4.1.6"
20
+  },
21
+  "devDependencies": {
22
+    "@vitejs/plugin-legacy": "^4.0.2",
23
+    "@vitejs/plugin-vue": "^4.0.0",
24
+    "@vue/eslint-config-typescript": "^11.0.2",
25
+    "@vue/test-utils": "^2.3.0",
26
+    "cypress": "^12.7.0",
27
+    "eslint": "^8.35.0",
28
+    "eslint-plugin-vue": "^9.9.0",
29
+    "jsdom": "^22.1.0",
30
+    "typescript": "^5.1.6",
31
+    "vite": "^4.3.9",
32
+    "vitest": "^0.32.2",
33
+    "vue-tsc": "^1.0.24"
34
+  },
35
+  "description": "An Ionic project"
36
+}

BIN
public/favicon.png


+ 9 - 0
src/App.vue

1
+<template>
2
+  <ion-app>
3
+    <ion-router-outlet />
4
+  </ion-app>
5
+</template>
6
+
7
+<script setup lang="ts">
8
+import { IonApp, IonRouterOutlet } from '@ionic/vue';
9
+</script>

+ 39 - 0
src/components/ExploreContainer.vue

1
+<template>
2
+  <div id="container">
3
+    <strong>{{ name }}</strong>
4
+    <p>Explore <a target="_blank" rel="noopener noreferrer" href="https://ionicframework.com/docs/components">UI Components</a></p>
5
+  </div>
6
+</template>
7
+
8
+<script setup lang="ts">
9
+defineProps({
10
+  name: String,
11
+});
12
+</script>
13
+
14
+<style scoped>
15
+#container {
16
+  text-align: center;
17
+  position: absolute;
18
+  left: 0;
19
+  right: 0;
20
+  top: 50%;
21
+  transform: translateY(-50%);
22
+}
23
+
24
+#container strong {
25
+  font-size: 20px;
26
+  line-height: 26px;
27
+}
28
+
29
+#container p {
30
+  font-size: 16px;
31
+  line-height: 22px;
32
+  color: #8c8c8c;
33
+  margin: 0;
34
+}
35
+
36
+#container a {
37
+  text-decoration: none;
38
+}
39
+</style>

+ 32 - 0
src/main.ts

1
+import { createApp } from 'vue'
2
+import App from './App.vue'
3
+import router from './router';
4
+
5
+import { IonicVue } from '@ionic/vue';
6
+
7
+/* Core CSS required for Ionic components to work properly */
8
+import '@ionic/vue/css/core.css';
9
+
10
+/* Basic CSS for apps built with Ionic */
11
+import '@ionic/vue/css/normalize.css';
12
+import '@ionic/vue/css/structure.css';
13
+import '@ionic/vue/css/typography.css';
14
+
15
+/* Optional CSS utils that can be commented out */
16
+import '@ionic/vue/css/padding.css';
17
+import '@ionic/vue/css/float-elements.css';
18
+import '@ionic/vue/css/text-alignment.css';
19
+import '@ionic/vue/css/text-transformation.css';
20
+import '@ionic/vue/css/flex-utils.css';
21
+import '@ionic/vue/css/display.css';
22
+
23
+/* Theme variables */
24
+import './theme/variables.css';
25
+
26
+const app = createApp(App)
27
+  .use(IonicVue)
28
+  .use(router);
29
+  
30
+router.isReady().then(() => {
31
+  app.mount('#app');
32
+});

+ 39 - 0
src/router/index.ts

1
+import { createRouter, createWebHistory } from '@ionic/vue-router';
2
+import { RouteRecordRaw } from 'vue-router';
3
+import TabsPage from '../views/TabsPage.vue'
4
+
5
+const routes: Array<RouteRecordRaw> = [
6
+  {
7
+    path: '/',
8
+    redirect: '/tabs/tab1'
9
+  },
10
+  {
11
+    path: '/tabs/',
12
+    component: TabsPage,
13
+    children: [
14
+      {
15
+        path: '',
16
+        redirect: '/tabs/tab1'
17
+      },
18
+      {
19
+        path: 'tab1',
20
+        component: () => import('@/views/Tab1Page.vue')
21
+      },
22
+      {
23
+        path: 'tab2',
24
+        component: () => import('@/views/Tab2Page.vue')
25
+      },
26
+      {
27
+        path: 'tab3',
28
+        component: () => import('@/views/Tab3Page.vue')
29
+      }
30
+    ]
31
+  }
32
+]
33
+
34
+const router = createRouter({
35
+  history: createWebHistory(import.meta.env.BASE_URL),
36
+  routes
37
+})
38
+
39
+export default router

+ 242 - 0
src/theme/variables.css

1
+/* Ionic Variables and Theming. For more info, please see:
2
+http://ionicframework.com/docs/theming/ */
3
+
4
+/** Ionic CSS Variables **/
5
+:root {
6
+  /** primary **/
7
+  --ion-color-primary: #3880ff;
8
+  --ion-color-primary-rgb: 56, 128, 255;
9
+  --ion-color-primary-contrast: #ffffff;
10
+  --ion-color-primary-contrast-rgb: 255, 255, 255;
11
+  --ion-color-primary-shade: #3171e0;
12
+  --ion-color-primary-tint: #4c8dff;
13
+
14
+  /** secondary **/
15
+  --ion-color-secondary: #3dc2ff;
16
+  --ion-color-secondary-rgb: 61, 194, 255;
17
+  --ion-color-secondary-contrast: #ffffff;
18
+  --ion-color-secondary-contrast-rgb: 255, 255, 255;
19
+  --ion-color-secondary-shade: #36abe0;
20
+  --ion-color-secondary-tint: #50c8ff;
21
+
22
+  /** tertiary **/
23
+  --ion-color-tertiary: #5260ff;
24
+  --ion-color-tertiary-rgb: 82, 96, 255;
25
+  --ion-color-tertiary-contrast: #ffffff;
26
+  --ion-color-tertiary-contrast-rgb: 255, 255, 255;
27
+  --ion-color-tertiary-shade: #4854e0;
28
+  --ion-color-tertiary-tint: #6370ff;
29
+
30
+  /** success **/
31
+  --ion-color-success: #2dd36f;
32
+  --ion-color-success-rgb: 45, 211, 111;
33
+  --ion-color-success-contrast: #ffffff;
34
+  --ion-color-success-contrast-rgb: 255, 255, 255;
35
+  --ion-color-success-shade: #28ba62;
36
+  --ion-color-success-tint: #42d77d;
37
+
38
+  /** warning **/
39
+  --ion-color-warning: #ffc409;
40
+  --ion-color-warning-rgb: 255, 196, 9;
41
+  --ion-color-warning-contrast: #000000;
42
+  --ion-color-warning-contrast-rgb: 0, 0, 0;
43
+  --ion-color-warning-shade: #e0ac08;
44
+  --ion-color-warning-tint: #ffca22;
45
+
46
+  /** danger **/
47
+  --ion-color-danger: #eb445a;
48
+  --ion-color-danger-rgb: 235, 68, 90;
49
+  --ion-color-danger-contrast: #ffffff;
50
+  --ion-color-danger-contrast-rgb: 255, 255, 255;
51
+  --ion-color-danger-shade: #cf3c4f;
52
+  --ion-color-danger-tint: #ed576b;
53
+
54
+  /** dark **/
55
+  --ion-color-dark: #222428;
56
+  --ion-color-dark-rgb: 34, 36, 40;
57
+  --ion-color-dark-contrast: #ffffff;
58
+  --ion-color-dark-contrast-rgb: 255, 255, 255;
59
+  --ion-color-dark-shade: #1e2023;
60
+  --ion-color-dark-tint: #383a3e;
61
+
62
+  /** medium **/
63
+  --ion-color-medium: #92949c;
64
+  --ion-color-medium-rgb: 146, 148, 156;
65
+  --ion-color-medium-contrast: #ffffff;
66
+  --ion-color-medium-contrast-rgb: 255, 255, 255;
67
+  --ion-color-medium-shade: #808289;
68
+  --ion-color-medium-tint: #9d9fa6;
69
+
70
+  /** light **/
71
+  --ion-color-light: #f4f5f8;
72
+  --ion-color-light-rgb: 244, 245, 248;
73
+  --ion-color-light-contrast: #000000;
74
+  --ion-color-light-contrast-rgb: 0, 0, 0;
75
+  --ion-color-light-shade: #d7d8da;
76
+  --ion-color-light-tint: #f5f6f9;
77
+}
78
+
79
+@media (prefers-color-scheme: dark) {
80
+  /*
81
+   * Dark Colors
82
+   * -------------------------------------------
83
+   */
84
+
85
+  body {
86
+    --ion-color-primary: #428cff;
87
+    --ion-color-primary-rgb: 66,140,255;
88
+    --ion-color-primary-contrast: #ffffff;
89
+    --ion-color-primary-contrast-rgb: 255,255,255;
90
+    --ion-color-primary-shade: #3a7be0;
91
+    --ion-color-primary-tint: #5598ff;
92
+
93
+    --ion-color-secondary: #50c8ff;
94
+    --ion-color-secondary-rgb: 80,200,255;
95
+    --ion-color-secondary-contrast: #ffffff;
96
+    --ion-color-secondary-contrast-rgb: 255,255,255;
97
+    --ion-color-secondary-shade: #46b0e0;
98
+    --ion-color-secondary-tint: #62ceff;
99
+
100
+    --ion-color-tertiary: #6a64ff;
101
+    --ion-color-tertiary-rgb: 106,100,255;
102
+    --ion-color-tertiary-contrast: #ffffff;
103
+    --ion-color-tertiary-contrast-rgb: 255,255,255;
104
+    --ion-color-tertiary-shade: #5d58e0;
105
+    --ion-color-tertiary-tint: #7974ff;
106
+
107
+    --ion-color-success: #2fdf75;
108
+    --ion-color-success-rgb: 47,223,117;
109
+    --ion-color-success-contrast: #000000;
110
+    --ion-color-success-contrast-rgb: 0,0,0;
111
+    --ion-color-success-shade: #29c467;
112
+    --ion-color-success-tint: #44e283;
113
+
114
+    --ion-color-warning: #ffd534;
115
+    --ion-color-warning-rgb: 255,213,52;
116
+    --ion-color-warning-contrast: #000000;
117
+    --ion-color-warning-contrast-rgb: 0,0,0;
118
+    --ion-color-warning-shade: #e0bb2e;
119
+    --ion-color-warning-tint: #ffd948;
120
+
121
+    --ion-color-danger: #ff4961;
122
+    --ion-color-danger-rgb: 255,73,97;
123
+    --ion-color-danger-contrast: #ffffff;
124
+    --ion-color-danger-contrast-rgb: 255,255,255;
125
+    --ion-color-danger-shade: #e04055;
126
+    --ion-color-danger-tint: #ff5b71;
127
+
128
+    --ion-color-dark: #f4f5f8;
129
+    --ion-color-dark-rgb: 244,245,248;
130
+    --ion-color-dark-contrast: #000000;
131
+    --ion-color-dark-contrast-rgb: 0,0,0;
132
+    --ion-color-dark-shade: #d7d8da;
133
+    --ion-color-dark-tint: #f5f6f9;
134
+
135
+    --ion-color-medium: #989aa2;
136
+    --ion-color-medium-rgb: 152,154,162;
137
+    --ion-color-medium-contrast: #000000;
138
+    --ion-color-medium-contrast-rgb: 0,0,0;
139
+    --ion-color-medium-shade: #86888f;
140
+    --ion-color-medium-tint: #a2a4ab;
141
+
142
+    --ion-color-light: #222428;
143
+    --ion-color-light-rgb: 34,36,40;
144
+    --ion-color-light-contrast: #ffffff;
145
+    --ion-color-light-contrast-rgb: 255,255,255;
146
+    --ion-color-light-shade: #1e2023;
147
+    --ion-color-light-tint: #383a3e;
148
+  }
149
+
150
+  /*
151
+   * iOS Dark Theme
152
+   * -------------------------------------------
153
+   */
154
+
155
+  .ios body {
156
+    --ion-background-color: #000000;
157
+    --ion-background-color-rgb: 0,0,0;
158
+
159
+    --ion-text-color: #ffffff;
160
+    --ion-text-color-rgb: 255,255,255;
161
+
162
+    --ion-color-step-50: #0d0d0d;
163
+    --ion-color-step-100: #1a1a1a;
164
+    --ion-color-step-150: #262626;
165
+    --ion-color-step-200: #333333;
166
+    --ion-color-step-250: #404040;
167
+    --ion-color-step-300: #4d4d4d;
168
+    --ion-color-step-350: #595959;
169
+    --ion-color-step-400: #666666;
170
+    --ion-color-step-450: #737373;
171
+    --ion-color-step-500: #808080;
172
+    --ion-color-step-550: #8c8c8c;
173
+    --ion-color-step-600: #999999;
174
+    --ion-color-step-650: #a6a6a6;
175
+    --ion-color-step-700: #b3b3b3;
176
+    --ion-color-step-750: #bfbfbf;
177
+    --ion-color-step-800: #cccccc;
178
+    --ion-color-step-850: #d9d9d9;
179
+    --ion-color-step-900: #e6e6e6;
180
+    --ion-color-step-950: #f2f2f2;
181
+
182
+    --ion-item-background: #000000;
183
+
184
+    --ion-card-background: #1c1c1d;
185
+  }
186
+
187
+  .ios ion-modal {
188
+    --ion-background-color: var(--ion-color-step-100);
189
+    --ion-toolbar-background: var(--ion-color-step-150);
190
+    --ion-toolbar-border-color: var(--ion-color-step-250);
191
+  }
192
+
193
+
194
+  /*
195
+   * Material Design Dark Theme
196
+   * -------------------------------------------
197
+   */
198
+
199
+  .md body {
200
+    --ion-background-color: #121212;
201
+    --ion-background-color-rgb: 18,18,18;
202
+
203
+    --ion-text-color: #ffffff;
204
+    --ion-text-color-rgb: 255,255,255;
205
+
206
+    --ion-border-color: #222222;
207
+
208
+    --ion-color-step-50: #1e1e1e;
209
+    --ion-color-step-100: #2a2a2a;
210
+    --ion-color-step-150: #363636;
211
+    --ion-color-step-200: #414141;
212
+    --ion-color-step-250: #4d4d4d;
213
+    --ion-color-step-300: #595959;
214
+    --ion-color-step-350: #656565;
215
+    --ion-color-step-400: #717171;
216
+    --ion-color-step-450: #7d7d7d;
217
+    --ion-color-step-500: #898989;
218
+    --ion-color-step-550: #949494;
219
+    --ion-color-step-600: #a0a0a0;
220
+    --ion-color-step-650: #acacac;
221
+    --ion-color-step-700: #b8b8b8;
222
+    --ion-color-step-750: #c4c4c4;
223
+    --ion-color-step-800: #d0d0d0;
224
+    --ion-color-step-850: #dbdbdb;
225
+    --ion-color-step-900: #e7e7e7;
226
+    --ion-color-step-950: #f3f3f3;
227
+
228
+    --ion-item-background: #1e1e1e;
229
+
230
+    --ion-toolbar-background: #1f1f1f;
231
+
232
+    --ion-tab-bar-background: #1f1f1f;
233
+
234
+    --ion-card-background: #1e1e1e;
235
+  }
236
+}
237
+
238
+html {
239
+  /* For more information on dynamic font scaling, visit the documentation: 
240
+  https://ionicframework.com/docs/layout/dynamic-font-scaling */
241
+  --ion-dynamic-font: var(--ion-default-dynamic-font);
242
+}

+ 23 - 0
src/views/Tab1Page.vue

1
+<template>
2
+  <ion-page>
3
+    <ion-header>
4
+      <ion-toolbar>
5
+        <ion-title>Tab 1</ion-title>
6
+      </ion-toolbar>
7
+    </ion-header>
8
+    <ion-content :fullscreen="true">
9
+      <ion-header collapse="condense">
10
+        <ion-toolbar>
11
+          <ion-title size="large">Tab 1</ion-title>
12
+        </ion-toolbar>
13
+      </ion-header>
14
+
15
+      <ExploreContainer name="Tab 1 page" />
16
+    </ion-content>
17
+  </ion-page>
18
+</template>
19
+
20
+<script setup lang="ts">
21
+import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/vue';
22
+import ExploreContainer from '@/components/ExploreContainer.vue';
23
+</script>

+ 23 - 0
src/views/Tab2Page.vue

1
+<template>
2
+  <ion-page>
3
+    <ion-header>
4
+      <ion-toolbar>
5
+        <ion-title>Tab 2</ion-title>
6
+      </ion-toolbar>
7
+    </ion-header>
8
+    <ion-content :fullscreen="true">
9
+      <ion-header collapse="condense">
10
+        <ion-toolbar>
11
+          <ion-title size="large">Tab 2</ion-title>
12
+        </ion-toolbar>
13
+      </ion-header>
14
+
15
+      <ExploreContainer name="Tab 2 page" />
16
+    </ion-content>
17
+  </ion-page>
18
+</template>
19
+
20
+<script setup lang="ts">
21
+import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/vue';
22
+import ExploreContainer from '@/components/ExploreContainer.vue';
23
+</script>

+ 23 - 0
src/views/Tab3Page.vue

1
+<template>
2
+  <ion-page>
3
+    <ion-header>
4
+      <ion-toolbar>
5
+        <ion-title>Tab 3</ion-title>
6
+      </ion-toolbar>
7
+    </ion-header>
8
+    <ion-content :fullscreen="true">
9
+      <ion-header collapse="condense">
10
+        <ion-toolbar>
11
+          <ion-title size="large">Tab 3</ion-title>
12
+        </ion-toolbar>
13
+      </ion-header>
14
+
15
+      <ExploreContainer name="Tab 3 page" />
16
+    </ion-content>
17
+  </ion-page>
18
+</template>
19
+
20
+<script setup lang="ts">
21
+import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/vue';
22
+import ExploreContainer from '@/components/ExploreContainer.vue';
23
+</script>

+ 28 - 0
src/views/TabsPage.vue

1
+<template>
2
+  <ion-page>
3
+    <ion-tabs>
4
+      <ion-router-outlet></ion-router-outlet>
5
+      <ion-tab-bar slot="bottom">
6
+        <ion-tab-button tab="tab1" href="/tabs/tab1">
7
+          <ion-icon aria-hidden="true" :icon="triangle" />
8
+          <ion-label>Tab 1</ion-label>
9
+        </ion-tab-button>
10
+
11
+        <ion-tab-button tab="tab2" href="/tabs/tab2">
12
+          <ion-icon aria-hidden="true" :icon="ellipse" />
13
+          <ion-label>Tab 2</ion-label>
14
+        </ion-tab-button>
15
+
16
+        <ion-tab-button tab="tab3" href="/tabs/tab3">
17
+          <ion-icon aria-hidden="true" :icon="square" />
18
+          <ion-label>Tab 3</ion-label>
19
+        </ion-tab-button>
20
+      </ion-tab-bar>
21
+    </ion-tabs>
22
+  </ion-page>
23
+</template>
24
+
25
+<script setup lang="ts">
26
+import { IonTabBar, IonTabButton, IonTabs, IonLabel, IonIcon, IonPage, IonRouterOutlet } from '@ionic/vue';
27
+import { ellipse, square, triangle } from 'ionicons/icons';
28
+</script>

+ 1 - 0
src/vite-env.d.ts

1
+/// <reference types="vite/client" />

+ 5 - 0
tests/e2e/fixtures/example.json

1
+{
2
+  "name": "Using fixtures to represent data",
3
+  "email": "hello@cypress.io",
4
+  "body": "Fixtures are a great way to mock data for responses to routes"
5
+}

+ 6 - 0
tests/e2e/specs/test.cy.ts

1
+describe('My First Test', () => {
2
+  it('Visits the app root url', () => {
3
+    cy.visit('/')
4
+    cy.contains('ion-content', 'Tab 1 page')
5
+  })
6
+})

+ 37 - 0
tests/e2e/support/commands.ts

1
+/// <reference types="cypress" />
2
+// ***********************************************
3
+// This example commands.ts shows you how to
4
+// create various custom commands and overwrite
5
+// existing commands.
6
+//
7
+// For more comprehensive examples of custom
8
+// commands please read more here:
9
+// https://on.cypress.io/custom-commands
10
+// ***********************************************
11
+//
12
+//
13
+// -- This is a parent command --
14
+// Cypress.Commands.add('login', (email, password) => { ... })
15
+//
16
+//
17
+// -- This is a child command --
18
+// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
19
+//
20
+//
21
+// -- This is a dual command --
22
+// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
23
+//
24
+//
25
+// -- This will overwrite an existing command --
26
+// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
27
+//
28
+// declare global {
29
+//   namespace Cypress {
30
+//     interface Chainable {
31
+//       login(email: string, password: string): Chainable<void>
32
+//       drag(subject: string, options?: Partial<TypeOptions>): Chainable<Element>
33
+//       dismiss(subject: string, options?: Partial<TypeOptions>): Chainable<Element>
34
+//       visit(originalFn: CommandOriginalFn, url: string, options: Partial<VisitOptions>): Chainable<Element>
35
+//     }
36
+//   }
37
+// }

+ 20 - 0
tests/e2e/support/e2e.ts

1
+// ***********************************************************
2
+// This example support/e2e.ts is processed and
3
+// loaded automatically before your test files.
4
+//
5
+// This is a great place to put global configuration and
6
+// behavior that modifies Cypress.
7
+//
8
+// You can change the location of this file or turn off
9
+// automatically serving support files with the
10
+// 'supportFile' configuration option.
11
+//
12
+// You can read more here:
13
+// https://on.cypress.io/configuration
14
+// ***********************************************************
15
+
16
+// Import commands.js using ES2015 syntax:
17
+import './commands'
18
+
19
+// Alternatively you can use CommonJS syntax:
20
+// require('./commands')

+ 10 - 0
tests/unit/example.spec.ts

1
+import { mount } from '@vue/test-utils'
2
+import Tab1Page from '@/views/Tab1Page.vue'
3
+import { describe, expect, test } from 'vitest'
4
+
5
+describe('Tab1Page.vue', () => {
6
+  test('renders tab 1 Tab1Page', () => {
7
+    const wrapper = mount(Tab1Page)
8
+    expect(wrapper.text()).toMatch('Tab 1 page')
9
+  })
10
+})

+ 21 - 0
tsconfig.json

1
+{
2
+  "compilerOptions": {
3
+    "target": "ESNext",
4
+    "useDefineForClassFields": true,
5
+    "module": "ESNext",
6
+    "moduleResolution": "Node",
7
+    "strict": true,
8
+    "jsx": "preserve",
9
+    "resolveJsonModule": true,
10
+    "isolatedModules": true,
11
+    "esModuleInterop": true,
12
+    "lib": ["ESNext", "DOM"],
13
+    "skipLibCheck": true,
14
+    "noEmit": true,
15
+    "paths": {
16
+      "@/*": ["./src/*"]
17
+    }
18
+  },
19
+  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
20
+  "references": [{ "path": "./tsconfig.node.json" }]
21
+}

+ 9 - 0
tsconfig.node.json

1
+{
2
+  "compilerOptions": {
3
+    "composite": true,
4
+    "module": "ESNext",
5
+    "moduleResolution": "Node",
6
+    "allowSyntheticDefaultImports": true
7
+  },
8
+  "include": ["vite.config.ts"]
9
+}

+ 21 - 0
vite.config.ts

1
+import legacy from '@vitejs/plugin-legacy'
2
+import vue from '@vitejs/plugin-vue'
3
+import path from 'path'
4
+import { defineConfig } from 'vite'
5
+
6
+// https://vitejs.dev/config/
7
+export default defineConfig({
8
+  plugins: [
9
+    vue(),
10
+    legacy()
11
+  ],
12
+  resolve: {
13
+    alias: {
14
+      '@': path.resolve(__dirname, './src'),
15
+    },
16
+  },
17
+  test: {
18
+    globals: true,
19
+    environment: 'jsdom'
20
+  }
21
+})

tum/OBAppSrc - Gogs: Simplico Git Service

Nav apraksta

UpgradeLog2.htm 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <!DOCTYPE html>
  2. <!-- saved from url=(0014)about:internet -->
  3. <html xmlns:msxsl="urn:schemas-microsoft-com:xslt"><head><meta content="en-us" http-equiv="Content-Language" /><meta content="text/html; charset=utf-16" http-equiv="Content-Type" /><title _locID="ConversionReport0">
  4. Migration Report
  5. </title><style>
  6. /* Body style, for the entire document */
  7. body
  8. {
  9. background: #F3F3F4;
  10. color: #1E1E1F;
  11. font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
  12. padding: 0;
  13. margin: 0;
  14. }
  15. /* Header1 style, used for the main title */
  16. h1
  17. {
  18. padding: 10px 0px 10px 10px;
  19. font-size: 21pt;
  20. background-color: #E2E2E2;
  21. border-bottom: 1px #C1C1C2 solid;
  22. color: #201F20;
  23. margin: 0;
  24. font-weight: normal;
  25. }
  26. /* Header2 style, used for "Overview" and other sections */
  27. h2
  28. {
  29. font-size: 18pt;
  30. font-weight: normal;
  31. padding: 15px 0 5px 0;
  32. margin: 0;
  33. }
  34. /* Header3 style, used for sub-sections, such as project name */
  35. h3
  36. {
  37. font-weight: normal;
  38. font-size: 15pt;
  39. margin: 0;
  40. padding: 15px 0 5px 0;
  41. background-color: transparent;
  42. }
  43. /* Color all hyperlinks one color */
  44. a
  45. {
  46. color: #1382CE;
  47. }
  48. /* Table styles */
  49. table
  50. {
  51. border-spacing: 0 0;
  52. border-collapse: collapse;
  53. font-size: 10pt;
  54. }
  55. table th
  56. {
  57. background: #E7E7E8;
  58. text-align: left;
  59. text-decoration: none;
  60. font-weight: normal;
  61. padding: 3px 6px 3px 6px;
  62. }
  63. table td
  64. {
  65. vertical-align: top;
  66. padding: 3px 6px 5px 5px;
  67. margin: 0px;
  68. border: 1px solid #E7E7E8;
  69. background: #F7F7F8;
  70. }
  71. /* Local link is a style for hyperlinks that link to file:/// content, there are lots so color them as 'normal' text until the user mouse overs */
  72. .localLink
  73. {
  74. color: #1E1E1F;
  75. background: #EEEEED;
  76. text-decoration: none;
  77. }
  78. .localLink:hover
  79. {
  80. color: #1382CE;
  81. background: #FFFF99;
  82. text-decoration: none;
  83. }
  84. /* Center text, used in the over views cells that contain message level counts */
  85. .textCentered
  86. {
  87. text-align: center;
  88. }
  89. /* The message cells in message tables should take up all avaliable space */
  90. .messageCell
  91. {
  92. width: 100%;
  93. }
  94. /* Padding around the content after the h1 */
  95. #content
  96. {
  97. padding: 0px 12px 12px 12px;
  98. }
  99. /* The overview table expands to width, with a max width of 97% */
  100. #overview table
  101. {
  102. width: auto;
  103. max-width: 75%;
  104. }
  105. /* The messages tables are always 97% width */
  106. #messages table
  107. {
  108. width: 97%;
  109. }
  110. /* All Icons */
  111. .IconSuccessEncoded, .IconInfoEncoded, .IconWarningEncoded, .IconErrorEncoded
  112. {
  113. min-width:18px;
  114. min-height:18px;
  115. background-repeat:no-repeat;
  116. background-position:center;
  117. }
  118. /* Success icon encoded */
  119. .IconSuccessEncoded
  120. {
  121. /* Note: Do not delete the comment below. It is used to verify the correctness of the encoded image resource below before the product is released */
  122. /* [---XsltValidateInternal-Base64EncodedImage:IconSuccess#Begin#background-image: url(data:image/png;base64,#Separator#);#End#] */
  123. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABcElEQVR4Xq2TsUsCURzHv15g8ZJcBWlyiYYgCIWcb9DFRRwMW5TA2c0/QEFwFkxxUQdxVlBwCYWOi6IhWgQhBLHJUCkhLr/BW8S7gvrAg+N+v8/v+x68Z8MGy+XSCyABQAXgBgHGALoASkIIDWSLeLBetdHryMjd5IxQPWT4rn1c/P7+xxp72Cs9m5SZ0Bq2vPnbPFafK2zDvmNHypdC0BPkLlQhxJsCAhQoZwdZU5mwxh720qGo8MzTxTTKZDPCx2HoVzp6lz0Q9tKhyx0kGs8Ny+TkWRKk8lCROwEduhyg9l/6lunOPSfmH3NUH6uQ0KHLAe7JYvJjevm+DAMGJHToKtigE+vwvIidxLamb8IBY9e+C5LiXREkfho3TSd06HJA13/oh6T51MTsfQbHrsMynQ5dDihFjiK8JJAU9AKIWTp76dCVN7HWHrajmUEGvyF9nkbAE6gLIS7kTUyuf2gscLoJrElZo/Mvj+nPz/kLTmfnEwP3tB0AAAAASUVORK5CYII=);
  124. }
  125. /* Information icon encoded */
  126. .IconInfoEncoded
  127. {
  128. /* Note: Do not delete the comment below. It is used to verify the correctness of the encoded image resource below before the product is released */
  129. /* [---XsltValidateInternal-Base64EncodedImage:IconInformation#Begin#background-image: url(data:image/png;base64,#Separator#);#End#] */
  130. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHElEQVR4Xs2TsUoDQRRF7wwoziokjZUKadInhdhukR9YP8DMX1hYW+QvdsXa/QHBbcXC7W0CamWTQnclFutceIQJwwaWNLlwm5k5d94M76mmaeCrrmsLYOocY12FcxZFUeozCqKqqgYA8uevv1H6VuPxcwlfk5N92KHBxfFeCSAxxswlYAW/Xr989x/mv9gkhtyMDhcAxgzRsp7flj8B/HF1RsMXq+NZMkopaHe7lbKxQUEIGbKsYNoGn969060hZBkQex/W8oRQwsQaW2o3Ago2SVcJUzAgY3N0lTCZZm+zPS8HB51gMmS1DEYyOz9acKO1D8JWTlafKIMxdhvlfdyT94Vv5h7P8Ky7nQzACmhvKq3zk3PjW9asz9D/1oigecsioooAAAAASUVORK5CYII=);
  131. }
  132. /* Warning icon encoded */
  133. .IconWarningEncoded
  134. {
  135. /* Note: Do not delete the comment below. It is used to verify the correctness of the encoded image resource below before the product is released */
  136. /* [---XsltValidateInternal-Base64EncodedImage:IconWarning#Begin#background-image: url(data:image/png;base64,#Separator#);#End#] */
  137. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAx0lEQVR4XpWSMQ7CMAxFf4xAyBMLCxMrO8dhaBcuwdCJS3RJBw7SA/QGTCxdWJgiQYWKXJWKIXHIlyw5lqr34tQgEOdcBsCOx5yZK3hCCKdYXneQkh4pEfqzLfu+wVDSyyzFoJjfz9NB+pAF+eizx2Vruts0k15mPgvS6GYvpVtQhB61IB/dk6AF6fS4Ben0uIX5odtFe8Q/eW1KvFeH4e8khT6+gm5B+t3juyDt7n0jpe+CANTd+oTUjN/U3yVaABnSUjFz/gFq44JaVSCXeQAAAABJRU5ErkJggg==);
  138. }
  139. /* Error icon encoded */
  140. .IconErrorEncoded
  141. {
  142. /* Note: Do not delete the comment below. It is used to verify the correctness of the encoded image resource below before the product is released */
  143. /* [---XsltValidateInternal-Base64EncodedImage:IconError#Begin#background-image: url(data:image/png;base64,#Separator#);#End#] */
  144. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABQElEQVR4XqWTvUoEQRCE6wYPZUA80AfwAQz23uCMjA7MDRQEIzPBVEyNTQUFIw00vcQTTMzuAh/AxEQQT8HF/3G/oGGnEUGuoNnd6qoZuqltyKEsyzVJq5I6rnUp6SjGeGhESikzzlc1eL7opfuVbrqbU1Zw9NCgtQMaZpY0eNnaaL2fHusvTK5vKu7sjSS1Y4y3QUA6K3e3Mau5UFDyMP7tYF9o8cAHZv68vipoIJg971PZIZ5HiwdvYGGvFVFHmGmZ2MxwmQYPXubPl9Up0tfoMQGetXd6mRbvhBw+boZ6WF7Mbv1+GsHRk0fQmPAH1GfmZirbCfDJ61tw3Px8/8pZsPAG4jlVhcPgZ7adwNWBB68lkRQWFiTgFlbnLY3DGGM7izIJIyT/jjIvEJw6fdJTc6krDzh6aMwMP9bvDH4ADSsa9uSWVJkAAAAASUVORK5CYII=);
  145. }
  146. </style><script type="text/javascript" language="javascript">
  147. // Startup
  148. // Hook up the the loaded event for the document/window, to linkify the document content
  149. var startupFunction = function() { linkifyElement("messages"); };
  150. if(window.attachEvent)
  151. {
  152. window.attachEvent('onload', startupFunction);
  153. }
  154. else if (window.addEventListener)
  155. {
  156. window.addEventListener('load', startupFunction, false);
  157. }
  158. else
  159. {
  160. document.addEventListener('load', startupFunction, false);
  161. }
  162. // Toggles the visibility of table rows with the specified name
  163. function toggleTableRowsByName(name)
  164. {
  165. var allRows = document.getElementsByTagName('tr');
  166. for (i=0; i < allRows.length; i++)
  167. {
  168. var currentName = allRows[i].getAttribute('name');
  169. if(!!currentName && currentName.indexOf(name) == 0)
  170. {
  171. var isVisible = allRows[i].style.display == '';
  172. isVisible ? allRows[i].style.display = 'none' : allRows[i].style.display = '';
  173. }
  174. }
  175. }
  176. function scrollToFirstVisibleRow(name)
  177. {
  178. var allRows = document.getElementsByTagName('tr');
  179. for (i=0; i < allRows.length; i++)
  180. {
  181. var currentName = allRows[i].getAttribute('name');
  182. var isVisible = allRows[i].style.display == '';
  183. if(!!currentName && currentName.indexOf(name) == 0 && isVisible)
  184. {
  185. allRows[i].scrollIntoView(true);
  186. return true;
  187. }
  188. }
  189. return false;
  190. }
  191. // Linkifies the specified text content, replaces candidate links with html links
  192. function linkify(text)
  193. {
  194. if(!text || 0 === text.length)
  195. {
  196. return text;
  197. }
  198. // Find http, https and ftp links and replace them with hyper links
  199. var urlLink = /(http|https|ftp)\:\/\/[a-zA-Z0-9\-\.]+(:[a-zA-Z0-9]*)?\/?([a-zA-Z0-9\-\._\?\,\/\\\+&%\$#\=~;\{\}])*/gi;
  200. return text.replace(urlLink, '<a href="$&">$&</a>') ;
  201. }
  202. // Linkifies the specified element by ID
  203. function linkifyElement(id)
  204. {
  205. var element = document.getElementById(id);
  206. if(!!element)
  207. {
  208. element.innerHTML = linkify(element.innerHTML);
  209. }
  210. }
  211. function ToggleMessageVisibility(projectName)
  212. {
  213. if(!projectName || 0 === projectName.length)
  214. {
  215. return;
  216. }
  217. toggleTableRowsByName("MessageRowClass" + projectName);
  218. toggleTableRowsByName('MessageRowHeaderShow' + projectName);
  219. toggleTableRowsByName('MessageRowHeaderHide' + projectName);
  220. }
  221. function ScrollToFirstVisibleMessage(projectName)
  222. {
  223. if(!projectName || 0 === projectName.length)
  224. {
  225. return;
  226. }
  227. // First try the 'Show messages' row
  228. if(!scrollToFirstVisibleRow('MessageRowHeaderShow' + projectName))
  229. {
  230. // Failed to find a visible row for 'Show messages', try an actual message row
  231. scrollToFirstVisibleRow('MessageRowClass' + projectName);
  232. }
  233. }
  234. </script></head><body><h1 _locID="ConversionReport">
  235. Migration Report - </h1><div id="content"><h2 _locID="OverviewTitle">Overview</h2><div id="overview"><table><tr><th></th><th _locID="ProjectTableHeader">Project</th><th _locID="PathTableHeader">Path</th><th _locID="ErrorsTableHeader">Errors</th><th _locID="WarningsTableHeader">Warnings</th><th _locID="MessagesTableHeader">Messages</th></tr><tr><td class="IconErrorEncoded" /><td><strong><a href="#OBSystem">OBSystem</a></strong></td><td>OBSystem\OBSystem.vdproj</td><td class="textCentered"><a href="#OBSystemError">1</a></td><td class="textCentered"><a>0</a></td><td class="textCentered"><a href="#">0</a></td></tr><tr><td class="IconSuccessEncoded" /><td><strong><a href="#Solution Items">Solution Items</a></strong></td><td>Solution Items</td><td class="textCentered"><a>0</a></td><td class="textCentered"><a>0</a></td><td class="textCentered"><a href="#">0</a></td></tr><tr><td class="IconSuccessEncoded" /><td><strong><a href="#Solution"><span _locID="OverviewSolutionSpan">Solution</span></a></strong></td><td>mitsui.sln</td><td class="textCentered"><a>0</a></td><td class="textCentered"><a>0</a></td><td class="textCentered"><a href="#" onclick="ScrollToFirstVisibleMessage('Solution'); return false;">1</a></td></tr></table></div><h2 _locID="SolutionAndProjectsTitle">Solution and projects</h2><div id="messages"><a name="OBSystem" /><h3>OBSystem</h3><table><tr id="OBSystemHeaderRow"><th></th><th class="messageCell" _locID="MessageTableHeader">Message</th></tr><tr name="ErrorRowClassOBSystem"><td class="IconErrorEncoded"><a name="OBSystemError" /></td><td class="messageCell"><strong>OBSystem\OBSystem.vdproj:
  236. </strong><span>The application which this project type is based on was not found. Please try this link for further information: 54435603-dbb4-11d2-8724-00a0c9a8b90c</span></td></tr></table><a name="Solution Items" /><h3>Solution Items</h3><table><tr id="Solution ItemsHeaderRow"><th></th><th class="messageCell" _locID="MessageTableHeader">Message</th></tr><tr><td class="IconInfoEncoded" /><td class="messageCell" _locID="NoMessagesRow">Solution Items logged no messages.
  237. </td></tr></table><a name="Solution" /><h3 _locID="ProjectDisplayNameHeader">Solution</h3><table><tr id="SolutionHeaderRow"><th></th><th class="messageCell" _locID="MessageTableHeader">Message</th></tr><tr name="MessageRowHeaderShowSolution"><td class="IconInfoEncoded" /><td class="messageCell"><a _locID="ShowAdditionalMessages" href="#" name="SolutionMessage" onclick="ToggleMessageVisibility('Solution'); return false;">
  238. Show 1 additional messages
  239. </a></td></tr><tr name="MessageRowClassSolution" style="display: none"><td class="IconInfoEncoded"><a name="SolutionMessage" /></td><td class="messageCell"><strong>mitsui.sln:
  240. </strong><span>The solution file does not require migration.</span></td></tr><tr style="display: none" name="MessageRowHeaderHideSolution"><td class="IconInfoEncoded" /><td class="messageCell"><a _locID="HideAdditionalMessages" href="#" name="SolutionMessage" onclick="ToggleMessageVisibility('Solution'); return false;">
  241. Hide 1 additional messages
  242. </a></td></tr></table></div></div></body></html>