-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patheditor.js
More file actions
120 lines (103 loc) · 3.81 KB
/
Copy patheditor.js
File metadata and controls
120 lines (103 loc) · 3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// 編集モードの状態管理
let isEditMode = false;
let contentData = {};
// ページ読み込み時にローカルストレージからデータを復元
window.addEventListener('DOMContentLoaded', () => {
loadContent();
});
// 編集モード切替
document.getElementById('editToggle').addEventListener('click', function() {
isEditMode = !isEditMode;
const editables = document.querySelectorAll('.editable');
const saveBtn = document.getElementById('saveBtn');
const imageEdit = document.querySelector('.image-edit');
if (isEditMode) {
// 編集モードON
this.textContent = '👁️ プレビュー';
this.classList.add('active');
saveBtn.style.display = 'block';
if (imageEdit) imageEdit.style.display = 'block';
editables.forEach(el => {
el.setAttribute('contenteditable', 'true');
});
} else {
// 編集モードOFF
this.textContent = '✏️ 編集モード';
this.classList.remove('active');
saveBtn.style.display = 'none';
if (imageEdit) imageEdit.style.display = 'none';
editables.forEach(el => {
el.setAttribute('contenteditable', 'false');
});
}
});
// 保存ボタン
document.getElementById('saveBtn').addEventListener('click', function() {
saveContent();
showMessage('保存しました!ブラウザのローカルストレージに保存されています。', 'success');
});
// コンテンツを保存
function saveContent() {
const editables = document.querySelectorAll('.editable');
editables.forEach(el => {
const key = el.getAttribute('data-key');
if (key) {
contentData[key] = el.textContent || el.innerText;
}
});
// プロフィール画像のURLも保存
const profileImg = document.getElementById('profileImg');
if (profileImg) {
contentData['profileImage'] = profileImg.src;
}
// ローカルストレージに保存
localStorage.setItem('portfolioContent', JSON.stringify(contentData));
}
// コンテンツを読み込み
function loadContent() {
const saved = localStorage.getItem('portfolioContent');
if (saved) {
contentData = JSON.parse(saved);
// 保存されたコンテンツを復元
Object.keys(contentData).forEach(key => {
if (key === 'profileImage') {
const profileImg = document.getElementById('profileImg');
if (profileImg && contentData[key]) {
profileImg.src = contentData[key];
}
} else {
const el = document.querySelector(`[data-key="${key}"]`);
if (el) {
el.textContent = contentData[key];
}
}
});
}
}
// プロフィール画像を更新
function updateImage() {
const imageUrl = document.getElementById('imageUrl').value;
const profileImg = document.getElementById('profileImg');
if (imageUrl && profileImg) {
profileImg.src = imageUrl;
showMessage('画像を更新しました!「保存」ボタンを押して保存してください。', 'success');
} else {
showMessage('画像URLを入力してください。', 'error');
}
}
// メッセージを表示
function showMessage(text, type) {
const messageEl = document.getElementById('saveMessage');
messageEl.textContent = text;
messageEl.className = `save-message ${type} show`;
setTimeout(() => {
messageEl.classList.remove('show');
}, 3000);
}
// データをリセット(デバッグ用)
function resetContent() {
if (confirm('すべての変更をリセットしますか?')) {
localStorage.removeItem('portfolioContent');
location.reload();
}
}