lab
This commit is contained in:
parent
7cd9c68a10
commit
36984ff1d4
20 changed files with 321 additions and 391 deletions
8
Gemfile
8
Gemfile
|
|
@ -11,9 +11,9 @@ gem 'puma', '>= 5.0'
|
|||
# Bundle and transpile JavaScript [https://github.com/rails/jsbundling-rails]
|
||||
# gem 'jsbundling-rails'
|
||||
# Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
|
||||
# gem "turbo-rails"
|
||||
gem 'turbo-rails'
|
||||
# Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev]
|
||||
# gem "stimulus-rails"
|
||||
gem 'stimulus-rails'
|
||||
# Bundle and process CSS [https://github.com/rails/cssbundling-rails]
|
||||
# gem 'cssbundling-rails'
|
||||
# Build JSON APIs with ease [https://github.com/rails/jbuilder]
|
||||
|
|
@ -168,4 +168,6 @@ gem 'rails-healthcheck'
|
|||
# https://github.com/bkeepers/dotenv
|
||||
gem 'dotenv'
|
||||
|
||||
gem "cssbundling-rails", "~> 1.4"
|
||||
gem 'cssbundling-rails', '~> 1.4'
|
||||
|
||||
gem "importmap-rails", "~> 2.1"
|
||||
|
|
|
|||
12
Gemfile.lock
12
Gemfile.lock
|
|
@ -183,6 +183,10 @@ GEM
|
|||
image_processing (1.14.0)
|
||||
mini_magick (>= 4.9.5, < 6)
|
||||
ruby-vips (>= 2.0.17, < 3)
|
||||
importmap-rails (2.1.0)
|
||||
actionpack (>= 6.0.0)
|
||||
activesupport (>= 6.0.0)
|
||||
railties (>= 6.0.0)
|
||||
io-console (0.8.0)
|
||||
irb (1.15.1)
|
||||
pp (>= 0.6.0)
|
||||
|
|
@ -479,6 +483,8 @@ GEM
|
|||
net-sftp (>= 2.1.2)
|
||||
net-ssh (>= 2.8.0)
|
||||
ostruct
|
||||
stimulus-rails (1.3.4)
|
||||
railties (>= 6.0.0)
|
||||
stringio (3.1.5)
|
||||
swd (2.0.3)
|
||||
activesupport (>= 3)
|
||||
|
|
@ -494,6 +500,9 @@ GEM
|
|||
thruster (0.1.12-x86_64-linux)
|
||||
tilt (2.6.0)
|
||||
timeout (0.4.3)
|
||||
turbo-rails (2.0.13)
|
||||
actionpack (>= 7.1.0)
|
||||
railties (>= 7.1.0)
|
||||
tzinfo (2.0.6)
|
||||
concurrent-ruby (~> 1.0)
|
||||
unicode-display_width (3.1.4)
|
||||
|
|
@ -556,6 +565,7 @@ DEPENDENCIES
|
|||
guard-minitest
|
||||
guard-rails
|
||||
image_processing
|
||||
importmap-rails (~> 2.1)
|
||||
jbuilder
|
||||
kamal
|
||||
listen (~> 3.5)
|
||||
|
|
@ -580,7 +590,9 @@ DEPENDENCIES
|
|||
shrine (~> 3.0)
|
||||
slim-rails
|
||||
sqlite3 (>= 2.1)
|
||||
stimulus-rails
|
||||
thruster
|
||||
turbo-rails
|
||||
web-console
|
||||
will_paginate
|
||||
will_paginate-foundation
|
||||
|
|
|
|||
|
|
@ -14,12 +14,14 @@
|
|||
// window.$ = window.jQuery = jQuery; // Expose globally (if needed)
|
||||
|
||||
// import "./foundation-sites/dist/js/foundation.min";
|
||||
import "./controllers";
|
||||
import "@hotwired/turbo-rails";
|
||||
|
||||
|
||||
// import jquery from "jquery";
|
||||
import jQuery from "./jquery.js";
|
||||
|
||||
// window.jQuery = jquery;
|
||||
// window.$ = jquery;
|
||||
window.$ = jQuery;
|
||||
|
||||
$(function () {
|
||||
$(document).foundation();
|
||||
|
|
@ -43,89 +45,3 @@ $(function () {
|
|||
// );
|
||||
// };
|
||||
|
||||
// Initialize the upload form.
|
||||
function upload_form_init() {
|
||||
// Disable the submit button if Javascript is supported.
|
||||
// Upload will start right after selecting images.
|
||||
$('#file-submit').hide();
|
||||
|
||||
// Install event handler to notice when files were selected.
|
||||
$('#file').on('change', upload_form_files_selected);
|
||||
};
|
||||
|
||||
function upload_form_files_selected() {
|
||||
no_files = this.files.length;
|
||||
if (no_files > 0) {
|
||||
$('#file-label').html(no_files+" files selected - uploading…"); // change label
|
||||
$('#file-select-button').attr('disabled','disabled'); // disable select button
|
||||
$('#file-form').trigger('submit'); // start upload
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Handle Ctrl-V to paste an image directly
|
||||
function upload_paste_handler(event)
|
||||
{
|
||||
console.log("paste!");
|
||||
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
|
||||
|
||||
// /*Make Sure Only One File is Copied*/
|
||||
// if (items.length != 1) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
for (var i = 0 ; i < items.length ; i++)
|
||||
{
|
||||
var item = items[i];
|
||||
console.log(item);
|
||||
console.log("item size="+item.size);
|
||||
if (!item.type.startsWith('image/'))
|
||||
{
|
||||
console.log("Skipping file with type "+item.type);
|
||||
continue
|
||||
}
|
||||
console.log(item.type);
|
||||
var file = item.getAsFile();
|
||||
console.log(file);
|
||||
upload_file_with_ajax(file);
|
||||
}
|
||||
}
|
||||
|
||||
function upload_file_with_ajax(file)
|
||||
{
|
||||
if (file==null)
|
||||
{
|
||||
console.log("File was null. Strange.");
|
||||
display_error('Maybe the image was too large.');
|
||||
return;
|
||||
}
|
||||
var formData = new FormData();
|
||||
formData.append('file', file);
|
||||
|
||||
$.ajax(ajax_upload_url,
|
||||
{
|
||||
type: 'POST',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
data: formData,
|
||||
//dataType: 'json',
|
||||
error: function(xhr, txt, err)
|
||||
{
|
||||
console.log("AJAX file upload returned error: "+txt+" / "+err);
|
||||
response = JSON.parse(xhr.responseText);
|
||||
display_error(response);
|
||||
},
|
||||
success: function(res)
|
||||
{
|
||||
console.log("AJAX file upload was ok");
|
||||
// Go back to details page to show the new upload
|
||||
window.location.replace(after_upload_url);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function display_error(msg)
|
||||
{
|
||||
$('#messages').html(
|
||||
'<div class="callout alert alert-callout-subtle radius">Sorry, pasting did not work. ' + msg + '</div>')
|
||||
}
|
||||
|
|
|
|||
2
app/assets/javascripts/foundation.js
vendored
Normal file
2
app/assets/javascripts/foundation.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
app/assets/javascripts/jquery.js
vendored
Normal file
2
app/assets/javascripts/jquery.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
app/assets/stylesheets/foundation.css
vendored
Normal file
2
app/assets/stylesheets/foundation.css
vendored
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -5,7 +5,7 @@ class WelcomeController < ApplicationController
|
|||
@newest_upload = Screenshot.where(approved: true).first
|
||||
|
||||
# @most_popular_package = Package.with_screenshots.order(visits: :desc).first
|
||||
@random_pick = Package.with_public_screenshots.order("RANDOM()").first
|
||||
@random_pick = Package.with_public_screenshots.order('RANDOM()').first
|
||||
|
||||
@package_count = Package.count
|
||||
|
||||
|
|
|
|||
|
|
@ -1,62 +1,34 @@
|
|||
// Entry point for the build script in your package.json
|
||||
// import "@hotwired/turbo-rails";
|
||||
// import "jquery";
|
||||
import "foundation-sites";
|
||||
// import 'foundation-sites/dist/css/foundation.min.css'; // CSS
|
||||
import "./controllers";
|
||||
|
||||
// // Entry point for the build script in your package.json
|
||||
|
||||
import jquery from "jquery";
|
||||
|
||||
window.jQuery = jquery;
|
||||
window.$ = jquery;
|
||||
|
||||
$(function () {
|
||||
$(document).foundation();
|
||||
});
|
||||
|
||||
// Load reviews on package's details page
|
||||
// load_reviews = function() {
|
||||
// // Display message while loading reviews
|
||||
// // $('#reviews').html("<i>Loading reviews...</i>");
|
||||
|
||||
// // Hide the DIV so that in can be faded in later
|
||||
// $('#reviews').hide();
|
||||
|
||||
// // The URL is specified in the #reviews's DIV data attribute
|
||||
// var url = $('#reviews').attr('data-package-reviews-url');
|
||||
// $('#reviews').load(url, null,
|
||||
// // Fade in the reviews as soon as the DIV is loaded and filled
|
||||
// function(){
|
||||
// $(this).fadeIn('slow')
|
||||
// }
|
||||
// );
|
||||
// };
|
||||
// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
|
||||
import "@hotwired/turbo-rails"
|
||||
import "controllers"
|
||||
|
||||
// Initialize the upload form.
|
||||
function upload_form_init() {
|
||||
// Disable the submit button if Javascript is supported.
|
||||
// Upload will start right after selecting images.
|
||||
$('#file-submit').hide();
|
||||
// $("#file-submit").hide();
|
||||
document.getElementById("file-submit").style.display = "none";
|
||||
|
||||
// Install event handler to notice when files were selected.
|
||||
$('#file').on('change', upload_form_files_selected);
|
||||
};
|
||||
// $("#file").on("change", upload_form_files_selected);
|
||||
document.getElementById("file").addEventListener("change", upload_form_files_selected);
|
||||
}
|
||||
|
||||
function upload_form_files_selected() {
|
||||
no_files = this.files.length;
|
||||
if (no_files > 0) {
|
||||
$('#file-label').html(no_files+" files selected - uploading…"); // change label
|
||||
$('#file-select-button').attr('disabled','disabled'); // disable select button
|
||||
$('#file-form').trigger('submit'); // start upload
|
||||
}
|
||||
};
|
||||
document.getElementById("file-label").innerHTML = `${no_files} files selected - uploading…`;
|
||||
document.getElementById("file-select-button").disabled = true;
|
||||
document.getElementById("file-form").submit();
|
||||
|
||||
// $("#file-label").html(no_files + " files selected - uploading…"); // change label
|
||||
// $("#file-select-button").attr("disabled", "disabled"); // disable select button
|
||||
// $("#file-form").trigger("submit"); // start upload
|
||||
}
|
||||
}
|
||||
|
||||
// Handle Ctrl-V to paste an image directly
|
||||
function upload_paste_handler(event)
|
||||
{
|
||||
export function upload_paste_handler(event) {
|
||||
console.log("paste!");
|
||||
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
|
||||
|
||||
|
|
@ -65,15 +37,13 @@ function upload_paste_handler(event)
|
|||
// return;
|
||||
// }
|
||||
|
||||
for (var i = 0 ; i < items.length ; i++)
|
||||
{
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
var item = items[i];
|
||||
console.log(item);
|
||||
console.log("item size=" + item.size);
|
||||
if (!item.type.startsWith('image/'))
|
||||
{
|
||||
if (!item.type.startsWith("image/")) {
|
||||
console.log("Skipping file with type " + item.type);
|
||||
continue
|
||||
continue;
|
||||
}
|
||||
console.log(item.type);
|
||||
var file = item.getAsFile();
|
||||
|
|
@ -82,41 +52,68 @@ function upload_paste_handler(event)
|
|||
}
|
||||
}
|
||||
|
||||
function upload_file_with_ajax(file)
|
||||
{
|
||||
if (file==null)
|
||||
{
|
||||
function upload_file_with_ajax(file) {
|
||||
if (file == null) {
|
||||
console.log("File was null. Strange.");
|
||||
display_error('Maybe the image was too large.');
|
||||
display_error("Maybe the image was too large.");
|
||||
return;
|
||||
}
|
||||
var formData = new FormData();
|
||||
formData.append('file', file);
|
||||
formData.append("file", file);
|
||||
|
||||
$.ajax(ajax_upload_url,
|
||||
{
|
||||
type: 'POST',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
data: formData,
|
||||
//dataType: 'json',
|
||||
error: function(xhr, txt, err)
|
||||
{
|
||||
console.log("AJAX file upload returned error: "+txt+" / "+err);
|
||||
response = JSON.parse(xhr.responseText);
|
||||
display_error(response);
|
||||
fetch(ajax_upload_url, {
|
||||
method: "POST",
|
||||
body: formData,
|
||||
headers: {
|
||||
// 'Content-Type' is omitted to let the browser set it automatically
|
||||
// with the proper boundary for FormData
|
||||
},
|
||||
success: function(res)
|
||||
{
|
||||
})
|
||||
.then(async (response) => {
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json();
|
||||
console.log(`AJAX file upload returned error: ${response.statusText}`);
|
||||
display_error(errorData);
|
||||
throw new Error("Upload failed");
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then((data) => {
|
||||
console.log("AJAX file upload was ok");
|
||||
// Go back to details page to show the new upload
|
||||
window.location.replace(after_upload_url);
|
||||
})
|
||||
.catch((error) => {
|
||||
if (error.message !== "Upload failed") {
|
||||
console.log(`AJAX file upload error: ${error}`);
|
||||
}
|
||||
});
|
||||
|
||||
// $.ajax(ajax_upload_url, {
|
||||
// type: "POST",
|
||||
// contentType: false,
|
||||
// processData: false,
|
||||
// data: formData,
|
||||
// //dataType: 'json',
|
||||
// error: function (xhr, txt, err) {
|
||||
// console.log("AJAX file upload returned error: " + txt + " / " + err);
|
||||
// response = JSON.parse(xhr.responseText);
|
||||
// display_error(response);
|
||||
// },
|
||||
// success: function (res) {
|
||||
// console.log("AJAX file upload was ok");
|
||||
// // Go back to details page to show the new upload
|
||||
// window.location.replace(after_upload_url);
|
||||
// },
|
||||
// });
|
||||
}
|
||||
|
||||
function display_error(msg)
|
||||
{
|
||||
$('#messages').html(
|
||||
'<div class="callout alert alert-callout-subtle radius">Sorry, pasting did not work. ' + msg + '</div>')
|
||||
function display_error(msg) {
|
||||
// $("#messages").html(
|
||||
// '<div class="callout alert alert-callout-subtle radius">Sorry, pasting did not work. ' + msg + "</div>"
|
||||
// );
|
||||
document.querySelector("#messages").innerHTML = `
|
||||
<div class="callout alert alert-callout-subtle radius">
|
||||
Sorry, pasting did not work. ${msg}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,4 @@
|
|||
// This file is auto-generated by ./bin/rails stimulus:manifest:update
|
||||
// Run that command whenever you add a new controller or create them with
|
||||
// ./bin/rails generate stimulus controllerName
|
||||
|
||||
import { application } from "./application"
|
||||
|
||||
import HelloController from "./hello_controller"
|
||||
application.register("hello", HelloController)
|
||||
// Import and register all your controllers from the importmap via controllers/**/*_controller
|
||||
import { application } from "controllers/application"
|
||||
import { eagerLoadControllersFrom } from "@hotwired/stimulus-loading"
|
||||
eagerLoadControllersFrom("controllers", application)
|
||||
|
|
|
|||
|
|
@ -9,13 +9,13 @@ class Package < ApplicationRecord
|
|||
# TODO: Make search weighted on users' rating
|
||||
pg_search_scope :general_search,
|
||||
# :against => [:name, :description, :long_description],
|
||||
:against => [
|
||||
against: [
|
||||
[:name, 'A'],
|
||||
[:description, 'B'],
|
||||
[:long_description, 'C']
|
||||
],
|
||||
:using => {
|
||||
:tsearch => {:dictionary => "english"}
|
||||
using: {
|
||||
tsearch: { dictionary: 'english' }
|
||||
}
|
||||
|
||||
# I am using "destroy_all" here so that when a package gets destroys the
|
||||
|
|
@ -23,8 +23,8 @@ class Package < ApplicationRecord
|
|||
# screenshot files from disk.
|
||||
has_many :screenshots,
|
||||
-> { order(id: :desc) },
|
||||
:inverse_of=>:package,
|
||||
:dependent => :destroy
|
||||
inverse_of: :package,
|
||||
dependent: :destroy
|
||||
|
||||
# default_scope {
|
||||
# order('name ASC')
|
||||
|
|
@ -37,11 +37,7 @@ class Package < ApplicationRecord
|
|||
|
||||
# Return the first paragraph of the long description.
|
||||
def long_description_first_paragraph
|
||||
if self.long_description
|
||||
self.long_description.split(/\n\.\n/).first
|
||||
else
|
||||
nil
|
||||
end
|
||||
long_description.split(/\n\.\n/).first if long_description
|
||||
end
|
||||
|
||||
# Return a query of all packages that have screenshots
|
||||
|
|
@ -72,7 +68,7 @@ class Package < ApplicationRecord
|
|||
|
||||
# Get all screenshots and have them sorted descendingly by their version number (Debian style).
|
||||
def screenshots_sorted_by_version
|
||||
self.screenshots.approved.to_a.sort { |x,y| version_compare(x.version,y.version) }
|
||||
screenshots.approved.to_a.sort { |x, y| version_compare(x.version, y.version) }
|
||||
end
|
||||
|
||||
# Return the newest screenshot that is not newer than the given version.
|
||||
|
|
@ -83,17 +79,17 @@ class Package < ApplicationRecord
|
|||
# This way the user does not see a screenshot of version 2.0 because
|
||||
# 2.0 might contain features that were not there in version 1.5.
|
||||
def best_screenshot_for_version(version)
|
||||
sorted_screenshots = self.screenshots_sorted_by_version
|
||||
sorted_screenshots = screenshots_sorted_by_version
|
||||
sorted_screenshots.each do |ss|
|
||||
logger.debug { "Comparing version #{version} against #{ss.version}" }
|
||||
return ss if version_compare(version, ss.version) <= 0
|
||||
end
|
||||
return sorted_screenshots.last
|
||||
sorted_screenshots.last
|
||||
end
|
||||
|
||||
# Return the part of the version up to the first - or +
|
||||
def upstream_version
|
||||
self.version.split(/[\-\+]/).first
|
||||
version.split(/[-+]/).first
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ class Screenshot < ApplicationRecord
|
|||
|
||||
scope :approved, -> { where(approved: true) }
|
||||
scope :visible, -> { where(hidden: false) }
|
||||
scope :publicly, -> { where(hidden: false, approved: true) }
|
||||
|
||||
# Shrine
|
||||
include ImageUploader::Attachment(:simage) # adds an `simage` virtual attribute
|
||||
|
|
@ -17,10 +18,10 @@ class Screenshot < ApplicationRecord
|
|||
# Takes the description of a screenshot if available.
|
||||
# Otherwise it falls back to the general description of its package.
|
||||
def caption
|
||||
if self.description.present?
|
||||
"#{self.description}"
|
||||
if description.present?
|
||||
"#{description}"
|
||||
else
|
||||
"#{self.package.description}"
|
||||
"#{package.description}"
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -37,22 +38,20 @@ class Screenshot < ApplicationRecord
|
|||
def status
|
||||
text = 'This image '
|
||||
|
||||
if self.approved
|
||||
text << 'is public'
|
||||
text << if approved
|
||||
'is public'
|
||||
else
|
||||
text << 'has to be moderated before being publicly visible'
|
||||
'has to be moderated before being publicly visible'
|
||||
end
|
||||
|
||||
if self.markedfordelete
|
||||
text << ' (and was requested to be removed)'
|
||||
end
|
||||
text << ' (and was requested to be removed)' if markedfordelete
|
||||
|
||||
return text
|
||||
text
|
||||
end
|
||||
|
||||
# Brief text describing the status of this screenshots (for admins)
|
||||
def adminstatus
|
||||
if self.approved
|
||||
if approved
|
||||
'Public'
|
||||
else
|
||||
# fa_icon('hourglass') + 'Waiting for approval'
|
||||
|
|
@ -63,32 +62,33 @@ class Screenshot < ApplicationRecord
|
|||
# Publish a screenshot from the moderation queue
|
||||
def approve!
|
||||
self.approved = true
|
||||
self.save!
|
||||
save!
|
||||
end
|
||||
|
||||
# Hide a screenshot from the public. Moderator level can do this.
|
||||
def hide!
|
||||
self.hidden = true
|
||||
self.save!
|
||||
save!
|
||||
end
|
||||
|
||||
def unhide!
|
||||
self.hidden = false
|
||||
self.save!
|
||||
save!
|
||||
end
|
||||
|
||||
# Get the newest screenshots regardless of the package it belongs to
|
||||
def self.newest
|
||||
self.order(created_at: :desc)
|
||||
order(created_at: :desc)
|
||||
end
|
||||
|
||||
# Return the part of the version up to the first - or +
|
||||
def upstream_version
|
||||
self.version.split(/[\-\+]/).first
|
||||
version.split(/[-+]/).first
|
||||
end
|
||||
|
||||
# Returns the path to this screenshot's image on disk
|
||||
def disk_path
|
||||
ActiveStorage::Blob.service.send(:path_for, self.image.key)
|
||||
ActiveStorage::Blob.service.send(:path_for, image.key)
|
||||
end
|
||||
|
||||
# Returns the MD5 hex digest of the current screenshot's data
|
||||
|
|
@ -112,11 +112,9 @@ class Screenshot < ApplicationRecord
|
|||
# for two different packages. Restricting that further may happen later.
|
||||
def validate_image_is_unique
|
||||
# Look for images with the same checksum / image_fingerprint
|
||||
if screenshot=Screenshot.find_by(image_fingerprint: image_fingerprint, package_id: self.package.id)
|
||||
unless screenshot.id == self.id
|
||||
errors.add(:image, "has already been uploaded for this package")
|
||||
if (screenshot = Screenshot.find_by(image_fingerprint: image_fingerprint,
|
||||
package_id: package.id)) && !(screenshot.id == id)
|
||||
errors.add(:image, 'has already been uploaded for this package')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -12,14 +12,13 @@ html
|
|||
/ = stylesheet_link_tag :app, "data-turbo-track": "reload"
|
||||
/ = javascript_include_tag "application", "data-turbo-track": "reload", type: "module"
|
||||
|
||||
/ = stylesheet_link_tag "foundation", media: "all"
|
||||
= stylesheet_link_tag "application", media: "all"
|
||||
/ = javascript_include_tag "jquery/dist/jquery.min.js"
|
||||
/ = javascript_include_tag "foundation-sites/dist/js/foundation.min"
|
||||
= javascript_include_tag "jquery-3.7.1.min.js", "data-turbo-track": "reload", type: "module"
|
||||
= javascript_include_tag "foundation", "data-turbo-track": "reload", type: "module"
|
||||
= javascript_include_tag "debshots", "data-turbo-track": "reload", type: "module"
|
||||
/ = javascript_include_tag "application", "data-turbo-track": "reload", type: "module"
|
||||
|
||||
/ = javascript_include_tag "jquery.js", "data-turbo-track": "reload", type: "module"
|
||||
/ = javascript_include_tag "foundation", "data-turbo-track": "reload", type: "module"
|
||||
/ = javascript_include_tag "debshots", "data-turbo-track": "reload", type: "module"
|
||||
|
||||
= javascript_importmap_tags
|
||||
|
||||
= csrf_meta_tags
|
||||
|
||||
|
|
|
|||
|
|
@ -23,5 +23,5 @@
|
|||
/ ' My uploads
|
||||
|
||||
li
|
||||
= link_to destroy_user_session_path, method: :delete
|
||||
= link_to destroy_user_session_path, data: { turbo_method: :delete }
|
||||
= fa_icon 'lock 2x', text: 'Logout'
|
||||
|
|
|
|||
|
|
@ -66,6 +66,8 @@
|
|||
= render(partial: 'details_rightbox', locals: {pkg: @package})
|
||||
|
||||
javascript:
|
||||
import {upload_paste_handler} from 'aplication';
|
||||
|
||||
// Handle Ctrl-V to paste an image directly
|
||||
document.onpaste = upload_paste_handler;
|
||||
|
||||
|
|
|
|||
|
|
@ -64,16 +64,18 @@ h1 = "Upload screenshots for #{@package.name}"
|
|||
' from a shell using after setting "export LANG=C".
|
||||
li can be pasted here from your clipboard (Ctrl-V)
|
||||
|
||||
/ javascript:
|
||||
/ // Hide the submit button unless images are selected for upload
|
||||
/ // $(document).ready(upload_form_init);
|
||||
/ import upload_form_init from '../../assets/javascripts/upload.js';
|
||||
/ document.addEventListener('DOMContentLoaded', upload_form_init);
|
||||
|
||||
javascript:
|
||||
// Hide the submit button unless images are selected for upload
|
||||
$(document).ready(upload_form_init);
|
||||
/ // import upload_paste_handler from '../../assets/javascripts/debshots.js';
|
||||
/ // Handle Ctrl-V to paste an image directly
|
||||
/ document.onpaste = upload_paste_handler;
|
||||
|
||||
// Handle Ctrl-V to paste an image directly
|
||||
document.onpaste = upload_paste_handler;
|
||||
/ // Where to send POST requests for uploads
|
||||
/ var ajax_upload_url = '#{{upload_receive_json_path}}';
|
||||
|
||||
// Where to send POST requests for uploads
|
||||
var ajax_upload_url = '#{{upload_receive_json_path}}';
|
||||
|
||||
// Where to go to after a successful image upload
|
||||
var after_upload_url = '#{{package_path(@package)}}';
|
||||
/ // Where to go to after a successful image upload
|
||||
/ var after_upload_url = '#{{package_path(@package)}}';
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
.image
|
||||
- if @random_pick
|
||||
a href=package_path(@random_pick.name)
|
||||
= small_img(@random_pick.screenshots.first)
|
||||
= small_img(@random_pick.screenshots.publicly.first)
|
||||
- else
|
||||
'No uploaded screenshots yet.
|
||||
.text
|
||||
|
|
|
|||
4
bin/importmap
Executable file
4
bin/importmap
Executable file
|
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
require_relative "../config/application"
|
||||
require "importmap/commands"
|
||||
|
|
@ -2,12 +2,12 @@
|
|||
"name": "app",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"esbuild": "^0.25.1",
|
||||
"esbuild": "^0.25.2",
|
||||
"webpack": "^5.98.0",
|
||||
"webpack-cli": "^6.0.1"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "webpack --config webpack.config.js",
|
||||
"build": "esbuild app/javascript/*.* --bundle --sourcemap --format=esm --outdir=app/assets/builds --public-path=/assets",
|
||||
"build:css": "sass ./app/assets/stylesheets/application.sass.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules"
|
||||
},
|
||||
"dependencies": {
|
||||
|
|
@ -17,6 +17,6 @@
|
|||
"foundation-sites": "^6.9.0",
|
||||
"jquery": "^3.7.1",
|
||||
"motion-ui": "^2.0.8",
|
||||
"sass": "^1.85.1"
|
||||
"sass": "^1.86.3"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
0
vendor/javascript/.keep
vendored
Normal file
0
vendor/javascript/.keep
vendored
Normal file
266
yarn.lock
266
yarn.lock
|
|
@ -12,130 +12,130 @@
|
|||
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83"
|
||||
integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==
|
||||
|
||||
"@esbuild/aix-ppc64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz#c33cf6bbee34975626b01b80451cbb72b4c6c91d"
|
||||
integrity sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==
|
||||
"@esbuild/aix-ppc64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz#b87036f644f572efb2b3c75746c97d1d2d87ace8"
|
||||
integrity sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==
|
||||
|
||||
"@esbuild/android-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz#ea766015c7d2655164f22100d33d7f0308a28d6d"
|
||||
integrity sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==
|
||||
"@esbuild/android-arm64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz#5ca7dc20a18f18960ad8d5e6ef5cf7b0a256e196"
|
||||
integrity sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==
|
||||
|
||||
"@esbuild/android-arm@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.1.tgz#e84d2bf2fe2e6177a0facda3a575b2139fd3cb9c"
|
||||
integrity sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==
|
||||
"@esbuild/android-arm@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.2.tgz#3c49f607b7082cde70c6ce0c011c362c57a194ee"
|
||||
integrity sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==
|
||||
|
||||
"@esbuild/android-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.1.tgz#58337bee3bc6d78d10425e5500bd11370cfdfbed"
|
||||
integrity sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==
|
||||
"@esbuild/android-x64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.2.tgz#8a00147780016aff59e04f1036e7cb1b683859e2"
|
||||
integrity sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==
|
||||
|
||||
"@esbuild/darwin-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz#a46805c1c585d451aa83be72500bd6e8495dd591"
|
||||
integrity sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==
|
||||
"@esbuild/darwin-arm64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz#486efe7599a8d90a27780f2bb0318d9a85c6c423"
|
||||
integrity sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==
|
||||
|
||||
"@esbuild/darwin-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz#0643e003bb238c63fc93ddbee7d26a003be3cd98"
|
||||
integrity sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==
|
||||
"@esbuild/darwin-x64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz#95ee222aacf668c7a4f3d7ee87b3240a51baf374"
|
||||
integrity sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==
|
||||
|
||||
"@esbuild/freebsd-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz#cff18da5469c09986b93e87979de5d6872fe8f8e"
|
||||
integrity sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==
|
||||
"@esbuild/freebsd-arm64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz#67efceda8554b6fc6a43476feba068fb37fa2ef6"
|
||||
integrity sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==
|
||||
|
||||
"@esbuild/freebsd-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz#362fc09c2de14987621c1878af19203c46365dde"
|
||||
integrity sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==
|
||||
"@esbuild/freebsd-x64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz#88a9d7ecdd3adadbfe5227c2122d24816959b809"
|
||||
integrity sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==
|
||||
|
||||
"@esbuild/linux-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz#aa90d5b02efc97a271e124e6d1cea490634f7498"
|
||||
integrity sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==
|
||||
"@esbuild/linux-arm64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz#87be1099b2bbe61282333b084737d46bc8308058"
|
||||
integrity sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==
|
||||
|
||||
"@esbuild/linux-arm@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz#dfcefcbac60a20918b19569b4b657844d39db35a"
|
||||
integrity sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==
|
||||
"@esbuild/linux-arm@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz#72a285b0fe64496e191fcad222185d7bf9f816f6"
|
||||
integrity sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==
|
||||
|
||||
"@esbuild/linux-ia32@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz#6f9527077ccb7953ed2af02e013d4bac69f13754"
|
||||
integrity sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==
|
||||
"@esbuild/linux-ia32@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz#337a87a4c4dd48a832baed5cbb022be20809d737"
|
||||
integrity sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==
|
||||
|
||||
"@esbuild/linux-loong64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz#287d2412a5456e5860c2839d42a4b51284d1697c"
|
||||
integrity sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==
|
||||
"@esbuild/linux-loong64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz#1b81aa77103d6b8a8cfa7c094ed3d25c7579ba2a"
|
||||
integrity sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==
|
||||
|
||||
"@esbuild/linux-mips64el@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz#530574b9e1bc5d20f7a4f44c5f045e26f3783d57"
|
||||
integrity sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==
|
||||
"@esbuild/linux-mips64el@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz#afbe380b6992e7459bf7c2c3b9556633b2e47f30"
|
||||
integrity sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==
|
||||
|
||||
"@esbuild/linux-ppc64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz#5d7e6b283a0b321ea42c6bc0abeb9eb99c1f5589"
|
||||
integrity sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==
|
||||
"@esbuild/linux-ppc64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz#6bf8695cab8a2b135cca1aa555226dc932d52067"
|
||||
integrity sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==
|
||||
|
||||
"@esbuild/linux-riscv64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz#14fa0cd073c26b4ee2465d18cd1e18eea7859fa8"
|
||||
integrity sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==
|
||||
"@esbuild/linux-riscv64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz#43c2d67a1a39199fb06ba978aebb44992d7becc3"
|
||||
integrity sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==
|
||||
|
||||
"@esbuild/linux-s390x@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz#e677b4b9d1b384098752266ccaa0d52a420dc1aa"
|
||||
integrity sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==
|
||||
"@esbuild/linux-s390x@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz#419e25737ec815c6dce2cd20d026e347cbb7a602"
|
||||
integrity sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==
|
||||
|
||||
"@esbuild/linux-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz#f1c796b78fff5ce393658313e8c58613198d9954"
|
||||
integrity sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==
|
||||
"@esbuild/linux-x64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz#22451f6edbba84abe754a8cbd8528ff6e28d9bcb"
|
||||
integrity sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==
|
||||
|
||||
"@esbuild/netbsd-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz#0d280b7dfe3973f111b02d5fe9f3063b92796d29"
|
||||
integrity sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==
|
||||
"@esbuild/netbsd-arm64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz#744affd3b8d8236b08c5210d828b0698a62c58ac"
|
||||
integrity sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==
|
||||
|
||||
"@esbuild/netbsd-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz#be663893931a4bb3f3a009c5cc24fa9681cc71c0"
|
||||
integrity sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==
|
||||
"@esbuild/netbsd-x64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz#dbbe7521fd6d7352f34328d676af923fc0f8a78f"
|
||||
integrity sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==
|
||||
|
||||
"@esbuild/openbsd-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz#d9021b884233673a05dc1cc26de0bf325d824217"
|
||||
integrity sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==
|
||||
"@esbuild/openbsd-arm64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz#f9caf987e3e0570500832b487ce3039ca648ce9f"
|
||||
integrity sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==
|
||||
|
||||
"@esbuild/openbsd-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz#9f1dc1786ed2e2938c404b06bcc48be9a13250de"
|
||||
integrity sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==
|
||||
"@esbuild/openbsd-x64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz#d2bb6a0f8ffea7b394bb43dfccbb07cabd89f768"
|
||||
integrity sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==
|
||||
|
||||
"@esbuild/sunos-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz#89aac24a4b4115959b3f790192cf130396696c27"
|
||||
integrity sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==
|
||||
"@esbuild/sunos-x64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz#49b437ed63fe333b92137b7a0c65a65852031afb"
|
||||
integrity sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==
|
||||
|
||||
"@esbuild/win32-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz#354358647a6ea98ea6d243bf48bdd7a434999582"
|
||||
integrity sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==
|
||||
"@esbuild/win32-arm64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz#081424168463c7d6c7fb78f631aede0c104373cf"
|
||||
integrity sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==
|
||||
|
||||
"@esbuild/win32-ia32@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz#8cea7340f2647eba951a041dc95651e3908cd4cb"
|
||||
integrity sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==
|
||||
"@esbuild/win32-ia32@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz#3f9e87143ddd003133d21384944a6c6cadf9693f"
|
||||
integrity sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==
|
||||
|
||||
"@esbuild/win32-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz#7d79922cb2d88f9048f06393dbf62d2e4accb584"
|
||||
integrity sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==
|
||||
"@esbuild/win32-x64@0.25.2":
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz#839f72c2decd378f86b8f525e1979a97b920c67d"
|
||||
integrity sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==
|
||||
|
||||
"@hotwired/stimulus@^3.2.2":
|
||||
version "3.2.2"
|
||||
|
|
@ -619,36 +619,36 @@ es-module-lexer@^1.2.1:
|
|||
resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21"
|
||||
integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==
|
||||
|
||||
esbuild@^0.25.1:
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.1.tgz#a16b8d070b6ad4871935277bda6ccfe852e3fa2f"
|
||||
integrity sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==
|
||||
esbuild@^0.25.2:
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.2.tgz#55a1d9ebcb3aa2f95e8bba9e900c1a5061bc168b"
|
||||
integrity sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==
|
||||
optionalDependencies:
|
||||
"@esbuild/aix-ppc64" "0.25.1"
|
||||
"@esbuild/android-arm" "0.25.1"
|
||||
"@esbuild/android-arm64" "0.25.1"
|
||||
"@esbuild/android-x64" "0.25.1"
|
||||
"@esbuild/darwin-arm64" "0.25.1"
|
||||
"@esbuild/darwin-x64" "0.25.1"
|
||||
"@esbuild/freebsd-arm64" "0.25.1"
|
||||
"@esbuild/freebsd-x64" "0.25.1"
|
||||
"@esbuild/linux-arm" "0.25.1"
|
||||
"@esbuild/linux-arm64" "0.25.1"
|
||||
"@esbuild/linux-ia32" "0.25.1"
|
||||
"@esbuild/linux-loong64" "0.25.1"
|
||||
"@esbuild/linux-mips64el" "0.25.1"
|
||||
"@esbuild/linux-ppc64" "0.25.1"
|
||||
"@esbuild/linux-riscv64" "0.25.1"
|
||||
"@esbuild/linux-s390x" "0.25.1"
|
||||
"@esbuild/linux-x64" "0.25.1"
|
||||
"@esbuild/netbsd-arm64" "0.25.1"
|
||||
"@esbuild/netbsd-x64" "0.25.1"
|
||||
"@esbuild/openbsd-arm64" "0.25.1"
|
||||
"@esbuild/openbsd-x64" "0.25.1"
|
||||
"@esbuild/sunos-x64" "0.25.1"
|
||||
"@esbuild/win32-arm64" "0.25.1"
|
||||
"@esbuild/win32-ia32" "0.25.1"
|
||||
"@esbuild/win32-x64" "0.25.1"
|
||||
"@esbuild/aix-ppc64" "0.25.2"
|
||||
"@esbuild/android-arm" "0.25.2"
|
||||
"@esbuild/android-arm64" "0.25.2"
|
||||
"@esbuild/android-x64" "0.25.2"
|
||||
"@esbuild/darwin-arm64" "0.25.2"
|
||||
"@esbuild/darwin-x64" "0.25.2"
|
||||
"@esbuild/freebsd-arm64" "0.25.2"
|
||||
"@esbuild/freebsd-x64" "0.25.2"
|
||||
"@esbuild/linux-arm" "0.25.2"
|
||||
"@esbuild/linux-arm64" "0.25.2"
|
||||
"@esbuild/linux-ia32" "0.25.2"
|
||||
"@esbuild/linux-loong64" "0.25.2"
|
||||
"@esbuild/linux-mips64el" "0.25.2"
|
||||
"@esbuild/linux-ppc64" "0.25.2"
|
||||
"@esbuild/linux-riscv64" "0.25.2"
|
||||
"@esbuild/linux-s390x" "0.25.2"
|
||||
"@esbuild/linux-x64" "0.25.2"
|
||||
"@esbuild/netbsd-arm64" "0.25.2"
|
||||
"@esbuild/netbsd-x64" "0.25.2"
|
||||
"@esbuild/openbsd-arm64" "0.25.2"
|
||||
"@esbuild/openbsd-x64" "0.25.2"
|
||||
"@esbuild/sunos-x64" "0.25.2"
|
||||
"@esbuild/win32-arm64" "0.25.2"
|
||||
"@esbuild/win32-ia32" "0.25.2"
|
||||
"@esbuild/win32-x64" "0.25.2"
|
||||
|
||||
escalade@^3.2.0:
|
||||
version "3.2.0"
|
||||
|
|
@ -1157,10 +1157,10 @@ sass-embedded@^1.79.3:
|
|||
sass-embedded-win32-ia32 "1.85.1"
|
||||
sass-embedded-win32-x64 "1.85.1"
|
||||
|
||||
sass@^1.85.1:
|
||||
version "1.85.1"
|
||||
resolved "https://registry.yarnpkg.com/sass/-/sass-1.85.1.tgz#18ab0bb48110ae99163778f06445b406148ca0d5"
|
||||
integrity sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==
|
||||
sass@^1.86.3:
|
||||
version "1.86.3"
|
||||
resolved "https://registry.yarnpkg.com/sass/-/sass-1.86.3.tgz#0a0d9ea97cb6665e73f409639f8533ce057464c9"
|
||||
integrity sha512-iGtg8kus4GrsGLRDLRBRHY9dNVA78ZaS7xr01cWnS7PEMQyFtTqBiyCrfpTYTZXRWM94akzckYjh8oADfFNTzw==
|
||||
dependencies:
|
||||
chokidar "^4.0.0"
|
||||
immutable "^5.0.2"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue