হামল: পাঠ্যের চারপাশে সাদা স্থান নিয়ন্ত্রণ করুন


97

আমার রেলস টেম্পলেটে, আমি এইচএএমএল ব্যবহার করে চূড়ান্ত এইচটিএমএল অর্জন করতে চাই:

I will first <a href="http://example.com">link somewhere</a>, then render this half of the sentence if a condition is met

টেমপ্লেটটি যে কাছে আসে:

I will first
= link_to 'link somewhere', 'http://example.com'
- if @condition
  , then render this half of the sentence if a condition is met

তবে আপনি লক্ষ করতে পারেন যে এটি লিঙ্ক এবং কমাতে একটি স্থান তৈরি করে। এই সাদা স্থানটি এড়াতে কোনও ব্যবহারিক উপায় আছে কি? আমি জানি ট্যাগগুলির চারপাশে সাদা স্থান সরাতে সিনট্যাক্স রয়েছে, তবে এই একই বাক্য গঠনটি কি কেবল পাঠ্যে প্রয়োগ করা যেতে পারে? এটি সম্পাদন করার জন্য অতিরিক্ত মার্কআপের সমাধানটি আমি সত্যিই পছন্দ করি না।

উত্তর:


211

হ্যামের সাহায্যকারীদের মাধ্যমে এটি করার একটি আরও ভাল উপায় চালু করা হয়েছে:

চারপাশে

= surround '(', ')' do
  %a{:href => "food"} chicken
উত্পাদন:
(<a href='food'>chicken</a>)

সফল :

click
= succeed '.' do
  %a{:href=>"thing"} here
উত্পাদন:
click
<a href='thing'>here</a>.

পূর্ববর্তী :

= precede '*' do
  %span.small Not really
উত্পাদন:
*<span class='small'>Not really</span>

মূল প্রশ্নের উত্তর দিতে:

I will first
= succeed ',' do
  = link_to 'link somewhere', 'http://example.com'
- if @condition
  then render this half of the sentence if a condition is met
উত্পাদন:
I will first
<a href="http://example.com">link somewhere</a>,
then render this half of the sentence if a condition is met

4
সুন্দর সময়, আমি হ্যামালের উত্স পড়ে সবেমাত্র এগুলি সম্পর্কে জানতে পেরেছি। স্পষ্টতই তারা কিছুক্ষণের জন্য রয়েছেন। বাজে যে তারা তাদের প্রধান রেফারেন্স পৃষ্ঠায় নথিভুক্ত করে না ...
গ্রুমিক্স

4
আপনি কি নিজের উত্তরটি প্রসারিত করতে পারেন এবং এই সাহায্যকারীদের (সম্ভবত succeedবিশেষত) ব্যবহার করে ওপির উদাহরণটি প্রকাশ করতে পারেন ? আমার কাছে এটি এখনও অ-সুস্পষ্ট এবং কিছুটা কুরুচিপূর্ণ
জন

16
আমার মনে হচ্ছে আমি কিছু মিস করছি (উপভোগের সংখ্যা গণনা করার সময়) তবে সফল রূপটি মূলটির সমতুল্য নয়, কারণ অনুবর্তী কমাটি এই কমাটির @condition == falseআগে স্থানের চেয়ে কুৎসিত হলেও রেন্ডার হবে ।
ন্যাশ সেতুর

4
আমি সাফল্যের চেয়ে পূর্বের ব্যবহার করে সঠিক ফলাফলটি অর্জন করতে সক্ষম হয়েছি। চিয়ার্স!
ক্যাম

40

আপনি হ্যামেলের "ট্রিম হোয়াইটস্পেস" সংশোধক ব্যবহার করে এটিও করতে পারেন। >একটি হামল ঘোষণার পরে সন্নিবেশ করা তার চারপাশে সাদা স্থান যুক্ত হতে বাধা দেবে:

I will first
%a{:href => 'http://example.com'}> link somewhere
- if @condition
  , then render this half of the sentence if a condition is met

উত্পাদন:

I will first<a href='http://example.com'>link somewhere</a>, then render this half of the sentence if a condition is met

তবে, আপনি দেখতে পাচ্ছেন যে >সংশোধনকারীটি শব্দটির সাথে লিঙ্কটির মধ্যে কাঙ্ক্ষিত স্থানটি সরিয়ে লিংকের সামনের সাদা অংশকে আলাদা করে ফেলবে। &nbsp;"আমি প্রথমে যাব" এর শেষে যুক্ত করা ছাড়া আমি এর আশেপাশে এখনও সুন্দর উপায় আবিষ্কার করতে পারি না:

I will first&nbsp;
%a{:href => 'http://example.com'}> link somewhere
- if @condition
  , then render this half of the sentence if a condition is met

যা অবশেষে প্রচুর হার্ড-টু-পঠিত ইন্টারপোলেশন ছাড়াই পছন্দসই আউটপুট উত্পাদন করে:

I will first&nbsp;<span><a href="http://example.com">link somewhere</a></span>, then render this half of the sentence if a condition is met

4
আমি এটি হ্যামল চিট শীট থেকে পেয়েছি তা উল্লেখ করতে ভুলে গেছি, যা খুব সহায়ক: cheat.errtheblog.com/s/haml
রায়ান ক্রিস্পিন হেনেইস

4
এটি ট্যাগগুলির সাথে কাজ করে তবে অভিব্যক্তি নয়; আপনার উদাহরণে আপনি তার অভিব্যক্তিটিকে একটি ট্যাগে পরিবর্তন করেছেন। আমার একই সমস্যা আছে এবং দুর্ভাগ্যক্রমে এটি কোনও সমাধান নয়।
টেলিফোন টেড

4
আমি মন্তব্য করব &nbsp;যার এটির একটি বিশেষ অর্থ রয়েছে, এটি কোনও সাধারণ শ্বেত স্থান নয় - এটি অ-ব্রেকিং হোয়াইটস্পেস, যার অর্থ শব্দ মোড়ানোর সময় ব্রাউজার শব্দকে &nbsp;একসাথে আবদ্ধ রাখার জন্য সমস্ত কিছু করবে এবং আপনি যা চান তা সবসময় হয় না।
অ্যান্ড্রু

4
অ্যান্ড্রু এর মন্তব্য ছাড়াও, কেবল একটি সরল সাদা স্থানের &#032;পরিবর্তে ব্যবহার করুন &nbsp;
ড্যানিয়েল এ আর ওয়ার্নার

12

ঠিক আছে, আমি সমাধান করছি এখানে সমাধান:

সহায়ক

def one_line(&block)
  haml_concat capture_haml(&block).gsub("\n", '').gsub('\\n', "\n")
end

দেখুন

I will first
- one_line do
  = link_to 'link somewhere', 'http://example.com'
  - if @condition
    , then render this half of the sentence
    \\n
    if a condition is met

এইভাবে, হোয়াইটস্পেসটি ডিফল্টরূপে বাদ দেওয়া হয়, তবে আমি এখনও এটি স্পষ্টভাবে একটি "\ n" লাইনের সাথে অন্তর্ভুক্ত করতে পারি। (এটির ডাবল ব্যাকস্ল্যাশ দরকার কারণ অন্যথায় এইচএএমএল এটিকে একটি আসল নিউলাইন হিসাবে ব্যাখ্যা করে)) সেখানে আরও ভাল বিকল্প আছে কিনা তা আমাকে জানান!


বিশ্বকে লক্ষ্য করুন: অবশেষে আমি তাদেরকে সাহায্যকারীদের কাছে নিয়ে এসেছি: পি
ম্যাচু

বিশ্বের আরেকটি নোট: এই দিন, আমি Groxx এর সমাধান ব্যবহার :)
Matchu

এটি পাঠ্য ফাইল জেনারেট করে এমন এইচএমএল করার সময় এটি খুব সহায়ক is আমার ক্ষেত্রে আমার একটি লাইন ছিল যেখানে এর একটি অংশ একটি "যদি" দ্বারা সিদ্ধান্ত নেওয়া হয়েছিল, যা আমি মাইসামিলিডিয়ার সমাধান দিয়ে সমাধান করতে পারি না কারণ এটি নতুন লাইনের হাত থেকে মুক্তি পায় না, এটি কেবল নিউলাইনের আগে কমাটি সরিয়ে দেয়। (যদিও আমি সম্মত হই যে মূল প্রশ্নের উত্তরের জন্য মাইস্মেলিডিয়া সবচেয়ে ভাল))
সিসয়েড

6

আপনি এইচএএমএল এর 'অ্যালিগেটর সিনট্যাক্স' ব্যবহার করতে পারেন

সাদা স্থান অপসারণ:> এবং <

এবং <আপনাকে ট্যাগের কাছে শ্বেত স্পেসে আরও নিয়ন্ত্রণ দেয়। > কোনও ট্যাগের চারপাশে থাকা সমস্ত সাদা স্থান সরিয়ে ফেলবে, যখন <ট্যাগের মধ্যে সঙ্গে সঙ্গে সমস্ত সাদা স্থান সরিয়ে ফেলবে। আপনি এগুলিকে হোয়াইটস্পেস খাওয়ার অ্যালিগেটর হিসাবে ভাবতে পারেন:> ট্যাগের বাইরে মুখের মুখ এবং বাইরের সাদা অংশটি খায় এবং <মুখের মুখের মধ্যে ট্যাগটি প্রবেশ করে এবং ভিতরে সাদা অংশ খায়। এগুলি ট্যাগ সংজ্ঞার শেষে, শ্রেণি, আইডি এবং বৈশিষ্ট্য ঘোষণার পরে কিন্তু / বা = আগে স্থাপন করা হয়।

http://haml.info/docs/yardoc/file.REFERENCE.html#Witespace_remov____


5

একবার আমি এই ধরণের জিনিস গ্রহণ করেছি যোগাযোগ স্ট্রিং অন্তরঙ্গকরণ ব্যবহার:

I will first #{link_to 'Link somewhere'}#{', then render this half of the sentence if a condition is met' if condition}

আমি আন্তঃবিচ্ছেদে আক্ষরিক স্ট্রিংয়ের চেহারা পছন্দ করি না, তবে আমি এটি পূর্বে ঘোষিত স্ট্রিংগুলি বা গতিশীলভাবে উত্পন্ন স্ট্রিংগুলির সাথে ব্যবহার করেছি।


এমএইচএম। এ জাতীয় জিনিসের প্রতি এটি আমার সাধারণ দৃষ্টিভঙ্গি তবে আমি সেখানে শর্তযুক্ত ব্যবহার করার কথা ভাবিনি। এটি লজ্জাজনক যে আমি যে প্রকৃত টেম্পলেটটি ব্যবহার করছিলাম তা বাক্যটির দ্বিতীয়ার্ধের চেয়ে কিছুটা জটিল হয়ে উঠল ... তবে এটি অবশ্যই মনে রাখা মূল্যবান - ধন্যবাদ!
ম্যাচু

5

নেতৃস্থানীয় স্থান রাখতে আপনি এটি করতে পারেন:

%a{:href => 'http://example.com'}>= ' link somewhere'

স্থানটি উদ্ধৃতিতে রয়েছে।


3

যদিও সঠিকভাবে নথিভুক্ত করা হয়নি, এটি কোনও ASCII স্পেস (& # 32;) এর সাথে মিলিত HAML হোয়াইটস্পেস সংরক্ষণ (>) ব্যবহার করে পরিষ্কারভাবে অর্জন করা হয়েছে, এবং সাহায্যকারীদের সাথে নয়:

%a{:href=>'/home'}> Home link
,&#32; 
%a{:href=>'/page'} Next link

এটি আপনি যা চান তা উত্পাদন করবে:

<a href='/home'>Anchor text</a>,&#32;
<a href='/page'>More text</a>

তবে আমি একমত, এইচএএমএলকে এটির আরও ভাল পদ্ধতি নিয়ে আসা দরকার, কারণ এটি পৃষ্ঠায় অপ্রয়োজনীয় ASCII অক্ষর যুক্ত করে (তবে এটি এখনও সাহায্যকারীদের ব্যবহারের চেয়ে বেশি দক্ষ)।


1

অ্যাঙ্গেল ব্র্যাককেট "হোয়াইটস্পেস মাঞ্চিং" সিনট্যাক্স রয়েছে, অন্যথায় এটির জন্য একটি সহায়ক পদ্ধতি লিখুন।


কীভাবে সেই কাজের জন্য একজন সহায়ক? মেহ, আমি কী নিয়ে আসতে পারি তা আমি দেখতে পাচ্ছি ...
ম্যাচু

হোয়াইটস্পেস মঞ্চিংয়ের ক্ষেত্রে, যদি কোনওরকম ট্যাগ সংজ্ঞায় না থাকে তবে সেই সিনট্যাক্সটি কীভাবে কাজ করা যায় তা আমি কাজ করতে পারি না। আমি কি কেবল এটি ভুল করছি, বা ট্যাগটি ছাড়া সিনট্যাক্সটি কাজ করে না?
ম্যাচু

1

আমি একই ধরণের সমস্যার মুখোমুখি হয়েছি এবং এটি পেয়েছি তাই আমি ভেবেছিলাম যে আমি আরও একটি সমাধান পোস্ট করব যার জন্য কোনও সহায়ক পদ্ধতির প্রয়োজন নেই। লিঙ্কটি মোড়ানোর জন্য এবং যদি বিবৃতিগুলিতে: রুবি ইন্টারপোলেশন # {Use ব্যবহার করুন:

I will first 
#{link_to 'link somewhere', 'http://example.com'}#{if true : ", then render this half of the sentence if a condition is met" end}

এটি 3.0.18 এ কাজ করে, এটি পূর্বের প্রকাশেও কাজ করতে পারে।


মঞ্জুর, হামল কন্টেন্টের জন্য ডিজাইন করা হয়নি। যদিও এটি বিষয়বস্তু নয় যা আমরা সেখানে আলোচনা করছি This এটি একটি টেম্পলেট এই ব্লগ পোস্টটির লেখক হ্যামলে একটি সম্পূর্ণ স্ট্যাটিক ওয়েবপৃষ্ঠা লেখার মতো জিনিসগুলিকে উল্লেখ করছেন যা আমি করছি না। আমি যে কোড স্নিপেট সরবরাহ করেছি তা পুরো .hamlফাইলের চেয়ে অনেক বেশি - এটিতে যে কোনও লিঙ্ক এবং কমা অন্তর্ভুক্ত রয়েছে তা সত্যই কোনওভাবেই কোনওভাবে নির্দেশ করে না।
ম্যাচু

4
আহ আমি দেখি. আমি নিজের উত্তরটি সম্পাদনা করেছি, সমাধানটি নিজেরাই দাঁড় করিয়ে রেখেছি।
বিস্কুট

যদিও এটি কাজ করতে পারে বলে আমি মনে করি এটি মার্কআপ পড়তে কঠোর করে তোলে। পরিবর্তে কেবল এইচএএমএল হোয়াইটস্পেস মডিফায়ার্স <এবং> ব্যবহার করুন যেমন অন্যান্য লোকেরা উল্লেখ করেছে যা আপনার এইচএএমএলকে পরিষ্কার এবং পাঠযোগ্য করে রাখে।
টডএইচ

1

তবুও অন্য একটি বিকল্প যা আমি অতীতে ব্যবহার করেছি:

- if @condition
  %span> , then some more text after the link.


0

আমি যে সমাধানটি কাজ করেছিলাম তা হ'ল:

I will first
= link_to 'link somewhere', 'http://example.com'
- if @condition
  = ", then render this half of the sentence if a condition is met"

আপনি ব্যবহার করতে পারেন =, যদিও =রেল কোডের ফলাফল আউটপুট করতে ব্যবহৃত হয়, তবে এখানে এটি উদ্দেশ্যটি সার্ভার করবে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.