I along with activity these pencils to your finest vape components it is possible to. Our porcelain coils provide brush, simple attacks each and every time and you can long-long-lasting electric batteries offer 800+ puffs for each pencil as a result of the rechargeability of the electric battery. Are you looking for a location to buy THC carts on the internet with quick exact same-day or 2nd-day birth? Big Vape Store is best spot to get genuine THC vape carts on the internet for both entertainment and medical reasons on the quickest distribution alternatives everywhere inside the United states, European countries, Canada, Australia, Mexico, Australia, plus the Middle eastern countries.

Along with you should use the newest password HIGHTIMES25 for 25percent from when you’re being treated in order to quick shipment to take advantage for the THC Flower. Of numerous people explore one another, sticking with a great recyclable pencil in the home and you will bringing throw away possibilities together to use and you will exchange socially, the same way you might citation a great pre-roll. You can now log in and use the 100 percent free VIP registration to save for the find points. No decide-within the concur or approval is generally considered to possess become provided by the PharmaCann without having to be on paper and you can finalized because of the a police officer from PharmaCann. Particular jurisdictions restrict otherwise don’t let the brand new disclaimer of intended or other warranties therefore the more than disclaimers may well not apply at the new the amount such jurisdictions’ regulations are applicable. If you reside on the U.S. (and as appropriate so you can You.S. residents), certain portions of this Part 9 is actually considered as an excellent “written contract so you can arbitrate” pursuant to your Federal Arbitration Act.

Delta 8 Vape

The new Oozi Pen is probably not for those on the run or who’re worried about discernment. The brand new cup world plus the circulating steam to the make this a spectacle regardless of how tough your try to hide they. You’ll be ready to few suitable atomizer with just suitable cannabis. Because you can combine and you may matches, the main cause Orb 3 produces specific it really is powerful hits.

Delta-8 and you will CBD have additional production process and create additional effects. For example, CBD supplies no psychoactive effects and you can consumers generally use it to possess medicinal advantages. Concurrently, Delta-8 produces mild psychoactive effects that is usually appreciated to own entertainment aim. From the inactive from evening past April, state medicine representatives in the Oklahoma intercepted an enthusiastic 18-wheeler rumbling east for the the newest Arkansas edging smuggling 7,000 weight out of marijuana hidden inside the surveillance camera packets. Ashley Southall discusses Nyc’s effort to create one of several country’s premier cannabis marketplace immediately after over 20 years as the funding out of cannabis arrests. The terpene count are an excellent, and when one to wasn’t adequate, it comes in different greatest-shelf strains, such as Apple Fritter, Grape Zkittlez, Blue Dream, and Strawberry Shortcake.

cali weed definition

The premium THC pencils is actually packed with 1250mg away from Delta 8, 5mg of Delta 9, 500mg of Delta 10, and a satisfying permitting away from THC-P. A THC vape pencil is actually an electricity origin you to definitely gets hot a good vape container otherwise THC cartridge to make vapor. Both weed vape pens is also falter, usually if the coil gets the new weakest hook. The good news is, you can transfer the newest petroleum to some other tool. Here are a few of the most extremely well-known grounds you’ll need to extract the new petroleum from your own cartridge. Offering four energy methods and you may a great 380 mAh higher capability lithium-ion power supply.

Don’t assist you to definitely fool your even if, all of our HHC pens can get you awesome torn, it’s just a new sense than simply typical THC. Should you get a tiny odd when you puff THC, if not give HHC an attempt. When deciding on a good vaporizer, rate is not the just basis to consider. Look at the device’s heat-upwards time, the variety of temperatures controls, their being compatible with different materials, and the promise provided. Let us discuss a casino game-altering invention in the smoking – vaporizers. These devices provide a different and more powerful solution to eat flowers and concentrates, that have it’s transformed the.

Prior to THC vape pens, e-cigarettes was brief self-contains systems from the shape and size of a smoke. THC vape juices is a drinking water marijuana concentrate that is made by the breaking down the new cannabinoids, terpenes, and you can flavonoids of new cannabis vegetation using Skin tightening and otherwise liquor removal, put differently, whatever you and phone call THC petroleum to own vape pens. The end product is a highly focused and powerful water you to will be connected to a great vaporizer pencil and you will smoked just like if you were playing with a dry extract vaporizer. Having Online Facility, it’s in addition to an easy task to give people an option inside energy having disposable vapes out of Butter OG that feature 900 mg away from delta 8 as much as 2000 milligrams away from delta 8, THC, THCP, and you will HHC. Vape carts, as well as wax carts, pencil carts, weed pens and you may THC carts, give various pros more than conventional cannabis usage actions. Outside the benefits and you can discreetness, this type of versatile gizmos have been in some types and you will doses, catering in order to diverse representative choice.

Control, using, posting and you will/otherwise selling cannabis stays unlawful underneath the laws and regulations of your Joined Claims. Our very own Solution is not intended to help you in violating federal laws. PharmaCann is additionally perhaps not getting advice for the potential consequences out of the brand new palms and/or access to county-legalized scientific marijuana under government legislation.

the cake strain

Exactly what exactly will they be, just how can they setting, and exactly why will they be recognized while the a stronger alternatives? Within book, we’ll view all you need from the vaporizers. Terpenes is oils the cooking pot bush releases through the its blooming phase.

Zero best otherwise licenses is pot.hub generally construed, less than one courtroom idea, from the implication, estoppel, industry customized, or else. All the legal rights perhaps not expressly provided to you personally is actually booked from the PharmaCann and its licensors and other third parties. People unauthorized entry to people Articles or even the Provider for your purpose are blocked.

It teaches you just what an excellent THC vape pencil are, and provides certain helpful hints for making use of one to. THC disposables and you will CBD throwaway vape points have been proven to prevent anxiety, get rid of pain, and have other important health pros. From the Online Facility, we have been proud to be him or her in the bringing customers which have the best-high quality delta 8 disposables and you can weed pencils regarding the industry’s really leading throw away vape names, as well as Butter OG and you may Torch. PharmaCann is a corporate engaged in the new cultivation, running and dispensing from scientific and you can adult-explore marijuana. PharmaCann Inc. is actually a good Delaware firm conducting business as the “Verilife” in the usa from Illinois, Maryland, Massachusetts, Ny, Ohio and you will Pennsylvania.

Both you want to stay home and have soaring including a kite. Possibly you must go to functions and also have one thing over. When you require something a small not the same as the traditional THC buzz, all of our 2g HHC pencils will be the strategy to use. Such children will bring you extremely lighted, but the majority they claim this one smoke departs them clear-went and ready to work!. Which have flavors including Rainbow Sherbert and Lemon Slushie, you get to benefit from the primary buzz and throat-watering deliciousness all meanwhile.

buy vape pens uk

Can’t get enough of the fresh skunky smell of Sour Diesel? And the entire issue appears just like an elizabeth-smoke, in order to usually tell people that cast a disapproving vision you’re also just seeking to give up smoking. To your individuals burn off steps — bones, blunts, spliffs, bongs, etcetera. — you’re constantly familiar with, otherwise outright concerned with, the newest cigarette smoking and smell.

For additional info on all things cannabis and also to here are a few all of our 100-per cent the-sheer marijuana things, visit HonestMarijuana.com now. The effects of an excellent THC vape pen are decidedly reduced than those people produced by the new attempted-and-genuine pot brownie (or just about any other edible). In addition to, after you take into account the price of a consistent vape pencil, you also have to reason for the newest portability, the ease, and the discretion that accompany they.

Linked-To Websites; Advertisements; Dealings that have Third parties We are really not accountable for businesses otherwise its posts, advertisement(s), applications, internet sites, services/or functions. We could possibly generate advertising and you will third-party articles otherwise characteristics out there on the otherwise thru the Service, and this we really do not handle. To maximize their vaping feel, understand that various other information need additional vaporizing temperature. Try out their device’s options to obtain the max temperature to have your preferred topic.

weed edibles uk

It’s an excellent option for travelling and other public places. Plus it’s low price (merely 49.95) will make it a powerful way to start off worldwide away from vaping as opposed to breaking the financial. It lack of temperatures conserves a few of the active ingredients within the marijuana—the new stuff gets your large and you can allows you to feel great—who would otherwise have been missing if cannabis try burned. And when it been changing their e-cigarettes to cope with THC water, wax, and you may bud, it watched your procedure of vaporizing is an excellent addition to your means of puffing joints or blunts. Rating inventory advice, portfolio advice, and more in the Motley Fool’s superior features.

Dank Vapes

Wax carts, in particular, provides achieved a track record due to their effectiveness and you will robust preferences profiles, which makes them a good looked for-just after choices certainly marijuana fans. Whether or not your’lso are exploring the field of THC carts or seeking a understated knowledge of pencil carts, you’ll take pleasure in the options they provide. THC vapes try well-known due to their convenience, results, and also the discretion they provide over traditional marijuana consumption steps.

Archive PDX Honey Bananas Solventless Cartridge

On top of that, you could select a particularly generous array of models, and the far more you order, the greater it can save you. The newest buds are aromatic, which shows you just how advanced they really are. The best part is actually, you can look at amazing THC Flower now, with of the finest costs and you can high quality as much as.

buy ganja online

More you understand, the better prepared you’ll become making your choice. Of numerous argue that THC vape pencils need advanced technology education. THC vape pencils is almost certainly not the best method of getting ganja in the system — pills and you will dissolvable strips most likely keep one to award — however they’re indeed a close second. Since there’s a lot more THC inside the vapor than in smoke, with a vape pen, you want fewer hits feeling a comparable large. You could potentially transportation all portion on the pouch otherwise purse without very knowing they’lso are truth be told there. You could potentially tailor their V2 Pro Show 3X vape pen in order to complement oils, dead extract, plus dabs.

It indicates you have made very baked while you are enjoying a full, most flavorful terpene reputation. Not simply can we render many other cannabinoids in order to select from, but i have the fresh tastiest real time resin vape pen flavors on the planet. For those who’re also on the look for something sweet and you may creamy, the Ice cream Cake real time resin pencil is just about to blow your face! Have to lose yourself to the taste out of antique cannabis?

Some thing anywhere between waxy and liquid, live resin has extreme styles and you can aromas obtained from the brand new plant it’s acquired of. The newest antique THC oil vape pencil is a simple means to fix appreciate marijuana and when and you can regardless of where the mood strikes. They have a tendency to be obtainable in of many flavors and you may advantages, causing them to the greatest mix and you will match choice for smoking to the the newest wade. To create the new vape oils utilized in a THC cartridge, simple provider petroleum are infused which have marijuana and you will elective dishes including flavoring agents or any other bioactives. By opening and you will/or using the Services, you agree to getting bound by these Conditions. Such as, if you take part in the brand new Verilife VeriVIP Advantages Program, the new VeriVIP Rewards Program Small print will also regulate your involvement from the Perks System.

runtz vape pen review

THC Cartridges has officially gathered business soil in america, British, Canada, and you may Europe. The new eight greatest weed oils pencils you’ll find in it list were picked because of their create quality, design, precision and gratification with multiple pre-occupied THC oil and you can distillate cartridges. For many who’re also an alternative to so it, be sure to read the publication lower than, even though you understand how to explore an excellent vape pencil.

We might gather in person identifiable advice of Pages after they visit all of our Site and you can fill in the advice through our Contact page. We’re going to gather so it personally identifiable advice from Profiles only if they willingly fill in suggestions so you can all of us. Profiles can always will not also have myself recognizable advice, other than it could avoid them out of engaging in Website-associated issues or getting responses on their inquiries or any other information of interest. He or she is extremely well-known because they are low priced and easy in order to fool around with. The level of milligrams CBD is actually changeable it’s the main one CBD equipment you can modify to fulfill their specific means. During the TRĒ Family, we’lso are committed to high quality, ingenuity, and you may putting some dopest pencils on the block.

THC vape oil is tremendously well-known selection for cannabis people looking to benefits, style, fast onset, and strong consequences. Very vape pencils (or batteries because they’re also categorised as) complement nicely inside a pocket, backpack, otherwise handbag and you will build a great (mostly) odorless vapor one to’s almost hidden. The service can offer certain features and you will features that exist to you using your wireless Unit. These features and you will features vary from the ability to accessibility the fresh Service’s has and you can upload articles on the Provider, receive texts regarding the Solution, and down load apps on the wireless Unit (together, “Wireless Have”). Fundamental chatting, investigation, and other charges could be charged by your company to join inside the Cordless Provides.

best weed in the uk

Exactly what set him or her aside ‘s the addition of live rosin. I very carefully hobby all of our live rosin to bring you the full flavor and you may complete potency away from cannabis. By flash-freezing large-quality hemp just after accumulate, we’lso are capable trap throughout of the delicious terpenes and you can avoid the degradation your beloved psychoactive cannabinoids.

It perform at the lower temperature than just the common, informal flames. Rather than promoting cig (because of consuming), it generate steam (due to vaporization). On this page, we’ll let you know why of several think vaping to be an excellent “safer” choice than simply smoking. Next i’ll make suggestions 15 of the greatest THC vape pens on the the market industry to get you already been. Earliest, even when, let’s talk about just what vaping are and exactly what it isn’t.

Sometimes they try referred to as an excellent cartridge battery pack. That’s because the all weed pen homes a tiny power supply you to heats the petroleum within the a keen atomizer cartridge that has an excellent wick and you may a great heat coil. It temperature processes converts concentrates on the THC-filled steam. PharmaCann could have zero control over the message, operations, rules, conditions, and other areas of Connected Functions, and you may PharmaCann does not suppose any obligations to review people Linked Features. PharmaCann isn’t accountable for the standard or birth of your goods and services offered, utilized, received by or said at the for example Linked Features.

Vaporizers functions because of the heating the dead plant life otherwise focuses instead consuming her or him. By heating the information presented right up lightly without having to use a great flames, it reduces the ill effects because of cigarette smoking and you can maximizes the newest outcomes. That it steam, when inhaled, is immersed because of the lungs and you may passes directly into the new blood, meaning the results is sensed almost quickly. Ahead of entering their vaping travel, being conscious of the fresh court land is essential. The brand new legality away from ingesting specific compounds thru vaporizers can vary round the regions or claims.

Glo Carts

selling weed online

Because of the clicking “We concur” you swear and/otherwise affirm less than punishment of perjury that you are at the least 21 years old. Absolutely nothing on this site should be considered legal services or because the a substitute for legal services. In comparison to the almost every other preferred methods of consumption — dishes, puffing, dabbing — THC vape pencils are among the more expensive possibilities. It’s crucial that you understand that there are many more discreet types of getting your daily dose — food, gummies, teas, java, tinctures — however for individuals who want to breathe their cannabinoids, THC vape pencils are an excellent provider. The low speed (49) causes it to be another great choice for the individuals seeking to capture the first tentative steps in the world of THC vape pencils as opposed to investing an excessive amount of dough. The main cause Orb step 3 because of the Origin Vapes is actually the newest Swiss Military Blade of the THC vape pen industry.

Exactly what are Vaporizers?

It’s got seven various other atomizers so that you’lso are available to almost any marijuana condition towards the top of. The fresh DL in the DL1 represents “down low” and that’s exactly what so it THC vape pencil also offers. It’s good deal (simply fifty) and easy-to-fool around with construction make it the ideal choice to have a great “go-anywhere, smoke-anywhere” vape pen. Here are the 15 better THC vape pens to choose. Are you looking for an alternative to the brand new severe, hack-causing smoke produced by their joints, blunts, bongs, and you will Thai sticks?

It gives simple and you may consistent moves, and acquired’t burn out your coil. It works perfectly which have SPRK cartridges and most common 510 threaded oils carts. Process of Service; Availability of Products; International Items. Both you and we disclaim one application to these Terms of the brand new Conference for the Contracts for the Around the world Sales of products. Grass.com is the perfect place to be if you are looking to have the best CBD vape pencil in the market, whether it’s a throw away vape otherwise a good refillable CBD vape pencil.

watermelon strain effects

It’s a Cambrian explosion of cart species—and many of the finest posts try solitary-origin farmed, extracted, and filled inside the-household, for example from the Archive PDX. Carts are versatile and you will simple that you can forget your get one for you, especially if they actually do their job. Don’t ignore to explore a knowledgeable you to carts could possibly offer so it April. Below are a few away from The usa’s greatest THC carts adding clouds. You’lso are knowledgeable, provided, and ready to go, the good news is you’lso are wanting to know strategies for marijuana oil. As they offer benefits, a lot of people along with wonder what exactly they include beyond cannabis and you can the brand new basic oils it’s used to infuse.

(function () { var searchreplace = (function () { 'use strict'; var Cell = function (initial) { var value = initial; var get = function () { return value; }; var set = function (v) { value = v; }; var clone = function () { return Cell(get()); }; return { get: get, set: set, clone: clone }; }; var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); function isContentEditableFalse(node) { return node && node.nodeType === 1 && node.contentEditable === 'false'; } function findAndReplaceDOMText(regex, node, replacementNode, captureGroup, schema) { var m; var matches = []; var text, count = 0, doc; var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap; doc = node.ownerDocument; blockElementsMap = schema.getBlockElements(); hiddenTextElementsMap = schema.getWhiteSpaceElements(); shortEndedElementsMap = schema.getShortEndedElements(); function getMatchIndexes(m, captureGroup) { captureGroup = captureGroup || 0; if (!m[0]) { throw new Error('findAndReplaceDOMText cannot handle zero-length matches'); } var index = m.index; if (captureGroup > 0) { var cg = m[captureGroup]; if (!cg) { throw new Error('Invalid capture group'); } index += m[0].indexOf(cg); m[0] = cg; } return [ index, index + m[0].length, [m[0]] ]; } function getText(node) { var txt; if (node.nodeType === 3) { return node.data; } if (hiddenTextElementsMap[node.nodeName] && !blockElementsMap[node.nodeName]) { return ''; } txt = ''; if (isContentEditableFalse(node)) { return '\n'; } if (blockElementsMap[node.nodeName] || shortEndedElementsMap[node.nodeName]) { txt += '\n'; } if (node = node.firstChild) { do { txt += getText(node); } while (node = node.nextSibling); } return txt; } function stepThroughMatches(node, matches, replaceFn) { var startNode, endNode, startNodeIndex, endNodeIndex, innerNodes = [], atIndex = 0, curNode = node, matchLocation = matches.shift(), matchIndex = 0; out: while (true) { if (blockElementsMap[curNode.nodeName] || shortEndedElementsMap[curNode.nodeName] || isContentEditableFalse(curNode)) { atIndex++; } if (curNode.nodeType === 3) { if (!endNode && curNode.length + atIndex >= matchLocation[1]) { endNode = curNode; endNodeIndex = matchLocation[1] - atIndex; } else if (startNode) { innerNodes.push(curNode); } if (!startNode && curNode.length + atIndex > matchLocation[0]) { startNode = curNode; startNodeIndex = matchLocation[0] - atIndex; } atIndex += curNode.length; } if (startNode && endNode) { curNode = replaceFn({ startNode: startNode, startNodeIndex: startNodeIndex, endNode: endNode, endNodeIndex: endNodeIndex, innerNodes: innerNodes, match: matchLocation[2], matchIndex: matchIndex }); atIndex -= endNode.length - endNodeIndex; startNode = null; endNode = null; innerNodes = []; matchLocation = matches.shift(); matchIndex++; if (!matchLocation) { break; } } else if ((!hiddenTextElementsMap[curNode.nodeName] || blockElementsMap[curNode.nodeName]) && curNode.firstChild) { if (!isContentEditableFalse(curNode)) { curNode = curNode.firstChild; continue; } } else if (curNode.nextSibling) { curNode = curNode.nextSibling; continue; } while (true) { if (curNode.nextSibling) { curNode = curNode.nextSibling; break; } else if (curNode.parentNode !== node) { curNode = curNode.parentNode; } else { break out; } } } } function genReplacer(nodeName) { var makeReplacementNode; if (typeof nodeName !== 'function') { var stencilNode_1 = nodeName.nodeType ? nodeName : doc.createElement(nodeName); makeReplacementNode = function (fill, matchIndex) { var clone = stencilNode_1.cloneNode(false); clone.setAttribute('data-mce-index', matchIndex); if (fill) { clone.appendChild(doc.createTextNode(fill)); } return clone; }; } else { makeReplacementNode = nodeName; } return function (range) { var before; var after; var parentNode; var startNode = range.startNode; var endNode = range.endNode; var matchIndex = range.matchIndex; if (startNode === endNode) { var node_1 = startNode; parentNode = node_1.parentNode; if (range.startNodeIndex > 0) { before = doc.createTextNode(node_1.data.substring(0, range.startNodeIndex)); parentNode.insertBefore(before, node_1); } var el = makeReplacementNode(range.match[0], matchIndex); parentNode.insertBefore(el, node_1); if (range.endNodeIndex < node_1.length) { after = doc.createTextNode(node_1.data.substring(range.endNodeIndex)); parentNode.insertBefore(after, node_1); } node_1.parentNode.removeChild(node_1); return el; } before = doc.createTextNode(startNode.data.substring(0, range.startNodeIndex)); after = doc.createTextNode(endNode.data.substring(range.endNodeIndex)); var elA = makeReplacementNode(startNode.data.substring(range.startNodeIndex), matchIndex); for (var i = 0, l = range.innerNodes.length; i < l; ++i) { var innerNode = range.innerNodes[i]; var innerEl = makeReplacementNode(innerNode.data, matchIndex); innerNode.parentNode.replaceChild(innerEl, innerNode); } var elB = makeReplacementNode(endNode.data.substring(0, range.endNodeIndex), matchIndex); parentNode = startNode.parentNode; parentNode.insertBefore(before, startNode); parentNode.insertBefore(elA, startNode); parentNode.removeChild(startNode); parentNode = endNode.parentNode; parentNode.insertBefore(elB, endNode); parentNode.insertBefore(after, endNode); parentNode.removeChild(endNode); return elB; }; } text = getText(node); if (!text) { return; } if (regex.global) { while (m = regex.exec(text)) { matches.push(getMatchIndexes(m, captureGroup)); } } else { m = text.match(regex); matches.push(getMatchIndexes(m, captureGroup)); } if (matches.length) { count = matches.length; stepThroughMatches(node, matches, genReplacer(replacementNode)); } return count; } var FindReplaceText = { findAndReplaceDOMText: findAndReplaceDOMText }; var getElmIndex = function (elm) { var value = elm.getAttribute('data-mce-index'); if (typeof value === 'number') { return '' + value; } return value; }; var markAllMatches = function (editor, currentIndexState, regex) { var node, marker; marker = editor.dom.create('span', { 'data-mce-bogus': 1 }); marker.className = 'mce-match-marker'; node = editor.getBody(); done(editor, currentIndexState, false); return FindReplaceText.findAndReplaceDOMText(regex, node, marker, false, editor.schema); }; var unwrap = function (node) { var parentNode = node.parentNode; if (node.firstChild) { parentNode.insertBefore(node.firstChild, node); } node.parentNode.removeChild(node); }; var findSpansByIndex = function (editor, index) { var nodes; var spans = []; nodes = global$1.toArray(editor.getBody().getElementsByTagName('span')); if (nodes.length) { for (var i = 0; i < nodes.length; i++) { var nodeIndex = getElmIndex(nodes[i]); if (nodeIndex === null || !nodeIndex.length) { continue; } if (nodeIndex === index.toString()) { spans.push(nodes[i]); } } } return spans; }; var moveSelection = function (editor, currentIndexState, forward) { var testIndex = currentIndexState.get(); var dom = editor.dom; forward = forward !== false; if (forward) { testIndex++; } else { testIndex--; } dom.removeClass(findSpansByIndex(editor, currentIndexState.get()), 'mce-match-marker-selected'); var spans = findSpansByIndex(editor, testIndex); if (spans.length) { dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected'); editor.selection.scrollIntoView(spans[0]); return testIndex; } return -1; }; var removeNode = function (dom, node) { var parent = node.parentNode; dom.remove(node); if (dom.isEmpty(parent)) { dom.remove(parent); } }; var find = function (editor, currentIndexState, text, matchCase, wholeWord) { text = text.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); text = text.replace(/\s/g, '[^\\S\\r\\n]'); text = wholeWord ? '\\b' + text + '\\b' : text; var count = markAllMatches(editor, currentIndexState, new RegExp(text, matchCase ? 'g' : 'gi')); if (count) { currentIndexState.set(-1); currentIndexState.set(moveSelection(editor, currentIndexState, true)); } return count; }; var next = function (editor, currentIndexState) { var index = moveSelection(editor, currentIndexState, true); if (index !== -1) { currentIndexState.set(index); } }; var prev = function (editor, currentIndexState) { var index = moveSelection(editor, currentIndexState, false); if (index !== -1) { currentIndexState.set(index); } }; var isMatchSpan = function (node) { var matchIndex = getElmIndex(node); return matchIndex !== null && matchIndex.length > 0; }; var replace = function (editor, currentIndexState, text, forward, all) { var i, nodes, node, matchIndex, currentMatchIndex, nextIndex = currentIndexState.get(), hasMore; forward = forward !== false; node = editor.getBody(); nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan); for (i = 0; i < nodes.length; i++) { var nodeIndex = getElmIndex(nodes[i]); matchIndex = currentMatchIndex = parseInt(nodeIndex, 10); if (all || matchIndex === currentIndexState.get()) { if (text.length) { nodes[i].firstChild.nodeValue = text; unwrap(nodes[i]); } else { removeNode(editor.dom, nodes[i]); } while (nodes[++i]) { matchIndex = parseInt(getElmIndex(nodes[i]), 10); if (matchIndex === currentMatchIndex) { removeNode(editor.dom, nodes[i]); } else { i--; break; } } if (forward) { nextIndex--; } } else if (currentMatchIndex > currentIndexState.get()) { nodes[i].setAttribute('data-mce-index', currentMatchIndex - 1); } } currentIndexState.set(nextIndex); if (forward) { hasMore = hasNext(editor, currentIndexState); next(editor, currentIndexState); } else { hasMore = hasPrev(editor, currentIndexState); prev(editor, currentIndexState); } return !all && hasMore; }; var done = function (editor, currentIndexState, keepEditorSelection) { var i, nodes, startContainer, endContainer; nodes = global$1.toArray(editor.getBody().getElementsByTagName('span')); for (i = 0; i < nodes.length; i++) { var nodeIndex = getElmIndex(nodes[i]); if (nodeIndex !== null && nodeIndex.length) { if (nodeIndex === currentIndexState.get().toString()) { if (!startContainer) { startContainer = nodes[i].firstChild; } endContainer = nodes[i].firstChild; } unwrap(nodes[i]); } } if (startContainer && endContainer) { var rng = editor.dom.createRng(); rng.setStart(startContainer, 0); rng.setEnd(endContainer, endContainer.data.length); if (keepEditorSelection !== false) { editor.selection.setRng(rng); } return rng; } }; var hasNext = function (editor, currentIndexState) { return findSpansByIndex(editor, currentIndexState.get() + 1).length > 0; }; var hasPrev = function (editor, currentIndexState) { return findSpansByIndex(editor, currentIndexState.get() - 1).length > 0; }; var Actions = { done: done, find: find, next: next, prev: prev, replace: replace, hasNext: hasNext, hasPrev: hasPrev }; var get = function (editor, currentIndexState) { var done = function (keepEditorSelection) { return Actions.done(editor, currentIndexState, keepEditorSelection); }; var find = function (text, matchCase, wholeWord) { return Actions.find(editor, currentIndexState, text, matchCase, wholeWord); }; var next = function () { return Actions.next(editor, currentIndexState); }; var prev = function () { return Actions.prev(editor, currentIndexState); }; var replace = function (text, forward, all) { return Actions.replace(editor, currentIndexState, text, forward, all); }; return { done: done, find: find, next: next, prev: prev, replace: replace }; }; var Api = { get: get }; var open = function (editor, currentIndexState) { var last = {}, selectedText; editor.undoManager.add(); selectedText = global$1.trim(editor.selection.getContent({ format: 'text' })); function updateButtonStates() { win.statusbar.find('#next').disabled(Actions.hasNext(editor, currentIndexState) === false); win.statusbar.find('#prev').disabled(Actions.hasPrev(editor, currentIndexState) === false); } function notFoundAlert() { editor.windowManager.alert('Could not find the specified string.', function () { win.find('#find')[0].focus(); }); } var win = editor.windowManager.open({ layout: 'flex', pack: 'center', align: 'center', onClose: function () { editor.focus(); Actions.done(editor, currentIndexState); editor.undoManager.add(); }, onSubmit: function (e) { var count, caseState, text, wholeWord; e.preventDefault(); caseState = win.find('#case').checked(); wholeWord = win.find('#words').checked(); text = win.find('#find').value(); if (!text.length) { Actions.done(editor, currentIndexState, false); win.statusbar.items().slice(1).disabled(true); return; } if (last.text === text && last.caseState === caseState && last.wholeWord === wholeWord) { if (!Actions.hasNext(editor, currentIndexState)) { notFoundAlert(); return; } Actions.next(editor, currentIndexState); updateButtonStates(); return; } count = Actions.find(editor, currentIndexState, text, caseState, wholeWord); if (!count) { notFoundAlert(); } win.statusbar.items().slice(1).disabled(count === 0); updateButtonStates(); last = { text: text, caseState: caseState, wholeWord: wholeWord }; }, buttons: [ { text: 'Find', subtype: 'primary', onclick: function () { win.submit(); } }, { text: 'Replace', disabled: true, onclick: function () { if (!Actions.replace(editor, currentIndexState, win.find('#replace').value())) { win.statusbar.items().slice(1).disabled(true); currentIndexState.set(-1); last = {}; } } }, { text: 'Replace all', disabled: true, onclick: function () { Actions.replace(editor, currentIndexState, win.find('#replace').value(), true, true); win.statusbar.items().slice(1).disabled(true); last = {}; } }, { type: 'spacer', flex: 1 }, { text: 'Prev', name: 'prev', disabled: true, onclick: function () { Actions.prev(editor, currentIndexState); updateButtonStates(); } }, { text: 'Next', name: 'next', disabled: true, onclick: function () { Actions.next(editor, currentIndexState); updateButtonStates(); } } ], title: 'Find and replace', items: { type: 'form', padding: 20, labelGap: 30, spacing: 10, items: [ { type: 'textbox', name: 'find', size: 40, label: 'Find', value: selectedText }, { type: 'textbox', name: 'replace', size: 40, label: 'Replace with' }, { type: 'checkbox', name: 'case', text: 'Match case', label: ' ' }, { type: 'checkbox', name: 'words', text: 'Whole words', label: ' ' } ] } }); }; var Dialog = { open: open }; var register = function (editor, currentIndexState) { editor.addCommand('SearchReplace', function () { Dialog.open(editor, currentIndexState); }); }; var Commands = { register: register }; var showDialog = function (editor, currentIndexState) { return function () { Dialog.open(editor, currentIndexState); }; }; var register$1 = function (editor, currentIndexState) { editor.addMenuItem('searchreplace', { text: 'Find and replace', shortcut: 'Meta+F', onclick: showDialog(editor, currentIndexState), separator: 'before', context: 'edit' }); editor.addButton('searchreplace', { tooltip: 'Find and replace', onclick: showDialog(editor, currentIndexState) }); editor.shortcuts.add('Meta+F', '', showDialog(editor, currentIndexState)); }; var Buttons = { register: register$1 }; global.add('searchreplace', function (editor) { var currentIndexState = Cell(-1); Commands.register(editor, currentIndexState); Buttons.register(editor, currentIndexState); return Api.get(editor, currentIndexState); }); function Plugin () { } return Plugin; }()); })();