5
<title>AutoComplete manual test</title>
6
<!-- <link rel="stylesheet" href="../../../../build/cssreset/reset-min.css">
7
<link rel="stylesheet" href="../../../../build/cssbase/base-min.css"> -->
8
<link rel="stylesheet" href="../assets/test-console.css">
9
<!-- for design iteration -->
10
<!-- <link rel="stylesheet" href="../../assets/autocomplete-list-core.css">
11
<link rel="stylesheet" href="../../assets/skins/sam/autocomplete-list-skin.css"> -->
16
font-family: Helvetica, sans-serif;
23
border: 1px solid #afafaf;
27
fieldset label { margin-right: 0.5em; }
34
#log { margin-top: 4em; }
40
text-decoration: none;
76
.twitter .user { margin-right: 6px; }
80
<body class="yui3-skin-sam">
82
<h1>AutoComplete manual test</h1>
86
<label for="ac-input">Type things here! Try the name of a US state.</label><br>
87
<input type="text" id="ac-input">
91
<legend>Source</legend>
94
<option value="none">None</option>
95
<option value="local" selected>Local (Array)</option>
96
<option value="function">Local (Function)</option>
97
<option value="flickr">Remote (Flickr)</option>
98
<option value="search">Remote (Y! Search)</option>
99
<option value="twitter">Remote (Twitter Search)</option>
100
<option value="xhr">Remote (XHR)</option>
105
<fieldset id="filters">
106
<legend>Result Filters</legend>
110
<fieldset id="highlighters">
111
<legend>Result Highlighters</legend>
113
<input type="radio" class="highlighter" name="highlighter" id="highlighter_none" value="none" checked="checked">
114
<label for="highlighter_none">None</label>
118
<fieldset id="other">
119
<legend>Other Settings</legend>
121
<label for="delimiter">Query delimiter:</label>
122
<input type="text" id="delimiter">
129
<script src="../assets/test-data.js"></script>
130
<script src="../../../../build/yui/yui.js"></script>
135
'autocomplete': 'debug',
136
'autocomplete-base': 'debug',
137
'autocomplete-list': 'debug'
140
useBrowserConsole: false,
142
// For design iteration.
144
// 'skin-sam-autocomplete',
145
// 'skin-sam-autocomplete-list'
149
'autocomplete-filters',
150
'autocomplete-highlighters',
156
Y.one('#ac-form').reset();
158
// -- Console setup ------------------------------------------------------------
162
}).plug(Y.Plugin.ConsoleFilters, {}).render('#log');
164
// -- AutoComplete setup -------------------------------------------------------
165
var autoComplete = new Y.AutoComplete({inputNode: '#ac-input'});
167
// For easier debugging.
170
// -- UI stuff -----------------------------------------------------------------
171
var filtersDiv = Y.one('#filters>div'),
172
highlightersDiv = Y.one('#highlighters>div');
174
// Create filter checkboxes.
175
Y.Object.each(Y.AutoCompleteFilters, function (filter, name) {
176
if (name.indexOf('_') === 0) {
181
'<input type="checkbox" class="filter" id="filter_' + name + '" value="' + name + '"' + (name === 'phraseMatch' ? ' checked="checked"' : '') + '>' +
182
'<label for="filter_' + name + '">' + name + '</label>'
186
// Create highlighter radio buttons.
187
Y.Object.each(Y.AutoCompleteHighlighters, function (highlighter, name) {
188
if (name.indexOf('_') === 0) {
192
highlightersDiv.append(
193
'<input type="radio" class="highlighter" name="highlighter" id="highlighter_' + name + '" value="' + name + '"' + (name === 'phraseMatch' ? ' checked="checked"' : '') + '>' +
194
'<label for="highlighter_' + name + '">' + name + '</label>'
198
// Handle clicks on datasource radio buttons.
199
Y.one('#source').on('change', function (e) {
200
switch (e.target.get('value')) {
231
// Handle clicks on filters.
232
Y.delegate('click', setFilters, '#filters', 'input[type="checkbox"]');
234
// Handle clicks on highlighters.
235
Y.delegate('click', setHighlighter, '#highlighters', 'input[type="radio"]');
237
// Handle delimiter changes.
238
Y.on('change', setDelimiter, '#delimiter');
244
autoComplete.render();
245
autoComplete.get('inputNode').focus();
247
// -- UI functions -------------------------------------------------------------
248
function flickrFormatter(query, results) {
249
return Y.Array.map(results, function (result) {
250
var imgUrl = Y.Lang.sub('http://farm{farm}.static.flickr.com/{server}/{id}_{secret}_s.jpg', result.raw);
252
return '<div class="flickr">' +
253
'<img src="' + imgUrl + '" alt="thumbnail">' +
254
'<span class="title">' + result.highlighted + '</span>' +
259
function twitterFormatter(query, results) {
260
return Y.Array.map(results, function (result) {
262
'<div class="twitter" data-tweet-id="{id}">' +
264
'<img src="{imgurl}" class="photo" alt="Profile photo for {user}">' +
267
'<strong class="user">{user}</strong>' +
268
'<span class="tweet-text">{text}</span>' +
276
imgurl: result.raw.profile_image_url,
277
text : result.highlighted,
278
time : result.raw.created_at,
279
user : result.raw.from_user
284
function setDelimiter(e) {
285
autoComplete.set('queryDelimiter', e.target.get('value'));
288
function setFilters() {
292
Y.all('#filters input.filter').each(function (input) {
293
if (input.get('checked')) {
294
filterNames.push(input.get('value'));
298
Y.Array.each(filterNames, function (name) {
302
autoComplete.set('resultFilters', filters);
305
function setHighlighter() {
306
Y.all('#highlighters input.highlighter').some(function (input) {
309
if (input.get('checked')) {
310
name = input.get('value');
311
autoComplete.set('resultHighlighter', name === 'none' ? null : name);
317
// -- DataSource functions -----------------------------------------------------
319
Y.log('using no source', 'info', 'autocomplete');
321
autoComplete.detachAll('test|*');
323
autoComplete.setAttrs({
325
resultFormatter : null,
326
resultListLocator: null,
327
resultTextLocator: null,
332
function useLocal() {
333
Y.log('using local array source', 'info', 'autocomplete');
335
autoComplete.detachAll('test|*');
337
autoComplete.setAttrs({
339
resultFormatter : null,
340
resultListLocator: null,
341
resultTextLocator: null,
342
source : ExampleData.arrayStates
346
function useFunction() {
347
Y.log('using local function source', 'info', 'autocomplete');
349
autoComplete.detachAll('test|*');
351
autoComplete.setAttrs({
353
resultFormatter : null,
354
resultListLocator: null,
355
resultTextLocator: null,
356
source : function (query) { return ExampleData.arrayStates; }
360
function useFlickr() {
361
Y.log('using remote Flickr YQL source', 'info', 'autocomplete');
363
autoComplete.detachAll('test|*');
365
autoComplete.setAttrs({
367
resultFormatter : flickrFormatter,
368
resultListLocator: null,
369
resultTextLocator: 'title',
370
source : 'select * from flickr.photos.search where tags="{query}"'
374
function useSearch() {
375
Y.log('using remote Y! Search YQL source', 'info', 'autocomplete');
377
autoComplete.detachAll('test|*');
379
autoComplete.setAttrs({
381
resultFormatter : null,
382
resultListLocator: null,
383
resultTextLocator: null,
384
source : 'select * from search.suggest where query="{query}"',
385
yqlEnv : 'http://pieisgood.org/yql/tables.env'
389
function useTwitter() {
390
Y.log('using remote Twitter JSONP source', 'info', 'autocomplete');
392
autoComplete.detachAll('test|*');
394
autoComplete.setAttrs({
396
resultFormatter : twitterFormatter,
397
resultListLocator: 'results',
398
resultTextLocator: 'text',
399
source : 'http://search.twitter.com/search.json?q={query}&callback={callback}&rpp={maxResults}&result_type=recent'
404
Y.log('using XHR source', 'info', 'autocomplete');
406
autoComplete.detachAll('test|*');
408
autoComplete.setAttrs({
410
resultFormatter : null,
411
resultListLocator: null,
412
resultTextLocator: null,
413
source : '../assets/xhr-data.json?query={query}'