Ctrl K
ComunidadGuías…

templates/_context_menus.html

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
  <div id="folder-context-menu" class="context-menu" hidden>
    <div class="ctx-group">
      <button type="button" id="ctx-refresh" class="context-menu-item">Refresh</button>
      <button type="button" id="ctx-youtube-sync" class="context-menu-item" hidden>Sync Subscriptions</button>
      <button type="button" id="ctx-mark-read" class="context-menu-item">Mark as read</button>
      {% if debug_mode %}
      <button type="button" id="ctx-clear-cache" class="context-menu-item debug-item">Clear image cache</button>
      {% endif %}
    </div>
    <div class="ctx-group">
      <button type="button" id="ctx-add-feed" class="context-menu-item">Add Feed Here</button>
      <div id="ctx-add-to-folder-wrap" class="context-submenu-wrap" hidden>
        <button type="button" id="ctx-add-to-folder" class="context-menu-item context-submenu-trigger">Move to Folder <span class="submenu-arrow material-symbols-rounded" aria-hidden="true">chevron_right</span></button>
        <div id="ctx-folder-submenu" class="context-submenu" hidden>
          {% for folder in folder_options %}
          <button
            type="button"
            class="context-menu-item context-submenu-item{% if folder.depth > 0 %} context-submenu-item--child{% endif %}"
            data-target-folder-id="{{ folder.id }}"
            data-target-folder-path="{{ folder.path }}"
          >{{ folder.name }}</button>
          {% endfor %}
        </div>
      </div>
      <button type="button" id="ctx-rename-folder" class="context-menu-item" hidden>Rename Folder</button>
    </div>
    <div class="ctx-group">
      <button type="button" id="ctx-feed-properties" class="context-menu-item" hidden>Properties</button>
      <button type="button" id="ctx-folder-properties" class="context-menu-item" hidden>Properties</button>
      <button type="button" id="ctx-highlights" class="context-menu-item" hidden>Automation…</button>
    </div>
    <div class="ctx-group">
      {# Same picker as the per-post Re-fetch menu, applied to every article in
         the batch: "Original"/"Pub date" land each one on its own date, only
         "Now" is uniform across the whole scope. A separate class/variable from
         the per-post one (ctx-scope-refetch-date-opt / refetchScopeDateChoice)
         — sharing state would let opening one menu silently reset the other's
         choice, and nothing here should be pre-selected either. #}
      <div class="ctx-refetch-date-label" id="ctx-scope-refetch-date-label" hidden>Land on:</div>
      <div class="ctx-refetch-date-row" id="ctx-scope-refetch-date-row" role="radiogroup" aria-label="Where each re-fetched article's date lands" hidden>
        <button type="button" class="ctx-refetch-date-opt ctx-scope-refetch-date-opt" data-date-choice="now">Now</button>
        <button type="button" class="ctx-refetch-date-opt ctx-scope-refetch-date-opt" data-date-choice="original">Original</button>
        <button type="button" class="ctx-refetch-date-opt ctx-scope-refetch-date-opt" data-date-choice="pub" title="Each article's own published date">Pub date</button>
      </div>
      <button type="button" id="ctx-refetch-scope" class="context-menu-item" hidden>Re-fetch all articles…</button>
    </div>
    <div class="ctx-group">
      <button type="button" id="ctx-disable-feed" class="context-menu-item" hidden>Disable Feed</button>
      <button type="button" id="ctx-unsubscribe-feed" class="context-menu-item danger" hidden>Unsubscribe</button>
      <button type="button" id="ctx-folder-remove-stars" class="context-menu-item danger" hidden>Remove all stars in folder</button>
      <button type="button" id="ctx-folder-remove-tags" class="context-menu-item danger" hidden>Remove all tags in folder</button>
      <button type="button" id="ctx-delete-folder" class="context-menu-item danger" hidden>Delete Folder</button>
    </div>
  </div>

  <div id="root-context-menu" class="context-menu" hidden>
    <button type="button" id="ctx-root-refresh" class="context-menu-item">Refresh</button>
    <button type="button" id="ctx-root-add-folder" class="context-menu-item">Add Folder</button>
    <button type="button" id="ctx-root-add-feed" class="context-menu-item">Add Feed Here</button>
  </div>

  <div id="post-context-menu" class="context-menu" hidden>
    <div class="ctx-group">
    <button type="button" id="ctx-post-mark-read" class="context-menu-item">Mark as read</button>
    {# Bulk-only siblings of ctx-post-mark-read: both directions always shown
       (like the star/unstar pair below) rather than one mixed-selection
       toggle — there is no single "obvious direction" to collapse to when
       the selection spans both read states. #}
    <button type="button" id="ctx-post-mark-read-bulk" class="context-menu-item" hidden>Mark as read</button>
    <button type="button" id="ctx-post-mark-unread-bulk" class="context-menu-item" hidden>Mark as unread</button>
    {# Bulk-only, both directions shown regardless of the selection's mixed
       star state — add and remove are equally common triage actions here
       (the Saved view especially), so there's no one "obvious direction"
       to collapse to. Same reasoning as the read/unread pair above. #}
    <button type="button" id="ctx-post-star-bulk" class="context-menu-item" hidden>Add star</button>
    <button type="button" id="ctx-post-unstar-bulk" class="context-menu-item" hidden>Remove star</button>
    <button type="button" id="ctx-post-mark-above-read" class="context-menu-item">Read above</button>
    <button type="button" id="ctx-post-mark-below-read" class="context-menu-item">Read below</button>
    <button type="button" id="ctx-post-mark-feed-read" class="context-menu-item" hidden>Mark Feed as Read</button>
    </div>
    <div class="ctx-group">
    {# Works on any post — the right-clicked one, or the whole multi-selection. #}
    <button type="button" id="ctx-post-add-tag" class="context-menu-item" hidden>Edit tags…</button>
    <button type="button" id="ctx-post-move-to-feed" class="context-menu-item">Move to feed…</button>
    {# "shown", not "visible": this moves everything matching the active filters,
       including rows scroll-chunking has not painted yet. #}
    <button type="button" id="ctx-post-move-visible" class="context-menu-item">Move all shown to feed…</button>
    <button type="button" id="ctx-post-remove-tag-shown" class="context-menu-item danger" hidden>Remove this tag from all shown</button>
    {# Shown only when every post in play (the right-clicked one, or the whole
       multi-selection) has a video_id — see contextSelectedPosts in app.js. #}
    <button type="button" id="ctx-post-add-to-playlist" class="context-menu-item" hidden>Add to YouTube Playlist…</button>
    <button type="button" id="ctx-post-add-link-to-note" class="context-menu-item" hidden>Add link to Note</button>
    </div>
    <div class="ctx-group">
    <button type="button" id="ctx-post-open-in-feeds" class="context-menu-item" hidden>Open in Feeds</button>
    <button type="button" id="ctx-post-copy-url" class="context-menu-item">Copy URL</button>
    </div>
    <div class="ctx-group">
    {# Bulk-only: queues the selection into the paced background re-fetch job. #}
    <button type="button" id="ctx-post-refetch-bulk" class="context-menu-item" hidden>Re-fetch content</button>
    {# Edit and Re-fetch each collapse into a flyout: they are four and four
       items that only matter once you have decided to change this post, and
       inline they pushed the everyday actions (mark read, copy URL) down a menu
       nobody wants to read. #}
    <details class="ctx-submenu" id="ctx-post-edit-group">
      <summary class="context-menu-item ctx-submenu-summary">Edit<span class="ctx-submenu-caret material-symbols-rounded" aria-hidden="true">chevron_right</span></summary>
      <div class="ctx-submenu-list">
        <button type="button" id="ctx-post-edit-date" class="context-menu-item">Date…</button>
        <button type="button" id="ctx-post-edit-title" class="context-menu-item">Title…</button>
        <button type="button" id="ctx-post-edit-link" class="context-menu-item">URL…</button>
      </div>
    </details>
    <details class="ctx-submenu" id="ctx-post-refetch-group" hidden>
      <summary class="context-menu-item ctx-submenu-summary">Re-fetch<span class="ctx-submenu-caret material-symbols-rounded" aria-hidden="true">chevron_right</span></summary>
      <div class="ctx-submenu-list">
        {# Where the re-fetch lands, not which mode fetches it — applies to
           all three buttons below. Nothing pre-selected (decided 2026-08-24):
           unset means today's default (a capture bumps to Now, a feed entry
           keeps its date), same as before this existed. #}
        <div class="ctx-refetch-date-label">Land on:</div>
        <div class="ctx-refetch-date-row" role="radiogroup" aria-label="Where the re-fetched date lands">
          <button type="button" class="ctx-refetch-date-opt" data-date-choice="now">Now</button>
          <button type="button" class="ctx-refetch-date-opt" data-date-choice="original">Original</button>
          <button type="button" class="ctx-refetch-date-opt" data-date-choice="pub" title="The article's own published date">Pub date</button>
        </div>
        <button type="button" id="ctx-post-refetch" class="context-menu-item" hidden>Content</button>
        {# Whole-page capture instead of readability extraction — for a post
           whose normal re-fetch keeps coming back wrong. #}
        <button type="button" id="ctx-post-refetch-full" class="context-menu-item" hidden>Full page</button>
        {# The archive by explicit request. The automatic fallback only fires when
           the live fetch is REFUSED; a publisher serving a page that passes every
           guard but is no longer the article is the case that otherwise sends you
           to archive.org by hand. #}
        <button type="button" id="ctx-post-refetch-archive" class="context-menu-item" hidden>From Internet Archive</button>
        {# Undo. Lives here because a bad re-fetch is what you are undoing, and
           the header icon it replaces was unfindable exactly when needed. Shown
           only when there IS a stored original. #}
        <button type="button" id="ctx-post-restore-original" class="context-menu-item" hidden>Restore original</button>
      </div>
    </details>
    </div>
    <div class="ctx-group">
    <button type="button" id="ctx-post-automation" class="context-menu-item">Automation…</button>
    </div>
    <div class="ctx-group">
    <button type="button" id="ctx-post-delete" class="context-menu-item danger">Delete post…</button>
    {% if debug_mode %}<button type="button" id="ctx-post-clear-img-cache" class="context-menu-item debug-item">Clear image cache</button>{% endif %}
    </div>
  </div>

  <div id="tag-context-menu" class="context-menu" hidden>
    <div class="ctx-group">
    <button type="button" id="ctx-tag-rename" class="context-menu-item">Rename tag…</button>
    {# Scoped to the CURRENT view, not the whole tag: the case this serves is
       "drilled down to a single feed with stars I don't need". The label carries
       the server's count so the set is stated before the click. #}
    <button type="button" id="ctx-tag-unstar-scope" class="context-menu-item">Unstar all in this view</button>
    </div>
    <div class="ctx-group">
    <button type="button" id="ctx-tag-delete" class="context-menu-item danger">Delete tag everywhere</button>
    </div>
  </div>