Remove discipline from WP types; prep for firewall hosting + feedback collection
WP type discipline removal: - SOP WP Types step now has Enabled / Special Rules-Notes / WO Complete Approval columns (discipline column and DISCIPLINES/type-discipline maps gone) - WP Creator: drop the derived Discipline field, the type-trade number code, and discipline from saved packages and output; number tokens are now generic - Default WP number format no longer includes [Discipline] - Harden buildConstraints against object-shaped constraint names Firewall hosting: - Remove external Google Fonts @import; fall back to system fonts (no outbound calls, runs fully behind a firewall) Feedback collection: - Add shared feedback-config.js with a single FEEDBACK_ENDPOINT hook + best-effort postFeedback() (backend or Power Automate/SharePoint) - Add Export / Import to home and SOP feedback; wire central-post on all three surfaces (home, SOP step comments, WP review comments) - Add DEPLOYMENT.md documenting hosting and both feedback paths Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
43
index.html
43
index.html
@@ -426,7 +426,10 @@
|
||||
</div>
|
||||
<div class="comment-buttons">
|
||||
<button class="submit-btn" onclick="submitComment()">Submit</button>
|
||||
<button class="close-btn" onclick="exportFeedback()">⤓ Export</button>
|
||||
<button class="close-btn" onclick="document.getElementById('feedback-import').click()">⤒ Import</button>
|
||||
<button class="close-btn" onclick="toggleComments()">Close</button>
|
||||
<input type="file" id="feedback-import" accept="application/json" style="display:none" onchange="importFeedback(event)">
|
||||
</div>
|
||||
<div class="comments-list" id="comments-list"></div>
|
||||
</div>
|
||||
@@ -458,6 +461,7 @@
|
||||
<p>Work Package Suite v1.0 | Prime Controls | All files work offline with local browser storage</p>
|
||||
</footer>
|
||||
|
||||
<script src="feedback-config.js"></script>
|
||||
<script>
|
||||
// Reflect SOP completion on the tool cards.
|
||||
(function reflectSOPStatus(){
|
||||
@@ -512,12 +516,49 @@
|
||||
|
||||
allComments.push(comment);
|
||||
localStorage.setItem('wp_suite_index_comments', JSON.stringify(allComments));
|
||||
|
||||
if (window.postFeedback) window.postFeedback({ type: 'home_feedback', ...comment });
|
||||
|
||||
document.getElementById('comment-text').value = '';
|
||||
document.getElementById('commenter-name').value = '';
|
||||
loadComments();
|
||||
alert('Thank you! Feedback submitted.');
|
||||
}
|
||||
|
||||
function exportFeedback() {
|
||||
const saved = localStorage.getItem('wp_suite_index_comments');
|
||||
const data = saved ? JSON.parse(saved) : [];
|
||||
if (!data.length) { alert('No feedback to export yet.'); return; }
|
||||
const payload = { app: 'Work Package Suite', source: 'home', exportedAt: new Date().toISOString(), comments: data };
|
||||
const blob = new Blob([JSON.stringify(payload, null, 2)], { type: 'application/json' });
|
||||
const a = document.createElement('a');
|
||||
a.href = URL.createObjectURL(blob);
|
||||
a.download = 'wp-suite-feedback-home-' + new Date().toISOString().slice(0, 10) + '.json';
|
||||
a.click();
|
||||
setTimeout(() => URL.revokeObjectURL(a.href), 1000);
|
||||
}
|
||||
|
||||
function importFeedback(ev) {
|
||||
const f = ev.target.files && ev.target.files[0];
|
||||
if (!f) return;
|
||||
const r = new FileReader();
|
||||
r.onload = () => {
|
||||
try {
|
||||
const inc = JSON.parse(r.result);
|
||||
const incoming = Array.isArray(inc) ? inc : (inc.comments || []);
|
||||
if (!incoming.length) { alert('No feedback found in that file.'); return; }
|
||||
const saved = localStorage.getItem('wp_suite_index_comments');
|
||||
allComments = saved ? JSON.parse(saved) : [];
|
||||
const seen = new Set(allComments.map(c => c.timestamp + '|' + c.text));
|
||||
let added = 0;
|
||||
incoming.forEach(c => { const k = c.timestamp + '|' + c.text; if (c.text && !seen.has(k)) { allComments.push(c); seen.add(k); added++; } });
|
||||
localStorage.setItem('wp_suite_index_comments', JSON.stringify(allComments));
|
||||
loadComments();
|
||||
alert('Imported ' + added + ' feedback item' + (added === 1 ? '' : 's') + '.');
|
||||
} catch (e) { alert('Could not read that file.'); }
|
||||
ev.target.value = '';
|
||||
};
|
||||
r.readAsText(f);
|
||||
}
|
||||
|
||||
function loadComments() {
|
||||
const saved = localStorage.getItem('wp_suite_index_comments');
|
||||
|
||||
Reference in New Issue
Block a user