كيفية تجاوز وظيفة buildQuote؟

مرحباً!

أود محاولة تعديل دالة buildQuote لإضافة سطر جديد قبل وسم [quote] الافتتاحي.

ببساطة، تعديل هذا:

  return `[quote="${params.join(", ")}"]\n${contents.trim()}\n[/quote]\n\n`;

إلى هذا:

  return `\n[quote="${params.join(", ")}"]\n${contents.trim()}\n[/quote]\n\n`;

هل من الممكن فعل ذلك باستخدام مكون السمة؟ كيف يمكنني تجاوز هذه الدالة؟ :smiley:

لقد تمكنت من تحقيق ذلك، ولكن هل توجد حل أكثر أناقة؟

<script type="text/discourse-plugin" version="0.8.23">
    function buildQuote(post, contents, opts = {}) {
      if (!post || !contents) {
        return "";
      }
    
      const params = [
        opts.username || post.username,
        `post:${opts.post || post.post_number}`,
        `topic:${opts.topic || post.topic_id}`
      ];
    
      if (opts.full) params.push("full:true");
    
      return `\n[quote="${params.join(", ")}"]\n${contents.trim()}\n[/quote]\n\n`;
    }
    api.modifyClass('controller:composer', {
        actions: {
            importQuote(toolbarEvent) {
              const postStream = this.get("topic.postStream");
              let postId = this.get("model.post.id");
        
              // إذا لم يكن هناك منشور حالي، استخدم معرف المنشور الأول من التدفق
              if (!postId && postStream) {
                postId = postStream.get("stream.firstObject");
              }
        
              // إذا كنا نقوم بتحرير منشور، فاسترجع الرد عند استيراد اقتباس
              if (this.get("model.editingPost")) {
                const replyToPostNumber = this.get("model.post.reply_to_post_number");
                if (replyToPostNumber) {
                  const replyPost = postStream.posts.findBy(
                    "post_number",
                    replyToPostNumber
                  );
        
                  if (replyPost) {
                    postId = replyPost.id;
                  }
                }
              }
        
              if (postId) {
                this.set("model.loading", true);
        
                return this.store.find("post", postId).then(post => {
                  const quote = buildQuote(post, post.raw, {
                    full: true
                  });
        
                  toolbarEvent.addText(quote);
                  this.set("model.loading", false);
                });
              }
            }
        }
    });
</script>
إعجابَين (2)

عذرًا على إحياء موضوع قديم، ولكن هل لا يزال هذا يعمل لديك/هل اضطررت إلى تحديثه على الإطلاق؟ لقد كنت أحاول جعل هذا يعمل ولا يمكنني جعله يعمل على الإطلاق، ولكنني كنت أواجه وقتًا عصيبًا مع أي شيء يتعلق بـ modifyClass.

لقد جربته للتو، وما زال يعمل :+1:

لقد قمت بنسخه ولصقه حرفياً في القالب الخاص بي، وعمل دون أي تعديل.

إعجاب واحد (1)

انظر api.modifyClass sometimes(!) not working - #12 by RGJ

لست متأكدًا مما إذا كان هذا قد تم حله؟

انظر أيضًا ما يتعلق بهذا ولكنه مختلف: Issues overriding getters in a controller (3.0.0)

إعجابَين (2)

شكراً @merefield و @Canapin. لقد كنت أحاول تعلم واجهة برمجة تطبيقات إضافات Discourse وأعبث بما أشعر أنه يجب أن تكون أشياء بسيطة مثل هذه ولكن modifyClass غير متسق عندما يعمل/لا يعمل. لدي مكون سمة صغير (الذي ذكرته @merefield) حيث تعمل استدعاءات modifyClass مرتين ولكن الثالثة لا تعمل، وهو أمر محبط للغاية لمحاولة معرفة ما إذا كنت قد ارتكبت خطأً أم أن المشكلة فقط في modifyClass.
عذرًا على الخروج عن الموضوع في موضوعك وشكرًا على الرد السريع @Canapin

تحديث:

إعجاب واحد (1)

لا تقلق، لا أعرف ما الذي يعنيه الخروج عن الموضوع ولكننا هنا للمساعدة!

إعجاب واحد (1)

تم إغلاق هذا الموضوع تلقائيًا بعد 30 يومًا من آخر رد. لم تعد الردود الجديدة مسموح بها.