Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
837 changes: 834 additions & 3 deletions components/application/index.css

Large diffs are not rendered by default.

468 changes: 449 additions & 19 deletions components/application/index.js

Large diffs are not rendered by default.

182 changes: 182 additions & 0 deletions components/application/index.less
Original file line number Diff line number Diff line change
Expand Up @@ -380,4 +380,186 @@
-webkit-backdrop-filter: none !important;
}
}

// Reviews Page Styles
.reviewsWrapper {
padding: calc(55px + var(--app-margin-top)) 0 20px 0;
max-width: 900px;
margin: 0 auto;
overflow-y: auto;
height: 100vh;
}

.reviewsAppHeader {
display: flex;
align-items: center;
gap: 12px;
padding: 20px;
border-bottom: 1px solid rgb(var(--neutral-grad-0));
}

.reviewItem {
padding: 20px;
margin-bottom: 16px;
background: rgb(var(--neutral-grad-1));
border: 1px solid rgb(var(--neutral-grad-0));
border-radius: 12px;

&:hover {
.reviewActions {
opacity: 1;
}
}
}

.reviewHeader {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 12px;
}

.reviewUserInfo {
display: flex;
gap: 12px;
align-items: center;
}

.reviewUserAvatar {
width: 40px;
height: 40px;
border-radius: 50%;
background: rgb(var(--neutral-grad-0));
display: flex;
align-items: center;
justify-content: center;
color: rgb(var(--text-on-main-bg-color));
}

.reviewUserName {
font-weight: 600;
color: rgb(var(--text-color));
font-size: 0.95em;
}

.reviewDate {
font-size: 0.85em;
color: rgb(var(--text-on-main-bg-color));
opacity: 0.6;
}

.reviewText {
color: rgb(var(--text-on-main-bg-color));
line-height: 1.6;
font-size: 0.95em;
margin-bottom: 12px;
}

.reviewActions {
display: flex;
gap: 8px;
align-items: center;
opacity: 0;
transition: opacity 0.2s ease;

.deleteReviewButton {
background: none;
border: none;
color: rgb(var(--text-on-main-bg-color));
opacity: 0.5;
cursor: pointer;
padding: 4px 8px;
border-radius: 6px;
font-size: 0.9em;
transition: all 0.2s ease;

&:hover {
opacity: 1;
background: rgba(var(--color-bg-ac-error), 0.1);
color: rgb(var(--color-bg-ac-error));
}
}
}

.writeReviewSection {
padding: 20px;
border-bottom: 1px solid rgb(var(--neutral-grad-0));
display: flex;
gap: 12px;
}

.rateAppButton,
.writeReviewButton {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
}

.userRatingDisplay {
flex: 1;
background: rgba(var(--color-bg-ac), 0.1);
border: 1px solid rgba(var(--color-bg-ac), 0.3);
border-radius: 12px;
padding: 12px 16px;
display: flex;
flex-direction: column;
gap: 8px;
}

.overallRating {
display: flex;
align-items: center;
gap: 24px;
padding: 30px 20px;
border-bottom: 1px solid rgb(var(--neutral-grad-0));
}

.ratingScore {
display: flex;
flex-direction: column;
align-items: center;
min-width: 100px;
}

.scoreNumber {
font-size: 3.5em;
font-weight: 700;
color: rgb(var(--text-color));
line-height: 1;
}

.starsDisplay {
display: flex;
gap: 4px;
color: #FFB800;
font-size: 1.5em;
}

.ratingDistribution {
padding: 20px;
border-bottom: 1px solid rgb(var(--neutral-grad-0));
}

.distributionRow {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 8px;
}

.distributionBar {
flex: 1;
height: 8px;
background: rgb(var(--neutral-grad-0));
border-radius: 4px;
overflow: hidden;
}

.distributionBarFill {
height: 100%;
background: #FFB800;
transition: width 0.3s ease;
}
}
14 changes: 14 additions & 0 deletions components/application/templates/frameremote.html
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,26 @@
<% } %>
</div>
<% if(app.mobileview || app.electronview) {%>
<% if(hasReviewsSupport) { %>
<div class="reviewsBtn iconwrapper filterIcon">
<div class="icon">
<i class="fas fa-star"></i>
</div>
</div>
<% } %>
<div class="settings iconwrapper filterIcon">
<div class="icon">
<i class="fas fa-ellipsis-v"></i>
</div>
</div>
<% } else { %>
<% if(hasReviewsSupport) { %>
<div class="reviewsBtn iconwrapper filterIcon">
<div class="icon">
<i class="fas fa-star"></i>
</div>
</div>
<% } %>
<div class="info iconwrapper filterIcon">
<div class="icon">
<i class="fas fa-cog"></i>
Expand Down
95 changes: 79 additions & 16 deletions components/application/templates/install.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,87 @@
<% } %>
</div>
<div class="installwrapper">
<img class="appicon" src="<%-application.icon%>"></>
<div class="appdetails">
<div class="appname"><%-application.name || "Unknown App"%></div>
<div class="appdescription"><%-application.description || "No description available."%></div>
<div class="apptags">
<% if (application.tags && application.tags.length) { %>
<% application.tags.forEach(function(tag) { %>
<span class="tag"><%- tag %></span>
<% }) %>
<div class="installContentWrapper">
<img class="appicon" src="<%-application.icon%>">
<div class="appdetails">
<div class="appname"><%-application.name || "Unknown App"%></div>
<div class="appdescription"><%-application.description || "No description available."%></div>
<div class="apptags">
<% if (application.tags && application.tags.length) { %>
<% application.tags.forEach(function(tag) { %>
<span class="tag"><%- tag %></span>
<% }) %>
<% } else { %>
<span class="tag">No tags available</span>
<% } %>
</div>
</div>

<div class="installButton">
<button class="button">
<%- e('installpplication')%>
</button>
</div>

<% if(hasReviewsSupport) { %>
<div class="ratingsPreviewSection">
<div class="ratingsPreviewHeader">
<h3><%- e('ratingsAndReviews') %></h3>
<button class="viewAllReviews">
<span><%- e('allReviews') %></span>
<i class="fas fa-chevron-right"></i>
</button>
</div>

<% if(ratingsData && ratingsData.totalRatings && ratingsData.totalRatings > 0) { %>
<div class="ratingsPreview">
<div class="ratingPreviewCard">
<div class="overallRatingPreview">
<div class="ratingScorePreview">
<div class="scoreNumberLarge"><%- ratingsData.averageRating || 0 %></div>
<div class="scoreOutOfSmall"><%- e('outOf5') %></div>
</div>
<div class="starsPreview">
<% var avgRating = ratingsData.averageRating || 0; %>
<% for(var i = 1; i <= 5; i++) { %>
<i class="<%= i <= Math.round(avgRating) ? 'fas' : 'far' %> fa-star"></i>
<% } %>
</div>
<div class="ratingsCountPreview"><%- ratingsData.totalRatings || 0 %> <%- e('ratings') %></div>
</div>
</div>

<% if(ratingsData.reviews && ratingsData.reviews.length > 0) { %>
<div class="recentReviewsPreview">
<% ratingsData.reviews.slice(0, 2).forEach(function(review) { %>
<div class="reviewPreviewItem">
<div class="reviewPreviewHeader">
<div class="reviewPreviewDate"><%- review.date || '' %></div>
</div>
<div class="reviewPreviewUser"><%- review.userName || 'Аноним' %></div>
<% if(review.title) { %>
<div class="reviewPreviewTitle"><%- review.title %></div>
<% } %>
<div class="reviewPreviewText"><%- review.text ? review.text.substring(0, 100) : '' %>...</div>
</div>
<% }) %>
</div>
<% } %>
</div>
<% } else { %>
<span class="tag">No tags available</span>
<div class="ratingsPreviewEmpty">
<div class="emptyRatingCard">
<div class="emptyStars">
<% for(var i = 1; i <= 5; i++) { %>
<i class="far fa-star"></i>
<% } %>
</div>
<p><%- e('noRatingsYet') %></p>
<p class="emptySubtext"><%- e('beFirstToRate') %></p>
</div>
</div>
<% } %>
</div>
</div>

<div class="installButton">
<button class="button">
<%- e('installpplication')%>
</button>
<% } %>
</div>
</div>
9 changes: 8 additions & 1 deletion components/application/templates/metmenu.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,23 @@
class : 'settings'
},

reviews : {
icon : '<i class="fas fa-star"></i>',
text : e('reviewsAndRatingsMenu'),
class : 'reviews'
},

close : {
icon : '<i class="fas fa-times"></i>',
text : e('application_close'),
class : 'close'
}

}

if(application && application.manifest){
m.push('settings')
m.push('reviews')
}

m.push('close')
Expand Down
38 changes: 38 additions & 0 deletions components/application/templates/ratingform.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<div class="captionRow">
<div class="back iconwrapper">
<div class="icon">
<i class="fas fa-chevron-left"></i>
</div>
</div>
<div class="caption">
<span><%- e('rateApp') %></span>
</div>
</div>

<div class="ratingFormWrapper">
<div class="ratingFormAppHeader">
<img class="appIconLarge" src="<%-application.icon%>" alt="<%-application.name%>">
<div class="appName"><%-application.name || "Unknown App"%></div>
<div class="ratingPrompt"><%- e('howDoYouRate') %></div>
</div>

<div class="ratingFormStars">
<div class="starRatingInput">
<i class="far fa-star" data-rating="1"></i>
<i class="far fa-star" data-rating="2"></i>
<i class="far fa-star" data-rating="3"></i>
<i class="far fa-star" data-rating="4"></i>
<i class="far fa-star" data-rating="5"></i>
</div>
<div class="ratingLabel"><%- e('clickStarToRate') %></div>
</div>

<div class="ratingFormActions">
<button class="cancelRatingButton button secondary">
<%- e('cancel') %>
</button>
<button class="submitRatingButton button" disabled>
<%- e('submitRating') %>
</button>
</div>
</div>
Loading