pipkin
(Thijs)
10 أغسطس 2024، 7:22م
1
28 إعجابًا
Festinger
(Festinger )
10 أغسطس 2024، 8:51م
2
إضافة رائعة جدًا إلى التحرير الأساسي لـ Discourse. شكراً لك على إنشائها.
5 إعجابات
pfaffman
(Jay Pfaffman)
10 أغسطس 2024، 10:39م
3
يبدو أنه شيء يجب الترحيب به، على الرغم من أنه ليس لدي رأي في ذلك.
6 إعجابات
Don
11 أغسطس 2024، 3:59ص
5
7 إعجابات
Jagster
(Jakke Lehtonen)
11 أغسطس 2024، 6:51ص
6
لا يعمل بشكل جيد على جهاز iPad، لأنه يختار النص بأكمله عند الكتابة. يبدو غريباً جداً.
3 إعجابات
pipkin
(Thijs)
11 أغسطس 2024، 10:15ص
7
شكراً لك، وأنا أتفق معك. سألقي نظرة عليه بمجرد أن يتوفر لدي الوقت. نرحب بك دائماً لتقديم طلب سحب.
هذا هو السلوك المقصود حالياً، لكنني بالطبع منفتح على أفكار أفضل. ما نوع التلميح المرئي الذي توصي به؟
إعجابَين (2)
Jagster
(Jakke Lehtonen)
11 أغسطس 2024، 10:52ص
8
كان سيظهر كنص منسوخ عند تحديد شيء ما بالفعل. ثم سيكون هناك إجراء ورد فعل.
sam
(Sam Saffron)
12 أغسطس 2024، 4:53ص
10
فضولي، لماذا هذا مكون إضافي مقابل مكون سمة؟ لا يمكن إنشاء كل هذه الرموز من جانب العميل؟
عمل رائع بالمناسبة، أحب أنك تعتمد على أرقام الأسطر التي يولدها محرك الترميز.
4 إعجابات
pipkin
(Thijs)
12 أغسطس 2024، 8:08ص
11
شكراً لك سام.
كما قد تكون لاحظت، فإن سمات data-ln موجودة في HTML المُعالج الذي تم إنشاؤه وتخزينه على الخادم أيضًا.
لقد طبقت هذا السلوك، حتى أتمكن لاحقًا من توسيع المكون الإضافي للسماح بالإدراج/التحرير الموثوق به للأجزاء من صفحة عرض الموضوع، وهو ما يعادل زر التحرير المعروض أدناه (ولكنه أكثر قوة قليلاً):
لقد مر عام منذ أن كتبته، ولكن إذا كنت أتذكر بشكل صحيح، لهذا الغرض في plugin.rb السطر
register_asset "vendor/javascripts/markdown-it-line-numbers.js", :vendored_pretty_text
مطلوب للتأكد من أن امتداد MarkdownIt يعمل أيضًا من جانب الخادم عند معالجة HTML.
لم أجد الوقت اللازم لتطبيق ميزة التحرير الموسعة، لذلك إذا تم إسقاط هذا المتطلب، فيمكن تحويله إلى مكون على ما أعتقد.
5 إعجابات
pipkin
(Thijs)
12 أغسطس 2024، 2:28م
12
@sam أنا أبحث في تحويله إلى مكون سمة، لكنني غير قادر على معرفة كيفية تنفيذ هذا الرمز في سياق مكون إضافي لـ markdownit:
// javascripts/lib/discourse-markdown/initialize_markdownit_plugin.js:
export function setup(helper) {
helper.registerPlugin(markdownitLineNumbers); // markdownitLineNumbers متاح بالفعل
}
لدي شك في أن السطر في المكون الإضافي الذي كتبته سابقًا يرش بعض السحر من جانب العميل أيضًا:
# plugin.rb
register_asset "vendor/javascripts/markdown-it-line-numbers.js", :vendored_pretty_text`
هل لديك أي فكرة؟
sam
(Sam Saffron)
12 أغسطس 2024، 11:50م
13
لست متأكدًا، سأتواصل مع الفريق.
إعجابَين (2)
أعتقد أن هذا يرجع إلى أنه مقيد حاليًا بنطاق الإضافات فقط. سيعمل بدون هذا الفحص. (تم تقديم هذا الرمز في هذا الالتزام )
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/static/markdown-it/features.js#L5
أردت دمج أرقام الأسطر لمكون آخر، لكنني لم أرغب في إنشاء إضافة، لذلك تراجعت عن ذلك. سيكون رائعًا جدًا إذا كان يمكن دعم ميزات markdown في مكونات الثيم!
على صعيد آخر، ميزة رائعة اقترحتها هنا – لطيفة جدًا.
4 إعجابات
pipkin
(Thijs)
13 أغسطس 2024، 1:00م
16
آه نعم، هذا يوضح الأمر.
بالنظر إلى هذا الكود، قد يكون من الممكن حقن مكون الماركداون يدويًا من مكون السمة في وقت التشغيل، ولكن هذا سيكون حلاً تقنيًا للغاية. سأنتظر قرار الفريق الأساسي قبل محاولة تنفيذه.
4 إعجابات
david
(David Taylor)
13 أغسطس 2024، 2:00م
17
تعمل خطوط أنابيب ماركداون الخاصة بنا على كل من العميل (للمعاينة) وعلى الخادم (لعرض HTML مسبقًا للمنشورات). لهذا السبب تم تصميمه للمكونات الإضافية فقط - فهي الوحيدة التي يمكنها حقن التعليمات البرمجية من جانب الخادم.
الآن… هذه الحالة غير عادية للغاية، نظرًا لأن الامتداد مطلوب فقط في المنشئ، وليس على الخادم. لذلك، يجب أن يكون القيام بذلك من مكون سمة ممكنًا.
هل كانت لديك استراتيجية معينة في ذهنك لهذا؟
5 إعجابات
pfaffman
(Jay Pfaffman)
13 أغسطس 2024، 5:17م
18
يبدو هذا شيئًا سيكون له جاذبية واسعة. قد يكون من الصعب العثور على مكانك في منشور طويل. هل يمكن أن يكون #pr-welcome؟
5 إعجابات
pipkin
(Thijs)
13 أغسطس 2024، 6:19م
19
تجاوز هذه الوظيفة في قاعدة التعليمات البرمجية الأصلية:
// discourse/app/assets/javascripts/discourse/app/components/d-editor.js
async cachedCookAsync(text, options) {
this._cachedCookFunction ||= await generateCookFunction(options || {});
return await this._cachedCookFunction(text);
}
باستخدام مُهيئ لمكون سمة:
export default {
name: "d-editor-cached-cook-async-override",
initialize() {
const dEditor = require("discourse/components/d-editor").default;
dEditor.reopen({
cachedCookAsync(text, options) {
// تكرار التعليمات البرمجية هنا لإرجاع وظيفة طهي معدلة
},
});
},
};
سيعني ذلك قدرًا كبيرًا من تكرار التعليمات البرمجية، إذا كان سيعمل على الإطلاق. قذر، قذر.
4 إعجابات
david
(David Taylor)
13 أغسطس 2024، 6:51م
20
حسنًا، أتفق - بالتأكيد ليس مثاليًا. قد لا يكون تكرار الكود ممكنًا حتى، لأن وحدات markdown-it يتم تحميلها بشكل غير متزامن، وليست جزءًا من نظام وحدات amd الذي تتمتع السمات/الإضافات بالوصول المباشر إليه.
بناء نظام للسماح للسمات بالمساهمة في تحويلات md من جانب العميل فقط يمكن أن يكون رائعًا، على الرغم من أن حالات الاستخدام محدودة للغاية. في 99٪ من الحالات، يريد الناس أن يتم تطبيق تحويلات md من جانب الخادم أيضًا.
لذلك أعتقد، في الوقت الحالي، أن الالتزام بإضافة هو على الأرجح أفضل نهج.
5 إعجابات
sam
(Sam Saffron)
14 أغسطس 2024، 5:56ص
21
أتساءل عما إذا كان يجب تطبيق هذا النوع من الزخرفة بغض النظر؟
مثال:
<p data-source-line="0">.....</p>
ستساعد سمة البيانات الإضافية الكثير من التطبيقات الداخلية لدينا، مثل، على سبيل المثال، عدم إظهار الإكمال التلقائي عندما تكون داخل كتلة رمز. كما أن الاقتباس والتحرير السريع يصبحان أسهل بكثير.
التنفيذ البسيط لا يحمل أي وزن إضافي تقريبًا، ولكنه يسمح لنا بحذف كومة من الشيفرة المصدرية.
/*! markdown-it-inject-linenumbers 0.3.0 https://github.com//digitalmoksha/markdown-it-inject-linenumbers @license MIT */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.markdownitInjectLinenumbers = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
'use strict';
module.exports = function inject_linenumbers_plugin(md) {
//
// Inject line numbers for sync scroll. Notes:
//
// - We track only headings and paragraphs, at any level.
// - TODO Footnotes content causes jumps. Level limit filters it automatically.
function injectLineNumbers(tokens, idx, options, env, slf) {
var line;
// if (tokens[idx].map && tokens[idx].level === 0) {
if (tokens[idx].map) {
line = tokens[idx].map[0];
tokens[idx].attrJoin('class', 'source-line');
tokens[idx].attrSet('data-source-line', String(line));
}
return slf.renderToken(tokens, idx, options, env, slf);
}
This file has been truncated. show original
7 إعجابات
david
(David Taylor)
14 أغسطس 2024، 10:26ص
22
كان لدينا هذا في الماضي (خلف علامة)، ولكن تم إزالته في هذا الالتزام . وجدت هذه لقطة الشاشة من بعض المناقشات الداخلية حول هذه الميزة:
أي أن مشكلة الأداء كانت مع رمز مزامنة التمرير، وليس حقن أرقام الأسطر
لذا نعم، ليس لدي اعتراض على إضافة حقن مصدر البيانات في النواة، طالما أنه يضاف فقط في المعاينة. هل أنت مهتم بتقديم طلب سحب لهذا @pipkin ؟
4 إعجابات
pipkin
(Thijs)
14 أغسطس 2024، 1:32م
23
بكل سرور! يسعدني أن أتمكن من رد الجميل لكم.
6 إعجابات