| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 | <!DOCTYPE html><!--Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license--><html><head>	<meta charset="utf-8">	<title>Mentions — CKEditor Sample</title>	<script src="../../../ckeditor.js"></script>	<link rel="stylesheet" href="../../../samples/css/samples.css"></head><body><style>	.adjoined-bottom:before {		height: 270px;	}</style><nav class="navigation-a">	<div class="grid-container">		<ul class="navigation-a-left grid-width-70">			<li><a href="https://ckeditor.com">Project Homepage</a></li>			<li><a href="https://github.com/ckeditor/ckeditor-dev/issues">I found a bug</a></li>			<li><a href="https://github.com/ckeditor/ckeditor-dev" class="icon-pos-right icon-navigation-a-github">Fork CKEditor on GitHub</a></li>		</ul>		<ul class="navigation-a-right grid-width-30">			<li><a href="https://ckeditor.com/blog/">CKEditor Blog</a></li>		</ul>	</div></nav><header class="header-a">	<div class="grid-container">		<h1 class="header-a-logo grid-width-30">			<img src="../../../samples/img/logo.svg" onerror="this.src='../../../samples/img/logo.png'; this.onerror=null;" alt="CKEditor Sample">		</h1>	</div></header><main>	<div class="adjoined-top">		<div class="grid-container">			<div class="content grid-width-100">				<h1>Mentions Demo</h1>				<p>This sample shows Mentions feature in action. Type “ @ ” to open simple autocompletion with array feed, “ $ ” (min 1 character) to open asynchronous autocompletion with URL string feed or “ # ” (min 2 characters) to open asynchronous autocompletion with custom source of data.</p>			</div>		</div>	</div>	<div class="adjoined-bottom">		<div class="grid-container">			<div class="grid-width-100">				<div id="editor">					<h1>Mentions plugin</h1>					<p>Feel free to mention @anna, @cris, @thomas or anyone else.</p>				</div>			</div>		</div>	</div></main><footer class="footer-a grid-container">	<div class="grid-container">		<p class="grid-width-100">			CKEditor – The text editor for the Internet – <a class="samples" href="https://ckeditor.com/">https://ckeditor.com</a>		</p>		<p class="grid-width-100" id="copy">			Copyright © 2003-2019, <a class="samples" href="https://cksource.com/">CKSource</a> – Frederico Knabben. All rights reserved.		</p>	</div></footer><script>	'use strict';	( function() {		var data = [				{ id: 1, name: 'john', fullName: 'John Doe' },				{ id: 2, name: 'thomas', fullName: 'Thomas Doe' },				{ id: 3, name: 'anna', fullName: 'Anna Doe' },				{ id: 4, name: 'annabelle', fullName: 'Annabelle Doe' },				{ id: 5, name: 'cris', fullName: 'Cris Doe' },				{ id: 6, name: 'julia', fullName: 'Julia Doe' }			];		CKEDITOR.replace( 'editor', {			height: 240,			extraPlugins: 'mentions,easyimage,sourcearea,toolbar,undo,wysiwygarea,basicstyles',			extraAllowedContent: 'h1',			toolbar: [				{ name: 'document', items: [ 'Source', 'Undo', 'Redo' ] },				{ name: 'basicstyles', items: [ 'Bold', 'Italic', 'Strike' ] },			],			mentions: [				{					feed: CKEDITOR.tools.array.map( data, function( item ) {									return item.name;								} ),					minChars: 0				},				{					feed: '{encodedQuery}',					marker: '$',					minChars: 1,					template: '<li data-id="{id}">{fullName}</li>'				},				{					feed: dataCallback,					marker: '#',					template: '<li data-id="{id}">{name} ({fullName})</li>'				}			],			on: {				instanceReady: function() {					// We have to stub ajax.load function.					CKEDITOR.ajax.load = function( query, callback ) {						var results = data.filter( function( item ) {								return item.name.indexOf( query ) === 0;							} );						setTimeout( function() {							callback( JSON.stringify( results ) );						}, Math.random() * 500 );					}				}			}		} );		function dataCallback( opts, callback ) {			setTimeout( function() {				callback(					data.filter( function( item ) {						return item.name.indexOf( opts.query ) === 0;					} )				);			}, Math.random() * 500 );		}	} )();</script></body></html>
 |