My Codeforces Journal هو امتداد لمتصفح Chrome يساعد مستخدمي Codeforces على تتبع المشكلات التي قاموا بحلها. بنقرة واحدة فقط، يقوم الامتداد بتخزين تفاصيل المشكلة الحالية في جدول بيانات Google الذي قام المستخدم بتوصيله. وهذا يجعل من السهل الاحتفاظ بسجل شخصي للمشكلات التي تم حلها بمرور الوقت.
هل تريد المساهمة في امتداد الكروم هذا؟ انتقل إلى هذا الريبو: My Codeforces Journal Development
التخزين بنقرة واحدة : احفظ مشكلة Codeforces الحالية التي قمت بحلها بنقرة واحدة.
تكامل جدول البيانات : قم بربط جدول بيانات Google الخاص بك لتخزين المشكلات وتنظيمها بالتنسيق الذي يناسبك.
تم التقاط تفاصيل المشكلة : يقوم الملحق بتخزين المعلومات الأساسية مثل عنوان URL للمشكلة واسم المشكلة وتقييم المشكلة.
شاهد مقطع الفيديو هذا على YouTube: كيف تبدأ مع My Codeforces Journal
قبل أن تتمكن من استخدام الإضافة، تأكد من أن لديك ما يلي:
جدول بيانات Google حيث سيتم تخزين المشاكل.
تم تثبيت ملحق Codeforces Journal Chrome وتفويضه للوصول إلى جدول البيانات الخاص بك.
تأكد من قراءة قسم الأخطاء الشائعة في نهاية هذا.
قم بتنزيل مجلد dist
من الرابط التالي: My Codeforces Journal
افتح Chrome وانتقل إلى chrome://extensions/
.
تمكين وضع المطور في الزاوية اليمنى العليا.
انقر فوق "تحميل غير مضغوط" وحدد المجلد الذي تم حفظ مجلد dist
فيه.
يجب أن يكون الامتداد الآن مرئيًا على صفحة الامتدادات الخاصة بك.
قم بتثبيت الامتداد على شريط الأدوات لسهولة الاستخدام.
قم بإنشاء جدول بيانات Google جديد.
قم بتسمية جدول البيانات كما تفضله.
انقر على قائمة "الإضافات"، ثم انقر على "البرنامج النصي للتطبيق".
انقر فوق "بدون عنوان" وأعد تسمية ملف البرنامج النصي للتطبيق هذا ليطابق اسم جدول البيانات الخاص بك.
انسخ الكود أدناه والصقه في محرر App Script، واحفظه بالضغط على المفاتيح cmd + S
/ ctrl + S
انقر فوق الزر "نشر" في الجزء العلوي الأيمن واختر "نشر جديد".
أضف وصفًا لاختيارك (يمكن أن يكون نفس اسم جدول البيانات الخاص بك).
اضبط "من لديه حق الوصول" على "أي شخص".
انقر فوق "نشر" وقم بتخويل البرنامج النصي للتطبيق،
عند النقر على "تفويض"، حدد حساب Google الذي استخدمته لإنشاء جدول البيانات، وبعد ذلك ستظهر لك رسالة "لم يتحقق Google من هذا التطبيق"
انقر فوق "خيارات متقدمة" في الأسفل، ثم
انقر فوق اسم مشروع AppScript الموضح، ثم انقر فوق "السماح".
أعد نشر مشروع AppScript فقط للتأكد من أن مشروعك قد تم ترخيصه بشكل صحيح
انسخ عنوان URL للبرنامج النصي، لأن هذا هو عنوان URL لـ AppScript، واحفظه لاستخدامه لاحقًا في الامتداد.
انقر مرة أخرى على زر "نشر".
حدد "إدارة عمليات النشر"، وبعد ذلك سيظهر نموذج مشروط
انقر على زر "تعديل" (أيقونة القلم)، والآن سيصبح زر "نشر" في الأسفل نشطًا
انقر على نشر
إذا كان هناك خطأ ما في التفويض، فسيظهر لك زر التفويض مرة أخرى، وإلا سيظهر لك نسخ عنوان URL للبرنامج النصي
وظيفة doPost(e) { حاول { var Sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; // تحليل بيانات الطلب الوارد var data; حاول { data = JSON.parse(e.postData.contents); } Catch (parseError) { return ContentService.createTextOutput('{"status":":"error"، "message": "Invalid JSON format."}').setMimeType(ContentService.MimeType.TEXT); } // تحقق مما إذا كان الطلب للتحقق من وجود مشكلة موجودة if (data.action === "checkProblem") { constproblemNameColumn =sheet .getRange("B2:B" +sheet.getLastRow()) .getValues() .مستوي()؛ constproblemExists =problemNameColumn.includes(data.problemName); return ContentService.createTextOutput(JSON.stringify({ الحالة: "success"، موجود:problemExists })).setMimeType(ContentService.MimeType.JSON); } // (منطق "التهيئة" و"addProblem" الموجود هنا) if (data.action === "initialize") { var headers = ["Rating"، "Problem"، "Status"، "Remarks"، " التاريخ"، "الوجبات الجاهزة"، "المواضيع"]؛ if (sheet.getLastRow() === 0 ||sheet.getRange("A1").getValue() === "") { // يظل منطق التهيئة كما هو Sheet.getRange("A1:G1"). دمج()؛ Sheet.getRange("A1").setValue("ورقة Codeforces"); Sheet.getRange("A1").setFontSize(13).setHorizontalAlignment("center").setBackground("#ffd966"); Sheet.getRange("A2:G2").setValues([headers]); sheet.getRange("A2:G2").setFontSize(12).setHorizontalAlignment("center").setBackground("#93c47d"); Sheet.setColumnWidth(1, 75); Sheet.setColumnWidth(2, 185); Sheet.setColumnWidth(3, 155); Sheet.setColumnWidth(4, 290); Sheet.setColumnWidth(5, 80); Sheet.setColumnWidth(6, 530); Sheet.setColumnWidth(7, 190); Sheet.getRange("A2:G1000").setVerticalAlignment("middle"); Sheet.getRange("C2:C1000").setWrap(true); Sheet.getRange("D2:D1000").setWrap(true); Sheet.getRange("F2:F1000").setWrap(true); Sheet.getRange("G2:G1000").setWrap(true); Sheet.getRange("A2:A1000").setHorizontalAlignment("center"); Sheet.getRange("B2:B1000").setHorizontalAlignment("center"); Sheet.getRange("E2:E1000").setHorizontalAlignment("center"); Sheet.getRange("G2:G1000").setHorizontalAlignment("center"); var newDate = new Date(); Sheet.getRange("E3:E1000").setNumberFormat("dd-mmm-yyyy"); Sheet.insertRowBefore(3); ورقة .getRange("A3:G3") .setValues([ [9999، "Problem9999Z"، "محلول"، "تعذر تنفيذ حدسي"، newDate، "لقد فهمت كيفية عمل العودية"، "Recursion، DP، Graph" ]، ])؛ return ContentService.createTextOutput( '{"status": "success"، "message": "تمت تهيئة الرؤوس بالتنسيق وعرض الأعمدة المخصصة والصفوف المضافة."}' ).setMimeType(ContentService.MimeType.TEXT); } else { return ContentService.createTextOutput('{"status": "success"، "message": "الرؤوس موجودة بالفعل."}').setMimeType(ContentService.MimeType.TEXT); } } else if (data.action === "addProblem") { حاول { const newRow = [data.problemRating, data.problemName, data.problemStatus, data.remarks, data.dateSolved, data.takeaways, data.problemTopics] ; const lastRow =sheet.getLastRow() + 1; Sheet.appendRow(newRow); constproblemNameCell =sheet.getRange(lastRow, 2); if (data.problemUrl) {problemNameCell.setValue(data.problemName).setFormula(`=HYPERLINK("${data.problemUrl}", "${data.problemName}")`); } return ContentService.createTextOutput('{"status": "success"، "message": "تمت إضافة بيانات المشكلة باستخدام الارتباط التشعبي."}').setMimeType( ContentService.MimeType.JSON ); } Catch (addError) { return ContentService.createTextOutput('{"status":":"error"، "message": "فشلت إضافة بيانات المشكلة."}').setMimeType( ContentService.MimeType.TEXT ); } } } Catch (error) { return ContentService.createTextOutput('{"status":":error"، "message": "' + error.message + '"}').setMimeType(ContentService.MimeType.TEXT); }}
افتح أي صفحة مشكلة في Codeforces.
بمجرد حل المشكلة، انقر فوق أيقونة ملحق My Codeforces Journal، ثم انقر فوق "إضافة مشكلة".
املأ النموذج، ثم اضغط على "إرسال".
سيتم حفظ تفاصيل المشكلة تلقائيًا في جدول البيانات المتصل.
يتطلب هذا الملحق الأذونات التالية:
علامة التبويب النشطة : للوصول إلى عنوان URL لعلامة التبويب الحالية عند حفظ المشكلة.
التخزين : لتخزين تفاصيل جدول البيانات المتصل.
البرمجة النصية : لتشغيل جافا سكريبت
السبب : يحدث هذا عادةً إذا تم إرسال معرف Codeforces غير الموجود.
الحل : تحقق مرة أخرى من المعرف وتأكد من صحته.
السبب : يعني هذا الخطأ عمومًا أن عنوان URL لـ AppScript المقدم غير صحيح.
الحل : تحقق من عنوان URL واستخدم عنوان URL الصحيح لـ AppScript.
نصيحة إضافية : قد يظهر هذا الخطأ أيضًا إذا لم تتم الموافقة على مشروع AppScript الخاص بك بشكل صحيح. لضمان الترخيص المناسب:
أثناء إعداد جدول البيانات، قم بنشر مشروع AppScript الخاص بك مرتين؛ سيساعد النشر الثاني في التأكد من أن مشروع AppScript مرخص بالكامل.
السبب : يحدث هذا إذا لم يتم حل المشكلة التي تحاول إضافتها خلال آخر 40 عملية إرسال قمت بها على Codeforces.
الحل : تأكد من أنك قمت بحل المشكلة مؤخرًا. إذا لم يكن الأمر كذلك، فجرّب ذلك على Codeforces قبل إضافته إلى جدول البيانات.