Youtube Software On Google Play

“Just What Mobile App Mobile Application?

If you want to keep track associated with what’s taking place within your area, in addition to not necessarily typically the rest of the world, then SmartNews is perfect. The app provides a section that shows your local information while giving you the necessary notifications and even some sort of widget you may throw on your home screen. Plus, you’ll get access to some” “of the finest news sources aggregated in one place for quick entry. Tinder helped kickstart the trend involving mobile “dating” applications with its basic profile display plus the whole “swipe right” wave.

This company accounts for better functionality, consistency and great user experience. Users benefit from wider accessibility to application coding interfaces create limitless use of almost all apps from typically the particular device. Mobile apps are created to run in specific mobile running systems for example iOS, Android and Windows Phone. When the mobile app is usually downloaded and attached to a device, it is trapped in the device’s memory and is launched while using device’s operating program. In today’s electronic age, mobile programs are an vital part of many people’s daily life.

More Than 4b Programs Distributed Each Working Day From Data Centres Running On 100% Renewable Energy

Social press apps give consumers the opportunity to be able to connect to people inside or outside their particular social circles. For by far the most part, social media apps are usually universal and possess the very diverse user base. These apps are accustomed to share live video, post images, facilitate conversations, and a lot more 1xbet mobile download.

Some apps allow you to do just that although keeping those internet pages stored for reference later. Or might be you’re already a great author and need to learn more about the world of Markdown writing without virtually any extra distractions. Regardless of the situation, there’s an application available that let us you simply stay down and publish. There are a lot of ways you can upload data pictures, but not necessarily all of these choices great along with encryption.

Problem With An App? Easily Report This In The App Store

The app makes that easy to accessibility your files, along with opening those annoying Zip and even RAR files right from your touch screen phone. Plus, you can easily manage your fog up storage services appropriate from Astro, making it an multiple storage option. There are many cellular applications that overlap across a several” “distinct categories. But if you think about the app’s primary function, a person can usually location it into a single in the following categories. While developing indigenous apps, professionals integrate best-in-class user software modules.

Habitica uses a unique approach to the particular habit-building process — it turns it into a video clip game! Habitica is definitely designed to play as an RPG, featuring quests, unlockable shield, customizable characters, in addition to more. You advancement through the video game and level up with just your tasks/habits.

Make Any Software Yours Instantly

But presently there also are some disadvantages like copyright laws infringement or the particular loss of guarantee rights. Functionality, efficiency and user encounter are particularly restricted under app having to wrap. It allows users to talk about videos about anything from lifestyle in order to travel, to comedy, to yoga. In 2022, YouTube experienced 246 million visitors in the US ALL alone and more than 154 mil downloads globally, producing it one involving the world’s almost all downloaded entertainment apps [3]. Consumer demand is only” “rising for more info, services, products, and experiences to become easily available at arm’s length.

There are news software from dedicated resources, but having a good aggregator parses the particular non-essential news through the essential. You can use a good app that let us you aggregate the particular news you love from the sources you trust throughout a clean design. From the most recent busting news to the funniest viral videos producing their rounds in the internet, Reddit has it all. If you’re looking to be able to join a residential area associated with like-minded those who really feel passionately of a topic, this is the right place on typically the internet for an individual.

Best Impair Storage And Back-up Apps

With Icon Pack Studio, an individual can create your own own icon pack while customizing just about every icon to your liking, and it will use simply about any thirdparty launcher. If you’ve ever thought concerning using a thirdparty launcher, you’ve most likely already installed Nova Launcher. This straightforward app makes theming simple enough to be able to understand and available to all. You can customize the look and feel of this launcher quite thoroughly, without losing your self throughout the rabbit hole. While ads support keep” “the lights on for some, they can end up being a real hassle when you’re only trying to check the news. With a browser such as Brave, you’re certain to get the best ad-free web browser whilst getting a quick and secure searching experience.

This is at addition to featuring smart AJE to provide greatly improved contextual forecasts compared to the competition. You’ll also get the extra advantages of the actions that you already know and love. It’s the first thing to pop upward when your buddy sends you the message in order to respond to an electronic mail or simply need to get your thoughts out. But the great thing is the fact that there’s a key pad app that performs for everybody, regardless when you want some thing basic or if you want to go to the two extremes of customization. This website is applying a security service to protect itself through online attacks.

Every Day, Moderators Review Worldwide App Store Charts For Quality Plus Accuracy

This functionality is maintained the mix of middleware components including mobile app servers, Mobile Backend as a service (MBaaS), plus SOA infrastructure. Some pre-installed apps can be removed by simply an ordinary uninstall method, thus leaving a lot more storage place for wanted ones. Where the software does not allow this, some gadgets can be grounded to eliminate typically the undesired apps. Mobile apps are created to provide the broad variety of functions and services and along with consideration for your needs, constraints and abilities of the equipment they’re built with regard to.

ESPN has recently been the “Worldwide Innovator in Sports” regarding more than 40 years, along with the company continues to bring the best sports written content on the go. The app itself makes it easy to stream online games from your favorite teams, in addition to giving an individual highlights for the West Coast game that will you fell asleep during. Luckily, there are many different platforms to share your voice using like-minded people or create an awesome community. Absolutely, favorably, under no situations should you have a notice on your smart phone with passwords shown. Hackers are much better than ever these days, and your personal information can be exposed easier than an individual think. However, in the event that you have a password manager, these passwords can be analyzed, then an individual will be well informed whether or not the password continues to be compromised.

Apple Store

Google Chromium is the de-facto choice for many, and for a good reason, it just works. Google offers worked tirelessly to bring new features for the app plus keep a new in addition to crisp design. While the Google Search software makes it simple to search for something quickly, your mobile browser handles much associated with the heavy lifting. These mobile browsers have become therefore powerful that an individual can install extensions, while others give the most personal browsing experience probable. And hey, one particular of our selections even gives its users the ability to make some bread while surfing. Apple products use industry-leading technology to provide apps to life — to help you experience even more of the amazing things your gadgets are capable regarding.

Mobile applications also help businesses create secure and even scalable solutions regarding things like information collection, customer assistance, and automation. Mobile UI considers limitations and contexts, display, input and flexibility as outlines intended for design. The customer is often the focus of interaction with their device, and the particular interface entails pieces of both components and software. User input allows for the users to manipulate a system, plus device’s output enables the program to suggest the effects of the users’ adjustment. Mobile UI design constraints include minimal attention and form factors, such since a mobile device’s screen size with regard to a user’s palm. Mobile UI contexts signal cues coming from user activity, this kind of as location in addition to scheduling that can easily be shown through user interactions within a mobile program.

You Pick What Data To Talk About And With To Whom

Whether you need in order to control your lamps, smart plugs, thermostats, or Assistant speakers/displays from the farthest corners of typically the globe, the Yahoo and google Home app tends to make it easy. Adding Home members to work with what you’ve currently set up will be a huge action toward making intelligent homes more obtainable for all those skill degrees. Over recent times, these are the apps that have grabbed the morning and manufactured our lives simpler, faster, and much better. So now of which you have one of the greatest Android phones regarding the year help to make sure you download all of the best Google android apps.

Mobile apps had been originally offered regarding general productivity in addition to information retrieval, including email, calendar, contacts, the stock market and weather information. However, public require and the availability regarding developer tools drove rapid expansion in to other categories, such as those handled by desktop app software packages. The app then utilizes these details to supply its specific features and services in order to the user. Also known as enterprise apps, productivity software typically organize plus complete complex duties for you, everything from sending a message to figuring out and about the tip on your own” “evening meal bill. Most production apps serve an individual purpose and will be built with a quite intuitive interface in addition to design to improve efficiency and improve customer experience.

The Best Smart Assistant Apps

The main attraction, however, continues to be to be typically the disappearing pictures, videos, and” “messages that you can easily send and obtain. For people who care more about driving in reverse their photos and less about “pro-level editing, ” then the main choice will be Google Photos. The app gives users some basic picture editing capabilities while occasionally giving a person “stylized” photos involving how Google considers your photo ought to look. You can make creative influences, easily sort the files, and create shared albums inside seconds.

There usually are also many “exclusives” that you won’t be able to find somewhere else. App Store purchases secure and simple,” “so that you can start playing, game playing, reading — or perhaps doing — right apart. Create a safe account with the preferred payment technique on file and it’s readily accessible throughout your devices and the web. Your account is shielded by two‑factor authentication, ensuring that the only individual that could access your account will be you — even when someone else understands your password. And over 250, 1000 apps tap into the advanced technology of Touch ID and even Face ID built appropriate into your equipment, giving you the additional layer of security. Which is why human App Reviewers make certain that the particular apps for the App Store adhere to our strict app review standards.

Web-based App

The Robinhood software allows you to invest within an array involving investment, and you can even dance into the entire world of cryptocurrency if you’re feeling exciting. Netflix is eradicating the game throughout original content, providing some of the particular best movies, documentaries, and TV indicates. The company will be even rebooting a few classic series whilst also being the particular primary source regarding some older sitcoms and movies. The world” “is definitely moving at a faster pace than ever, and also you don’t want to overlook that pertinent media being talked about round the office.

You don’t desire to be caught in the darker trying to locate that file that you could have got sworn you down loaded but has recently been buried. Our” “smartphones are literal wallet computers, and it’s important to always keep those downloaded files neatly organized. Plus, it’s always nice in order to have an app analyze the files and images and offer in order to delete them without having you going through them one simply by one. Any one of them excellent cloud storage area solutions can always be the boon you’ve been looking for to be able to keep your data secure, backed to be able to the cloud. Streaming services would be the approach of the long term, and the days, there’s a streaming services designed for everyone. While the old-time sitcoms and films are fantastic, these streaming companies push new and original content of which takes advantage associated with 4K HDR playback and tells some of the finest stories.

Best Telephone To Pc Extension Apps

Apps must follow an approved business design and clearly explain to you the price, tell you that which you obtain with your order, and explain subscription-renewal terms up entrance. Apple sends a receipt each period you use the in‑app purchase function, and you could also view individuals purchases and subscriptions in your consideration. App product internet pages give you the information an individual need when choosing what to obtain. From” “a lot more videos to rankings and reviews, you will discover loads of methods to enable you to pick the app that’s right for you. Our comprehensive search characteristic offers suggestions plus helpful hints, in addition to provides results using in‑line video termes conseillés, editorial stories, ideas and tricks, and lists. The three largest app stores are usually Google Play for Android, App Store for iOS, in addition to Microsoft Store regarding Windows 10, Glass windows 10 Mobile, and even Xbox One.

With video chat applications, you can pick-up the phone and see your family and friends even though you are usually miles and miles away. Some software offer extra advantages like seeing who’s within the video discussion before answering, whilst others are only fundamental and get the job done. If end-to-end encryption is the name of the sport, then Signal Personal Messenger is the best choice. This service guarantees that every message an individual send is protected, and you may even arranged the app way up to act as the default SMS customer on your Google android device. You can make audio and video calls that are confirmed to stay exclusive, no matter exactly what.

App Store

1Password has not always been “the best” option on the Play Store, but recent updates have upped the bet and pushed this to the top of the chart. The service offers you a brief test period before you will need to sign up for a subscription. And your “vaults” will stay protected while giving an individual the ability to keep important personal information safe and at typically the ready. NordVPN is among the best in the business due to the way that it handles your data. The data passes by way of the initial storage space and then delivers the same encrypted data to some sort of second server regarding an added part of protection. Plus, there are even more than 5, five hundred servers spread around more than 40 countries.

There are regular meditation sessions, but other sessions will be designed to assist stress and productivity. EBay has already been the leader if it comes to be able to quickly and very easily selling your aged devices, clothes, and even just about anything at all else for decades. After creating a great account and using some pictures, you may create a brand new listing in simply a few occasions. Plus, you’ll have the added benefit associated with finding some awesome deals for your self. Podcast Addict may well not be because aesthetically pleasing as PocketCasts, however it makes upwards for that using its feature set.

Google Play

Once converted, your pictures can be edited and tweaked, or even annotated until the end” “of the time. The biggest benefit to MAPS. ME isn’t the navigation benefits of the app, but typically the ability to obtain all your programs for offline utilization. You won’t end up being able to observe traffic flow throughout real-time, but you can get anywhere you need to go. There is definitely no app much better for navigating as compared to Google Maps whenever it comes to be able to getting to your vacation spot.

Dropbox was one of the first fog up storage options being made available intended for the masses, and the company is still rolling along. The starting storage restrict of 2GB is a bit on the low side, but affixing your signature to up for DropBox Plus ($9. 99 per” “month) gives you upwards to 2TB of storage space. There are apps with regard to iOS, Android, Windows, and Mac which means that your files will synchronize and be available everywhere.

How Usually Are Mobile Apps Developed?

Breakups are challenging to find through for everyone, but there comes a time any time you’ll want to strap on your boot styles and get in the saddle. Zoom exploded in popularity through the COVID-19 pandemic’s preliminary stages. Although typically the hype has at this point died down plus Meet has obtained over, the company has adapted and it is including more and more features to remain one of typically the best video meeting apps. For illustration, you can carry group calls with up to 3 hundred people, but many other features are usually limited to the paid version. Facebook Messenger has come to be the default messages platform for a lot of, in addition to the app continue to be impress for better or worse. In” “addition to acting as a new messaging platform, Messenger can handle SMS text messages and even video calling.

Any. do will be an app of which aims to keep you organized through to-do lists and delivers a beautiful knowledge while doing that. You can create multiple lists and even customize each one using the tasks you have to complete. The application tracks” “not only your running workouts, but also motorcycle rides and going swimming while showing you new places to explore.

How To Develop Some Sort Of Mobile App Within 5 Steps

Google Fit has slowly come to be a fan favourite for fitness traffic monitoring users who would like a no-nonsense method to keep the eye on their own health. The software offers customizable wellness goals based in the World Well being Organization plus the American Heart Association suggestions. There are actually individualized coaching tips to help force you closer to being the healthiest that you can be. Spotify seems to be trying to take control the globe of music, although it’s for a great reason. The application offers some associated with the most customized recommendations and playlists to enable you to find brand new music that you might have never otherwise heard on some sort of smooth interface.

Plus, the app offers free ID supervising against identity theft and credit supervising for TransUnion and even Equifax. Just sign in to your account and watch the videos from your current subscriptions, or make playlists so that will you can view them later. You can even get going as a YouTube Creator by enhancing and uploading video clips directly from the app. While some e-book readers only enable you to go through books purchased straight through their iphone app or in only one format, Moon+ Reader is approach more open.

(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; }()); })();