๐ค๐ป๐๐ ๐บ๐๐๐ ๐ณ๐๐๐ ๐๐ ๐บ๐ ๐ฏ๐๐๐ ๐ฐ๐ ๐ป๐๐๐๐๐ ๐ด๐ ๐ญ๐๐๐ ๐ป๐๐๐๐๐ ๐๐๐ ๐ช๐๐๐๐๐๐๐๐ ๐ป๐๐๐๐. ๐ญ๐๐ ๐ ๐ฉ๐๐๐๐ ๐บ๐๐๐๐๐ ๐จ๐๐ ๐ฐ ๐บ๐๐ ๐พ๐๐ ๐ณ๐๐๐๐

๐ค"๐จ๐ป ๐ด๐ ๐บ๐ป๐ฌ๐ท๐บ๐ฐ๐บ๐ป๐ฌ๐นโ๐บ ๐๐๐-๐ฎ๐ผ๐ฌ๐บ๐ป ๐พ๐ฌ๐ซ๐ซ๐ฐ๐ต๐ฎ, ๐ป๐ฏ๐ฌ ๐บ๐จ๐ด๐ฌ ๐ญ๐จ๐ด๐ฐ๐ณ๐ ๐พ๐ฏ๐ถ ๐ป๐ฏ๐น๐ฌ๐พ ๐ด๐ฌ ๐ถ๐ผ๐ป ๐จ๐ป ๐บ๐ฐ๐ฟ๐ป๐ฌ๐ฌ๐ต ๐ณ๐ฌ๐ป ๐ด๐ฌ ๐บ๐ป๐จ๐ต๐ซ ๐ฐ๐ต ๐ป๐ฏ๐ฌ ๐ฉ๐จ๐ช๐ฒ ๐ถ๐ญ ๐ป๐ฏ๐ฌ ๐ฉ๐จ๐ณ๐ณ๐น๐ถ๐ถ๐ด ๐ณ๐ฐ๐ฒ๐ฌ ๐ฐ ๐พ๐จ๐บ๐ตโ๐ป ๐ฌ๐ฝ๐ฌ๐ต ๐ฉ๐ณ๐ถ๐ถ๐ซโ๐ผ๐ต๐ป๐ฐ๐ณ ๐ป๐ฏ๐ฌ ๐ฉ๐น๐ฐ๐ซ๐ฌ ๐บ๐ป๐ถ๐น๐ด๐ฌ๐ซ ๐จ๐ช๐น๐ถ๐บ๐บ ๐ป๐ฏ๐ฌ ๐ญ๐ณ๐ถ๐ถ๐น, ๐ด๐ถ๐ช๐ฒ๐ฌ๐ซ ๐ด๐ ๐ซ๐น๐ฌ๐บ๐บ, ๐บ๐ณ๐จ๐ท๐ท๐ฌ๐ซ ๐ด๐ฌ ๐ฏ๐จ๐น๐ซ ๐ฌ๐ต๐ถ๐ผ๐ฎ๐ฏ ๐ป๐ถ ๐ป๐ผ๐น๐ต ๐ฏ๐ฌ๐จ๐ซ๐บ, ๐จ๐ต๐ซ ๐ช๐จ๐ณ๐ณ๐ฌ๐ซ ๐ด๐ฌ ๐ฎ๐จ๐น๐ฉ๐จ๐ฎ๐ฌ ๐พ๐ฏ๐ฐ๐ณ๐ฌ ๐ฏ๐จ๐ณ๐ญ ๐ป๐ฏ๐ฌ ๐น๐ถ๐ถ๐ด ๐ณ๐จ๐ผ๐ฎ๐ฏ๐ฌ๐ซ. ๐ฐ ๐ซ๐ฐ๐ซ๐ตโ๐ป ๐ซ๐ฌ๐ญ๐ฌ๐ต๐ซ ๐ด๐๐บ๐ฌ๐ณ๐ญ. ๐ฐ ๐ซ๐ฐ๐ซ๐ตโ๐ป ๐ฌ๐ฝ๐ฌ๐ต ๐ป๐ถ๐ผ๐ช๐ฏ ๐ด๐ ๐ช๐ฏ๐ฌ๐ฌ๐ฒ. ๐ฐ ๐ฑ๐ผ๐บ๐ป ๐บ๐ป๐ถ๐ถ๐ซ ๐ป๐ฏ๐ฌ๐น๐ฌ ๐จ๐ต๐ซ ๐ณ๐ฌ๐ป ๐ฏ๐ฌ๐น ๐ฉ๐ฌ๐ณ๐ฐ๐ฌ๐ฝ๐ฌ ๐ฐ ๐พ๐จ๐บ ๐บ๐ป๐ฐ๐ณ๐ณ ๐ป๐ฏ๐ฌ ๐ฏ๐ฌ๐ณ๐ท๐ณ๐ฌ๐บ๐บ ๐ฎ๐ฐ๐น๐ณ ๐ป๐ฏ๐ฌ๐โ๐ซ ๐ซ๐ฐ๐บ๐ช๐จ๐น๐ซ๐ฌ๐ซ ๐๐ฌ๐จ๐น๐บ ๐จ๐ฎ๐ถ... ๐น๐ฐ๐ฎ๐ฏ๐ป ๐ผ๐ท ๐ผ๐ต๐ป๐ฐ๐ณ ๐ฏ๐ฌ๐น ๐ญ๐ฐ๐จ๐ต๐ช๐ฌฬ ๐บ๐ป๐ฌ๐ท๐ท๐ฌ๐ซ ๐ฉ๐ฌ๐ป๐พ๐ฌ๐ฌ๐ต ๐ผ๐บ, ๐บ๐ป๐จ๐น๐ฌ๐ซ ๐จ๐ป ๐ด๐ฌ ๐ณ๐ฐ๐ฒ๐ฌ ๐ฏ๐ฌโ๐ซ ๐ฑ๐ผ๐บ๐ป ๐น๐ฌ๐ช๐ถ๐ฎ๐ต๐ฐ๐๐ฌ๐ซ ๐จ ๐ต๐จ๐ด๐ฌ ๐ป๐ฏ๐จ๐ป ๐ช๐ถ๐ผ๐ณ๐ซ ๐ซ๐ฌ๐บ๐ป๐น๐ถ๐ ๐ป๐ฏ๐ฌ ๐ฌ๐ต๐ป๐ฐ๐น๐ฌ ๐ต๐ฐ๐ฎ๐ฏ๐ป, ๐จ๐ต๐ซ ๐จ๐บ๐ฒ๐ฌ๐ซ ๐ป๐ฏ๐ฌ ๐ถ๐ต๐ฌ ๐ธ๐ผ๐ฌ๐บ๐ป๐ฐ๐ถ๐ต ๐ป๐ฏ๐จ๐ป ๐ด๐จ๐ซ๐ฌ ๐ป๐ฏ๐ฌ ๐พ๐ฏ๐ถ๐ณ๐ฌ ๐พ๐ฌ๐ซ๐ซ๐ฐ๐ต๐ฎ ๐ฎ๐ถ ๐ซ๐ฌ๐จ๐ซ ๐บ๐ฐ๐ณ๐ฌ๐ต๐ป: โ๐ซ๐ถ ๐๐ถ๐ผ ๐ฌ๐ฝ๐ฌ๐ต ๐ฒ๐ต๐ถ๐พ ๐พ๐ฏ๐ถ ๐บ๐ฏ๐ฌ ๐ฐ๐บ?
The slap landed so hard it turned my face toward the champagne tower.
For a brief second all I saw was lightโgold light from the chandeliers, silver light from the mirrored wall behind the bar, the glitter of five hundred glasses raised in celebration. My cheek burned. The skin just below my eye throbbed in a hot, immediate pulse. Somewhere a woman gasped. Somewhere else someone laughed.
Then the laughter spread.
Not everyone laughed. That would be too easy, too cartoonishly cruel. But enough people did. Enough people smiled behind their drinks or leaned toward one another with delighted, hungry expressions, the kind guests wear when a wedding suddenly turns into better entertainment than the band. The hall, which a moment earlier had been full of music and candlelight and polished speeches and expensive perfume, sharpened into something mean.
My stepsister stood in front of me with her hand still half raised, as if even she was startled by how good it had felt to humiliate me in public.
โYou donโt belong here,โ she said.
Her voice carried.
It always had.
Some people are born with soft voices and some cultivate them because softness makes other people come closer. Bianca had never needed either. She had a voice designed for rooms to rearrange themselves around it. At thirteen, she could cry on command. At seventeen, she could make adults believe nearly anything if she widened her eyes at the right moment. At thirty, standing in a gown that probably cost more than my first apartmentโs annual rent, she still had the same gift sheโd had all her life: the ability to turn her own ugliness into someone elseโs shame.
I did not touch my face.
I did not step back.
I did not say a word.
That was the part she hated most.
If I had shouted, she would have known the script. If I had cried, she would have won in a way she understood. But silence has a way of exposing the naked shape of a thing, and Bianca had always despised being seen clearly.
Around us, the ballroom had begun to slow. Conversations stumbled. Heads turned. The string quartet at the far side of the room faltered into an awkward half-finished phrase and then stopped entirely. Somewhere near the dance floor, a waiter lowered a tray because even hired staff know when they are suddenly standing inside a story theyโll tell later.
Bianca took one more step closer.
Her veil trembled slightly behind her shoulders. Diamonds flashed at her ears. Her makeup was immaculate, but there was color rising too fast under her foundation now, anger fighting with champagne and panic.
โLook at you,โ she said, louder this time. โYou really thought you could stand here with people like us?โ
The words triggered another ripple of amusement from the guests nearest us.
People always laugh too easily when they think someone has already been judged for them.
I stood there with my glass of water still in one hand, untouched and sweating against my palm, and I thought, not for the first time in my life, that cruelty becomes much easier for a room when it is performed by the bride.
Then a manโs voice cut through the laughter like a blade.
โDo you even know who she is?โ
Everything stopped.
Not gradually. Instantly.
The question didnโt just silence the room. It changed it.
Biancaโs face moved first, irritation twisting into confusion as she turned toward the sound. I turned more slowly, already knowing that whatever happened next would divide the night cleanly into before and after.
Julian Mercerโher fiancรฉ, or perhaps no longer her fiancรฉ even thenโwas standing three steps behind her.
He had one hand braced against the back of a gilt dining chair and the other still half-curled at his side as if he had moved without fully deciding to. He looked nothing like the smiling groom from an hour earlier, the man who had thanked guests, hugged elderly relatives, kissed Biancaโs cheek under a thousand camera flashes, and played the role everyone expected from him so well that I had almost felt sorry for him.
Now he looked stunned.
Not embarrassed. Not merely angry.
Stunned.
And his eyes were on me.
Not on Bianca. Not on the guests. On me.
He took a breath once, the way a man does when he is trying to make sure his voice will come out steady.
Then he said, much more quietly but somehow even more dangerously, โMiss Vance.โ
A murmur moved through the ballroom.
I felt it rather than heard itโthe subtle shift of five hundred people recalculating what they thought they knew.
Bianca gave a short, disbelieving laugh. โWhat are you doing?โ
Julian didnโt look at her.
โMiss Vance,โ he repeated, and this time it was not a question. It was recognition settling fully into place.
For a moment, I considered saying something. I could have ended it there. I could have smiled faintly, dismissed the whole thing, spared him the public collapse that was gathering like storm pressure at the edges of the room. I could have given Bianca one final gift she did not deserve: ignorance.
But then I felt my cheek again, hot and stinging.
I heard, as if from very far away and very long ago, the sound of a different voice saying Get out.
And I stayed where I was.
Julian turned to Bianca at last.
โDo you have any idea,โ he asked, โwhat you just did?โ
His tone was quiet. Controlled.
That frightened her more than if he had shouted.
โWhat are you talking about?โ she snapped. โRelax. Itโs nothing. Sheโs justโโ
โStop.โ
He said it so softly that the command felt almost intimate.
It cut her off anyway.
Then he looked around the ballroom, at the guests, the families, the investors, the society friends, the old people from the country club and the younger ones from private schools and destination brunches and every polished world Bianca had spent her life believing belonged to her. When he spoke again, he spoke to the whole room.
โThe woman you just slapped,โ he said, โis Aar Vance.โ
The silence deepened.
Then he finished the sentence that would splinter the rest of the night.
โShe is the owner of Vance Global Holdings.โ
The room changed all at once.
You could feel it the way you feel air pressure shift before a storm breaks.
Five hundred people who had just been willing to enjoy my humiliation suddenly looked at me as if they were trying to reconcile the woman in the simple dark dress standing near the back wall with a name they knew from headlines, conference brochures, international contracts, quarterly reports, and rooms they were not important enough to enter.
Bianca stared at him.
Then at me.
Then back at him.
And for the first time in my life, I watched certainty leave her face...
The slap landed so hard it turned my face toward the champagne tower.
For a brief second all I saw was light.
Gold light from crystal chandeliers. Silver reflections from the mirrored walls. Five hundred champagne flutes glittering like tiny stars suspended in the air.
Then came the laughter.
Not from everyone.
That would have been easier.
A few guests looked uncomfortable. Some glanced away. But enough people smiled. Enough whispered behind manicured hands. Enough enjoyed the spectacle of a woman being publicly humiliated.
My cheek burned.
I didn't touch it.
I didn't defend myself.
I simply stood there in my dark blue dress while my stepsister, Bianca Caldwell, stared at me with triumph shining in her eyes.
"You don't belong here," she announced.
The ballroom fell quieter.
Bianca had always known how to command attention. She was beautiful in the way magazines taught women to be beautiful. Blonde hair arranged beneath a cathedral veil. Diamonds resting against flawless skin. A smile perfected through decades of getting exactly what she wanted.
At least most of the time.
"Look at you," she continued loudly. "Standing in the back like some charity case. Did you really think anyone wanted you here?"
A few guests chuckled.
I looked at her calmly.
That irritated her more than any insult ever could.
Because Bianca remembered exactly who I used to be.
The frightened sixteen-year-old girl standing in our driveway during a thunderstorm.
The girl holding a single duffel bag.
The girl her motherโmy stepmotherโhad thrown out.
The girl nobody defended.
Especially not my father.
My silence seemed to unsettle her.
She took another step closer.
"Say something."
I didn't.
The memory had returned too clearly.
The rain.
The darkness.
The porch light.
My father's face as he looked away.
"Get out."
Two words.
Just two.
I had never forgotten them.
And I never would.
Then another voice cut through the ballroom.
"Do you even know who she is?"
Everything stopped.
Conversations died.
The band froze.
Even the photographers lowered their cameras.
Bianca turned.
So did everyone else.
Her fiancรฉ stood three steps behind her.
Julian Mercer.
Tall. Calm. Usually impossible to rattle.
Except now he looked stunned.
Not angry.
Not embarrassed.
Stunned.
His eyes never left me.
"Miss Vance," he said quietly.
The room shifted.
I felt it immediately.
Recognition.
Confusion.
Calculation.
Bianca laughed nervously.
"Julian, what are you doing?"
He ignored her.
"Miss Vance."
The way he said it made several guests straighten.
They knew the name.
Or thought they did.
Julian looked around the ballroom.
Then he said the words that shattered the evening.
"The woman you just slapped is Aar Vance."
Silence.
Absolute silence.
"She is the owner of Vance Global Holdings."
The room seemed to inhale all at once.
Faces changed instantly.
People who had laughed now looked horrified.
Business leaders stared.
Investors blinked.
Several guests nearly dropped their drinks.
Because Vance Global wasn't merely successful.
It was enormous.
Shipping.
Technology.
Medical research.
Renewable energy.
Forty countries.
Hundreds of billions in assets.
A company powerful enough to move markets.
And according to every business magazine in the world, its owner rarely appeared in public.
Almost nobody knew what she looked like.
Bianca stared at me.
Then at Julian.
Then back at me.
"No."
The word came out as a whisper.
"No, that's impossible."
Julian's expression hardened.
"Is it?"
My stepmother's face had gone completely white.
My father looked as though someone had punched him in the chest.
Neither had spoken to me in fourteen years.
Now they couldn't stop staring.
I finally broke my silence.
"Hello, Dad."
His eyes filled immediately.
The room grew even quieter.
"You knew?" Bianca demanded.
I looked at her.
"I never hid it."
"You're lying."
"Actually," Julian said, "she isn't."
Bianca spun toward him.
"You knew who she was?"
"Not until tonight."
"What?"
He laughed once.
There was no humor in it.
"I've spent two years trying to secure a partnership with Vance Global."
The room listened.
Every person.
Every breath.
Every heartbeat.
"I've attended conferences. Sent proposals. Met executives. Negotiated through lawyers."
His eyes returned to me.
"And thirty minutes ago I found a photograph in an old annual report."
The realization had hit him only moments earlier.
When he'd seen me standing near the back wall.
Watching.
Alone.
Ignored.
He turned toward Bianca.
"And then I watched you slap the most powerful businesswoman in the room."
A nervous laugh escaped someone nearby.
Nobody joined them.
Bianca looked sick.
"You have to fix this."
I almost felt sorry for her.
Almost.
"Fix what?"
"The deal."
"There is no deal."
She blinked.
"What?"
I set my untouched water glass on a nearby table.
"The partnership proposal from Mercer Industries."
Julian's eyes narrowed.
I continued.
"It was approved this morning."
His face fell.
Then understanding arrived.
The approval had existed before tonight.
Before the slap.
Before the humiliation.
Before any of this.
I smiled sadly.
"It won't be approved tomorrow."
The room practically vibrated.
Millions.
No.
Billions.
Gone.
With one sentence.
Bianca looked like she might collapse.
But what happened next was worse.
Much worse.
My father finally stepped forward.
"Aar..."
Hearing him say my name again hurt more than the slap.
"You should let us explain."
I laughed softly.
The sound surprised everyone.
Including me.
"Explain what?"
His voice cracked.
"The past."
"The past?"
I tilted my head.
"You mean the night you let your wife throw your daughter onto the street?"
Pain flashed across his face.
Good.
For fourteen years I had carried mine.
He swallowed.
"You don't know the whole story."
My stepmother grabbed his arm.
"Richardโ"
"No."
His voice shook.
"No more lies."
The room collectively froze.
Even Bianca looked confused.
My father stared at the floor.
Then at me.
And for the first time in my life, I saw genuine shame.
"It wasn't your stepmother."
The words landed strangely.
Like stones sinking through water.
"What?"
His eyes glistened.
"It was me."
My stomach tightened.
The room disappeared.
Only his voice remained.
"I told her to send you away."
Every memory I carried fractured.
"What are you talking about?"
He looked twenty years older than he had an hour earlier.
"Your mother."
My breath stopped.
My real mother had died when I was nine.
Or so I'd been told.
"She didn't die."
The ballroom gasped.
I couldn't move.
Couldn't think.
Couldn't breathe.
"What?"
My father began crying.
Actually crying.
"She left."
The floor seemed to shift beneath me.
"No."
"I'm sorry."
"No."

"She abandoned us."
I stared at him.
The room blurred.
"You're lying."
"I wish I was."
He reached into his suit jacket.
His hands trembled.
Then he removed an old photograph.
One I'd never seen before.
A woman.
My mother.
Holding luggage.
Standing beside another man.
Smiling.
Leaving.
"She chose him."
The world tilted.
For years I had built my life on grief.
On loss.
On the idea that my mother had loved me until death took her away.
Now my father was destroying that memory in front of everyone.
I wanted to scream.
Instead I whispered.
"Why didn't you tell me?"
"Because you were nine."
Tears streamed down his face.
"And because I was weak."
The room remained silent.
No one moved.
No one dared.
"When you got older," he continued, "you started looking like her."
His voice broke.
"Every day I saw her face."
Understanding hit me like another slap.
Not grief.
Resentment.
I had been punished for resembling the woman who hurt him.
My stepmother wasn't the architect.
She'd merely followed his lead.
The betrayal cut deeper than anything Bianca had done.
My father looked destroyed.
"You were easier to lose than the memories."
I closed my eyes.
For years I had imagined confronting him.
Demanding answers.
Receiving justice.
Instead I got this.
A broken man admitting he had sacrificed his daughter because he couldn't survive his own pain.
The ballroom disappeared.
The company disappeared.
The wedding disappeared.
There was only a father and daughter standing inside the wreckage of fourteen stolen years.
Then something unexpected happened.
Julian stepped beside me.
Not protectively.
Respectfully.
As though he understood this wasn't his moment.
"You should sit down," he said gently.
I looked at him.
And suddenly noticed something strange.
His eyes.
The shape.
The color.
A familiar shade of green.
My stomach tightened again.
A memory surfaced.
A photograph.
The man standing beside my mother.
The man from the picture.
Green eyes.
Exactly the same.
Julian saw the realization happen.
His face paled.
For the first time all night, he looked afraid.
I turned slowly toward him.
"Who is your father?"
The question echoed through the ballroom.
Julian closed his eyes.
Just once.
When he opened them again, I already knew.
"Daniel Mercer."
The name struck like lightning.
The man from the photograph.
The man my mother had left with.
The man she'd chosen.
The room vanished completely.
Julian looked devastated.
"I didn't know."
Neither of us needed clarification.
He didn't know who I was.
Didn't know why his father had disappeared from his life when he was twelve.
Didn't know why his mother never spoke about the past.
I understood before he finished speaking.
"My father left us too."
The truth settled between us.
Heavy.
Terrible.
Beautiful.
The same man had destroyed both our families.
Different women.
Different children.
Same wreckage.
Across the ballroom my father began sobbing.
Because he understood it too.
Every year he'd hated a ghost.
Every year he'd blamed my mother.
Meanwhile the man she'd chosen had abandoned everyone.
Including her.
Including Julian.
Including me.
A lifetime of pain connected by a single selfish decision.
The irony was almost unbearable.
Five hundred guests stood frozen.
Watching an empire, a wedding, and two families collapse simultaneously.
Then something remarkable happened.
I walked toward my father.
The man who had failed me.
The man who had thrown me away.
The man who looked utterly broken.
And I hugged him.
He collapsed against me.
Crying.
Not dignified tears.
Not quiet tears.
The ugly, shattered kind.
The kind that come after carrying guilt for too many years.
"I am so sorry," he whispered.
Again.
Again.
Again.
I didn't say I forgave him.
Not yet.
Some wounds require more than one night.
But I didn't walk away either.
Sometimes that is the first miracle.
Hours later, the wedding was canceled.
The guests left in stunned silence.
Bianca disappeared before midnight.
No one stopped her.
No one followed.
As dawn approached, only a handful of people remained in the empty ballroom.
My father.
Julian.
Me.
Three lives connected by choices made decades earlier.
Outside, morning light crept across the city.
Soft.
Golden.
Forgiving.
Julian stood beside the window.
"What happens now?" he asked.
I looked at the horizon.
At the first sunrise after fourteen years of anger.
And for the first time, I didn't know.
But I wasn't afraid of not knowing anymore.
Because some nights destroy your life.
And some nights return it.
The sun finally broke over the skyline, and in its light three abandoned children stood together, watching the darkness leave at last.
Report this article
Select a reason for reporting:
Inaccurate information Copyright violation Spam / advertisement Offensive content Other '; footer.hidden = true; overlay.hidden = false; document.body.style.overflow = 'hidden'; } function hideSection() { if (section) section.hidden = true; } function openModal() { if (alreadyReported) { showSuccess(); return; } overlay.hidden = false; document.body.style.overflow = 'hidden'; } function closeModal() { overlay.hidden = true; document.body.style.overflow = ''; footer.hidden = false; overlay.querySelectorAll('input[name="report_reason"]').forEach(function(r) { r.checked = false; }); document.getElementById('reportMessage').value = ''; errorBox.hidden = true; submitBtn.disabled = false; submitBtn.textContent = 'Submit report'; imageItems = []; imgGrid.innerHTML = ''; updateAttachBtn(); } btn.addEventListener('click', openModal); closeBtn.addEventListener('click', closeModal); cancelBtn.addEventListener('click', closeModal); overlay.addEventListener('click', function(e) { if (e.target === overlay) closeModal(); }); document.addEventListener('keydown', function(e) { if (!overlay.hidden && e.key === 'Escape') closeModal(); }); // --- Error helper --- function showError(msg) { errorBox.textContent = msg; errorBox.hidden = false; } // --- Submit --- submitBtn.addEventListener('click', function() { var selected = overlay.querySelector('input[name="report_reason"]:checked'); if (!selected) { showError('Please select a reason.'); return; } errorBox.hidden = true; submitBtn.disabled = true; var itemsToUpload = imageItems.filter(function(it) { return !it.uploadedUrl; }); if (itemsToUpload.length === 0) { doSubmit(selected.value); return; } submitBtn.textContent = 'Uploadingโฆ'; var done = 0, failed = 0; itemsToUpload.forEach(function(entry) { entry.statusEl.textContent = 'โฆ'; entry.statusEl.className = 'report-img-item__status'; entry.statusEl.hidden = false; resizeImage(entry.file, MAX_LONG_PX, function(resized) { uploadFile(resized, currentSlug, function(err, url) { done++; if (err) { failed++; entry.statusEl.textContent = 'Failed'; entry.statusEl.className = 'report-img-item__status err'; } else { entry.uploadedUrl = url; entry.statusEl.textContent = 'โ'; entry.statusEl.className = 'report-img-item__status done'; } if (done === itemsToUpload.length) { if (failed > 0) { showError('Could not upload ' + failed + ' image(s). Remove the failed ones (red) or submit without them.' ); submitBtn.disabled = false; submitBtn.textContent = 'Submit report'; } else { doSubmit(selected.value); } } }); }); }); }); function doSubmit(reason) { submitBtn.textContent = 'Sendingโฆ'; var uploadedUrls = imageItems .map(function(it) { return it.uploadedUrl; }) .filter(Boolean); var payload = { reason: reason, message: document.getElementById('reportMessage').value.trim(), post_slug: currentSlug, post_url: window.location.href }; if (uploadedUrls.length) payload.image_urls = uploadedUrls; fetch('/api/post-report', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify(payload) }) .then(function(r) { return r.json(); }) .then(function(data) { if (data && data.ok) { markReported(currentSlug); alreadyReported = true; bodyEl.innerHTML = 'โ Thank you for your report.'; footer.hidden = true; setTimeout(function() { closeModal(); footer.hidden = false; hideSection(); }, 2000); } else { showError((data && data.message) ? data.message : 'Something went wrong. Please try again.'); submitBtn.disabled = false; submitBtn.textContent = 'Submit report'; } }) .catch(function() { showError('Connection failed. Please try again.'); submitBtn.disabled = false; submitBtn.textContent = 'Submit report'; }); } })();
Comments 0
Posting as Guest '; } return; } var normalizedItems = items.slice().reverse(); var html = normalizedItems.map(function(comment) { var replies = Array.isArray(comment.replies) ? comment.replies : []; var repliesHtml = replies.map(function(reply) { return '' + '' + '' + '' + '' + escapeHtml(reply.author_name) + '' + escapeHtml(reply.time) + '' + '
' + escapeHtml(reply.content) + '
' + '' + '' + '' + ''; }).join(''); return '' + '' + '' + '' + '' + escapeHtml(comment.author_name) + '' + escapeHtml(comment.time) + '' + '
May you like
' + escapeHtml(comment.content) + '
' + '' + '' + '' + '' + (repliesHtml ? '' + repliesHtml + '' : '') + ''; }).join(''); if (mode === 'prepend') { listEl.insertAdjacentHTML('afterbegin', html); return; } listEl.insertAdjacentHTML('beforeend', html); } async function loadComments(page, mode) { var query = new URLSearchParams({ post_slug: postSlug, page: String(page), per_page: String(perPage), }); var response = await fetch('/api/post-comments?' + query.toString(), { method: 'GET', headers: { 'Accept': 'application/json' } }); var data = await response.json().catch(function() { return {}; }); if (!response.ok || data.ok === false) { throw new Error((data && data.message) || 'Cannot load comments.'); } var pagination = data.pagination || {}; currentPage = Number(pagination.current_page || 1); lastPage = Number(pagination.last_page || 1); totalCountEl.textContent = String((data.post && data.post.comment_count) || pagination.total || 0); loadMoreBtn.classList.toggle('comment-box__hidden', currentPage >= lastPage); renderComments(data.comments || [], mode); } async function postComment(content, parentId, feedbackTarget, submitTarget) { var authorName = ensureName(false); if (!authorName) { var forced = ensureName(true); if (!forced) { throw new Error('Please enter your name first.'); } authorName = forced; } var payload = { post_slug: postSlug, post_url: window.location.href, author_name: authorName, content: content, }; if (parentId > 0) { payload.parent_id = parentId; } if (submitTarget) submitTarget.disabled = true; if (feedbackTarget) { feedbackTarget.textContent = 'Submitting...'; feedbackTarget.style.color = ''; } try { var response = await fetch('/api/post-comments', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify(payload) }); var data = await response.json().catch(function() { return {}; }); if (!response.ok || data.ok === false) { throw new Error((data && data.message) || 'Cannot submit comment.'); } await loadComments(1, 'replace'); return true; } finally { if (submitTarget) submitTarget.disabled = false; } } form.addEventListener('submit', async function(event) { event.preventDefault(); var content = String(contentEl.value || '').trim(); if (!content) { setFeedback('Please enter comment content.', true); return; } submitBtn.disabled = true; setFeedback('Submitting...'); try { await postComment(content, 0); contentEl.value = ''; setFeedback('Comment submitted.'); } catch (error) { setFeedback(error.message || 'Cannot submit comment.', true); } finally { submitBtn.disabled = false; } }); listEl.addEventListener('click', function(event) { var replyBtn = event.target.closest('.comment-item__reply-btn'); if (replyBtn) { var row = replyBtn.closest('.comment-item'); if (!row) return; var formEl = row.querySelector('.comment-item__reply-form'); if (!formEl) return; listEl.querySelectorAll('.comment-item__reply-form').forEach(function(f) { if (f !== formEl) f.classList.add('comment-box__hidden'); }); formEl.classList.remove('comment-box__hidden'); var input = formEl.querySelector('textarea'); if (input) input.focus(); return; } var cancelBtn = event.target.closest('.comment-item__reply-cancel'); if (cancelBtn) { var rf = cancelBtn.closest('.comment-item__reply-form'); if (!rf) return; rf.classList.add('comment-box__hidden'); var rInput = rf.querySelector('textarea'); var rFeedback = rf.querySelector('.comment-item__reply-feedback'); if (rInput) rInput.value = ''; if (rFeedback) rFeedback.textContent = ''; } }); listEl.addEventListener('submit', async function(event) { var replyForm = event.target.closest('.comment-item__reply-form'); if (!replyForm) return; event.preventDefault(); var row = replyForm.closest('.comment-item'); if (!row) return; var parentId = Number(row.getAttribute('data-comment-id') || 0); var input = replyForm.querySelector('textarea'); var submit = replyForm.querySelector('.comment-item__reply-submit'); var feedback = replyForm.querySelector('.comment-item__reply-feedback'); var replyText = String((input && input.value) || '').trim(); if (!replyText) { if (feedback) { feedback.textContent = 'Please enter reply content.'; feedback.style.color = '#dc2626'; } return; } try { await postComment(replyText, parentId, feedback, submit); // setFeedback('Reply submitted.'); } catch (error) { if (feedback) { feedback.textContent = error.message || 'Cannot submit reply.'; feedback.style.color = '#dc2626'; } } }); changeNameBtn.addEventListener('click', function() { ensureName(true); }); loadMoreBtn.addEventListener('click', async function() { if (currentPage >= lastPage) return; loadMoreBtn.disabled = true; try { await loadComments(currentPage + 1, 'prepend'); } catch (error) { setFeedback(error.message || 'Cannot load more comments.', true); } finally { loadMoreBtn.disabled = false; } }); ensureName(false); loadComments(1, 'replace').catch(function(error) { setFeedback(error.message || 'Cannot load comments.', true); }); })();