diff --git a/QuizzyTemplate/App b/QuizzyTemplate/App deleted file mode 160000 index 149f214..0000000 --- a/QuizzyTemplate/App +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 149f214357b2a991e93bab6d418c91479a78e0ac diff --git a/QuizzyTemplate/Doc/app.css b/QuizzyTemplate/Doc/app.css deleted file mode 100644 index 44d85a1..0000000 --- a/QuizzyTemplate/Doc/app.css +++ /dev/null @@ -1,410 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); - -:root { - --primary: #6366F1; - --primary-dark: #4F46E5; - --secondary: #8B5CF6; - --accent: #FFD166; - --text: #334155; - --text-light: #64748B; - --bg: #F8FAFC; - --bg-card: #FFFFFF; - --border: #E2E8F0; - --code-bg: #F1F5F9; -} - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - font-family: 'Inter', sans-serif; - background-color: var(--bg); - color: var(--text); - line-height: 1.6; - padding: 0; - margin: 0; -} - -.container { - max-width: 1100px; - margin: 0 auto; - padding: 0 20px; -} - -header { - background: linear-gradient(135deg, var(--primary), var(--secondary)); - color: white; - padding: 60px 0 80px; - position: relative; -} - -header::after { - content: ''; - position: absolute; - bottom: -2px; - left: 0; - right: 0; - height: 4px; - background: var(--accent); -} - -.logo { - font-size: 24px; - font-weight: 700; - display: flex; - align-items: center; - margin-bottom: 20px; -} - -.logo-icon { - margin-right: 10px; - font-size: 28px; -} - -h1, h2, h3, h4, h5, h6 { - font-weight: 600; - line-height: 1.3; - margin-bottom: 20px; - color: var(--text); -} - -h1 { - font-size: 2.5em; - margin-bottom: 15px; - color: white; -} - -h2 { - font-size: 1.8em; - padding-bottom: 10px; - border-bottom: 1px solid var(--border); - margin-top: 50px; -} - -h3 { - font-size: 1.4em; - margin-top: 30px; -} - -h4 { - font-size: 1.2em; - margin-top: 20px; -} - -p { - margin-bottom: 16px; -} - -a { - color: var(--primary); - text-decoration: none; - transition: color 0.2s ease; -} - -a:hover { - color: var(--primary-dark); - text-decoration: underline; -} - -.header-subtitle { - font-size: 1.2em; - color: rgba(255, 255, 255, 0.9); - max-width: 700px; -} - -.content { - padding: 60px 0; - position: relative; -} - -.toc { - background-color: var(--bg-card); - border-radius: 10px; - padding: 25px; - box-shadow: 0 10px 25px rgba(0, 0, 0, 0.05); - margin-bottom: 40px; -} - -.toc-title { - font-size: 1.2em; - font-weight: 600; - margin-bottom: 15px; - color: var(--text); - display: flex; - align-items: center; -} - -.toc-title svg { - margin-right: 10px; -} - -.toc-list { - list-style-type: none; - columns: 2; - column-gap: 30px; -} - -.toc-list li { - margin-bottom: 10px; - break-inside: avoid; -} - -.toc-list a { - color: var(--text-light); - transition: color 0.2s; - display: flex; - align-items: center; -} - -.toc-list a:hover { - color: var(--primary); -} - -.toc-list a::before { - content: "•"; - margin-right: 8px; - color: var(--primary); - font-weight: bold; -} - -.section { - margin-bottom: 60px; -} - -ul, ol { - margin-left: 20px; - margin-bottom: 20px; -} - -li { - margin-bottom: 8px; -} - -code { - font-family: 'Monaco', 'Consolas', monospace; - background-color: var(--code-bg); - padding: 2px 6px; - border-radius: 4px; - font-size: 0.9em; -} - -pre { - background-color: var(--code-bg); - padding: 15px; - border-radius: 8px; - overflow-x: auto; - margin-bottom: 20px; - border-left: 4px solid var(--primary); -} - -pre code { - background: none; - padding: 0; - font-size: 0.9em; -} - -.feature-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); - gap: 20px; - margin-bottom: 30px; -} - -.feature-card { - background: var(--bg-card); - border-radius: 8px; - padding: 20px; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); - transition: transform 0.3s ease, box-shadow 0.3s ease; -} - -.feature-card:hover { - transform: translateY(-5px); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); -} - -.feature-icon { - font-size: 24px; - margin-bottom: 12px; - color: var(--primary); -} - -.note { - background-color: rgba(99, 102, 241, 0.1); - border-left: 4px solid var(--primary); - padding: 15px; - border-radius: 0 8px 8px 0; - margin-bottom: 20px; -} - -.warning { - background-color: rgba(255, 209, 102, 0.2); - border-left: 4px solid var(--accent); - padding: 15px; - border-radius: 0 8px 8px 0; - margin-bottom: 20px; -} - -.project-structure { - font-family: 'Monaco', 'Consolas', monospace; - background-color: var(--code-bg); - padding: 20px; - border-radius: 8px; - margin-bottom: 20px; - white-space: pre; - overflow-x: auto; - line-height: 1.4; - font-size: 0.85em; -} - -.code-filename { - color: var(--primary); - font-weight: 600; - margin-bottom: 5px; - font-size: 0.9em; -} - -.steps { - list-style-type: none; - counter-reset: step-counter; - margin-left: 0; -} - -.steps li { - counter-increment: step-counter; - margin-bottom: 15px; - position: relative; - padding-left: 45px; -} - -.steps li::before { - content: counter(step-counter); - background-color: var(--primary); - color: white; - width: 30px; - height: 30px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - position: absolute; - left: 0; - top: -1px; - font-weight: 600; - font-size: 0.9em; -} - -.table-container { - overflow-x: auto; - margin-bottom: 20px; -} - -table { - width: 100%; - border-collapse: collapse; - margin-bottom: 20px; -} - -th, td { - padding: 12px 15px; - text-align: left; - border-bottom: 1px solid var(--border); -} - -th { - background-color: var(--code-bg); - font-weight: 600; -} - -tr:hover { - background-color: rgba(0, 0, 0, 0.01); -} - -.badge { - display: inline-block; - background-color: var(--primary); - color: white; - border-radius: 20px; - padding: 3px 10px; - font-size: 0.75em; - font-weight: 600; - margin-right: 5px; -} - -.badge.secondary { - background-color: var(--secondary); -} - -.badge.accent { - background-color: var(--accent); - color: var(--text); -} - -.screenshot { - max-width: 100%; - border-radius: 8px; - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); - margin-bottom: 20px; -} - -footer { - background-color: var(--text); - color: white; - padding: 30px 0; - text-align: center; - margin-top: 100px; -} - -.back-to-top { - position: fixed; - bottom: 30px; - right: 30px; - background-color: var(--primary); - color: white; - width: 50px; - height: 50px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - text-decoration: none; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); - opacity: 0; - visibility: hidden; - transition: all 0.3s ease; -} - -.back-to-top.visible { - opacity: 1; - visibility: visible; -} - -.back-to-top:hover { - background-color: var(--primary-dark); - transform: translateY(-3px); -} - -@media (max-width: 768px) { - h1 { - font-size: 2em; - } - - h2 { - font-size: 1.5em; - } - - .toc-list { - columns: 1; - } - - .container { - padding: 0 15px; - } - - .feature-grid { - grid-template-columns: 1fr; - } -} \ No newline at end of file diff --git a/QuizzyTemplate/Doc/index.html b/QuizzyTemplate/Doc/index.html deleted file mode 100644 index 2629c61..0000000 --- a/QuizzyTemplate/Doc/index.html +++ /dev/null @@ -1,397 +0,0 @@ - - - - - - QuizzyMind App Documentation - - - -
-
- -

QuizzyMind App Documentation

-

A comprehensive guide to installing, configuring, and customizing your React Native Expo quiz application.

-
-
- -
-
- - -
-

Introduction

- -

QuizzyMind is a fully functional quiz application built with React Native and Expo Router. This documentation will guide you through setting up and customizing the application to meet your specific needs.

- -

Key Features

- -
-
-
🧠
-

Multiple Quiz Categories

-

Extensive question bank with various categories

-
- -
-
🏆
-

Real-time Leaderboards

-

Compete with friends and track progress

-
- -
-
🎨
-

Modern UI

-

Clean design with smooth animations

-
- -
-
🧭
-

Expo Router

-

Optimized navigation experience

-
- -
-
📱
-

Cross-platform

-

Works on both iOS and Android

-
-
-
- -
-

Requirements

- -

Before you begin, ensure you have the following installed:

- -
    -
  • Node.js (v14.0.0 or newer)
  • -
  • npm (v6.0.0 or newer) or Yarn (v1.22.0 or newer)
  • -
  • Expo CLI (npm install -g expo-cli)
  • -
  • Android Studio (for Android development)
  • -
  • Xcode (for iOS development, macOS only)
  • -
  • Git
  • -
- -
-

Note: You can verify your Node.js and npm versions by running node -v and npm -v in your terminal.

-
-
- -
-

Installation

- -

Follow these steps to get the app up and running:

- -
    -
  1. - Clone or extract the project files -
    # If you downloaded as a zip, extract it
    -cd QuizzyMind-app
    -
  2. - -
  3. - Install dependencies -
    npm install
    -# or with yarn
    -yarn install
    -
  4. - -
  5. - Start the development server -
    npx expo start or npm start
    -
  6. - -
  7. - Run on device/simulator -
      -
    • Press i to open in iOS simulator
    • -
    • Press a to open in Android emulator
    • -
    • Scan QR code with Expo Go app on physical device
    • -
    -
  8. -
- -
-

Tip: If you encounter any issues during installation, refer to the Troubleshooting section.

-
-
- -
-

Project Structure

- -
QuizzyMind-app/ -├── app/ # Main application code using Expo Router -│ ├── (pages)/ # All screens inside this folder -│ ├────────── _layout.js # Root layout component -│ ├────────── CategoryScreen.jsx # Category Screen -│ ├────────── QuizScreen.jsx # QuizScreen Screen -│ ├────────── ResultScreen.jsx # ResultScreen Screen -│ ├── _layout.js # Root layout component -│ └── index.js # Home screen -├── assets/ # Static assets like images, fonts -├── components/ # Reusable UI components -│ ├── common/ # Shared components -│ ├── quiz/ # Quiz-related components -│ └── ui/ # UI elements (buttons, cards, etc.) -├── constants/ # App constants and theme settings -├── contexts/ # React contexts for state management -├── hooks/ # Custom React hooks -├── services/ # API services and external integrations -├── utils/ # Utility functions -├── app.json # Expo configuration -├── babel.config.js # Babel configuration -├── package.json # Dependencies and scripts -└── README.md # Basic readme
-
- -
-

Key Features

- -

Quiz Engine

- -

The quiz system supports:

-
    -
  • Multiple quiz categories
  • -
  • Various question types (multiple choice, true/false)
  • -
  • Timed quizzes
  • -
  • Score tracking and history
  • -
  • Difficulty levels
  • -
- -

User Interface

- -

The UI is built with:

-
    -
  • Custom components for consistent design
  • -
  • Smooth animations and transitions
  • -
  • Dark/light mode support
  • -
  • Responsive layouts for different device sizes
  • -
-
- -
-

Customization Guide

- -

Theme Customization

- -

Edit the theme variables in constants/Theme.js:

- -
constants/Theme.js
-
// Example theme customization
-export const COLORS = {
-  primary: '#6366F1',
-  secondary: '#8B5CF6',
-  accent: '#FFD166',
-  // Add your custom colors
-};
-
-export const FONTS = {
-  // Customize font families
-};
-
-export const SIZES = {
-  // Customize spacing and sizes
-};
- -

Content Customization

- -

Quiz questions are stored in data/quizData.js. Modify this file to add your own questions:

- -
data/quizData.js
-
export const QUIZ_CATEGORIES = [
-  {
-    id: 'general',
-    title: 'General Knowledge',
-    icon: 'brain',
-    questions: [
-      {
-        id: 'q1',
-        question: 'What is the capital of France?',
-        options: ['London', 'Berlin', 'Paris', 'Madrid'],
-        correctAnswer: 'Paris',
-        difficulty: 'easy'
-      },
-      // Add more questions here
-    ]
-  },
-  // Add more categories
-];
- -

Adding New Screens

- -

To add a new screen with Expo Router:

- -
    -
  1. Create a new file in the app directory, e.g., app/newScreen.js
  2. -
  3. Define your screen component:
  4. -
- -
app/newScreen.js
-
import { View, Text, StyleSheet } from 'react-native';
-import { useRouter } from 'expo-router';
-
-export default function NewScreen() {
-  const router = useRouter();
-  
-  return (
-    <View style={styles.container}>
-      <Text>New Screen Content</Text>
-    </View>
-  );
-}
-
-const styles = StyleSheet.create({
-  container: {
-    flex: 1,
-    alignItems: 'center',
-    justifyContent: 'center',
-  },
-});
-
- - -
-

Deployment

- -

Publishing to Expo

- -
    -
  1. Create an Expo account at expo.dev
  2. -
  3. Configure your app in app.json: -
      -
    • Update name, slug, and owner
    • -
    • Set appropriate version numbers
    • -
    • Configure splash screen and icons
    • -
    -
  4. -
  5. Build and publish: -
    expo build:android    # For Android APK/AAB
    -expo build:ios        # For iOS IPA
    -expo publish          # For Expo Go distribution
    -
  6. -
- -

Submitting to App Stores

- -

Android (Google Play)

- -
    -
  1. Generate a signed AAB: -
    eas build -p android --profile production
    -
  2. -
  3. Follow Google Play Console submission guidelines
  4. -
- -

iOS (App Store)

- -
    -
  1. Generate a signed IPA: -
    eas build -p ios --profile production
    -
  2. -
  3. Submit through App Store Connect
  4. -
-
- -
-

Troubleshooting

- -

Common Issues

- -

Metro Bundler Issues

-
# Clear cache and restart
-expo start -c
- -

Dependency Problems

-
# Reset node_modules
-rm -rf node_modules
-npm install
- -

Expo SDK Version Conflicts

-

Ensure all packages are compatible with your Expo SDK version in package.json.

- -
-

Tip: Most common issues can be resolved by clearing your cache and reinstalling dependencies.

-
-
- -
-

Support

- -

For additional support, please contact us at support@email.com or visit our support page on TemplateMonster.

-
-
-
- - - - - - - - - - - - \ No newline at end of file diff --git a/dyktando.html b/dyktando.html index 75bea55..82ee531 100644 --- a/dyktando.html +++ b/dyktando.html @@ -39,9 +39,7 @@ -
-
-
+
@@ -71,6 +69,9 @@ }).then(html => { document.getElementById('header-placeholder').outerHTML = html; }); + loadComponent('components/progress-bar.html', {'{PROGRESS_ID}': 'dyk-progress-bar-inner'}).then(html => { + document.getElementById('progressbar-placeholder').outerHTML = html; + }); loadComponent('components/footer.html').then(html => { document.getElementById('footer-placeholder').outerHTML = html; }); diff --git a/dzielenie.html b/dzielenie.html index 6d0e938..49e2e81 100644 --- a/dzielenie.html +++ b/dzielenie.html @@ -51,9 +51,7 @@ 0/20
-
-
-
+
@@ -107,6 +105,9 @@ }).then(html => { document.getElementById('header-placeholder').outerHTML = html; }); + loadComponent('components/progress-bar.html', {'{PROGRESS_ID}': 'progress-inner'}).then(html => { + document.getElementById('progressbar-placeholder').outerHTML = html; + }); loadComponent('components/footer.html').then(html => { document.getElementById('footer-placeholder').outerHTML = html; }); diff --git a/mnozenie.html b/mnozenie.html index 917326f..8d54002 100644 --- a/mnozenie.html +++ b/mnozenie.html @@ -51,9 +51,7 @@ 0/20
-
-
-
+
@@ -107,6 +105,9 @@ }).then(html => { document.getElementById('header-placeholder').outerHTML = html; }); + loadComponent('components/progress-bar.html', {'{PROGRESS_ID}': 'progress-inner'}).then(html => { + document.getElementById('progressbar-placeholder').outerHTML = html; + }); loadComponent('components/footer.html').then(html => { document.getElementById('footer-placeholder').outerHTML = html; }); diff --git a/testy.html b/testy.html index 118cc10..53b2239 100644 --- a/testy.html +++ b/testy.html @@ -100,9 +100,7 @@
Trening
0
-
-
-
+
@@ -161,6 +159,9 @@ }).then(html => { document.getElementById('header-placeholder').outerHTML = html; }); + loadComponent('components/progress-bar.html', {'{PROGRESS_ID}': 'progress_inner'}).then(html => { + document.getElementById('progressbar-placeholder').outerHTML = html; + }); loadComponent('components/footer.html').then(html => { document.getElementById('footer-placeholder').outerHTML = html; });