tags
This commit is contained in:
parent
0b8f762a63
commit
5866b0bac3
@ -48,6 +48,12 @@ export class SiteTreeservice {
|
|||||||
return this.apiRequest.get(_http);
|
return this.apiRequest.get(_http);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
getDesignLibraryByTag(operationType: string, tagType: string): Observable<any> {
|
||||||
|
const _http = "Design_lbrary/Design_lbrary/tag?" + "operationType=" + operationType + "&fieldType=" + tagType;
|
||||||
|
return this.apiRequest.get(_http);
|
||||||
|
}
|
||||||
|
|
||||||
getDesignLibraryByheader(headerId: number, operationType: string, fieldtype: string): Observable<any> {
|
getDesignLibraryByheader(headerId: number, operationType: string, fieldtype: string): Observable<any> {
|
||||||
const _http = "Design_lbrary/Design_lbrary/line/unique?headerId=" + headerId + "&operationType=" + operationType + "&fieldType=" + fieldtype;
|
const _http = "Design_lbrary/Design_lbrary/line/unique?headerId=" + headerId + "&operationType=" + operationType + "&fieldType=" + fieldtype;
|
||||||
return this.apiRequest.get(_http);
|
return this.apiRequest.get(_http);
|
||||||
@ -128,5 +134,12 @@ export class SiteTreeservice {
|
|||||||
uploadLogouploaddelete(id: number): Observable<any> {
|
uploadLogouploaddelete(id: number): Observable<any> {
|
||||||
return this.apiRequest.delete(`FileUpload/Uploadeddocs/${id}`);
|
return this.apiRequest.delete(`FileUpload/Uploadeddocs/${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// photo search option
|
||||||
|
|
||||||
|
searchPhoto(keywords: string, pageNumber: number): Observable<any> {
|
||||||
|
const _http = "api/photos/search?keyword=" + keywords + "&pageNumber=" + pageNumber;
|
||||||
|
return this.apiRequest.get(_http);
|
||||||
|
}
|
||||||
// updateactionƒ
|
// updateactionƒ
|
||||||
}
|
}
|
||||||
Binary file not shown.
@ -486,6 +486,24 @@
|
|||||||
|
|
||||||
<!-- CSS Editor Modal -->
|
<!-- CSS Editor Modal -->
|
||||||
<div *ngIf="showCssEditorModal" class="css-editor-modal">
|
<div *ngIf="showCssEditorModal" class="css-editor-modal">
|
||||||
|
|
||||||
|
<!-- 🌄 Image Slider on Top -->
|
||||||
|
<div *ngIf="imageSearchResults.length > 0" style="margin-bottom: 20px;">
|
||||||
|
<h4>Suggested Images for "{{ imageSearchQuery }}"</h4>
|
||||||
|
|
||||||
|
<!-- Horizontal scroll container -->
|
||||||
|
<div class="image-slider">
|
||||||
|
<img *ngFor="let url of imageSearchResults" [src]="url" (click)="replaceImageInSection(url)"
|
||||||
|
class="slider-image" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pagination-buttons">
|
||||||
|
<button (click)="prevImagePage()" [disabled]="imageSearchPage === 1">⏮️ Prev</button>
|
||||||
|
<span>Page {{ imageSearchPage }}</span>
|
||||||
|
<button (click)="nextImagePage()">Next ⏭️</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<h3>Edit CSS for Section: {{ selectedSection?.section }}</h3>
|
<h3>Edit CSS for Section: {{ selectedSection?.section }}</h3>
|
||||||
|
|
||||||
<div *ngFor="let className of objectKeys(classCssMap)">
|
<div *ngFor="let className of objectKeys(classCssMap)">
|
||||||
@ -498,6 +516,9 @@
|
|||||||
<button (click)="addCssProp(className)">➕ Add Property</button>
|
<button (click)="addCssProp(className)">➕ Add Property</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<button (click)="saveClassCss()">💾 Save</button>
|
<button (click)="saveClassCss()">💾 Save</button>
|
||||||
<button (click)="closeCssEditor()">Cancel</button>
|
<button (click)="closeCssEditor()">Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@ -505,6 +526,8 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Empty State for No Pages -->
|
<!-- Empty State for No Pages -->
|
||||||
<div *ngIf="pageRenderOrder.length === 0" class="empty-pages-modern">
|
<div *ngIf="pageRenderOrder.length === 0" class="empty-pages-modern">
|
||||||
<div class="empty-state-modern">
|
<div class="empty-state-modern">
|
||||||
@ -660,6 +683,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Add Custom Section Modal -->
|
<!-- Add Custom Section Modal -->
|
||||||
<div class="modal-overlay" *ngIf="showAddCustomModal" [@fadeIn] (click)="closeAddCustomModal()">
|
<div class="modal-overlay" *ngIf="showAddCustomModal" [@fadeIn] (click)="closeAddCustomModal()">
|
||||||
<div class="modal-content" (click)="$event.stopPropagation()" [@slideIn]>
|
<div class="modal-content" (click)="$event.stopPropagation()" [@slideIn]>
|
||||||
|
|||||||
@ -1988,5 +1988,89 @@ $shadow-heavy: 0 8px 25px rgba(0, 0, 0, 0.15);
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// chow code css end
|
// show code css end
|
||||||
|
|
||||||
|
|
||||||
|
// show image slider
|
||||||
|
|
||||||
|
.image-modal-overlay {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 100vh;
|
||||||
|
width: 100vw;
|
||||||
|
background: rgba(0,0,0,0.5);
|
||||||
|
z-index: 2000;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-modal {
|
||||||
|
background: white;
|
||||||
|
padding: 20px;
|
||||||
|
width: 80%;
|
||||||
|
max-height: 90vh;
|
||||||
|
overflow: auto;
|
||||||
|
border-radius: 10px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-slider {
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
overflow-x: auto;
|
||||||
|
margin: 16px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-image {
|
||||||
|
height: 120px;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: transform 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-image:hover {
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-buttons {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
.image-slider {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
overflow-x: auto;
|
||||||
|
gap: 12px;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-image {
|
||||||
|
height: 100px;
|
||||||
|
flex: 0 0 auto;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: transform 0.2s, border 0.2s;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-image:hover {
|
||||||
|
transform: scale(1.05);
|
||||||
|
border-color: #007bff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-buttons {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@ -71,7 +71,9 @@
|
|||||||
|
|
||||||
<!-- Tab Buttons -->
|
<!-- Tab Buttons -->
|
||||||
<div style="display: flex; border-bottom: 2px solid #ccc;">
|
<div style="display: flex; border-bottom: 2px solid #ccc;">
|
||||||
<button [ngClass]="{'active-tab': activeTab === 'sitemap'}" (click)="activeTab = 'sitemap'"
|
<button [ngClass]="{'active-tab': activeTab === 'sitemap'}"
|
||||||
|
|
||||||
|
(click)="onTabChange('sitemap')"
|
||||||
class="tab-button">Sitemap</button>
|
class="tab-button">Sitemap</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import { ActivatedRoute } from '@angular/router';
|
|||||||
|
|
||||||
import { ViewChild } from '@angular/core';
|
import { ViewChild } from '@angular/core';
|
||||||
import { trigger, transition, style, animate, state } from '@angular/animations';
|
import { trigger, transition, style, animate, state } from '@angular/animations';
|
||||||
|
import { Tagservice } from './Tag/Tag.service';
|
||||||
// Make sure path is correct
|
// Make sure path is correct
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@ -130,6 +131,7 @@ export class TreeVisualizerComponent {
|
|||||||
|
|
||||||
constructor(private treeService: treeVisualizerService,
|
constructor(private treeService: treeVisualizerService,
|
||||||
private siteTreeService: SiteTreeservice,
|
private siteTreeService: SiteTreeservice,
|
||||||
|
private tagService: Tagservice,
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
|
|
||||||
|
|
||||||
@ -141,9 +143,50 @@ export class TreeVisualizerComponent {
|
|||||||
|
|
||||||
console.log(' id is : ', this.id)
|
console.log(' id is : ', this.id)
|
||||||
|
|
||||||
|
this.getTagData();
|
||||||
this.fetchTreeById(this.id);
|
this.fetchTreeById(this.id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onTabChange(tab: 'sitemap' | 'wireframe') {
|
||||||
|
this.activeTab = tab;
|
||||||
|
|
||||||
|
if (tab === 'sitemap') {
|
||||||
|
console.log('🔁 Reloading sitemap tree...');
|
||||||
|
this.fetchTreeById(this.id); // or convertJson(), based on your rendering logic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
tagData;
|
||||||
|
tagNames: string[] = [];
|
||||||
|
getTagData() {
|
||||||
|
this.tagService.getAll().subscribe((data) => {
|
||||||
|
console.log('tag data', data);
|
||||||
|
|
||||||
|
if (Array.isArray(data)) {
|
||||||
|
this.tagData = data;
|
||||||
|
|
||||||
|
// Null checks for data and name
|
||||||
|
this.tagNames = data
|
||||||
|
.filter(tag => tag && tag.name) // tag object aur name dono honi chahiye
|
||||||
|
.map(tag => tag.name);
|
||||||
|
|
||||||
|
console.log('Extracted tag names:', this.tagNames);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
this.tagData = [];
|
||||||
|
this.tagNames = [];
|
||||||
|
console.warn('Tag data is not an array.');
|
||||||
|
}
|
||||||
|
}, (error) => {
|
||||||
|
console.log('Error fetching tag data', error);
|
||||||
|
this.tagData = [];
|
||||||
|
this.tagNames = [];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Add these properties to your component class
|
// Add these properties to your component class
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
@ -169,7 +212,18 @@ export class TreeVisualizerComponent {
|
|||||||
- Each page MUST contain at least 6 meaningful UI sections (including "Navbar" and "Footer"). These sections should be clearly named and described (e.g., "Header Section", "Hero Section", "Testimonial Section", etc.). You are NOT allowed to include fewer than 6 sections on any page.
|
- Each page MUST contain at least 6 meaningful UI sections (including "Navbar" and "Footer"). These sections should be clearly named and described (e.g., "Header Section", "Hero Section", "Testimonial Section", etc.). You are NOT allowed to include fewer than 6 sections on any page.
|
||||||
- A "Navbar" and a "Footer" section (always included on every page)
|
- A "Navbar" and a "Footer" section (always included on every page)
|
||||||
- A short, clear description for each section (to support frontend development)
|
- A short, clear description for each section (to support frontend development)
|
||||||
|
- Each section MUST also include a \`"tag"\` key. This tag should be selected from the following allowed tag list:
|
||||||
|
+
|
||||||
|
+ [${this.tagNames.join(", ")}]
|
||||||
|
+
|
||||||
|
+ Example:
|
||||||
|
+ "Hero Section": {
|
||||||
|
+ "description": "A bold landing area with a headline, subtext, and call-to-action button.",
|
||||||
|
+ "tag": "header"
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ You MUST select the most relevant tag from the above list for every section.
|
||||||
|
+ If a suitable tag is not found, choose the closest logical match.
|
||||||
|
|
||||||
📘 Website Context:
|
📘 Website Context:
|
||||||
${this.rawInputText}
|
${this.rawInputText}
|
||||||
@ -289,6 +343,9 @@ export class TreeVisualizerComponent {
|
|||||||
this.handleGenerationError('Failed to generate site structure');
|
this.handleGenerationError('Failed to generate site structure');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.fetchTreeById(this.id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper method to check if all calls are complete
|
// Helper method to check if all calls are complete
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user