-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
213 lines (189 loc) · 15.6 KB
/
Copy pathapp.js
File metadata and controls
213 lines (189 loc) · 15.6 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
/**
* Reader Master App - قارئ الكتب والمستندات المتكامل
*/
$(function(){
'use strict';
// ======================== DATA ========================
var books = [
{id:1, title:'الذكاء العاطفي', author:'دانيال جولمان', type:'pdf', pages:320, size:'2.4 MB'},
{id:2, title:'العادات السبع للناس الأكثر فعالية', author:'ستيفن كوفي', type:'epub', pages:280, size:'1.8 MB'},
{id:3, title:'قصة الفلسفة', author:'ول ديورانت', type:'pdf', pages:450, size:'3.6 MB'},
{id:4, title:'البؤساء', author:'فيكتور هوغو', type:'epub', pages:1200, size:'5.2 MB'},
{id:5, title:'1984', author:'جورج أورويل', type:'pdf', pages:305, size:'2.0 MB'},
{id:6, title:'مقدمة ابن خلدون', author:'ابن خلدون', type:'doc', pages:600, size:'3.8 MB'},
{id:7, title:'القراءة السريعة', author:'توني بوزان', type:'txt', pages:180, size:'0.4 MB'},
{id:8, title:'فن الحرب', author:'صن تزو', type:'pdf', pages:150, size:'1.2 MB'},
{id:9, title:'التفكير السريع والبطيء', author:'دانيال كانمان', type:'epub', pages:400, size:'2.8 MB'},
{id:10, title:'الخيميائي', author:'باولو كويلو', type:'txt', pages:200, size:'0.6 MB'},
{id:11, title:'سداسية', author:'أحمد خالد توفيق', type:'pdf', pages:380, size:'2.9 MB'},
{id:12, title:'كفاحي', author:'موسى صبري', type:'doc', pages:250, size:'1.5 MB'},
];
var sampleTexts = [
"كانت الشمس تغرب خلف الجبال البعيدة، والسماء تتلون بألوان الأرجوان والذهب. جلس الرجل العجوز على مقعد خشبي تحت شجرة الزيتون القديمة، يتأمل المشهد الخلاب أمامه. كانت الرياح تحمل معها رائحة التراب المبلل والياسمين.\n\nتذكر أيام شبابه البعيدة، حين كان يركض بين الحقول ويقطف الثمار الناضجة من الأشجار. مرت السنوات كطيف عابر، تاركةً وراءها ذكريات حلوة ومرة على حد سواء.\n\nفي تلك اللحظة، شعر بشيء من السلام الداخلي الذي طالما بحث عنه. ربما كان في هذا المكان، في هذا الوقت بالذات، يجد ما كان يفتقده طوال حياته.",
"العلم نور والجهل ظلام. مقولة نسمعها منذ نعومة أظفارنا، ولكن هل توقفنا يومًا لنتأمل معناها العميق؟ \n\nإن السعي وراء المعرفة هو ما يميز الإنسان عن غيره من المخلوقات. منذ فجر التاريخ، والإنسان يحاول فهم العالم من حوله، يسأل، يبحث، يجرب، وأحيانًا يفشل ثم يعاود الكرة.\n\nفي عصر المعلومات الذي نعيشه، أصبح الوصول إلى المعرفة أسهل من أي وقت مضى. ولكن مع هذا الكم الهائل من المعلومات، أصبح من الضروري أن نمتلك القدرة على التمييز بين المفيد والضار، بين الحقيقي والزائف.",
"في زاوية من زوايا المدينة القديمة، كان هناك مقهى صغير يجتمع فيه الأدباء والفنانون. جدرانه المغطاة بالصور القديمة واللوحات الزيتية تحكي قصصًا لا تُحصى.\n\nكان صاحب المقهى رجلاً طاعنًا في السن، يعرف كل زبون باسمه ويفضلته. يقدم القهوة ببطء وحب، وكأن كل فنجان هو عمل فني يُعد خصيصًا لمن سيشربه.\n\nهذا المقهى لم يكن مجرد مكان لشرب القهوة، بل كان ملتقى للأفكار والإبداع. هنا وُلدت قصائد وروايات، وهنا نُقشت أفكار غيرت وجه الثقافة في المدينة.",
];
var bookmarks = JSON.parse(localStorage.getItem('rm_bookmarks')||'[]');
var currentBook = null;
var currentPage = 1;
var currentBookText = '';
var readerThemeIdx = 0;
var readerFontSize = 16;
var filterType = 'all';
// ======================== THEME ========================
(function(){var t=localStorage.getItem('rm_theme')||'dark';$('html').attr('data-theme',t);$('#themeToggle i').attr('class','fas '+(t==='dark'?'fa-sun':'fa-moon'))})();
$('#themeToggle').on('click',function(){var c=$('html').attr('data-theme'),n=c==='dark'?'light':'dark';$('html').attr('data-theme',n);localStorage.setItem('rm_theme',n);$('#themeToggle i').attr('class','fas '+(n==='dark'?'fa-sun':'fa-moon'));showToast(n==='dark'?'🌙 الوضع الليلي':'☀️ الوضع النهاري')});
// ======================== TOAST ========================
function showToast(m,t){t=t||'success';var c={success:'linear-gradient(135deg,#6c5ce7,#a29bfe)',error:'linear-gradient(135deg,#ff6b6b,#ee5a24)',info:'linear-gradient(135deg,#0984e3,#074c9e)',warning:'linear-gradient(135deg,#fdcb6e,#e17055)'};var e=$('<div class="toast-msg" style="background:'+(c[t]||c.success)+'">'+m+'</div>');$('#toastContainer').append(e);setTimeout(function(){e.css({opacity:1,transform:'translateY(0)'})},50);setTimeout(function(){e.css({opacity:0,transform:'translateY(-20px)'});setTimeout(function(){e.remove()},300)},3500);}
// ======================== COUNTERS ========================
var counted=false;
function animateCounters(){if(counted)return;counted=true;$('.qs-num').each(function(){var t=$(this).data('target');if(!t)return;var c=0,s=Math.max(1,Math.ceil(t/70));var i=setInterval(function(){c+=s;if(c>=t){$(this).text(t.toLocaleString());clearInterval(i)}else{$(this).text(c.toLocaleString())}}.bind(this),25)})}
$(window).on('scroll',function(){
if($('.quick-stats').offset().top<$(window).scrollTop()+$(window).height()-50)animateCounters();
if($(this).scrollTop()>400)$('#scrollTopBtn').addClass('visible');else$('#scrollTopBtn').removeClass('visible');
});
setTimeout(animateCounters,500);
// ======================== LIBRARY ========================
function renderLibrary(filter){
filterType=filter||'all';
var grid=$('#libraryGrid');grid.empty();
var filtered=filterType==='all'?books:books.filter(function(b){return b.type===filterType});
if(!filtered.length){grid.html('<div class="col-12 text-center py-4"><p class="text-muted">لا توجد كتب في هذه الفئة</p></div>');return;}
filtered.forEach(function(b){
var icons={pdf:'fa-file-pdf',epub:'fa-file-lines',doc:'fa-file',txt:'fa-file-text'};
var colors={pdf:'pdf',epub:'epub',doc:'doc',txt:'txt'};
grid.append('<div class="col-lg-3 col-md-4 col-6"><div class="book-card" data-id="'+b.id+'"><div class="bc-icon '+colors[b.type]+'"><i class="fas '+icons[b.type]+'"></i></div><h5>'+b.title+'</h5><div class="bc-meta">'+b.author+' • '+b.pages+' صفحة</div><div class="bc-meta">'+b.size+'</div></div></div>');
});
$('.book-card').on('click',function(){openBook(parseInt($(this).data('id')))});
}
// Filter buttons
$(document).on('click','.filter-btn',function(){
$('.filter-btn').removeClass('active');$(this).addClass('active');
renderLibrary($(this).data('filter'));
});
// ======================== OPEN BOOK ========================
function openBook(id){
var book=books.find(function(b){return b.id===id});
if(!book)return;
currentBook=book;currentPage=1;
currentBookText=sampleTexts[id%sampleTexts.length];
$('#readerBookName').text('📖 '+book.title+' - '+book.author);
$('#readerPlaceholder').hide();$('#readerContent').show();
renderPage();
showToast('📖 تم فتح "'+book.title+'"','success');
$('html,body').animate({scrollTop:$('#reader').offset().top-80},500);
}
function renderPage(){
var text=currentBookText;
var totalPages=currentBook?currentBook.pages:1;
var lines=text.split('\n');
var display='';
lines.forEach(function(l){if(l.trim())display+='<p>'+l+'</p>';else display+='<br>';});
$('#readerText').html(display);
$('#readerPage').text('صفحة '+currentPage+' / '+totalPages);
var pct=Math.round((currentPage/totalPages)*100);
$('#readerProgressBar').css('width',pct+'%');
$('#readerProgressText').text(pct+'%');
$('#readerWords').text(text.split(' ').length+' كلمة');
$('#readerText').css('fontSize',readerFontSize+'px');
// Apply theme class
var themes=['','reader-night','reader-sepia','reader-green'];
$('#readerContent').removeClass('reader-night reader-sepia reader-green').addClass(themes[readerThemeIdx]);
}
// ======================== UPLOAD ========================
$('#uploadArea,#uploadBtn').on('click',function(e){
if($(e.target).is('#uploadBtn,#uploadArea i')){$('#fileInput').click();return;}
if(!$(e.target).is('input'))$('#fileInput').click();
});
$('#fileInput').on('change',function(){
var file=this.files[0];
if(!file)return;
var ext=file.name.split('.').pop().toLowerCase();
if(!['pdf','epub','doc','docx','txt','mobi'].includes(ext)){showToast('❌ صيغة غير مدعومة','error');return;}
var sizes=['2.4 MB','1.8 MB','3.6 MB','5.2 MB','0.4 MB'];
var types={'pdf':'pdf','epub':'epub','doc':'doc','docx':'doc','txt':'txt','mobi':'pdf'};
var newBook={id:Date.now(),title:file.name.replace(/\.[^.]+$/,''),author:'المستخدم',type:types[ext]||'pdf',pages:Math.floor(Math.random()*200)+50,size:sizes[Math.floor(Math.random()*sizes.length)]};
books.push(newBook);
renderLibrary(filterType);
showToast('✅ تم رفع "'+newBook.title+'" بنجاح','success');
this.value='';
});
// ======================== READER CONTROLS ========================
$('#readerFontInc').on('click',function(){readerFontSize=Math.min(readerFontSize+2,32);$('#readerText').css('fontSize',readerFontSize+'px');showToast('🔤 حجم الخط: '+readerFontSize);});
$('#readerFontDec').on('click',function(){readerFontSize=Math.max(readerFontSize-2,10);$('#readerText').css('fontSize',readerFontSize+'px');showToast('🔤 حجم الخط: '+readerFontSize);});
$('#readerTheme').on('click',function(){
readerThemeIdx=(readerThemeIdx+1)%4;
var names={'0':'فاتح','1':'ليلي','2':'سيبيا','3':'أخضر'};
var themes=['','reader-night','reader-sepia','reader-green'];
$('#readerContent').removeClass('reader-night reader-sepia reader-green').addClass(themes[readerThemeIdx]);
showToast('🎨 ثيم القراءة: '+names[readerThemeIdx]);
});
$('#readerBookmark').on('click',function(){
if(!currentBook){showToast('❌ لم تختر كتاباً بعد','error');return;}
var exists=bookmarks.some(function(b){return b.bookId===currentBook.id&&b.page===currentPage});
if(exists){showToast('🔖 الإشارة موجودة مسبقاً','warning');return;}
bookmarks.push({id:Date.now(),bookId:currentBook.id,bookTitle:currentBook.title,page:currentPage,time:new Date().toLocaleDateString('ar-EG')});
localStorage.setItem('rm_bookmarks',JSON.stringify(bookmarks));
renderBookmarks();
showToast('🔖 تمت إضافة الإشارة المرجعية!');
});
$('#readerSearch').on('click',function(){
var q=prompt('🔍 ابحث في النص:');
if(q&&q.trim()){
var html=$('#readerText').html();
var idx=html.indexOf(q);
if(idx>-1){
var highlighted=html.substring(0,idx)+'<mark style="background:#fdcb6e;padding:2px 4px;border-radius:4px">'+q+'</mark>'+html.substring(idx+q.length);
$('#readerText').html(highlighted);
showToast('🔍 تم العثور على "'+q+'"');
}else{showToast('❌ لم يتم العثور على "'+q+'"','error');}
}
});
$('#readerTTS').on('click',function(){
if(!currentBook){showToast('❌ لم تختر كتاباً بعد','error');return;}
var text=currentBookText.replace(/\n/g,'');
if('speechSynthesis' in window){
if(window.speechSynthesis.speaking){window.speechSynthesis.cancel();showToast('🔇 تم إيقاف القراءة');return;}
var utter=new SpeechSynthesisUtterance(text);
utter.lang='ar-SA';utter.rate=1;utter.pitch=1;
window.speechSynthesis.speak(utter);
showToast('🔊 جاري القراءة بصوت...');
utter.onend=function(){showToast('✅ انتهت القراءة');};
}else{showToast('❌ خاصية القراءة الصوتية غير مدعومة','error');}
});
$('#readerFullscreen').on('click',function(){
if(!document.fullscreenElement){document.documentElement.requestFullscreen();showToast('⛶ ملء الشاشة');}
else{document.exitFullscreen();showToast('⛶ خروج من ملء الشاشة');}
});
$('#readerPrev').on('click',function(){
if(currentBook&¤tPage>1){currentPage--;renderPage();}
});
$('#readerNext').on('click',function(){
if(currentBook&¤tPage<(currentBook.pages||1)){currentPage++;renderPage();}
});
// Keyboard nav
$(document).on('keydown',function(e){
if(e.key==='ArrowRight')$('#readerNext').click();
if(e.key==='ArrowLeft')$('#readerPrev').click();
});
// ======================== BOOKMARKS ========================
function renderBookmarks(){
var list=$('#bookmarksList');
if(!bookmarks.length){list.html('<p class="text-muted text-center">لا توجد إشارات مرجعية</p>');return;}
list.html(bookmarks.map(function(b,i){
return '<div class="bm-item"><div class="bm-info"><div class="bm-book">📖 '+b.bookTitle+'</div><div class="bm-page">📄 صفحة '+b.page+' • '+b.time+'</div></div><div><button class="bm-go" data-idx="'+i+'">اذهب</button><button class="bm-delete" data-idx="'+i+'"><i class="fas fa-times"></i></button></div></div>';
}).join(''));
$('.bm-delete').off('click').on('click',function(){var i=$(this).data('idx');bookmarks.splice(i,1);localStorage.setItem('rm_bookmarks',JSON.stringify(bookmarks));renderBookmarks();});
$('.bm-go').off('click').on('click',function(){var i=$(this).data('idx');var b=bookmarks[i];if(b){var found=books.find(function(x){return x.id===b.bookId});if(found){currentBook=found;currentPage=b.page;currentBookText=sampleTexts[found.id%sampleTexts.length];$('#readerBookName').text('📖 '+found.title);$('#readerPlaceholder').hide();$('#readerContent').show();renderPage();$('html,body').animate({scrollTop:$('#reader').offset().top-80},500);showToast('🔖 الانتقال إلى الإشارة');}}});
}
$('#clearBookmarks').on('click',function(){if(confirm('مسح كل الإشارات؟')){bookmarks=[];localStorage.setItem('rm_bookmarks','[]');renderBookmarks();showToast('🗑️ تم مسح الإشارات','warning');}});
renderBookmarks();
// ======================== NAVIGATION ========================
$('#scrollTopBtn').on('click',function(){$('html,body').animate({scrollTop:0},500)});
$('.nav-link,.footer-links a[href^="#"]').on('click',function(e){e.preventDefault();var t=$($(this).attr('href'));if(t.length)$('html,body').animate({scrollTop:t.offset().top-70},500);$('.nav-link').removeClass('active');$(this).addClass('active');if($('#mainNav').hasClass('show'))$('#mainNav').collapse('hide');});
$(window).on('scroll',function(){var sp=$(window).scrollTop()+150;$('section[id]').each(function(){var s=$(this);if(sp>=s.offset().top&&sp<s.offset().top+s.outerHeight()){$('.nav-link').removeClass('active');$('.nav-link[href="#'+s.attr('id')+'"]').addClass('active')}})});
// ======================== INIT ========================
renderLibrary();
console.log('📚 Reader Master App جاهز!');
console.log('✨ صُنع بواسطة ♥️ سامر السيد');
});