-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patheditor.js
More file actions
138 lines (117 loc) · 4.95 KB
/
Copy patheditor.js
File metadata and controls
138 lines (117 loc) · 4.95 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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
Text file: editor.js
Latest content with line numbers:
// 編集モードの状態管理
let isEditMode = false;
let contentData = {};
// ページ読み込み時にローカルストレージからデータを復元
window.addEventListener('DOMContentLoaded', () => {
loadContent();
});
// 編集モード切替
document.getElementById('editToggle').addEventListener('click', function() {
const correctPassword = '1004'; // 編集モード用のパスワード
const correctUsername = 'YOUTA1004'; // 編集モード用のユーザー名
if (!isEditMode) { // 編集モードに入る時のみパスワードを要求
const enteredUsername = prompt('ユーザー名を入力してください:');
const enteredPassword = prompt('パスワードを入力してください:');
if (enteredUsername !== correctUsername || enteredPassword !== correctPassword) {
alert('ユーザー名またはパスワードが間違っています。');
return; // 編集モードに入らない
}
}
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';
document.getElementById('imageUrl').style.display = 'block';
document.getElementById('updateImageBtn').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';
document.getElementById('imageUrl').style.display = 'none';
document.getElementById('updateImageBtn').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);0
// 保存されたコンテンツを復元
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(); } }