- Book-styled UI with parchment aesthetic and Russian navigation - Characters model with Konva.js 2D canvas drawing (draggable shapes) - StoryPages model with character association and page navigation - Stimulus controllers: canvas (editor) + canvas-preview (read-only) - Full Russian interface: all labels, buttons, flash messages in Russian
71 lines
2.8 KiB
Plaintext
71 lines
2.8 KiB
Plaintext
<% content_for :title, "Волшебная Книга — Главная" %>
|
||
|
||
<div class="page-card">
|
||
<div class="book-cover">
|
||
<span class="cover-ornament">✦ ✦ ✦</span>
|
||
|
||
<h1 class="book-title">Волшебная Книга</h1>
|
||
<p class="book-subtitle">Место, где рождаются истории</p>
|
||
|
||
<div class="section-divider">❧ ❧ ❧</div>
|
||
|
||
<div class="cover-stats">
|
||
<div class="stat-block">
|
||
<span class="stat-number"><%= @total_pages %></span>
|
||
<span class="stat-label">страниц</span>
|
||
</div>
|
||
<div class="stat-block">
|
||
<span class="stat-number"><%= @characters.count %></span>
|
||
<span class="stat-label">персонажей</span>
|
||
</div>
|
||
</div>
|
||
|
||
<% if @pages.any? %>
|
||
<div class="section-divider">— ◆ —</div>
|
||
<h2 class="chapter-title" style="text-align:center">Содержание</h2>
|
||
|
||
<ul class="page-list">
|
||
<% @pages.each_with_index do |page, i| %>
|
||
<li>
|
||
<%= link_to story_page_path(page), class: "page-list-item" do %>
|
||
<span class="page-number">С. <%= i + 1 %></span>
|
||
<div>
|
||
<strong><%= page.title.presence || "Без названия" %></strong>
|
||
<p class="page-excerpt"><%= truncate(page.content, length: 120) %></p>
|
||
</div>
|
||
<% end %>
|
||
</li>
|
||
<% end %>
|
||
</ul>
|
||
<% else %>
|
||
<div class="empty-state">
|
||
<span class="empty-state-icon">📜</span>
|
||
<p>Книга пуста. Начните свою историю!</p>
|
||
<%= link_to "✎ Написать первую страницу", new_story_page_path, class: "btn btn-primary" %>
|
||
</div>
|
||
<% end %>
|
||
|
||
<% if @characters.any? %>
|
||
<div class="section-divider">— ◆ —</div>
|
||
<h2 class="chapter-title" style="text-align:center">Персонажи</h2>
|
||
<div class="character-grid">
|
||
<% @characters.each do |character| %>
|
||
<%= link_to character_path(character), class: "character-card" do %>
|
||
<% if character.canvas_data.present? %>
|
||
<canvas class="character-canvas-preview" data-canvas-data="<%= character.canvas_data %>"></canvas>
|
||
<% else %>
|
||
<div class="character-canvas-preview" style="display:flex;align-items:center;justify-content:center;font-size:3rem;">🧙</div>
|
||
<% end %>
|
||
<div class="character-name"><%= character.name %></div>
|
||
<% end %>
|
||
<% end %>
|
||
</div>
|
||
<% end %>
|
||
|
||
<div class="action-row" style="justify-content:center;margin-top:40px;">
|
||
<%= link_to "✎ Новая страница", new_story_page_path, class: "btn btn-primary" %>
|
||
<%= link_to "+ Новый персонаж", new_character_path, class: "btn btn-secondary" %>
|
||
</div>
|
||
</div>
|
||
</div>
|