Hóa Bướm – Kim Họa
Chương 14: Bản Hợp Đồng

Cập nhật lúc: 2026-06-09 15:48:31 | Lượt xem: 2

Lúc năm giờ sáng, Lộ Hi thay một chiếc váy dài màu xanh nhạt rồi nhanh chóng ra ngoài, phát hiện nhiệt độ bên ngoài giảm khoảng năm sáu độ, nhưng khi thấy chiếc Rolls-Royce màu đen đỗ phía trước đường, cô lại từ bỏ ý định quay lại mặc thêm áo, đi giày cao gót bước tới.

Lên xe.

Chu Cảnh Xuyên ngồi ở ghế phụ quay đầu lại, gương mặt lạnh lùng, trông không khác gì giọng điệu không mấy thân thiện trong điện thoại, thể hiện đúng thái độ của một trợ lý, giống như một robot không có cảm xúc.

Lộ Hi tạm nghĩ, thật là trùng hợp, như thể định mệnh đã an bài, ở Pháp, người đồng hành với Dung Gia Lễ là thư ký Lê dễ gần, làm cho công việc của cô thuận lợi hơn.

Còn gặp thư ký Chu không dễ gần, không biết vì sao, cô cảm thấy dự báo không tốt rằng mình sẽ gặp khó khăn.

 

Trong khoang xe yên lặng một lúc, lưng mảnh mai của Lộ Hi tựa vào ghế, ngón tay không tự giác mà nắm chặt lại, một lát sau, cô nhẹ giọng thử bắt chuyện: “Dung tổng nhà anh có dặn dò gì về việc xử lý chuyện trên hot search không?”

Thành thật mà nói, vị trí địa vị cao quý của Dung Gia Lễ đã định sẵn, anh ta có thể là người đứng đầu tập đoàn Dung Thị, cũng có thể là Dung nhị công tử, người mà mọi người trong giới thượng lưu đều muốn kết giao và khám phá con người thật.

Nhưng chắc chắn không thể để một người đàn ông như vậy dính vào bất kỳ tin đồn tình ái nào trên mạng với một nữ minh tinh, để người ta đàm tiếu lúc trà dư tửu hậu.



Bình luận
Sắp xếp

Mới nhất
Cũ nhất

    support
    Nhắn tin

    $(“img”).on(“error”, function () {
    $(this).attr(‘src’, ‘/images/no-image.jpg’);
    });
    // window.show_ads = 1;
    var isMobile = (window.innerWidth {
    if (document.querySelector(‘.feedback-container.show’)) {
    return;
    }
    if (document.querySelector(‘.modal.show’)) {
    return;
    }
    if (document.querySelector(‘.stop-pull-to-refresh-when-open.show’)) {
    return;
    }
    await swCLEARCACHE();
    setTimeout(() => {
    window.location.reload();
    }, 200);
    }
    });
    }

    if((!window.jwtInfo?.vip_to || window.jwtInfo?.vip_to <=0) && (!window.jwtInfo?.ads_hidden || window.jwtInfo?.ads_hidden <=0)){
    let srcipt_as = document.createElement('script');
    srcipt_as.src = "/js/as.js?v=20260602_1";
    srcipt_as.setAttribute('id', 'js_as');
    if(!document.getElementById('js_as')){
    srcipt_as.setAttribute('data-no-instant', '');
    document.getElementById('ads_xuyen_trang_bottom').appendChild(srcipt_as);
    }
    }

    var autoPlayEndedHandler;

    function handleAutoPlay(player, videoKey) {
    autoPlayEndedHandler = () => {
    let nextChapter = $(‘.chapter-next’).attr(‘href’);
    localStorage.removeItem(videoKey);
    location.href = nextChapter;
    };
    player.on(‘ended’, autoPlayEndedHandler);
    }
    $(window).resize(function() {
    if (this.resizeTO) clearTimeout(this.resizeTO);
    this.resizeTO = setTimeout(() => {
    if ($(window).width() !== this.prevWidth) {
    $(this).trigger(‘resizeEnd’);
    this.prevWidth = $(window).width();
    }
    }, 500);
    });

    function renderCanvas({ content, fontSize, fontFamily, lineHeightPercent }) {
    if (!content) return;

    // Tạo container và canvas
    const canvas = $(”);
    const dpr = window.devicePixelRatio || 1; // Đảm bảo chất lượng cao hơn
    // const dpr = 1; // Đảm bảo chất lượng cao hơn

    // Lấy kích thước container
    const canvasWidth = Math.floor($(‘.content-chapter>article’).width());
    canvas.attr(‘width’, canvasWidth * dpr);
    canvas.css({
    width: `${canvasWidth}px`,
    height: ‘auto’, // Chiều cao sẽ tự điều chỉnh
    });

    // Thiết lập context
    const ctx = $(canvas)[0].getContext(‘2d’);
    ctx.scale(dpr, dpr);
    ctx.font = `${fontSize}px ${fontFamily}`;
    ctx.fillStyle = ‘#212529’;
    ctx.textAlign = “left”; // Căn lề trái
    ctx.textBaseline = ‘top’;

    // Tính lineHeight
    const baseLineHeight = fontSize;
    const lineHeight = (baseLineHeight * lineHeightPercent) / 100;

    // Thêm khoảng trắng top giống thẻ

    const topPadding = lineHeight * 0.3; // 30% lineHeight làm padding trên

    // Hàm xử lý văn bản
    function processText(content) {
    const parser = new DOMParser();
    const doc = parser.parseFromString(content, ‘text/html’);
    const nodes = doc.body.childNodes;
    const parts = [];

    nodes.forEach((node) => {
    if (node.nodeType === Node.TEXT_NODE) {
    const splitText = node.textContent.split(//);
    splitText.forEach((part, index) => {
    parts.push({ text: part.trim(), bold: false });
    if (index {
    const words = text.split(‘ ‘);
    words.forEach((word) => {
    if (word === ‘n’) {
    context.fillText(currentLine.trim(), x, currentY);
    currentLine = ”;
    currentY += lineHeight;
    } else {
    const testLine = currentLine + word + ‘ ‘;
    context.font = `${italic ? ‘italic ‘ : ”}${bold ? ‘bold ‘ : ”}${fontSize}px ${fontFamily}`;
    const testWidth = context.measureText(testLine).width;

    if (testWidth > maxWidth && currentLine) {
    context.fillText(currentLine.trim(), x, currentY);
    currentLine = word + ‘ ‘;
    currentY += lineHeight;
    } else {
    currentLine = testLine;
    }
    }
    });
    });

    if (currentLine) {
    context.fillText(currentLine.trim(), x, currentY);
    currentY += lineHeight;
    }

    return currentY; // Trả về vị trí Y cuối cùng sau khi render xong
    }

    // Xử lý văn bản để tính chính xác chiều cao
    let yPosition = topPadding;
    const lines = content.split(‘n’);
    let totalHeight = yPosition;

    lines.forEach((line) => {
    const parts = processText(line);
    totalHeight = wrapTextWithFormatting(ctx, parts, 0, yPosition, canvasWidth, lineHeight);
    yPosition = totalHeight;
    });

    // Cập nhật chiều cao canvas chính xác
    canvas.attr(‘height’, totalHeight * dpr);
    canvas.css(‘height’, `${totalHeight}px`);

    // Render lại với đúng chiều cao mới
    const updatedCtx = $(canvas)[0].getContext(‘2d’);
    updatedCtx.scale(dpr, dpr);
    updatedCtx.fillStyle = ‘#212529’;
    updatedCtx.textAlign = ‘left’;
    updatedCtx.textBaseline = ‘top’;

    yPosition = topPadding;
    lines.forEach((line) => {
    const parts = processText(line);
    yPosition = wrapTextWithFormatting(updatedCtx, parts, 0, yPosition, canvasWidth, lineHeight);
    });

    return canvas;
    }

    $(window).bind(‘resizeEnd’, function() {
    if ($(‘.content-chapter>article’).length > 0) {
    window.callSeeMoreContentChapter();
    }
    });

    function handleRenderCanvas(chapterContent) {
    const contentChapterArticle = $(‘.content-chapter>article’);
    contentChapterArticle.empty();
    const fontFamilyId = window.getCookie(‘font_chapter’);
    const fontSize = window.getCookie(‘font_size_chapter’);
    const lineHeight = window.getCookie(‘line_height_chapter’);
    const targetFontConfig = window.objConfigFont.find(item => item.name == fontFamilyId);

    const tempDiv = $(‘

    ‘).html(chapterContent);
    const paragraphs = tempDiv.find(‘p’);

    let parts = [];

    if (paragraphs.length == 0) {
    contentChapterArticle.html(chapterContent);
    return;
    }
    if (paragraphs.length > 5) {
    parts = chapterContent.split(‘n’).filter(item => item.trim() !== ”);
    } else {
    const singleParagraph = paragraphs.last().html();
    parts = singleParagraph.split(//i)
    .filter(item => item.trim() !== ”)
    .map(item => {
    item = item.trim();
    if (!item.startsWith(‘<p') || !item.endsWith('')) {
    return `

    ${item}`;
    }
    return item;
    });
    }
    let startIndex = Math.floor(Math.random() * (parts.length – 5));

    let selectedParagraphs = Array.from(parts).slice(startIndex, startIndex + 5);
    let content = decodeHtmlEntities(selectedParagraphs);
    content = content.join(‘n’);

    if (typeof content === ‘string’) {
    let canvasContainer = renderCanvas({
    content,
    fontSize: fontSize || ($(window).width() <= 992 ? 20 : 16),
    fontFamily: targetFontConfig?.value || "'Roboto Condensed', sans-serif",
    lineHeightPercent: lineHeight || ($(window).width() {
    contentChapterArticle.append(item)
    })
    }else{
    alert(‘Có lỗi hiện nội dung chương’)
    contentChapterArticle.html(chapterContent);
    }
    }
    function decodeHtmlEntities(text) {
    if (!text) {
    return [];
    }
    const parser = new DOMParser();
    const doc = parser.parseFromString(text, ‘text/html’);
    let result = [];
    let currentContent = “”;

    // Duyệt qua tất cả các node con
    doc.body.childNodes.forEach(node => {
    if (node.nodeType === Node.TEXT_NODE && !node.textContent.trim()) {
    return; // Bỏ qua node trống
    }
    if (node.nodeName.toLowerCase() === “p”) {
    // Thêm nội dung của

    vào đoạn hiện tại
    currentContent += (node.innerHTML || node.textContent) + “n”;
    } else {
    // Gặp thẻ khác, lưu đoạn hiện tại và thêm thẻ này vào mảng
    if (currentContent.trim()) {
    result.push(currentContent.trim());
    currentContent = “”; // Reset đoạn hiện tại
    }
    if (node.outerHTML) {
    result.push(node.outerHTML.trim()); // Thêm thẻ nguyên vẹn
    }
    }
    });
    // Đẩy đoạn cuối cùng vào mảng nếu còn
    if (currentContent.trim()) {
    result.push(currentContent.trim());
    }
    return result;
    }

    window.callSeeMoreContentChapter = function (type = 1) {
    $(“#btn-see-more-chapter”).text(“Đang kiểm tra trạng thái…”);
    let chapterContent = $(‘.chapter-content .content-chapter>article’);
    if(!chapterContent.length){
    chapterContent = $(‘.chapter-content .content-chapter’);
    }
    let story_id = $(“#cmt_story_id”).val();
    let chapter_id = $(“#cmt_chapter_id”).val();

    myAjax(“post”, “/api/chapter/get-chapter-content”, {
    story_id: story_id,
    chapter_id: chapter_id,
    },
    function (res) {
    try {
    $(“#loadingItem”).removeClass(“d-flex”);
    chapterContent.html(res?.cont);
    // handleRenderCanvas(res?.cont);
    if (res?.audio_path) {
    $(“.box-chapter-audio”).fadeOut(100, function() {
    $(this).html(`Nghe audio

    `).fadeIn(100);

    setTimeout(function () {
    var audio = document.getElementById(“myAudio”);
    if(audio){
    audio.addEventListener(“play”, function () {
    myAjax(“post”, “/api/chapter/action/nghe_audio”, {
    “story_id”: story_id,
    “chapter_id”: chapter_id
    });
    });
    }
    },1)
    });
    }
    } catch (e) {
    alert(“Có lỗi hiển thị nội dung chương”);
    }

    if (type == 2) { // audio
    // if (!$(‘.audio-content’).length) {
    // chapterContent.append(‘

    ‘)
    // }
    if ($(‘.audio-plyr’).length) {
    var audioKey = `audio_story_${story_id}_chapter_${chapter_id}`;
    let player = {};
    try {
    player = new Plyr(‘.audio-plyr’);
    } catch (e) {
    location.reload();
    }
    let savedTime = localStorage.getItem(audioKey);
    if (savedTime) {
    player.once(‘loadedmetadata’, () => {
    player.currentTime = parseFloat(savedTime);
    });
    }
    player.on(‘timeupdate’, event => {
    var currentTime = player.currentTime;
    localStorage.setItem(audioKey, currentTime);
    });

    let isAutoPlay = localStorage.getItem(‘audio_auto_play’);
    if (isAutoPlay==1) {
    $(‘.audio-plyr’).prop(‘autoplay’, true);
    handleAutoPlay(player, audioKey);
    }
    }
    } else if (type == 3) { // video
    // if (!$(‘.video-content’).length) {
    // chapterContent.append(‘

    ‘)
    // }
    if ($(‘.video-plyr’).length) {
    let videoKey = `video_story_${story_id}_chapter_${chapter_id}`;
    let player = {};
    try {
    player = new Plyr(‘.video-plyr’);
    } catch (e) {
    location.reload();
    }
    let savedTime = localStorage.getItem(videoKey);
    if (savedTime) {
    player.once(‘loadedmetadata’, () => {
    player.currentTime = parseFloat(savedTime);
    });
    }
    player.on(‘timeupdate’, event => {
    var currentTime = player.currentTime;
    localStorage.setItem(videoKey, currentTime);
    });

    let isAutoPlay = localStorage.getItem(‘video_auto_play’);
    if (isAutoPlay==1) {
    $(‘.video-plyr’).prop(‘autoplay’, true);
    handleAutoPlay(player, videoKey);
    }
    }
    }
    },
    function (res) {
    $(“#loadingItem”).removeClass(“d-flex”);
    let msg = res?.responseJSON?.cont || res?.responseJSON?.message;
    if (msg) {
    $(“#btn-see-more-chapter”).text(msg)
    } else {
    $(“#btn-see-more-chapter”).text(“Có lỗi không xác định”)
    }
    })
    };

    $(document).delegate(“#btn-see-more-chapter”, “click”, debounce(function (e) {
    e.preventDefault();
    window.callSeeMoreContentChapter();
    }, 300));

    InstantClick.init(‘mousedown’)

    function handleCredentialResponse(response) {
    let token = response.credential;
    myAjax(‘post’, ‘/api/login/google’, {
    token: token
    }, function (res) {
    handleSocialLogin(res)
    },
    function (error) {
    if (error?.responseJSON?.msg) {
    Swal.fire({
    position: ‘center’,
    icon: ‘error’,
    title: error?.responseJSON?.msg,
    showConfirmButton: false,
    timer: 2000
    })
    }
    });
    }

    window.onload = function () {
    if (!getCookie(‘token’)) {
    google.accounts.id.initialize({
    client_id: “450977676294-pmln91u90rnnmsa8775n79fsa3l14tpa.apps.googleusercontent.com”,
    callback: handleCredentialResponse
    });
    google.accounts.id.prompt();
    }
    };

    function credentialGGConnect(response) {
    let token = response.credential;
    myAjax(‘put’, “/api/profile/connect-social/google”, {token},
    function(res){
    window.TruyenFull.profile = res.profile
    localStorage.setItem(“profile”, JSON.stringify(window.TruyenFull.profile));
    location.reload();
    },
    function(err){
    if (err?.responseJSON?.msg) {
    Swal.fire({
    position: ‘center’,
    icon: ‘error’,
    title: err?.responseJSON?.msg,
    showConfirmButton: false,
    timer: 2000
    })
    }
    } )
    }

    function handleSocialLogin(res) {
    setCookie(“token”, res.token, 30);
    localStorage.setItem(“profile”, JSON.stringify(res.data?.profile));
    localStorage.setItem(“bookmark”, JSON.stringify(res.data?.bookmark));
    localStorage.setItem(“purchasedStory”, JSON.stringify(res.data?.purchasedStory));
    localStorage.setItem(“purchasedChapters”, JSON.stringify(res.data?.purchasedChapters));

    let params = new URLSearchParams(location.search);
    let back_to = params.get(“back”);
    if (back_to) {
    location.href = back_to;
    } else {
    location.reload();
    // location.href = “/profile”
    }
    }

    var editor_config = {
    path_absolute: “/”,
    selector: “textarea.tinymce_content”,
    language: ‘vi’,
    statusbar: false,
    plugins: [
    “advlist autolink lists link image charmap print preview hr anchor pagebreak”,
    “searchreplace wordcount visualblocks visualchars code fullscreen”,
    “insertdatetime media nonbreaking save table contextmenu directionality”,
    “emoticons template paste textcolor colorpicker textpattern”
    ],
    toolbar: “insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent “,
    menu: {
    file: {
    title: ‘File’,
    items: ”
    },
    edit: {
    title: ‘Edit’,
    items: ‘ cut copy paste pastetext | selectall | searchreplace’
    },
    view: {
    title: ‘View’,
    items: ‘preview fullscreen | showcomments’
    },
    insert: {
    title: ‘Insert’,
    items: ‘ charmap emoticons hr | anchor tableofcontents | insertdatetime’
    },
    format: {
    title: ‘Format’,
    items: ‘bold italic underline strikethrough superscript subscript’
    },
    tools: {
    title: ‘Tools’,
    items: ‘wordcount’
    },
    table: {
    title: ‘Table’,
    items: ”
    },
    help: {
    title: ‘Help’,
    items: ”
    }
    },
    setup: function (editor) {
    editor.on(‘paste’, function (event) {
    const clipboardData = event.clipboardData || event.originalEvent.clipboardData;
    if (clipboardData && clipboardData.items) {
    for (let i = 0; i { //nếu bỏ đi thì mỗi lần chuyển trang sẽ có chỗ đựoc thay trước khi dữ liệu đc truyền vào
    tinymce.init(editor_config);
    }, 100);
    });

    $(function () {
    $(“[data-swiper]”).each(function () {
    try {
    let options = $(this).attr(“data-swiper”);
    options = JSON.parse(options);
    if (options) {
    new Swiper(this, options);
    }
    } catch (err) {
    console.error(“Check swiper options”, err);
    }
    });
    });

    $(function () {
    $(“[data-swiper]”).each(function () {
    try {
    let options = $(this).attr(“data-swiper”);
    options = JSON.parse(options);
    if (options) {
    new Swiper(this, options);
    }
    } catch (err) {
    console.error(“Check swiper options”, err);
    }
    });
    });

    $(function () {
    $(“[data-swiper]”).each(function () {
    try {
    let options = $(this).attr(“data-swiper”);
    options = JSON.parse(options);
    if (options) {
    new Swiper(this, options);
    }
    } catch (err) {
    console.error(“Check swiper options”, err);
    }
    });
    });

    var langChapters = “Chương”

    (function() {
    function applyChapterSettings() {
    var font = window.getCookie(‘font_chapter’);
    var fontSize = window.getCookie(‘font_size_chapter’);
    var lineHeight = window.getCookie(‘line_height_chapter’);
    var style = ”;
    if (font || fontSize || lineHeight) {
    style += ‘.chapter-content .content-chapter article, .chapter-content .content-chapter article p, .chapter-content .content-chapter article div {‘;
    if (font) {
    var fontMap = {
    ‘roboto’: “‘Roboto Condensed’, sans-serif”,
    ‘mooli’: “‘Mooli’, sans-serif”,
    ‘patrick_hand’: “‘Patrick Hand’, cursive”
    };
    if (fontMap[font]) style += ‘font-family: ‘ + fontMap[font] + ‘ !important;’;
    }
    if (fontSize) style += ‘font-size: ‘ + fontSize + ‘px !important;’;
    if (lineHeight) style += ‘line-height: ‘ + lineHeight + ‘% !important;’;
    style += ‘}’;
    var styleTag = document.getElementById(‘client-chapter-settings’);
    if (!styleTag) {
    styleTag = document.createElement(‘style’);
    styleTag.id = ‘client-chapter-settings’;
    document.head.appendChild(styleTag);
    }
    styleTag.innerHTML = style;
    }
    }
    applyChapterSettings();
    if (typeof InstantClick !== ‘undefined’) {
    InstantClick.on(‘change’, applyChapterSettings);
    }
    })();

    if (getCookie(‘token’)) {
    $(‘.btn-bookmark’).removeClass(‘d-none’);
    myAjax(“post”, “/api/story-reading”, {
    “story_id”: “34”,
    “chapter_id”: “6165”
    }, function(res) {
    // if (res?.contents && res?.contents?.cont) {
    // $(“.content-chapter>article”).html(”);
    // handleRenderCanvas(res?.contents?.cont);

    // if (res?.contents && res?.contents?.audio_path) {
    // $(“.box-chapter-audio”).fadeOut(100, function() {
    // $(this).html(`Nghe audio
    //

    //

    `).fadeIn(100);
    // setTimeout(function () {
    // var audio = document.getElementById(“myAudio”);
    // if(audio){
    // audio.addEventListener(“play”, function () {
    // myAjax(“post”, “/api/chapter/action/nghe_audio”, {
    // “story_id”: “34”,
    // “chapter_id”: “6165”
    // });
    // });
    // }
    // },1)
    // });
    // }
    // }
    }, function(err) {
    console.log(err)
    });
    $(“.box-chapter-audio”).removeClass(‘d-none’)
    } else {
    $(“.box-chapter-audio”).remove()
    }

    $(function() {
    var elementGroupSeeMore = $(“.group-see-more”);
    var typePayStory = elementGroupSeeMore.attr(‘data-type-pay-story’);
    var typePayChapter = elementGroupSeeMore.attr(‘data-type-pay-chapter’);
    var typeIsLoginChapter = elementGroupSeeMore.attr(‘data-type-is-login-chapter’);

    // var apiCalled = false;
    var bookmark = JSON.parse(localStorage.getItem(“bookmark”));
    var btnXemThemHtml =``;
    var btnDangNhapHtml =`Đăng nhập để xem tiếp`;

    $(‘.btn-bookmark’).addClass(‘btn-info’);
    $(‘.btn-bookmark’).text(‘Lưu bookmark’);
    if (bookmark?.length > 0) {
    bookmark.map((item) => {
    if (item.chapter_id == $(“.btn-bookmark”).attr(“data-chapter-id”)) {
    $(‘.btn-bookmark’).removeClass(‘btn-info’);
    $(‘.btn-bookmark’).addClass(‘btn-danger btn-delete-bookmark’);
    $(‘.btn-bookmark’).text(‘Xóa bookmark’);
    $(‘.btn-bookmark’).removeClass(‘btn-bookmark’)
    }
    })
    }

    // xong
    if (typeIsLoginChapter != 1) {
    // xử lý logic login
    if (typePayStory != 0 || typePayChapter != 0) {
    if (!getCookie(‘token’)) {
    elementGroupSeeMore.html(btnDangNhapHtml)
    } else {
    window.callSeeMoreContentChapter(1);
    }
    }
    } else {
    if (!getCookie(‘token’)) {
    elementGroupSeeMore.html(btnDangNhapHtml)
    } else {
    if (typePayStory == 0 && typePayChapter == 0) {
    elementGroupSeeMore.html(btnXemThemHtml)
    } else {
    // truyện mất tiền, check trả phí
    window.callSeeMoreContentChapter(1);
    }
    }
    }
    });

    $(function() {
    var historyChapterReading = JSON.parse(localStorage.getItem(‘historyChapterReading’)) ?? [];
    if (historyChapterReading.length > 10) {
    historyChapterReading = [];
    return localStorage.setItem(‘historyChapterReading’, JSON.stringify(historyChapterReading))
    }
    if (historyChapterReading.length >= 0) {
    let tim = historyChapterReading.findIndex((item) => item.story_id == “34”);
    if (tim === -1) {
    if (historyChapterReading.length === 10) {
    historyChapterReading.pop()
    }
    historyChapterReading.push({
    story_id: “34”,
    story_name: “Hóa Bướm – Kim Họa”,
    story_link: “/truyen/” + “hoa-buom-kim-hoa”,
    chapter_number: “14”,
    chapter_link: “/truyen/hoa-buom-kim-hoa/” +
    “chuong-14”,
    time: Date.now(),
    })
    } else {
    historyChapterReading[tim] = {
    story_id: “34”,
    story_name: “Hóa Bướm – Kim Họa”,
    story_link: “/truyen/” + “hoa-buom-kim-hoa”,
    chapter_number: “14”,
    chapter_link: “/truyen/hoa-buom-kim-hoa/” +
    “chuong-14”,
    time: Date.now(),
    }
    }
    historyChapterReading = historyChapterReading.sort(function(a, b) {
    return b.time – a.time;
    });
    return localStorage.setItem(‘historyChapterReading’, JSON.stringify(historyChapterReading))
    }
    });

    {
    “@context”: “https://schema.org/”,
    “@type”: “BreadcrumbList”,
    “itemListElement”: [{
    “@type”: “ListItem”,
    “position”: 1,
    “name”: “Đọc Truyện”,
    “item”: “https://etruyen.net”
    },{
    “@type”: “ListItem”,
    “position”: 2,
    “name”: “Hóa Bướm – Kim Họa”,
    “item”: “https://etruyen.net/truyen/hoa-buom-kim-hoa”
    },{
    “@type”: “ListItem”,
    “position”: 3,
    “name”: “Chương 14: Bản Hợp Đồng”,
    “item”: “https://etruyen.net/truyen/hoa-buom-kim-hoa/chuong-13”
    }]
    }

    Loading…

    /* googleoff: all */
    if(localStorage.getItem(“access_login”)){
    setCookie(“token”, localStorage.getItem(“access_login”), 30);
    localStorage.removeItem(“access_login”);
    }

    var access_login = getCookie(“token”);

    $(window).on(‘load’, function () {
    checkAccessLogin()
    });
    InstantClick.on(‘change’, function () {
    checkAccessLogin();
    if (window.FB) {
    window.FB.XFBML.parse()
    }
    });

    function checkAccessLogin() {
    const urlAllow = [“profile”, “gio-hang”];
    const urlLogin = [“dang-nhap”, “dang-ky”];
    if (!location.href.includes(`profile`)) {
    clearInterval(window.TruyenFull.initIntervalTransaction);
    }
    if (!access_login) {
    urlAllow.map((item) => {
    if (location.href.includes(`${item}`)) {
    location.href = “/dang-nhap”
    }
    })
    } else {
    urlLogin.map((item) => {
    if (location.href.includes(`${item}`)) {
    location.href = “/profile”
    }
    })
    }

    // if (window.location.href != “https://etruyen.net/”) {
    // clearInterval(window.TruyenFull.initIntervalSelectStoriesHot)
    // } else {
    // clearInterval(window.TruyenFull.initIntervalSelectStoriesHot);
    // window.TruyenFull.initIntervalSelectStoriesHot = setInterval(window.initIntervalSelectStoriesHot, 60000);
    // }
    }

    $(function () {
    if (access_login) {
    $(“.hasLogin”).removeClass(“d-none”);
    $(‘.shopping-cart’).removeClass(“d-none”);

    var profile = window.TruyenFull.profile || {};
    if (profile) {
    if (profile.name) {
    $(“.user-name-top”).text(profile.name);
    }else{
    $(“.user-name-top”).text(“Tài khoản”);
    }
    if (profile.avatar) {
    var avatarUrl = profile.avatar;
    if (!avatarUrl.startsWith(‘http’)) {
    avatarUrl = window.TruyenFull.cdnUrl + ‘/’ + avatarUrl;
    }
    $(“.user-avatar-top”).attr(“src”, avatarUrl).removeClass(“d-none”);
    }
    }else{
    $(“.user-name-top”).text(“Tài khoản”);
    }

    $(document).on(“click”, “.logout”, function () {
    removeCookie(“token”);
    localStorage.removeItem(“access_login”);
    localStorage.removeItem(“profile”);
    localStorage.removeItem(“bookmark”);
    localStorage.removeItem(“purchasedStory”);
    localStorage.removeItem(“purchasedChapters”);
    $.ajax({
    type: “get”,
    url: “https://etruyen.net/dang-xuat?user_id=” + window?.TruyenFull?.profile?.id,
    dataType: “json”,
    success: function (response) {
    location.reload()
    }
    });
    });
    $(“.checkout-to-dich-gia”).attr(‘href’, “https://etruyen.net/dang-truyen/dashboard?token=”)
    } else {
    $(“.yetLogin”).removeClass(“d-none”);

    let params = new URLSearchParams(location.search);
    let back_to = params.get(“back”);
    if (back_to) {
    $(“.checkout-to-dich-gia”).attr(‘href’, “/dang-nhap?back=” + back_to)
    } else {
    $(“.checkout-to-dich-gia”).attr(‘href’, “/dang-nhap?back=” + location.href)
    }
    }
    });
    /* googleon: all */

    /* googleoff: all */
    if (window.TruyenFull.profile?.id) {
    let updateTimeActiveCustomer = ()=>{
    myAjax(“post”, “https://etruyen.net/api/ping”, {
    playerId: window.TruyenFull.plugins.one_signal.one_signal_user_id,
    check_as: (window.jwtInfo?.vip_to {
    location.href = “/dang-nhap”;
    })
    }else{
    location.reload();
    }
    // location.href = “/”
    }else if(res?.meta?.token){
    setCookie(“token”, res?.meta?.token, 30);
    location.reload();
    }
    }, function (err) {
    // console.log(“err”,err)
    })
    }
    updateTimeActiveCustomer();
    setInterval(updateTimeActiveCustomer, 60000);

    if (window.EventSource) {
    const sseUrl = “/api/auth/sse-session”;
    const sseSource = new EventSource(sseUrl);

    sseSource.onmessage = function(event) {
    try {
    const data = JSON.parse(event.data);
    if (data.status === ‘session_expired’) {
    sseSource.close();
    if (window.Swal) {
    removeCookie(“token”);
    localStorage.removeItem(“profile”);
    localStorage.removeItem(“bookmark”);
    localStorage.removeItem(“purchasedStory”);
    localStorage.removeItem(“purchasedChapters”);
    Swal.fire({
    title: ‘Thông báo!’,
    text: data.message || ‘Tài khoản của bạn đã được đăng nhập trên một thiết bị khác.’,
    icon: ‘warning’,
    confirmButtonText: ‘Đồng ý’,
    allowOutsideClick: false,
    allowEscapeKey: false,
    timer: 3000
    }).then(() => {
    location.href = “/dang-nhap”;
    })
    } else {
    removeCookie(“token”);
    localStorage.removeItem(“profile”);
    localStorage.removeItem(“bookmark”);
    localStorage.removeItem(“purchasedStory”);
    localStorage.removeItem(“purchasedChapters”);
    alert(data.message || ‘Tài khoản của bạn đã được đăng nhập trên một thiết bị khác.’);
    location.href = “/dang-nhap”;
    }
    }
    } catch (e) {
    console.error(“SSE parse error”, e);
    }
    };

    sseSource.onerror = function(err) {
    console.error(“SSE Session Error”, err);
    };
    }
    }
    /* googleon: all */

    Tùy chỉnh hiển thị

    18px
    1.8