<!doctype html> <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-on="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>yuzu Installer</title> <link rel="stylesheet" href="/css/bulma.css" type="text/css"> <link rel="stylesheet" href="/css/main.css" type="text/css"> </head> <body> <div id="app"> <nav class="navbar is-dark" role="navigation" aria-label="main navigation"> <div class="navbar-brand"> <span class="navbar-item"> <img src="/img/logo.png" v-bind:alt="config.general.name"> </span> </div> </nav> <!-- Main content --> <section class="section"> <div class="container"> <div class="columns"> <div class="column is-one-third"> <h1 class="title"> Welcome to the {{ config.general.name }} installer! </h1> <h2 class="subtitle"> We will have you up and running in just a few moments. </h2> </div> <div class="column" v-if="has_error"> <h4 class="subtitle">An error occurred:</h4> <code>{{ error }}</code> <a class="button is-primary is-pulled-right" v-on:click="back_to_packages">Back</a> </div> <div class="column" v-else-if="modify_install"> <h4 class="subtitle">Choose an option:</h4> <div class="field is-grouped"> <p class="control"> <a class="button is-link" v-on:click="exit"> Update </a> </p> <p class="control"> <a class="button" v-on:click="exit"> Modify </a> </p> <p class="control"> <a class="button is-danger" v-on:click="confirm_uninstall"> Uninstall </a> </p> </div> </div> <div class="column" v-else-if="select_packages"> <h4 class="subtitle">Select your preferred settings:</h4> <!-- Build options --> <div class="tile is-ancestor"> <div class="tile is-parent" v-for="package in config.packages" :index="package.name"> <div class="tile is-child"> <div class="box"> <label class="checkbox"> <input type="checkbox" v-model="package.default" /> {{ package.name }} </label> <p> {{ package.description }} </p> </div> </div> </div> </div> <div class="subtitle is-6">Install Location</div> <div class="field has-addons"> <div class="control is-expanded"> <input class="input" type="text" v-model="install_location" placeholder="Enter a install path here"> </div> <div class="control"> <a class="button is-info" v-on:click="select_file"> Select </a> </div> </div> <a class="button is-primary is-pulled-right" v-on:click="install">Install!</a> </div> <div class="column" v-else-if="is_installing"> <h4 class="subtitle">Installing...</h4> <div v-html="config.general.installing_message"></div> <br /> <div v-html="progress_message"></div> <progress class="progress is-info is-medium" v-bind:value="progress" max="100"> {{ progress }}% </progress> </div> <div class="column" v-else-if="is_finished"> <h4 class="subtitle">Thanks for installing {{ config.general.name }}!</h4> <a class="button is-primary is-pulled-right" v-on:click="exit">Exit</a> </div> <div class="column" v-else> <h4 class="subtitle">Oh no!</h4> <div>A error occured during installation. Please retry!</div> </div> </div> </div> </section> <div class="modal is-active" v-if="confirm_uninstall"> <div class="modal-background"></div> <div class="modal-card"> <header class="modal-card-head"> <p class="modal-card-title">Are you sure you want to uninstall {{ config.general.name }}?</p> </header> <footer class="modal-card-foot"> <button class="button is-danger">Yes</button> <button class="button" v-on:click="cancel_uninstall">No</button> </footer> </div> </div> </div> <script src="/api/config"></script> <script src="/js/helpers.js"></script> <script src="/js/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { config : config, install_location : "", modify_install : false, select_packages : true, is_installing : false, is_finished : false, confirm_uninstall : false, progress : 0, progress_message : "", has_error : false, error : "", metadata : { database : [], install_path : "", preexisting_install : false } }, methods: { "select_file": function() { ajax("/api/file-select", function(e) { if (e.path != null) { app.install_location = e.path; } }); }, "install": function() { this.select_packages = false; this.is_installing = true; var results = {}; console.log("Packages: " + this.config.packages); for (var package_index = 0; package_index < this.config.packages.length; package_index++) { var current_package = this.config.packages[package_index]; if (current_package.default != null) { results[current_package.name] = current_package.default; } } console.log("Results: " + results); results["path"] = this.install_location; stream_ajax("/api/start-install", function(line) { if (line.hasOwnProperty("Status")) { app.progress_message = line.Status[0]; app.progress = line.Status[1] * 100; } if (line.hasOwnProperty("Error")) { app.is_installing = false; app.has_error = true; app.error = line.Error; } }, function(e) { app.is_installing = false; app.is_finished = true; }, undefined, results); }, "back_to_packages": function() { app.select_packages = true; app.has_error = false; app.is_installing = false; app.is_finished = false; }, "confirm_uninstall": function() { app.confirm_uninstall = true; }, "cancel_uninstall": function() { app.confirm_uninstall = false; }, "exit": function() { ajax("/api/exit", function() {}); } } }); ajax("/api/installation-status", function(e) { app.metadata = e; if (e.preexisting_install) { app.modify_install = true; app.select_packages = false; app.install_location = e.install_path; } else { ajax("/api/default-path", function(e) { if (e.path != null) { app.install_location = e.path; } }); } }); </script> </body> </html>