// tipsy, facebook style tooltips for jquery // version 1.0.0a // (c) 2008-2010 jason frame [jason@onehackoranother.com] // released under the MIT license (function($) { function maybeCall(thing, ctx) { return (typeof thing == 'function') ? (thing.call(ctx)) : thing; }; function isElementInDOM(ele) { while (ele = ele.parentNode) { if (ele == document) return true; } return false; }; function Tipsy(element, options) { this.$element = $(element); this.options = options; this.enabled = true; this.fixTitle(); }; Tipsy.prototype = { show: function() { var title = this.getTitle(); if (title && this.enabled) { var $tip = this.tip(); $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title); $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body); var pos = $.extend({}, this.$element.offset(), { width: this.$element[0].offsetWidth, height: this.$element[0].offsetHeight }); var actualWidth = $tip[0].offsetWidth, actualHeight = $tip[0].offsetHeight, gravity = maybeCall(this.options.gravity, this.$element[0]); var tp; switch (gravity.charAt(0)) { case 'n': tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; break; case 's': tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; break; case 'e': tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}; break; case 'w': tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}; break; } if (gravity.length == 2) { if (gravity.charAt(1) == 'w') { tp.left = pos.left + pos.width / 2 - 15; } else { tp.left = pos.left + pos.width / 2 - actualWidth + 15; } } $tip.css(tp).addClass('tipsy-' + gravity); $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0); if (this.options.className) { $tip.addClass(maybeCall(this.options.className, this.$element[0])); } if (this.options.fade) { $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity}); } else { $tip.css({visibility: 'visible', opacity: this.options.opacity}); } } }, hide: function() { if (this.options.fade) { this.tip().stop().fadeOut(function() { $(this).remove(); }); } else { this.tip().remove(); } }, fixTitle: function() { var $e = this.$element; if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') { $e.attr('original-title', $e.attr('title') || '').removeAttr('title'); } }, getTitle: function() { var title, $e = this.$element, o = this.options; this.fixTitle(); var title, o = this.options; if (typeof o.title == 'string') { title = $e.attr(o.title == 'title' ? 'original-title' : o.title); } else if (typeof o.title == 'function') { title = o.title.call($e[0]); } title = ('' + title).replace(/(^\s*|\s*$)/, ""); return title || o.fallback; }, tip: function() { if (!this.$tip) { this.$tip = $('
').html('
'); this.$tip.data('tipsy-pointee', this.$element[0]); } return this.$tip; }, validate: function() { if (!this.$element[0].parentNode) { this.hide(); this.$element = null; this.options = null; } }, enable: function() { this.enabled = true; }, disable: function() { this.enabled = false; }, toggleEnabled: function() { this.enabled = !this.enabled; } }; $.fn.tipsy = function(options) { if (options === true) { return this.data('tipsy'); } else if (typeof options == 'string') { var tipsy = this.data('tipsy'); if (tipsy) tipsy[options](); return this; } options = $.extend({}, $.fn.tipsy.defaults, options); function get(ele) { var tipsy = $.data(ele, 'tipsy'); if (!tipsy) { tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options)); $.data(ele, 'tipsy', tipsy); } return tipsy; } function enter() { var tipsy = get(this); tipsy.hoverState = 'in'; if (options.delayIn == 0) { tipsy.show(); } else { tipsy.fixTitle(); setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn); } }; function leave() { var tipsy = get(this); tipsy.hoverState = 'out'; if (options.delayOut == 0) { tipsy.hide(); } else { setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut); } }; if (!options.live) this.each(function() { get(this); }); if (options.trigger != 'manual') { var binder = options.live ? 'live' : 'bind', eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus', eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'; this[binder](eventIn, enter)[binder](eventOut, leave); } return this; }; $.fn.tipsy.defaults = { className: null, delayIn: 0, delayOut: 0, fade: false, fallback: '', gravity: 'n', html: false, live: false, offset: 0, opacity: 0.8, title: 'title', trigger: 'hover' }; $.fn.tipsy.revalidate = function() { $('.tipsy').each(function() { var pointee = $.data(this, 'tipsy-pointee'); if (!pointee || !isElementInDOM(pointee)) { $(this).remove(); } }); }; // Overwrite this method to provide options on a per-element basis. // For example, you could store the gravity in a 'tipsy-gravity' attribute: // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' }); // (remember - do not modify 'options' in place!) $.fn.tipsy.elementOptions = function(ele, options) { return $.metadata ? $.extend({}, options, $(ele).metadata()) : options; }; $.fn.tipsy.autoNS = function() { return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n'; }; $.fn.tipsy.autoWE = function() { return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w'; }; /** * yields a closure of the supplied parameters, producing a function that takes * no arguments and is suitable for use as an autogravity function like so: * * @param margin (int) - distance from the viewable region edge that an * element should be before setting its tooltip's gravity to be away * from that edge. * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer * if there are no viewable region edges effecting the tooltip's * gravity. It will try to vary from this minimally, for example, * if 'sw' is preferred and an element is near the right viewable * region edge, but not the top edge, it will set the gravity for * that element's tooltip to be 'se', preserving the southern * component. */ $.fn.tipsy.autoBounds = function(margin, prefer) { return function() { var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)}, boundTop = $(document).scrollTop() + margin, boundLeft = $(document).scrollLeft() + margin, $this = $(this); if ($this.offset().top < boundTop) dir.ns = 'n'; if ($this.offset().left < boundLeft) dir.ew = 'w'; if ($(window).width() + $(document).scrollLeft() - $this.offset().left < margin) dir.ew = 'e'; if ($(window).height() + $(document).scrollTop() - $this.offset().top < margin) dir.ns = 's'; return dir.ns + (dir.ew ? dir.ew : ''); } }; })(jQuery); @keyframes rotate-forever{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}#toplevel_page_amp-options .amp-count-loading{animation-duration:.75s;animation-iteration-count:infinite;animation-name:rotate-forever;animation-timing-function:linear;height:4px;width:4px;border-color:transparent transparent #fff #fff;border-style:solid;border-width:2px;border-radius:50%;display:inline-block}body.no-js #new-error-index-count,body.no-js #new-validation-url-count{display:none}

Chương trình học

Tin mới nhất

The tips of Purchasing Good Bamboo SteamersBamboo Versatility: From Lampshades to Furniture and MoreGet ready for the Mid-Autumn Festival – 5 Gift Ideas for Businesses to Give to Partners, Customers, and Employees.| Family Picnic Ideas | What to Pack, What to Eat, & More!
{"id":1558,"date":"2023-06-10T11:04:25","date_gmt":"2023-06-10T04:04:25","guid":{"rendered":"http:\/\/donghacraft.com\/product\/bamboo-tray-unique-bamtr19\/"},"modified":"2023-06-10T12:35:55","modified_gmt":"2023-06-10T05:35:55","slug":"bamboo-tray-unique-bamtr19","status":"publish","type":"product","link":"https:\/\/donghacraft.com\/product\/bamboo-tray-unique-bamtr19\/","title":{"rendered":"Bamboo Tray unique – BAMTR19"},"content":{"rendered":"

Commitment from Dong Ha Craft:<\/strong>
\n
\u2013 100% natural materials, meticulously processed and finished.
\n
\u2013 Streamlined, modern but still retains the soul of the countryside.
\n
\u2013 Aesthetic, sustainable, multi-application for daily life.
\n
\u2013 The product has been treated against mold and mildew, meeting export standards.
\n
\u2013 Product pictures are taken for real, 100% guaranteed as photos<\/p>\n

Dong Ha Craft, a renowned handcrafted art manufacturer and exporter, proudly presents our exquisite Tray for Table made from woven bamboo. This meticulously crafted table accessory is specifically designed to cater to discerning international importers seeking exceptional products.
\n
Our Tray for Table showcases the unparalleled skill and artistry of our craftsmen at Dong Ha Craft. Each tray is meticulously handwoven using the finest quality bamboo materials, ensuring a product of exceptional durability and aesthetic appeal. The intricate weaving technique creates a stunning pattern that adds a touch of elegance and sophistication to any workspace.
\n
With its thoughtfully designed compartments and dividers, our Tray for Table provides practical storage solutions for various desk essentials. From pens and pencils to paper clips and sticky notes up to fruit or confectionery, this tray offers ample space to keep your table organized and clutter-free. The well-structured compartments ensure easy access to your items, promoting efficiency and productivity.
\n
At Dong Ha Craft, we understand the importance of delivering products that not only serve a purpose but also exude a natural beauty. Our Tray for Table made from woven bamboo perfectly encapsulates this philosophy. The organic texture and earthy tones of the bamboo create a calming and serene ambiance, elevating the aesthetic appeal of any workspace.
\n
As an exporter, we prioritize sustainability and environmental responsibility. Bamboo, the primary material used in our Tray for Table, is a fast-growing and renewable resource, making it an eco-friendly choice. By controlling the input raw materials to serve the process of making our products, you not only acquire exceptional craftsmanship but also contribute to the preservation of our planet’s resources.
\n
Choose Dong Ha Craft as your trusted partner for superior handcrafted art and decor. Our Tray for Table made from woven bamboo is a perfect blend of functionality and artistic elegance, designed to meet the demands of international importers who appreciate the beauty and craftsmanship of Vietnamese artistry. Experience the timeless charm of our products and create an enchanting workspace that inspires creativity and productivity.
\n
\n***PLEASE CONTACT TO GET WHOLESALE PRICES***<\/strong>
\n <\/p>\n","protected":false},"excerpt":{"rendered":"

\n