1<!DOCTYPE html> 2<html lang="no"> 3<head> 4 <meta charset="utf-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 <meta name="busbar-api-base" content="https://busbar-webapp-embedded-v2.onrender.com"> 7 <title>Prosjektstyringsverktøy</title> 8 <link rel="icon" type="image/png" href="assets/Busbar_lyn_fylt.png"> 9 <link rel="stylesheet" href="styles.css"> 10 <link rel="stylesheet" href="font.css"> 11
11<script src="assets/vendor/msal-browser.min.js"></script>
11 12 <style> 13 :root{ 14 --bg:#f1f0f0; --text:#f1f0f0; --muted:#9fb0c6; 15 --card:#08172e; --card-border:#435A7F; 16 --input:#2B3A58; --input-border:#435A7F; 17 --accent:#2B3A58; --accent-weak:#435A7F; 18 --warning:#febe10; --placeholder:#6b7280; 19 } 20 header h1{margin:0 0 6px 0; color:var(--muted)} 21 22 .logo{display:block;width:180px;max-width:100%;height:auto;background:transparent;padding:0} 23 .modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,0.6);display:none;align-items:center;justify-content:center;z-index:50} 24 .modal{background:var(--card);border:1px solid var(--card-border);border-radius:12px;padding:16px;min-width:320px;max-width:90vw} 25 .modal h3{margin:0 0 8px 0} 26 .modal p{margin:0 0 12px 0;color:var(--muted)} 27 .actions{display:flex;gap:8px;justify-content:flex-end} 28 .btn{padding:10px 14px;background:var(--accent);border:1px solid var(--accent);border-radius:10px;color:#fff;cursor:pointer} 29 .btn.alt{background:var(--input);border-color:var(--input-border)} 30 </style> 31</head> 32<body> 33 <svg class="app-icon-sprite" aria-hidden="true" focusable="false"> 34 <symbol id="icon-dashboard" viewBox="0 0 24 24"><path d="M4 13h6V4H4v9Zm10 7h6V4h-6v16ZM4 20h6v-5H4v5Z"/></symbol> 35 <symbol id="icon-projects" viewBox="0 0 24 24"><path d="M3 6.5A2.5 2.5 0 0 1 5.5 4H10l2 2h6.5A2.5 2.5 0 0 1 21 8.5v9A2.5 2.5 0 0 1 18.5 20h-13A2.5 2.5 0 0 1 3 17.5v-11Z"/></symbol> 36 <symbol id="icon-calculator" viewBox="0 0 24 24"><path d="M7 2h10a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm1 4v4h8V6H8Zm0 7v2h2v-2H8Zm4 0v2h2v-2h-2Zm4
360v2h2v-2h-2Zm-8 4v2h2v-2H8Zm4 0v2h2v-2h-2Zm4 0v2h2v-2h-2Z"/></symbol> 37 <symbol id="icon-calendar" viewBox="0 0 24 24"><path d="M7 2h2v3h6V2h2v3h2a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2V2Zm12 8H5v9h14v-9Z"/></symbol> 38 <symbol id="icon-customers" viewBox="0 0 24 24"><path d="M8 12a4 4 0 1 1 0-8 4 4 0 0 1 0 8Zm8.5 1a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7ZM2 20a6 6 0 0 1 12 0H2Zm11.5 0a7.5 7.5 0 0 0-1.2-4.1A5 5 0 0 1 22 18.5V20h-8.5Z"/></symbol> 39 <symbol id="icon-offers" viewBox="0 0 24 24"><path d="M6 2h9l5 5v15H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm8 1.5V8h4.5L14 3.5ZM8 12h8v2H8v-2Zm0 4h8v2H8v-2Z"/></symbol> 40 <symbol id="icon-project-flow" viewBox="0 0 24 24"><path d="M5 4h14v2H5V4Zm2 4h2v3h6V8h2v3h2v6h-2v3h-2v-3H9v3H7v-3H5v-6h2V8Zm2 5v2h6v-2H9Z"/></symbol> 41 <symbol id="icon-email" viewBox="0 0 24 24"><path d="M4 5h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Zm8 7.2L4.7 7H4v.7l8 5.7 8-5.7V7h-.7L12 12.2Z"/></symbol> 42 <symbol id="icon-company-card" viewBox="0 0 24 24"><path d="M4 5h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Zm2 4v2h6V9H6Zm0 4v2h4v-2H6Zm9-3h3v2h-3v-2Zm-1 4h5v2h-5v-2Z"/></symbol> 43 <symbol id="icon-project-folders" viewBox="0 0 24 24"><path d="M3 6.5A2.5 2.5 0 0 1 5.5 4H10l2 2h6.5A2.5 2.5 0 0 1 21 8.5V10H3V6.5Zm0 5.5h18v5.5a2.5 2.5 0 0 1-2.5 2.5h-13A2.5 2.5 0 0 1 3 17.5V12Zm5 2v2h8v-2H8Z"/></symbol> 44 <symbol id="icon-supplier-folders" viewBox="0 0 24 24"><path d="M4 5h6l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Zm2 6v5h3v-5H6Zm5-2v7h3V9h-3Zm5 3v4h3v-4h-3Z"/></symbol> 45 <symbol id="icon-login" viewBox="0 0 24 24"><path d="M10 4h8a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-8v-2h8V6h-8V4Zm1.5 4.5L15 12l-3.5 3.5-1.4-1.4 1.1-1.1H3v-2h8.2l-1.1-1.1 1.4-1.4Z"/></symbol> 46 <symbol id="icon-logout" viewBox="0 0 24 24"><path d="M4 4h8v2H4v12h8v2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Zm10.5 4.5L18 12l-3.5 3.5-1.4-1.4 1.1-1.1H7v-2h7.2l-1.1-1.1 1.4-1.4ZM18 6h2v12h-2V6Z"/></symbol> 47 <symbol id="icon-admin" viewBox="0 0 24 24"><path d="M12 2 4 5.5v6.2c0 5 3.4 9.6 8 10.8 4.6-1.2 8-5.8 8-10.8V5.5L12 2Zm0 5a2.5 2.5 0 0 1 1.3 4.6L15 17H9l1.7-5.4A2.5 2.5 0 0 1 12 7Z"/></symbol> 48 <symbol id="icon-total-offer" viewBox="0 0 24 24"><path d="M6 2h9l5 5v15H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm8 1.5V8h4.5L14 3.5ZM8 12h8v2H8v-2Zm0 4h5v2H8v-2Z"/><path d="m16.5 15 .8 1.6 1.7.2-1.2 1.2.3 1.7-1.6-.8-1.5.8.3-1.7-1.2-1.2 1.7-.2.7-1.6Z"/></symbol> 49 <symbol id="icon-total-margin" viewBox="0 0 24 24"><path d="M7 3h10a4 4 0 0 1 4 4v10a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4V7a4 4 0 0 1 4-4Zm0 2a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2H7Zm2 3h2v2H9V8Zm4 0h2v2h-2V8Zm-4 4h2v2H9v-2Zm4 0h2v2h-2v-2Zm-4 4h6v2H9v-2Z"/></symbol> 50 <symbol id="icon-total-profit" viewBox="0 0 24 24"><path d="M4 19h16v2H2V3h2v16Zm2-3 4-5 3 3 5-7 1.6 1.2-6.3 8.8-3-3-2.7 3.4L6 16Z"/><path d="M15 5h5v5h-2V7h-3V5Z"/></symbol> 51 </svg> 52 <header> 53 <div class="header-top"> 54 <h1>Prosjektstyringsverktøy</h1> 55 </div> 56 <div class="market-bar" id="marketTicker" aria-live="polite"> 57 <div class="market-item"> 58 <span class="market-label">LME aluminium</span> 59 <span class="market-value" id="marketAlPrice">--</span> 60 <span class="market-note" id="marketAlMeta">USD/t ÷ ALI=F</span> 61 </div> 62 <div class="market-item"> 63 <div class="market-fx-grid"> 64 <span class="market-label">USD / NOK</span> 65 <span class="market-label">1 uke</span> 66 <span class="market-label">1 MND</span> 67 <span class="market-value" id="marketUsdNok">--</span> 68 <span class="market-change-value" id="marketUsdWeek"><span class="market-change-rate">--</span><span class="market-change-percent">--</span></span> 69 <span class="market-change-value" id="marketUsdMonth"><span class="market-change-rate">--</span><span class="market-change-percent">--</span></span> 70 </div> 71 <span class="market-note" id="marketUsdMeta">Henter...</span> 72 </div> 73 <div class="market-item"> 74 <div class="market-fx-grid">
75 <span class="market-label">EUR / NOK</span> 76 <span class="market-label">1 uke</span> 77 <span class="market-label">1 MND</span> 78 <span class="market-value" id="marketEurNok">--</span> 79 <span class="market-change-value" id="marketEurWeek"><span class="market-change-rate">--</span><span class="market-change-percent">--</span></span> 80 <span class="market-change-value" id="marketEurMonth"><span class="market-change-rate">--</span><span class="market-change-percent">--</span></span> 81 </div> 82 <span class="market-note" id="marketEurMeta">Henter...</span> 83 </div> 84 <div class="market-item market-updated"> 85 <span class="market-label">Sist oppdatert</span> 86 <span class="market-value small" id="marketUpdated">--</span> 87 <span class="market-status" id="marketStatus">Henter...</span> 88 </div> 89 </div> 90 </header> 91 92 <main class="app-shell" id="dashboardShell"> 93 <aside class="dashboard-sidebar" aria-label="Hovedmeny"> 94 <div class="sidebar-top-row"> 95 <button type="button" class="sidebar-collapse-btn" id="dashboardSidebarToggle" aria-label="Minimer meny" aria-expanded="true"> 96 <span class="sidebar-collapse-icon" aria-hidden="true"></span> 97 </button> 98 <a class="sidebar-brand" href="https://busbar.no" aria-label="Gå til busbar.no"> 99 <div class="logo-mask" role="img" aria-label="Logo"></div> 100 </a> 101 </div> 102 <nav class="sidebar-nav"> 103 <div class="sidebar-nav-section"> 104 <button type="button" class="sidebar-nav-item is-active" data-dashboard-nav="dashboard"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-dashboard"></use></svg><span class="sidebar-nav-label">Dashbord</span></button> 105 <a class="sidebar-nav-item" href="calculator.html" data-dashboard-link="calculator"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-calculator"></use></svg><span class="sidebar-nav-label">Prisverktøy</span></a> 106 <button type="button" class="sidebar-nav-item" data-dashboard-nav="projects"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-projects"></use></svg><span class="sidebar-nav-label">Prosjekter</span></button> 107 <button type="button" class="sidebar-nav-item" data-dashboard-nav="project-flow"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-project-flow"></use></svg><span class="sidebar-nav-label">Prosjektflyt</span></button> 108 <button type="button" class="sidebar-nav-item" data-dashboard-nav="offers"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-offers"></use></svg><span class="sidebar-nav-label">Tilbud</span></button> 109 <button type="button" class="sidebar-nav-item" data-dashboard-nav="email"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-email"></use></svg><span class="sidebar-nav-label">E-post</span></button> 110 <button type="button" class="sidebar-nav-item" data-dashboard-nav="calendar"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-calendar"></use></svg><span class="sidebar-nav-label">Kalender</span></button> 111 <button type="button" class="sidebar-nav-item" data-dashboard-nav="customers"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-customers"></use></svg><span class="sidebar-nav-label">Kontaktpersoner</span></button> 112 <button type="button" class="sidebar-nav-item" data-dashboard-nav="company-card"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-company-card"></use></svg><span class="sidebar-nav-label">
112Kundekort</span></button> 113 <div class="sidebar-separator" aria-hidden="true"></div> 114 <button type="button" class="sidebar-nav-item" data-dashboard-nav="busbar-folders"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-project-folders"></use></svg><span class="sidebar-nav-label">Busbar</span></button> 115 <button type="button" class="sidebar-nav-item" data-dashboard-nav="project-folders"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-project-folders"></use></svg><span class="sidebar-nav-label">Prosjektmapper</span></button> 116 <button type="button" class="sidebar-nav-item" data-dashboard-nav="supplier-folders"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-supplier-folders"></use></svg><span class="sidebar-nav-label">Leverandørmapper</span></button> 117 </div> 118 <div class="sidebar-nav-section is-bottom"> 119 <div class="sidebar-separator" aria-hidden="true"></div> 120 <div id="authControls" class="sidebar-auth-block"> 121 <span id="authUser" class="auth-user muted-text" hidden></span> 122 <div class="sidebar-auth-actions"> 123 <button id="loginBtn" class="btn sidebar-auth-btn" title="Logg på"><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-login"></use></svg><span class="sidebar-auth-label">Logg på</span></button> 124 <button id="logoutBtn" class="btn alt sidebar-auth-btn" title="Logg av" hidden><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-logout"></use></svg><span class="sidebar-auth-label">Logg av</span></button> 125 </div> 126 </div> 127 <a class="sidebar-nav-item" href="admin.html" id="dashboardAdminNav" data-dashboard-admin hidden><svg class="sidebar-nav-icon" aria-hidden="true"><use href="#icon-admin"></use></svg><span class="sidebar-nav-label">Admin</span></a> 128 </div> 129 </nav> 130 </aside> 131 132 <section class="dashboard-main"> 133 <div class="view-toolbar" hidden> 134 <a class="btn alt nav-page-btn is-disabled" aria-disabled="true" tabindex="-1">Åpne prisverktøy</a> 135 </div> 136 137 <section id="mainDashboardView" class="dashboard-page placeholder-page is-active" data-dashboard-page="dashboard"> 138 <div class="placeholder-header"> 139 <h2>Dashbord</h2> 140 <p class="muted-text">Nøkkeltall og snarveier fra programmet samlet på ett sted.</p> 141 </div> 142 <div class="main-dashboard-grid"> 143 <article class="main-dashboard-widget dashboard-total-widget is-large"> 144 <div class="dashboard-widget-header"> 145 <div> 146 <h3>Totaler</h3> 147 <p class="muted-text">Summer fra alle beregnede linjer.</p> 148 </div> 149 <div class="dashboard-total-header-actions"> 150 <span id="dashboardTotalsMeta" class="dashboard-total-header-meta"></span> 151 <div class="dashboard-total-filters" aria-label="Filtrer totaler"> 152 <label class="dashboard-total-filter" for="dashboardTotalsYearFilter"><span class="dashboard-total-filter-label"><svg class="dashboard-total-filter-icon" aria-hidden="true"><use href="#icon-calendar"></use></svg>Ã r</span> 153 <select id="dashboardTotalsYearFilter"> 154 <option value="all">Alle</option> 155 </select> 156 </label> 157 <label class="dashboard-total-filter" for="dashboardTotalsMonthFilter"><span class="dashboard-total-filter-label"><svg class="dashboard-total-filter-icon" aria-hidden="true"><use href="#icon-calendar"></use></svg>MÃ¥ned</span> 158 <select id="dashboardTotalsMonthFilter"> 159 <option value="all">Alle</option> 160 </select> 161 </label> 162 </div> 163 <button id="dashboardTotalsExport" class="btn" type="button">Eksporter rapport</button> 164 </div> 165 </div> 166 <div id="dashboardTotalsContent" class="dashboard-total-content"></div> 167 </article> 168 <article class="main-dashboard-widget dashboard-status-widget is-small"> 169 <div class="dashboard-widget-header"> 170 <div> 171 <h3>Prosjekter</h3> 172 <p class="muted-text">Antall prosjekter fordelt på status.</p> 173 </div> 174 </div> 175 <div id="dashboardProjectStatusSummary" class="dashboard-status-summary"></div> 176 </article> 177 <article class="main-dashboard-widget dashboard-flow-status-widget is-small"> 178 <div class="dashboard-widget-header"> 179 <div> 180 <h3>Prosjektflyt</h3> 181 <p class="muted-text">Antall prosjekter fordelt på flytstatus.</p> 182 </div> 183 </div> 184 <div id="dashboardFlowStatusSummary" class="dashboard-status-summary"></div> 185 </article> 186 <article class="main-dashboard-widget dashboard-todo-widget is-small"> 187 <div class="dashboard-widget-header"> 188 <div> 189 <h3>To-Do</h3> 190 <p class="muted-text">Oppgaver knyttet til prosjekter.</p> 191 </div> 192 <button id="dashboardNewTodoBtn" type="button" class="btn alt btn-small">Ny oppgave</button> 193 </div> 194 <div id="dashboardTodoList" class="dashboard-todo-list" aria-live="polite"></div> 195 </article> 196 <article class="main-dashboard-widget dashboard-actions-widget is-wide"> 197 <div class="dashboard-widget-header"> 198 <div> 199 <h3>
199Anbefalte handlinger</h3> 200 <p class="muted-text">Oppgaver som bør behandles fra prosjekter, prosjektflyt og e-post.</p> 201 </div> 202 </div> 203 <div id="dashboardRecommendedActions" class="dashboard-recommended-actions"></div> 204 </article> 205 <article class="main-dashboard-widget dashboard-email-project-widget is-wide"> 206 <div class="dashboard-widget-header"> 207 <div> 208 <h3>Prosjektforslag</h3> 209 <p class="muted-text">E-posttråder som kan opprettes som nye prosjekter.</p> 210 </div> 211 </div> 212 <div id="dashboardEmailProjectSuggestions" class="dashboard-email-project-suggestions"></div> 213 </article> 214 <article class="main-dashboard-widget is-tall"><span>Tomt vindu</span></article> 215 <article class="main-dashboard-widget is-small"><span>Tomt vindu</span></article> 216 <article class="main-dashboard-widget is-wide"><span>Tomt vindu</span></article> 217 <article class="main-dashboard-widget is-medium"><span>Tomt vindu</span></article> 218 <article class="main-dashboard-widget is-small"><span>Tomt vindu</span></article> 219 <article class="main-dashboard-widget dashboard-copilot-widget is-small"> 220 <div class="dashboard-widget-header"> 221 <div> 222 <h3>Copilot</h3> 223 </div> 224 </div> 225 </article> 226 </div> 227 <form id="dashboardTodoForm" class="graph-edit-form dashboard-todo-edit-form" hidden autocomplete="off"> 228 <label for="dashboardTodoProject">Prosjekt 229 <select id="dashboardTodoProject" required> 230 <option value="">Velg prosjekt</option> 231 </select> 232 </label> 233 <label class="calendar-date-field" for="dashboardTodoDate">Dato 234 <span class="calendar-date-input-row"> 235 <input id="dashboardTodoDate" type="text" inputmode="numeric" autocomplete="off" placeholder="DD/MM/à à à à " required> 236 <button id="dashboardTodoDatePickerBtn" type="button" class="calendar-date-picker-btn" aria-label="Velg dato"> 237 <svg aria-hidden="true" viewBox="0 0 24 24"><path d="M7 2h2v3h6V2h2v3h2a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2V2Zm12 8H5v9h14v-9Z"/></svg> 238 </button> 239 <div id="dashboardTodoDatePickerPopover" class="calendar-date-picker-popover" hidden></div> 240 </span> 241 </label> 242 <label for="dashboardTodoStartTime">Starttid 243 <select id="dashboardTodoStartTime" required></select> 244 </label> 245 <label for="dashboardTodoDuration">Varighet 246 <select id="dashboardTodoDuration" required></select> 247 </label> 248 <label class="graph-wide-field" for="dashboardTodoText">Oppgavetekst
249 <input id="dashboardTodoText" type="text" required> 250 </label> 251 <div class="graph-edit-actions"> 252 <button type="submit" class="btn">Lagre</button> 253 <button id="dashboardTodoCancelBtn" type="button" class="btn alt">Avbryt</button> 254 </div> 255 </form> 256 </section> 257 258 <section id="dashboardView" class="dashboard-page" data-dashboard-page="projects" hidden> 259 <div class="dashboard-header"> 260 <div class="dashboard-intro"> 261 <h2>Prosjekter</h2> 262 <p class="muted-text">Velg et prosjekt, eller opprett nytt prosjekt. Prisverktøy åpnes på egen side.</p> 263 </div> 264 <div class="dashboard-actions section-toolbar"> 265 <button id="newProjectBtn" type="button" class="btn alt">Nytt prosjekt</button> 266 <div class="dashboard-sort-row"> 267 <div class="dashboard-sort-controls dashboard-search-controls"> 268 <label for="projectSearchInput">Søk prosjekt</label> 269 <input id="projectSearchInput" type="search" autocomplete="off" placeholder="Prosjekt, kunde, kontakt eller ansvarlig"> 270 </div> 271 <div class="dashboard-sort-controls"> 272 <label for="projectSortSelect">Sorter prosjekter</label> 273 <select id="projectSortSelect"> 274 <option value="date_newest">Nyest først</option> 275 <option value="date_oldest">Eldst først</option> 276 <option value="alpha_asc">Alfabetisk (A-Å)</option> 277 <option value="alpha_desc">Alfabetisk (Å-A)</option> 278 </select> 279 </div> 280 <div class="dashboard-sort-controls"> 281 <label for="lineSortSelect">Sorter linjer</label> 282 <select id="lineSortSelect"> 283 <option value="date_newest">Nyest først</option> 284 <option value="date_oldest">Eldst først</option> 285 <option value="alpha_asc">Alfabetisk (A-Å)</option> 286 <option value="alpha_desc">Alfabetisk (Å-A)</option> 287 </select> 288 </div> 289 <button id="projectArchiveToggleBtn" type="button" class="btn alt project-archive-toggle-btn" aria-pressed="false">Prosjekt arkiv</button> 290 </div> 291 <div class="toolbar-right"> 292 <span id="projectsStatus" class="graph-status muted-text"></span> 293 <button id="refreshProjectsBtn" type="button" class="btn alt">Oppdater</button> 294 </div> 295 </div> 296 </div> 297 <div id="projectList" class="project-list" aria-live="polite"> 298 <div class="empty-state"> 299 <p>Ingen prosjekter er registrert ennå.</p> 300 <button id="newProjectEmptyBtn" type="button" class="btn alt" data-action="create-project">Nytt prosjekt</button> 301 </div> 302 </div> 303 </section> 304 <section id="projectFlowView" class="dashboard-page placeholder-page" data-dashboard-page="project-flow" hidden> 305 <div class="placeholder-header"> 306 <h2>Prosjektflyt</h2> 307 <p class="muted-text">Visualiserer prosjektoppgaver som en Gantt-plan med start, slutt og fullført-status.</p> 308 </div> 309 <div class="project-flow-toolbar section-toolbar"> 310 <div class="toolbar-left"> 311 <div class="dashboard-sort-controls"> 312 <label for="projectFlowProjectSelect">Prosjekt</label> 313 <select id="projectFlowProjectSelect"></select> 314 </div> 315 <button id="addProjectFlowMilestoneBtn" type="button" class="btn alt">Ny oppgave</button> 316 <button id="projectFlowExpandAllBtn" type="button" class="btn alt">Utvid alle</button> 317 <button id="projectFlowZoomOutBtn" type="button" class="btn alt">Zoom ut</button> 318 <button id="projectFlowZoomInBtn" type="button" class="btn alt">Zoom inn</button> 319 <button id="projectFlowZoomFitBtn" type="button" class="btn alt">Tilpass visning</button> 320 </div> 321 <div class="toolbar-right">
322 <span id="projectFlowStatus" class="graph-status muted-text"></span> 323 <button id="refreshProjectFlowBtn" type="button" class="btn alt">Oppdater</button> 324 </div> 325 </div> 326 <form id="projectFlowMilestoneForm" class="project-flow-form" hidden> 327 <input id="projectFlowMilestoneId" type="hidden"> 328 <input id="projectFlowClickedDateInput" type="hidden"> 329 <label for="projectFlowTaskProjectSelect">Prosjekt 330 <select id="projectFlowTaskProjectSelect" required></select> 331 </label> 332 <label for="projectFlowDateInput">Startdato 333 <span class="calendar-date-input-row"> 334 <input id="projectFlowDateInput" type="text" inputmode="numeric" autocomplete="off" placeholder="DD/MM/Ã Ã Ã Ã " required> 335 <button id="projectFlowStartDatePickerBtn" type="button" class="calendar-date-picker-btn" aria-label="Velg startdato"> 336 <svg aria-hidden="true" viewBox="0 0 24 24"><path d="M7 2h2v3h6V2h2v3h2a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2V2Zm12 8H5v9h14v-9Z"/></svg> 337 </button> 338 <div id="projectFlowDatePickerPopover" class="calendar-date-picker-popover" hidden></div> 339 </span> 340 </label> 341 <label for="projectFlowEndDateInput">Sluttdato 342 <span class="calendar-date-input-row"> 343 <input id="projectFlowEndDateInput" type="text" inputmode="numeric" autocomplete="off" placeholder="DD/MM/Ã Ã Ã Ã " required> 344 <button id="projectFlowEndDatePickerBtn" type="button" class="calendar-date-picker-btn" aria-label="Velg sluttdato"> 345 <svg aria-hidden="true" viewBox="0 0 24 24"><path d="M7 2h2v3h6V2h2v3h2a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2V2Zm12 8H5v9h14v-9Z"/></svg> 346 </button> 347 </span> 348 </label> 349 <label for="projectFlowPhaseSelect">Oppgave 350 <select id="projectFlowPhaseSelect" required></select> 351 </label> 352 <label for="projectFlowDurationValueInput">Varighet 353 <input id="projectFlowDurationValueInput" type="number" min="1" step="1" value="1"> 354 </label> 355 <label for="projectFlowDurationUnitSelect">Enhet 356 <select id="projectFlowDurationUnitSelect"> 357 <option value="days">Dager</option> 358 <option value="weeks">Uker</option> 359 <option value="months">MÃ¥neder</option> 360 </select> 361 </label> 362 <label for="projectFlowFileInput">Fil 363 <input id="projectFlowFileInput" type="file" disabled title="Filopplasting i prosjektflyt er ikke aktivert enda"> 364 </label> 365 <label for="projectFlowDependencyRelationSelect">Styrt av 366 <select id="projectFlowDependencyRelationSelect"></select> 367 </label> 368 <label for="projectFlowDependencyTaskSelect">Styrer 369 <select id="projectFlowDependencyTaskSelect"></select> 370 </label> 371 <label for="projectFlowTaskResponsibleInput">Ansvarlig 372 <input id="projectFlowTaskResponsibleInput" type="text" readonly> 373 </label> 374 <div class="graph-edit-actions"> 375 <button type="submit" class="btn">Lagre</button> 376 <button id="deleteProjectFlowMilestoneBtn" type="button" class="btn danger" hidden>Slett</button> 377 <button id="cancelProjectFlowMilestoneBtn" type="button" class="btn alt">Avbryt</button> 378 </div> 379 </form> 380 <div id="projectFlowTimeline" class="project-flow-timeline" aria-live="polite"></div> 381 </section> 382 <section id="projectFlowBetaView" class="dashboard-page placeholder-page" data-dashboard-page="project-flow-beta" hidden> 383 <div class="placeholder-header"> 384 <h2>Prosjektflyt-Beta</h2> 385 <p class="muted-text">Nytt utkast til prosjektflyt med struktur inspirert av arbeidsflytverktøy som Asana og ClickUp.</p> 386 </div> 387 <div class="project-flow-beta-shell"> 388 <div class="project-flow-toolbar project-flow-beta-toolbar section-toolbar"> 389 <div class="toolbar-left">
390 <div class="dashboard-sort-controls"> 391 <label for="projectFlowBetaProjectSelect">Prosjekt</label> 392 <select id="projectFlowBetaProjectSelect"></select> 393 </div> 394 </div> 395 </div> 396 <div class="project-flow-beta-tabs" role="tablist" aria-label="Prosjektflyt beta visning"> 397 <button id="projectFlowBetaListTab" type="button" class="project-flow-beta-tab is-active" data-project-flow-beta-view="list" role="tab" aria-selected="true">Liste</button> 398 <button id="projectFlowBetaTimelineTab" type="button" class="project-flow-beta-tab" data-project-flow-beta-view="timeline" role="tab" aria-selected="false">Fremdriftsplan</button> 399 </div> 400 <div id="projectFlowBetaListPanel" class="project-flow-beta-table-wrap" data-project-flow-beta-panel="list" aria-label="Prosjektflyt beta liste"> 401 <table class="project-flow-beta-table"> 402 <colgroup> 403 <col class="project-flow-beta-col-task"> 404 <col class="project-flow-beta-col-comment"> 405 <col class="project-flow-beta-col-due"> 406 <col class="project-flow-beta-col-assignee"> 407 <col class="project-flow-beta-col-phase"> 408 <col class="project-flow-beta-col-priority"> 409 <col class="project-flow-beta-col-blocking"> 410 </colgroup> 411 <thead> 412 <tr class="project-flow-beta-list-top-row" aria-hidden="true"> 413 <th colspan="7"></th> 414 </tr> 415 <tr> 416 <th>Oppgaver</th> 417 <th>Kommentar</th> 418 <th>Tidsfrist</th> 419 <th>Ansvarlig</th> 420 <th>Prosjektfaser</th> 421 <th>Prioritet</th> 422 <th>Blokkerer</th> 423 </tr> 424 </thead> 425 <tbody id="projectFlowBetaTableBody"> 426 <tr class="project-flow-beta-phase-row"> 427 <td colspan="7"><span class="project-flow-beta-caret">â¾</span><strong>1.00.0 Strømskinner - Salg</strong></td> 428 </tr> 429 <tr> 430 <td><span class="project-flow-beta-status is-done"></span>1.01.0 Forespørsel</td> 431 <td></td> 432 <td><span class="project-flow-beta-date-icon"></span></td> 433 <td><span class="project-flow-beta-assignee-icon"></span></td> 434 <td><span class="project-flow-beta-tag is-sales">Salg</span></td> 435 <td><span class="project-flow-beta-priority is-high">Høy</span></td> 436 <td><span class="project-flow-beta-blocker"><span class="project-flow-beta-blocker-lock" aria-hidden="true"></span>1.03.0 Bestilling · FS</span></td> 437 </tr> 438 <tr> 439 <td><span class="project-flow-beta-status is-done"></span>1.02.0 Tilbud</td> 440 <td></td> 441 <td><span class="project-flow-beta-date-icon"></span></td> 442 <td><span class="project-flow-beta-assignee-icon"></span></td> 443 <td><span class="project-flow-beta-tag is-sales">Salg</span></td> 444 <td><span class="project-flow-beta-priority is-medium">Middels</span></td> 445 <td><span class="project-flow-beta-blocker"><span class="project-flow-beta-blocker-lock" aria-hidden="true"></span>1.03.0 Bestilling · FS</span></td> 446 </tr> 447 <tr> 448 <td><span class="project-flow-beta-status is-waiting"></span>1.03.0 Bestilling</td> 449 <td></td> 450 <td><span class="project-flow-beta-date-icon"></span></td> 451 <td><span class="project-flow-beta-assignee-icon"></span></td> 452 <td><span class="project-flow-beta-tag is-sales">Salg</span></td> 453 <td></td> 454 <td></td> 455 </tr> 456 <tr> 457 <td><span class="project-flow-beta-status is-waiting"></span>1.04.0 Fakturert</td> 458 <td></td> 459 <td><span class="project-flow-beta-date-icon"></span></td> 460 <td><span class="project-flow-beta-assignee-icon"></span></td> 461 <td><span class="project-flow-beta-tag is-sales">Salg</span></td> 462 <td></td> 463 <td></td> 464 </tr> 465 <tr class="project-flow-beta-phase-row"> 466 <td colspan="7"><span class="project-flow-beta-caret">â¾</span><strong>2.00.0 Strømskinner - Prosjektering</strong></td> 467 </tr> 468 <tr> 469 <td><span class="project-flow-beta-status is-approval"></span>2.01.0 Oppdatere Dynamics/solgt</td> 470 <td></td> 471 <td><span class="project-flow-beta-date-icon"></span></td> 472 <td><span class="project-flow-beta-assignee-icon"></span></td> 473 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 474 <td></td> 475 </tr> 476 <tr> 477 <td><span class="project-flow-beta-caret">â¾</span><span class="project-flow-beta-status is-waiting"></span>
4772.02.0 Leveringsomfang <span class="project-flow-beta-subtask-count">6</span></td> 478 <td></td> 479 <td><span class="project-flow-beta-date-icon"></span></td> 480 <td><span class="project-flow-beta-assignee-icon"></span></td> 481 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 482 <td></td> 483 </tr> 484 <tr class="project-flow-beta-subtask-row"> 485 <td><span class="project-flow-beta-status is-approval"></span>2.02.1 Fleksibler</td> 486 <td></td> 487 <td><span class="project-flow-beta-date-icon"></span></td> 488 <td><span class="project-flow-beta-assignee-icon"></span></td> 489 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 490 <td></td> 491 </tr> 492 <tr class="project-flow-beta-subtask-row"> 493 <td><span class="project-flow-beta-status is-approval"></span>2.02.2 branngjennomføringer</td> 494 <td></td> 495 <td><span class="project-flow-beta-date-icon"></span></td> 496 <td><span class="project-flow-beta-assignee-icon"></span></td> 497 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 498 <td><span class="project-flow-beta-priority is-low">Lav</span></td> 499 </tr> 500 <tr class="project-flow-beta-subtask-row"> 501 <td><span class="project-flow-beta-status is-approval"></span>2.02.3 Utsparinger</td> 502 <td></td> 503 <td><span class="project-flow-beta-date-icon"></span></td> 504 <td><span class="project-flow-beta-assignee-icon"></span></td> 505 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 506 <td></td> 507 </tr> 508 <tr class="project-flow-beta-subtask-row"> 509 <td><span class="project-flow-beta-status is-approval"></span>2.02.4 Detaljtegninger rom</td> 510 <td></td> 511 <td><span class="project-flow-beta-date-icon"></span></td> 512 <td><span class="project-flow-beta-assignee-icon"></span></td> 513 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 514 <td></td> 515 </tr> 516 <tr class="project-flow-beta-subtask-row"> 517 <td><span class="project-flow-beta-status is-approval"></span>2.02.5 Detaljtegninger trafo</td> 518 <td></td> 519 <td><span class="project-flow-beta-date-icon"></span></td> 520 <td><span class="project-flow-beta-assignee-icon"></span></td> 521 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 522 <td></td> 523 </tr> 524 <tr class="project-flow-beta-subtask-row"> 525 <td><span class="project-flow-beta-status is-approval"></span>2.02.6 Detaljtegninger tavle</td> 526 <td></td> 527 <td><span class="project-flow-beta-date-icon"></span></td> 528 <td><span class="project-flow-beta-assignee-icon"></span></td> 529 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 530 <td></td> 531 </tr> 532 <tr> 533 <td><span class="project-flow-beta-status is-approval"></span>2.03.0 Befaring/Teams-møte</td> 534 <td></td> 535 <td><span class="project-flow-beta-date-icon"></span></td> 536 <td><span class="project-flow-beta-assignee-icon"></span></td> 537 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 538 <td></td> 539 </tr> 540 <tr> 541 <td><span class="project-flow-beta-status is-waiting"></span>2.04.0 Prosjektere/Tegne</td> 542 <td></td> 543 <td><span class="project-flow-beta-date-icon"></span></td> 544 <td><span class="project-flow-beta-assignee-icon"></span></td> 545 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 546 <td></td> 547 </tr> 548 <tr> 549 <td><span class="project-flow-beta-status is-waiting"></span>2.05.0 Sende tegninger til kunde</td> 550 <td></td> 551 <td><span class="project-flow-beta-date-icon"></span></td> 552 <td><span class="project-flow-beta-assignee-icon"></span></td> 553 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 554 <td></td> 555 </tr> 556 <tr> 557 <td><span class="project-flow-beta-status is-waiting"></span>2.06.0 Godkjente tegninger fra kunde/design freeze</td> 558 <td></td> 559 <td><span class="project-flow-beta-date-icon"></span></td> 560 <td><span class="project-flow-beta-assignee-icon"></span></td> 561 <td><span class="project-flow-beta-tag is-engineering">Prosjektering</span></td> 562 <td></td> 563 </tr> 564 </tbody> 565 </table> 566 </div> 567 <div id="projectFlowBetaTimelinePanel" class="project-flow-beta-timeline-wrap" data-project-flow-beta-panel="timeline" aria-label="Prosjektflyt beta fremdriftsplan" hidden> 568 <div id="projectFlowBetaTimeline" class="project-flow-beta-timeline" aria-live="polite"></div> 569 </div> 570 </div> 571 </section> 572 <section id="calendarView" class="dashboard-page placeholder-page" data-dashboard-page="calendar" hidden> 573 <div class="placeholder-header"> 574 <h2>Kalender</h2> 575 <p class="muted-text">Viser kommende kalenderhendelser fra Microsoft-kontoen din.</p> 576 </div> 577 <div class="graph-toolbar section-toolbar"> 578 <div class="toolbar-left"> 579 <button id="newCalendarEventBtn" type="button" class="btn alt">Ny avtale</button> 580 <div class="calendar-period-controls"> 581 <button id="calendarTodayBtn" type="button" class="calendar-today-btn">I dag</button> 582 <button id="calendarPrevBtn" type="button" class="calendar-period-btn" aria-label="Forrige periode"><span class="calendar-period-icon">‹</span></button> 583 <button id="calendarNextBtn" type="button" class="calendar-period-btn" aria-label="Neste periode"><span class="calendar-period-icon">›</span></button>
584 <span id="calendarPeriodLabel" class="calendar-period-label"></span> 585 </div> 586 <label class="calendar-mode-select-label" for="calendarModeSelect"> 587 <select id="calendarModeSelect" class="calendar-mode-select"> 588 <option value="month">Måned</option> 589 <option value="week">Uke</option> 590 <option value="list">Liste</option> 591 </select> 592 </label> 593 </div> 594 <div class="toolbar-right"> 595 <span id="calendarStatus" class="graph-status muted-text"></span> 596 <button id="refreshCalendarBtn" type="button" class="btn alt">Oppdater</button> 597 </div> 598 </div> 599 <form id="calendarEventForm" class="graph-edit-form" hidden> 600 <input id="calendarEventId" type="hidden"> 601 <div class="calendar-attendees-field"> 602 <label for="calendarAttendeeInput">E-post</label> 603 <div class="calendar-attendee-input-row"> 604 <input id="calendarAttendeeInput" type="text" inputmode="email" list="calendarAttendeeOptions" autocomplete="email" placeholder="Velg eller skriv e-post"> 605 <button id="addCalendarAttendeeBtn" type="button" class="btn alt">Legg til</button> 606 </div> 607 <datalist id="calendarAttendeeOptions"></datalist> 608 <div id="calendarAttendeesList" class="calendar-attendees-list" aria-live="polite"></div> 609 </div> 610 <label for="calendarEventSubject">Emne 611 <input id="calendarEventSubject" type="text" required> 612 </label> 613 <label class="calendar-project-field" for="calendarEventProject">Prosjekt 614 <select id="calendarEventProject"> 615 <option value="">Ingen prosjektkobling</option> 616 </select> 617 </label> 618 <label class="calendar-type-field" for="calendarEventType">Avtale type 619 <select id="calendarEventType"> 620 <option value="">Ã pen</option> 621 <option value="calendar">Kalender</option> 622 <option value="project-flow">Prosjektflyt oppgave</option> 623 <option value="todo">To-Do oppgave</option> 624 </select> 625 </label> 626 <label class="calendar-date-field" for="calendarEventStartDate">Startdato 627 <span class="calendar-date-input-row"> 628 <input id="calendarEventStartDate" type="text" inputmode="numeric" autocomplete="off" placeholder="DD/MM/Ã Ã Ã Ã " required> 629 <button id="calendarEventDatePickerBtn" type="button" class="calendar-date-picker-btn" aria-label="Velg dato"> 630 <svg aria-hidden="true" viewBox="0 0 24 24"><path d="M7 2h2v3h6V2h2v3h2a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2V2Zm12 8H5v9h14v-9Z"/></svg> 631 </button> 632 <input id="calendarEventDatePicker" class="calendar-hidden-date-picker" type="date" tabindex="-1" aria-hidden="true"> 633 <div id="calendarDatePickerPopover" class="calendar-date-picker-popover" hidden></div> 634 </span> 635 </label> 636 <label class="calendar-compact-field" for="calendarEventStartTime">Starttid 637 <select id="calendarEventStartTime" required></select> 638 </label> 639 <label class="calendar-compact-field" for="calendarEventDuration">Varighet 640 <select id="calendarEventDuration" required></select> 641 </label> 642 <label for="calendarEventLocation">Sted 643 <input id="calendarEventLocation" type="text"> 644 </label> 645 <label class="graph-wide-field" for="calendarEventBody">Notat 646 <textarea id="calendarEventBody" rows="4"></textarea> 647 </label> 648 <div class="graph-edit-actions"> 649 <button type="submit" class="btn">Lagre</button> 650 <button id="cancelCalendarEventBtn" type="button" class="btn alt">Avbryt</button> 651 <button id="deleteCalendarEventBtn" type="button" class="btn danger" hidden>Slett</button> 652 </div> 653 </form>
654 <div id="calendarEventsList" class="graph-list calendar-events-list" aria-live="polite"></div> 655 <div id="calendarGridView" class="calendar-grid-view" aria-live="polite" hidden></div> 656 </section> 657 658 <section id="offersView" class="dashboard-page placeholder-page" data-dashboard-page="offers" hidden> 659 <div class="placeholder-header"> 660 <h2>Tilbud</h2> 661 <p class="muted-text">Siste registrerte tilbudsrevisjon per prosjekt.</p> 662 </div> 663 <div class="dashboard-sort-row offers-sort-row section-toolbar"> 664 <div class="dashboard-sort-controls dashboard-search-controls"> 665 <label for="offerSearchInput">Søk tilbud</label> 666 <input id="offerSearchInput" type="search" autocomplete="off" placeholder="Prosjekt, kunde, ansvarlig eller tilbudsnummer"> 667 </div> 668 <div class="dashboard-sort-controls"> 669 <label for="offerSortSelect">Sorter tilbud</label> 670 <select id="offerSortSelect"> 671 <option value="date_newest">Nyest først</option> 672 <option value="date_oldest">Eldst først</option> 673 <option value="alpha_asc">Alfabetisk (A-Å)</option> 674 <option value="alpha_desc">Alfabetisk (Å-A)</option> 675 </select> 676 </div> 677 <div class="toolbar-right"> 678 <span id="offersStatus" class="graph-status muted-text"></span> 679 <button id="refreshOffersBtn" type="button" class="btn alt">Oppdater</button> 680 </div> 681 </div> 682 <div id="offersList" class="offers-list" aria-live="polite"></div> 683 </section> 684 685 <section id="emailView" class="dashboard-page placeholder-page" data-dashboard-page="email" hidden> 686 <div class="placeholder-header"> 687 <h2>E-post</h2> 688 <p class="muted-text">Viser innboksen til [email protected] for Owners.</p> 689 </div> 690 <div class="graph-toolbar section-toolbar"> 691 <div class="toolbar-left"> 692 <button id="composeEmailBtn" type="button" class="btn alt">Ny e-post</button> 693 </div> 694 <div class="toolbar-right"> 695 <span id="emailStatus" class="graph-status muted-text"></span> 696 <button id="refreshEmailBtn" type="button" class="btn alt">Oppdater</button> 697 </div> 698 </div> 699 <form id="emailComposeForm" class="graph-edit-form" hidden> 700 <label for="emailToInput">Til 701 <input id="emailToInput" type="text" inputmode="email" placeholder="[email protected]" required> 702 </label> 703 <label for="emailCcInput">Kopi 704 <input id="emailCcInput" type="text" inputmode="email" placeholder="valgfritt"> 705 </label> 706 <label for="emailSubjectInput">Emne 707 <input id="emailSubjectInput" type="text" required> 708 </label> 709 <label class="graph-wide-field" for="emailBodyInput">Melding 710 <textarea id="emailBodyInput" rows="7" required></textarea> 711 </label> 712 <div class="graph-edit-actions"> 713 <button type="submit" class="btn">Send</button> 714 <button id="cancelEmailComposeBtn" type="button" class="btn alt">Avbryt</button> 715 </div> 716 </form> 717 <div id="emailMessagesList" class="graph-list email-messages-list" aria-live="polite"></div> 718 </section> 719 720 <section id="customersView" class="dashboard-page placeholder-page" data-dashboard-page="customers" hidden> 721 <div class="placeholder-header"> 722 <h2>Kontaktpersoner</h2> 723 <p class="muted-text">Global liste med kontaktpersoner registrert på firma i prosjektene.</p> 724 </div> 725 <div class="global-data-toolbar section-toolbar"> 726 <div class="toolbar-left"> 727 <button id="addContactBtn" type="button" class="btn alt">Legg til kontakt</button> 728 <div class="dashboard-sort-controls dashboard-search-controls"> 729 <label for="contactSearchInput">Søk kontaktpersoner</label> 730 <input id="contactSearchInput" type="search" autocomplete="off" placeholder="Kontaktperson, firma eller telefon"> 731 </div>
732 <div class="dashboard-sort-controls"> 733 <label for="contactSortSelect">Sorter kontaktpersoner</label> 734 <select id="contactSortSelect"> 735 <option value="alpha_asc">Alfabetisk (A-Å)</option> 736 <option value="alpha_desc">Alfabetisk (Å-A)</option> 737 <option value="date_newest">Nyest først</option> 738 <option value="date_oldest">Eldst først</option> 739 </select> 740 </div> 741 </div> 742 <div class="toolbar-right"> 743 <span id="contactsStatus" class="graph-status muted-text"></span> 744 <button id="refreshContactsBtn" type="button" class="btn alt">Oppdater</button> 745 </div> 746 <span id="contactsOwnerHint" class="global-owner-hint muted-text">Kun Entra Owners kan redigere.</span> 747 </div> 748 <form id="contactEditForm" class="global-edit-form" data-editing="0" hidden> 749 <input id="contactOriginalCustomer" type="hidden"> 750 <input id="contactOriginalName" type="hidden"> 751 <div class="global-edit-actions"> 752 <button type="submit" class="btn">Lagre</button> 753 <button id="cancelContactEditBtn" type="button" class="btn alt">Avbryt</button> 754 </div> 755 <label for="contactCompanyInput">Firmanavn 756 <input id="contactCompanyInput" type="text" list="globalCompanyOptions" required> 757 </label> 758 <label for="contactNameInput">Kontaktperson 759 <input id="contactNameInput" type="text" required> 760 </label> 761 <label for="contactPhoneInput">Telefon 762 <input id="contactPhoneInput" type="text" inputmode="tel"> 763 </label> 764 <label for="contactEmailInput">E-post 765 <input id="contactEmailInput" type="email" autocomplete="email"> 766 </label> 767 </form> 768 <div id="contactsList" class="global-data-list" aria-live="polite"></div> 769 </section> 770 771 <section id="companyCardView" class="dashboard-page placeholder-page" data-dashboard-page="company-card" hidden> 772 <div class="placeholder-header"> 773 <h2>Kundekort</h2> 774 <p class="muted-text">Global liste med firma som er registrert på prosjekter.</p> 775 </div> 776 <div class="global-data-toolbar section-toolbar"> 777 <div class="toolbar-left"> 778 <button id="addCompanyBtn" type="button" class="btn alt">Legg til kunde</button> 779 <div class="dashboard-sort-controls dashboard-search-controls"> 780 <label for="companySearchInput">Søk kunde</label> 781 <input id="companySearchInput" type="search" autocomplete="off" placeholder="Kunde, adresse eller segment"> 782 </div> 783 <div class="dashboard-sort-controls"> 784 <label for="companySortSelect">Sorter kunde</label> 785 <select id="companySortSelect"> 786 <option value="alpha_asc">Alfabetisk (A-Å)</option> 787 <option value="alpha_desc">Alfabetisk (Å-A)</option> 788 <option value="date_newest">Nyest først</option> 789 <option value="date_oldest">Eldst først</option> 790 </select> 791 </div> 792 </div> 793 <div class="toolbar-right"> 794 <span id="companiesStatus" class="graph-status muted-text"></span> 795 <button id="refreshCompaniesBtn" type="button" class="btn alt">Oppdater</button> 796 </div> 797 <span id="companiesOwnerHint" class="global-owner-hint muted-text">Kun Entra Owners kan redigere.</span> 798 </div> 799 <form id="companyEditForm" class="global-edit-form" data-editing="0" hidden> 800 <input id="companyOriginalName" type="hidden"> 801 <div class="global-edit-actions"> 802 <button type="submit" class="btn">Lagre</button> 803 <button id="cancelCompanyEditBtn" type="button" class="btn alt">Avbryt</button> 804 </div> 805 <label for="companyNameInput">Firmanavn 806 <input id="companyNameInput" type="text" required> 807 </label> 808 <label for="companyAddressInput">Adresse 809 <input id="companyAddressInput" type="text"> 810 </label> 811 <label for="companyPostalPlaceInput">Postnummer og sted 812 <input id="companyPostalPlaceInput" type="text"> 813 </label> 814 <label for="companySegmentInput">Kundesegment 815 <input id="companySegmentInput" type="text"> 816 </label> 817 <label for="companyResponsibleInput">Kundeansvarlig 818 <input id="companyResponsibleInput" type="text"> 819 </label> 820 </form> 821 <datalist id="globalCompanyOptions"></datalist> 822 <div id="companiesList" class="global-data-list" aria-live="polite"></div> 823 </section> 824 825 <section id="busbarFoldersView" class="dashboard-page placeholder-page" data-dashboard-page="busbar-folders" hidden> 826 <div class="placeholder-header"> 827 <h2>Busbar</h2> 828 <p class="muted-text">Viser innhold fra SharePoint-mappen Drift/BUSBAR.</p> 829 </div> 830 <div class="graph-toolbar section-toolbar"> 831 <div class="toolbar-left"> 832 <button id="newBusbarFolderBtn" type="button" class="btn alt">Ny mappe</button> 833 <label class="btn alt graph-file-upload-label" for="uploadBusbarFolderFile">Legg til fil</label> 834 <input id="uploadBusbarFolderFile" type="file" hidden>
835 <div class="dashboard-sort-controls dashboard-search-controls"> 836 <label for="busbarFolderSearchInput">Søk mappe</label> 837 <input id="busbarFolderSearchInput" type="search" autocomplete="off" placeholder="Mappe eller filnavn"> 838 </div> 839 <div class="dashboard-sort-controls"> 840 <label for="busbarFolderSortSelect">Sorter mapper</label> 841 <select id="busbarFolderSortSelect"> 842 <option value="alpha_asc">Alfabetisk (A-Å)</option> 843 <option value="alpha_desc">Alfabetisk (Å-A)</option> 844 <option value="date_newest">Nyest først</option> 845 <option value="date_oldest">Eldst først</option> 846 </select> 847 </div> 848 </div> 849 <div class="toolbar-right"> 850 <span id="busbarFoldersStatus" class="graph-status muted-text"></span> 851 <button id="refreshBusbarFoldersBtn" type="button" class="btn alt">Oppdater</button> 852 </div> 853 </div> 854 <div id="busbarFoldersList" class="sharepoint-list" aria-live="polite"></div> 855 </section> 856 857 <section id="projectFoldersView" class="dashboard-page placeholder-page" data-dashboard-page="project-folders" hidden> 858 <div class="placeholder-header"> 859 <h2>Prosjektmapper</h2> 860 <p class="muted-text">Viser innhold fra SharePoint-mappen Drift/BUSBAR/Prosjekter/2026.</p> 861 </div> 862 <div class="graph-toolbar section-toolbar"> 863 <div class="toolbar-left"> 864 <button id="newProjectFolderBtn" type="button" class="btn alt">Ny mappe</button> 865 <label class="btn alt graph-file-upload-label" for="uploadProjectFolderFile">Legg til fil</label> 866 <input id="uploadProjectFolderFile" type="file" hidden> 867 <div class="dashboard-sort-controls dashboard-search-controls"> 868 <label for="projectFolderSearchInput">Søk mappe</label> 869 <input id="projectFolderSearchInput" type="search" autocomplete="off" placeholder="Mappe eller filnavn"> 870 </div> 871 <div class="dashboard-sort-controls"> 872 <label for="projectFolderSortSelect">Sorter mapper</label> 873 <select id="projectFolderSortSelect"> 874 <option value="alpha_asc">Alfabetisk (A-Å)</option> 875 <option value="alpha_desc">Alfabetisk (Å-A)</option> 876 <option value="date_newest">Nyest først</option> 877 <option value="date_oldest">Eldst først</option> 878 </select> 879 </div> 880 </div> 881 <div class="toolbar-right"> 882 <span id="projectFoldersStatus" class="graph-status muted-text"></span> 883 <button id="refreshProjectFoldersBtn" type="button" class="btn alt">Oppdater</button> 884 </div> 885 </div> 886 <div id="projectFoldersList" class="sharepoint-list" aria-live="polite"></div> 887 </section> 888 889 <section id="supplierFoldersView" class="dashboard-page placeholder-page" data-dashboard-page="supplier-folders" hidden> 890 <div class="placeholder-header"> 891 <h2>Leverandørmapper</h2> 892 <p class="muted-text">Viser innhold fra SharePoint-mappen Drift/BUSBAR/Strømskinner.</p> 893 </div> 894 <div class="graph-toolbar section-toolbar"> 895 <div class="toolbar-left"> 896 <button id="newSupplierFolderBtn" type="button" class="btn alt">Ny mappe</button> 897 <label class="btn alt graph-file-upload-label" for="uploadSupplierFolderFile">Legg til fil</label> 898 <input id="uploadSupplierFolderFile" type="file" hidden> 899 <div class="dashboard-sort-controls dashboard-search-controls"> 900 <label for="supplierFolderSearchInput">Søk mappe</label> 901 <input id="supplierFolderSearchInput" type="search" autocomplete="off" placeholder="Mappe eller filnavn"> 902 </div> 903 <div class="dashboard-sort-controls"> 904 <label for="supplierFolderSortSelect">Sorter mapper</label> 905 <select id="supplierFolderSortSelect"> 906 <option value="alpha_asc">
906Alfabetisk (A-Å)</option> 907 <option value="alpha_desc">Alfabetisk (Å-A)</option> 908 <option value="date_newest">Nyest først</option> 909 <option value="date_oldest">Eldst først</option> 910 </select> 911 </div> 912 </div> 913 <div class="toolbar-right"> 914 <span id="supplierFoldersStatus" class="graph-status muted-text"></span> 915 <button id="refreshSupplierFoldersBtn" type="button" class="btn alt">Oppdater</button> 916 </div> 917 </div> 918 <div id="supplierFoldersList" class="sharepoint-list" aria-live="polite"></div> 919 </section> 920 921 <section id="adminView" class="dashboard-page placeholder-page" data-dashboard-page="admin" hidden> 922 <div class="placeholder-header"> 923 <h2>Admin</h2> 924 <p class="muted-text">Adminfunksjoner åpnes fra menyen når brukeren har tilgang.</p> 925 </div> 926 </section> 927 </section> 928 </main> 929 930 <div id="expModal" class="modal-backdrop" role="dialog" aria-modal="true" aria-labelledby="expTitle"> 931 <div class="modal"> 932 <h3 id="expTitle">Er det sammenhengende 30 meter rett skinne?</h3> 933 <p>Velg Ja for å legge til ekspansjonsledd.</p> 934 <div class="actions"> 935 <button id="expNo" class="btn alt">Nei</button> 936 <button id="expYes" class="btn">Ja</button> 937 </div> 938 </div> 939 </div> 940 941 <div id="loginModal" class="modal-backdrop" role="dialog" aria-modal="true" aria-labelledby="loginTitle"> 942 <div class="modal"> 943 <h3 id="loginTitle">Logg på</h3> 944 <form class="login-form" onsubmit="return false;" autocomplete="off"> 945 <button id="microsoftLoginBtn" type="button" class="btn microsoft-login-btn">Logg på med Microsoft</button> 946 <div class="login-divider" aria-hidden="true" hidden><span>eller</span></div> 947 <label for="loginUsername" hidden>Brukernavn (e-post) 948 <input id="loginUsername" type="text" inputmode="text" autocomplete="username"> 949 </label> 950 <label for="loginPassword" hidden>Passord 951 <input id="loginPassword" type="password" autocomplete="current-password" required> 952 </label> 953 <div class="register-inline" hidden> 954 <span>Ved første innlogging opprett ny bruker</span> 955 <button id="registerSubmit" type="button" class="btn alt btn-small">Opprett bruker</button> 956 </div> 957 <p id="loginError" class="login-error" role="alert"></p> 958 <div class="actions"> 959 <button id="loginCancel" type="button" class="btn alt">Avbryt</button> 960 <button id="loginSubmit" type="button" class="btn" hidden>Logg på</button> 961 </div> 962 </form> 963 </div> 964 </div> 965 966 <div id="dashboardProjectStatusModal" class="modal-backdrop" role="dialog" aria-modal="true" aria-labelledby="dashboardProjectStatusTitle"> 967 <div class="modal dashboard-project-status-modal"> 968 <h3 id="dashboardProjectStatusTitle">Prosjekter</h3> 969 <p id="dashboardProjectStatusSubtitle" class="muted-text"></p> 970 <div id="dashboardProjectStatusList" class="dashboard-status-project-list"></div> 971 <div class="actions"> 972 <button id="dashboardProjectStatusOpenAllFlow" type="button" class="btn" hidden>Vis alle prosjekter</button> 973 <button id="dashboardProjectStatusClose" type="button" class="btn alt">Lukk</button> 974 </div> 975 </div> 976 </div> 977 978 <div id="dashboardRecommendedActionsModal" class="modal-backdrop" role="dialog" aria-modal="true" aria-labelledby="dashboardRecommendedActionsTitle"> 979 <div class="modal dashboard-recommended-actions-modal"> 980 <h3 id="dashboardRecommendedActionsTitle">Anbefalte handlinger</h3> 981 <p id="dashboardRecommendedActionsSubtitle" class="muted-text"></p> 982 <label class="dashboard-recommended-actions-search" for="dashboardRecommendedActionsSearch"> 983 Søk i anbefalte handlinger 984 <input id="dashboardRecommendedActionsSearch" type="search" autocomplete="off" placeholder="Søk etter prosjekt, e-post eller handling"> 985 </label> 986 <div id="dashboardRecommendedActionsModalList" class="dashboard-recommended-actions-modal-list"></div> 987 <div class="actions"> 988 <button id="dashboardRecommendedActionsClose" type="button" class="btn alt">Lukk</button> 989 </div> 990 </div> 991 </div> 992 993 <div id="registerModal" class="modal-backdrop" role="dialog" aria-modal="true" aria-labelledby="registerTitle"> 994 <div class="modal"> 995 <h3 id="registerTitle">Opprett bruker</h3> 996 <form class="login-form" onsubmit="return false;" autocomplete="off"> 997 <label for="registerName">Navn * 998 <input id="registerName" type="text" autocomplete="name" placeholder="Ola Nordmann" required> 999 </label> 1000 <label for="registerEmail">E-post * 1001 <input id="registerEmail" type="email" inputmode="email" autocomplete="email" placeholder="[email protected]" required> 1002 </label> 1003 <label for="registerPhone">Telefon * 1004 <input id="registerPhone" type="tel" autocomplete="tel" placeholder="+47 12 34 56 78" required> 1005 </label> 1006 <label for="registerCompany">Selskap * 1007 <input id="registerCompany" type="text" autocomplete="organization" placeholder="Busbar AS" required> 1008 </label> 1009 <label for="registerPosition">Stilling * 1010 <input id="registerPosition" type="text" autocomplete="organization-title" placeholder="Prosjektleder" required> 1011 </label> 1012 <label for="registerPassword">Passord * 1013 <input id="registerPassword" type="password" autocomplete="new-password" required> 1014 </label> 1015 <label for="registerConfirmPassword">Bekreft passord * 1016 <input id="registerConfirmPassword" type="password" autocomplete="new-password" required> 1017 </label> 1018 <p id="registerError" class="login-error" role="alert"></p> 1019 <div class="actions"> 1020 <button id="registerCancel" type="button" class="btn alt">Avbryt</button> 1021 <button id="registerCreateBtn" type="button" class="btn">Opprett bruker</button> 1022 </div> 1023 </form> 1024 </div> 1025 </div> 1026 1027 <form id="projectForm" class="project-form" onsubmit="return false;" autocomplete="off" hidden> 1028 <label>Prosjektnavn 1029 <div class="suggest-wrapper"> 1030 <input id="projectNameInput" type="text" autocomplete="off" required> 1031 <ul id="projectSuggestions" class="suggestions" hidden></ul> 1032 </div> 1033 </label> 1034 <label>Kunde 1035 <div class="suggest-wrapper"> 1036 <input id="customerNameInput" type="text" autocomplete="off" required> 1037 <ul id="customerSuggestions" class="suggestions" hidden></ul> 1038 </div> 1039 </label> 1040 <label>Kontaktperson 1041 <div class="suggest-wrapper"> 1042 <input id="contactPersonInput" type="text" autocomplete="off" required> 1043 <ul id="contactSuggestions" class="suggestions" hidden></ul> 1044 </div> 1045 </label> 1046 <p id="projectError" class="login-error project-error" role="alert"></p> 1047 <div class="actions"> 1048 <button id="projectSubmit" type="button" class="btn" disabled>Fortsett</button> 1049 <button id="projectCancel" type="button" class="btn alt">Avbryt</button> 1050 </div> 1051 </form> 1052 1053 <div id="projectDetailsModal" class="modal-backdrop" role="dialog" aria-modal="true" aria-labelledby="projectDetailsTitle"> 1054 <div class="modal"> 1055 <h3 id="projectDetailsTitle">
1055Kundeinformasjon</h3> 1056 <form class="project-form" onsubmit="return false;" autocomplete="off"> 1057 <label for="projectDetailsCustomer">Kunde 1058 <input id="projectDetailsCustomer" type="text" disabled> 1059 </label> 1060 <label for="projectDetailsAddress">Adresse 1061 <input id="projectDetailsAddress" type="text" autocomplete="street-address" required> 1062 </label> 1063 <label for="projectDetailsPostalPlace">Postnummer og sted 1064 <input id="projectDetailsPostalPlace" type="text" autocomplete="postal-code" required> 1065 </label> 1066 <label for="projectDetailsContact">Kontaktperson 1067 <input id="projectDetailsContact" type="text" disabled> 1068 </label> 1069 <label for="projectDetailsPhone">Telefon 1070 <input id="projectDetailsPhone" type="tel" autocomplete="tel" required> 1071 </label> 1072 <p id="projectDetailsError" class="login-error project-error" role="alert"></p> 1073 <div class="actions"> 1074 <button id="projectDetailsCancel" type="button" class="btn alt">Avbryt</button> 1075 <button id="projectDetailsSubmit" type="button" class="btn">Lagre</button> 1076 </div> 1077 </form> 1078 </div> 1079 </div> 1080 1081 <div id="offerDetailsWarningModal" class="modal-backdrop" role="dialog" aria-modal="true" aria-labelledby="offerDetailsWarningTitle"> 1082 <div class="modal"> 1083 <h3 id="offerDetailsWarningTitle">Mangler detaljer</h3> 1084 <p class="muted-text">Prosjektet mangler følgende felt:</p> 1085 <ul id="offerDetailsMissingList" class="missing-details-list"></ul> 1086 <p>Kontakt administrator for å legge til detaljer</p> 1087 <div class="actions"> 1088 <button id="offerDetailsCancel" type="button" class="btn alt">Avbryt</button> 1089 <button id="offerDetailsContinue" type="button" class="btn">Generer likevel</button> 1090 </div> 1091 </div> 1092 </div> 1093 1094 <div id="projectMarginModal" class="modal-backdrop" role="dialog" aria-modal="true" aria-labelledby="projectMarginTitle"> 1095 <div class="modal"> 1096 <h3 id="projectMarginTitle">Sett prosjekt-DG</h3> 1097 <form class="project-form" onsubmit="return false;" autocomplete="off"> 1098 <p id="projectMarginCurrent" class="muted-text">Nåværende DG vises her.</p> 1099 <label for="projectMarginPercentInput">DG (%) 1100 <input id="projectMarginPercentInput" type="text" inputmode="decimal" placeholder="Eks. 20" required> 1101 </label> 1102 <p id="projectMarginError" class="login-error project-error" role="alert"></p> 1103 <div class="actions"> 1104 <button id="projectMarginCancel" type="button" class="btn alt">Avbryt</button> 1105 <button id="projectMarginSubmit" type="button" class="btn">Lagre</button> 1106 </div> 1107 </form> 1108 </div> 1109 </div> 1110 1111 <div id="linePriceAdjustModal" class="modal-backdrop" role="dialog" aria-modal="true" aria-labelledby="linePriceAdjustTitle"> 1112 <div class="modal"> 1113 <h3 id="linePriceAdjustTitle">Juster priser</h3> 1114 <p id="linePriceAdjustLine" class="muted-text"></p> 1115 <form id="linePriceAdjustForm" class="project-form line-price-adjust-form" onsubmit="return false;" autocomplete="off"> 1116 <label for="lineAdjustMaterialInput">Materiellkost 1117 <input id="lineAdjustMaterialInput" type="text" inputmode="decimal"> 1118 </label> 1119 <label for="lineAdjustMontasjeInput">Montasje 1120 <input id="lineAdjustMontasjeInput" type="text" inputmode="decimal"> 1121 </label> 1122 <label for="lineAdjustEngineeringInput">Ingeniør 1123 <input id="lineAdjustEngineeringInput" type="text" inputmode="decimal"> 1124 </label> 1125 <label for="lineAdjustOpphengInput">Opphengsmateriell 1126 <input id="lineAdjustOpphengInput" type="text" inputmode="decimal"> 1127 </label> 1128 <p id="linePriceAdjustError" class="login-error project-error" role="alert"></p> 1129 <div class="actions"> 1130 <button id="linePriceAdjustReset" type="button" class="btn alt">Tilbakestill</button> 1131 <button id="linePriceAdjustCancel" type="button" class="btn alt">Avbryt</button> 1132 <button id="linePriceAdjustSubmit" type="button" class="btn">Lagre</button> 1133 </div> 1134 </form> 1135 </div> 1136 </div> 1137 1138 <div id="projectStatusModal" class="modal-backdrop" role="dialog" aria-modal="true" aria-labelledby="projectStatusTitle"> 1139 <div class="modal"> 1140 <h3 id="projectStatusTitle">Endre prosjektstatus</h3> 1141 <p id="projectStatusProjectName" class="muted-text"></p> 1142 <div class="project-status-options"> 1143 <button type="button" class="btn alt" data-project-status-option="unresolved">Uavklart</button> 1144 <button type="button" class="btn alt" data-project-status-option="won">Vunnet</button> 1145 <button type="button" class="btn alt" data-project-status-option="lost">
1145Tapt</button> 1146 <button type="button" class="btn alt" data-project-status-option="finished">Ferdig</button> 1147 </div> 1148 <div class="actions"> 1149 <button id="projectStatusCancel" type="button" class="btn alt">Avbryt</button> 1150 </div> 1151 </div> 1152 </div> 1153 1154
1154<script type="module" src="app.js"></script>
1154 1155</body> 1156</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.