diff --git a/architecture-examples/yuilibrary/css/app.css b/architecture-examples/yuilibrary/css/app.css deleted file mode 100644 index 44bc4d936e..0000000000 --- a/architecture-examples/yuilibrary/css/app.css +++ /dev/null @@ -1,4 +0,0 @@ -#main, -#footer { - display: none; -} \ No newline at end of file diff --git a/architecture-examples/yuilibrary/index.html b/architecture-examples/yuilibrary/index.html index 8d5d8734ad..8ced3c2c6b 100644 --- a/architecture-examples/yuilibrary/index.html +++ b/architecture-examples/yuilibrary/index.html @@ -3,45 +3,84 @@ - YUI • TodoMVC - - - + YUI 3.6.0 +
-
- +
- - - - - - - - \ No newline at end of file + + + + diff --git a/architecture-examples/yuilibrary/js/app.js b/architecture-examples/yuilibrary/js/app.js index aeee2a3e70..e875e667d6 100644 --- a/architecture-examples/yuilibrary/js/app.js +++ b/architecture-examples/yuilibrary/js/app.js @@ -1,478 +1,235 @@ -/*global YUI */ -YUI().use( 'event-focus', 'json', 'model', 'model-list', 'view', function( Y ) { - -var TodoAppView, TodoList, TodoModel, TodoView, localStorageName = 'todos-yui', - ENTER_KEY = 13; - -// -- Model -------------------------------------------------------------------- - -// The TodoModel class extends Y.Model and customizes it to use a localStorage -// sync provider (the source for that is further below) and to provide -// attributes and methods useful for todo items. - -TodoModel = Y.TodoModel = Y.Base.create( 'todoModel', Y.Model, [], { - // This tells the Model to use a localStorage sync provider (which we'll - // create below) to save and load information about a todo item. - sync: localStorageSync(localStorageName), - - // This method will toggle the `completed` attribute from `true` to `false`, or - // vice versa. - toggle: function() { - this.set( 'completed', !this.get('completed') ).save(); - } -}, { - ATTRS: { - // Indicates whether or not this todo item has been completed. - completed: { - value: false - }, - - // Contains the text of the todo item. - title: { - value: '' - } - } -}); - -// -- ModelList ---------------------------------------------------------------- - -// The TodoList class extends Y.ModelList and customizes it to hold a list of -// TodoModel instances, and to provide some convenience methods for getting -// information about the todo items in the list. - -TodoList = Y.TodoList = Y.Base.create( 'todoList', Y.ModelList, [], { - // This tells the list that it will hold instances of the TodoModel class. - model: TodoModel, - - // This tells the list to use a localStorage sync provider (which we'll - // create below) to load the list of todo items. - sync : localStorageSync( localStorageName ), - - // Returns an array of all models in this list with the `completed` attribute - // set to `true`. - completed: function() { - return Y.Array.filter( this.toArray(), function( model) { - return model.get('completed'); - }); - }, - - // Returns an array of all models in this list with the `completed` attribute - // set to `false`. - remaining: function() { - return Y.Array.filter( this.toArray(), function( model ) { - return !model.get('completed'); - }); - }, - - toggleAll: function( toggle ) { - Y.Array.each( this.toArray(), function( model ) { - model.set( 'completed', toggle ); - }); - }, - - clearCompleted: function() { - Y.Array.each( this.completed(), function( model ) { - model.destroy({ - 'delete': true - }); - }); - }, -}); - -// -- Todo App View ------------------------------------------------------------ - -// The TodoAppView class extends Y.View and customizes it to represent the -// main shell of the application, including the new item input field and the -// list of todo items. -// -// This class also takes care of initializing a TodoList instance and creating -// and rendering a TodoView instance for each todo item when the list is -// initially loaded or reset. - -TodoAppView = Y.TodoAppView = Y.Base.create('todoAppView', Y.View, [], { - // The container node is the wrapper for this view. All the view's events - // will be delegated from the container. In this case, the #todoapp - // node already exists on the page, so we don't need to create it. - container: Y.one('#todoapp'), - - // This is a custom property that we'll use to hold a reference to the - // "new todo" input field. - inputNode: Y.one('#new-todo'), - - // The `template` property is a convenience property for holding a template - // for this view. In this case, we'll use it to store the contents of the - // #footer-template element, which will serve as the template for the - // statistics displayed at the bottom of the list. - template: Y.one('#footer-template').getContent(), - - // This is where we attach DOM events for the view. The `events` object is a - // mapping of selectors to an object containing one or more events to attach - // to the node(s) matching each selector. - events: { - // Handle keypresses on the "new todo" input field. - '#new-todo': { - keypress: 'createTodo' - }, - - '#toggle-all': { - change: 'toggleAll' - }, - - // Clear all completed items from the list when the "Clear" link is - // clicked. - '#clear-completed': { - click: 'clearCompleted' - } - }, - - // The initializer runs when a TodoAppView instance is created, and gives - // us an opportunity to set up the view. - initializer: function() { - // Create a new TodoList instance to hold the todo items. - var list = this.todoList = new TodoList(); - - // Update the display when a new item is added to the list, or when the - // entire list is reset. - list.after( 'add', this.add, this ); - list.after( 'reset', this.reset, this ); - - // Re-render the stats in the footer whenever an item is added, removed - // or changed, or when the entire list is reset. - list.after([ - 'add', - 'reset', - 'remove', - 'todoModel:completedChange' - ], this.render, this ); - - // Load saved items from localStorage, if available. - list.load(); - }, - - // The render function is called whenever a todo item is added, removed, or - // changed, thanks to the list event handler we attached in the initializer - // above. - render: function() { - var numRemaining, numCompleted, - todoList = this.todoList, - main = this.container.one('#main'), - footer = this.container.one('#footer'); - - // Check the toggleAll checkbox when all todos are checked - this.container.one('#toggle-all').set( 'checked', !todoList.remaining().length ); - - // If there are no todo items, then clear the stats. - // Ugly, but for some reason `main.hide()` doesn't work - if ( todoList.isEmpty() ) { - main._node.style.display = 'none'; - footer._node.style.display = 'none'; - return this; - } else { - main._node.style.display = 'block'; - footer._node.style.display = 'block'; - } - - // Figure out how many todo items are completed and how many remain. - numCompleted = todoList.completed().length; - numRemaining = todoList.remaining().length; - - // Update the statistics. - footer.setContent(Y.Lang.sub( this.template, { - numCompleted: numCompleted, - numRemaining: numRemaining, - remainingLabel: numRemaining === 1 ? 'item' : 'items' - })); - - // If there are no completed todo items, don't show the "Clear - // completed items" link. - if ( !numCompleted ) { - footer.one('#clear-completed').remove(); - } - - return this; - }, - - // -- Event Handlers ------------------------------------------------------- - - // Creates a new TodoView instance and renders it into the list whenever a - // todo item is added to the list. - add: function ( e ) { - var view = new TodoView({ - model: e.model - }); - this.container.one('#todo-list').append( view.render().container ); - }, - - // Creates and renders views for every todo item in the list when the entire - // list is reset. - reset: function( e ) { - var fragment = Y.one( Y.config.doc.createDocumentFragment() ); - - Y.Array.each( e.models, function ( model ) { - var view = new TodoView({ - model: model - }); - fragment.append( view.render().container ); - }); - - this.container.one('#todo-list').setContent( fragment ); - }, - - // Creates a new todo item when the enter key is pressed in the new todo - // input field. - createTodo: function( e ) { - var value; - - if ( e.keyCode === ENTER_KEY ) { - value = Y.Lang.trim( this.inputNode.get('value') ); - - if ( !value ) { - return; - } - - // This tells the list to create a new TodoModel instance with the - // specified text and automatically save it to localStorage in a - // single step. - this.todoList.create({ - title: value - }); - - this.inputNode.set( 'value', '' ); - } - }, - - toggleAll: function( e ) { - this.todoList.toggleAll( e.target._node.checked ); - }, - - // Removes all finished todo items from the list. - clearCompleted: function( e ) { - this.todoList.clearCompleted(); - } -}); - -// -- Todo item view ----------------------------------------------------------- - -// The TodoView class extends Y.View and customizes it to represent the content -// of a single todo item in the list. It also handles DOM events on the item to -// allow it to be edited and removed from the list. - -TodoView = Y.TodoView = Y.Base.create( 'todoView', Y.View, [], { - // Specifying an HTML string as this view's container element causes that - // HTML to be automatically converted into an unattached Y.Node instance. - // The TodoAppView (above) will take care of appending it to the list. - container: '
  • ', - - // The template property holds the contents of the #todo-template - // element, which will be used as the HTML template for each todo item. - template: Y.one('#todo-template').getContent(), - - // Delegated DOM events to handle this view's interactions. - events: { - // Toggle the "completed" state of this todo item when the checkbox is - // clicked. - '.toggle': { - click: 'toggle' - }, - - // When the text of this todo item is clicked or focused, switch to edit - // mode to allow editing. - '.view': { - dblclick: 'edit' - }, - - // On the edit field, when enter is pressed or the field loses focus, - // save the current value and switch out of edit mode. - '.edit': { - blur: 'save', - keypress: 'enter' - }, - - // When the remove icon is clicked, delete this todo item. - '.destroy': { - click: 'remove' - } - }, - - initializer: function() { - // The model property is set to a TodoModel instance by TodoAppView when - // it instantiates this TodoView. - var model = this.model; - - // Re-render this view when the model changes, and destroy this view - // when the model is destroyed. - model.after( 'change', this.render, this ); - model.after( 'destroy', this.destroy, this ); - }, - - render: function () { - var container = this.container, - model = this.model, - completed = model.get('completed'); - - container.setContent( Y.Lang.sub( this.template, { - completed: completed ? 'checked' : '', - title: model.get('title') - })); - - container[ completed ? 'addClass' : 'removeClass' ]('completed'); - this.inputNode = container.one('.edit'); - - return this; - }, - - // -- Event Handlers ------------------------------------------------------- - - // Toggles this item into edit mode. - edit: function() { - this.container.addClass('editing'); - this.inputNode.select(); - }, - - // When the enter key is pressed, focus the new todo input field. This - // causes a blur event on the current edit field, which calls the save() - // handler below. - enter: function( e ) { - if ( e.keyCode === ENTER_KEY ) { - Y.one('#new-todo').focus(); - } - }, - - // Removes this item from the list. - remove: function( e ) { - this.constructor.superclass.remove.call( this ); - this.model.destroy({ - 'delete': true - }); - }, - - // Toggles this item out of edit mode and saves it. - save: function() { - var val = Y.Lang.trim( this.inputNode.get('value') ); - - this.container.removeClass('editing'); - - if ( val ) { - this.model.set( 'title', val ).save(); - } else { - this.model.destroy({ - 'delete': true - }); - } - }, - - // Toggles the `completed` state on this item's model. - toggle: function() { - this.model.toggle(); - } -}); - -// -- localStorage Sync Implementation ----------------------------------------- - -// This is a simple factory function that returns a `sync()` function that can -// be used as a sync layer for either a Model or a ModelList instance. The -// TodoModel and TodoList instances above use it to save and load items. - -function localStorageSync( key ) { - var localStorage; - - if ( !key ) { - Y.error('No storage key specified.'); - } - - if ( Y.config.win.localStorage ) { - localStorage = Y.config.win.localStorage; - } - - // Try to retrieve existing data from localStorage, if there is any. - // Otherwise, initialize `data` to an empty object. - var data = Y.JSON.parse( ( localStorage && localStorage.getItem( key ) ) || '{}' ); - - // Delete a model with the specified id. - function destroy( id ) { - var modelHash; - - if ( ( modelHash = data[ id ] ) ) { - delete data[ id ]; - save(); - } - - return modelHash; - } - - // Generate a unique id to assign to a newly-created model. - function generateId() { - var id = '', - i = 4; - - while ( i-- ) { - id += ( ( ( 1 + Math.random()) * 0x10000) | 0 ) - .toString(16).substring(1); - } - - return id; - } - - // Loads a model with the specified id. This method is a little tricky, - // since it handles loading for both individual models and for an entire - // model list. - // - // If an id is specified, then it loads a single model. If no id is - // specified then it loads an array of all models. This allows the same sync - // layer to be used for both the TodoModel and TodoList classes. - function get( id ) { - return id ? data[ id ] : Y.Object.values( data ); - } - - // Saves the entire `data` object to localStorage. - function save() { - localStorage && localStorage.setItem( key, Y.JSON.stringify( data ) ); - } - - // Sets the id attribute of the specified model (generating a new id if - // necessary), then saves it to localStorage. - function set( model ) { - var hash = model.toJSON(), - idAttribute = model.idAttribute; - - if ( !Y.Lang.isValue(hash[ idAttribute ] ) ) { - hash[ idAttribute ] = generateId(); - } - - data[ hash[ idAttribute ] ] = hash; - save(); - - return hash; - } - - // Returns a `sync()` function that can be used with either a Model or a - // ModelList instance. - return function( action, options, callback ) { - // `this` refers to the Model or ModelList instance to which this sync - // method is attached. - var isModel = Y.Model && this instanceof Y.Model; - - switch ( action ) { - case 'create': // intentional fallthru - case 'update': - callback( null, set( this ) ); - return; - - case 'read': - callback( null, get( isModel && this.get('id') ) ); - return; - - case 'delete': - callback( null, destroy( isModel && this.get('id') ) ); - return; - } - }; -} - -// -- Start your engines! ------------------------------------------------------ - -// Finally, all we have to do is instantiate a new TodoAppView to set everything -// in motion and bring our todo list into existence. -new TodoAppView(); - +YUI.add('todo-app', function (Y) { + "use strict"; + + // Dependencies from MVC namespace. + var TodoList = Y.TodoMVC.TodoList, + TodoView = Y.TodoMVC.TodoView, + TodoApp; + + // -- Main Application -------------- + TodoApp = Y.Base.create('todoApp', Y.App, [], { + // Set container to bind to the existing '#todoapp' element + containerTemplate: '#todoapp', + + // Compile statistics template with Handlebars. + template: Y.Handlebars.compile(Y.one('#stats-template').getHTML()), + + // DOM events for creating new Todos and clearing out old ones. + events: { + '#new-todo': { + keypress: 'enterCreate' + }, + '#clear-completed': { + click: 'clearCompleted' + }, + '#toggle-all': { + click: 'completeAll' + } + }, + + // Initialize our TodoList, and bind any events that occur + // when new Todos are added, changed, or removed within it. + // Also, fetch any Todos that are found within localStorage. + initializer: function () { + this.set('todoList', new TodoList()); + + var list = this.get('todoList'); + + Y.Handlebars.registerHelper('pluralize', function (context, word) { + return (context === 1) ? word : word + 's'; + }); + + list.after(['add', 'remove', 'reset', 'todo:completedChange'], + this.render, this); + + list.load(); + + // Keep our filters on refresh by immediately dispatching route. + this.once('ready', function (e) { + if (this.hasRoute(this.getPath())) { + this.dispatch(); + } + }); + }, + + + // Render our application with the statistics from our TodoList, + // and various other stylistic elements. + render: function () { + var todoList = this.get('todoList'), + completed = todoList.completed().size(), + remaining = todoList.remaining().size(), + container = this.get('container'), + main = this.get('main'), + footer = this.get('footer'); + + // If we have Todos in our TodoList, show them with statistics. + if (todoList.size()) { + main.show(); + footer.show(); + footer.setHTML(this.template({ + completed: completed, + remaining: remaining + })); + + // Highlights for filters at the bottom of our Todo application. + + container.one('#filters li a').removeClass('selected'); + + container.all('#filters li a') + .filter('[href="#/' + (this.get('filter') || '') + '"]') + .addClass('selected'); + } else { + main.hide(); + footer.hide(); + } + + // Set the checkbox only if all Todos have been completed. + this.get('allCheckbox').set('checked', !remaining); + this.addViews(); + }, + + + // Add Todo views to the DOM simultaneously, triggered when + // the application initially loads, or we switch filters. + addViews: function () { + var fragment = Y.one(Y.config.doc.createDocumentFragment()), + todoList = this.get('todoList'), + models; + + // An Array of models is passed through when the 'reset' + // event is triggered through syncing through load(). + switch (this.get('filter')) { + case 'active': + models = todoList.remaining(); + break; + case 'completed': + models = todoList.completed(); + break; + default: + models = todoList; + break; + } + + // Iterate through the (filtered) ModelList. + models.each(function (model) { + var view = new TodoView({model: model}); + fragment.append(view.render().get('container')); + }); + + this.get('container').one('#todo-list').setContent(fragment); + }, + + // Create and save a new Todo from the inputted value when the + // Enter key is pressed down. + enterCreate: function (e) { + var ENTER_KEY = 13, + todoList = this.get('todoList'), + inputNode = this.get('inputNode'), + value = Y.Escape.html(Y.Lang.trim(inputNode.get('value'))); + + if (e.keyCode !== ENTER_KEY || !value) { + return; + } + + todoList.create({ + title: value + }); + + inputNode.set('value', ''); + }, + + // Clear all completed Todos from the TodoList. This removes the models + // from the list, as well as deletes them from localStorage. + clearCompleted: function (e) { + var todoList = this.get('todoList'), + completed = todoList.completed(); + + todoList.remove(completed); + + completed.each(function (todo) { + todo.clear(); + }); + }, + + // Complete all non-complete Todos, or reset them all if they are + // all already complete. + completeAll: function () { + var todoList = this.get('todoList'), + allCheckbox = this.get('allCheckbox'), + completed = allCheckbox.get('checked'); + + Y.Array.each(todoList.toArray(), function (todo) { + todo.save({completed: completed}); + }); + }, + + // Set the filter for our application from the route that is passed + // in (see below). + handleFilter: function (req) { + this.set('filter', req.params.filter); + this.get('todoList').load(); + } + }, { + ATTRS: { + // Significant DOM elements that relate to our application that + // we would like to keep as attributes. + container: { + valueFn: function () { + return Y.one('#todoapp'); + } + }, + inputNode: { + valueFn: function () { + return Y.one('#new-todo'); + } + }, + allCheckbox: { + valueFn: function () { + return Y.one('#toggle-all'); + } + }, + main: { + valueFn: function () { + return Y.one('#main'); + } + }, + footer: { + valueFn: function () { + return Y.one('#footer'); + } + }, + + // This can be set to fall back on server-side routing when + // HTML5 pushState is not available. For this application, + // we are only using hash-based URLs though. + serverRouting: { + value: false + }, + + // Our initial filter for the application. + filter: { + value: null + }, + + // Routing for the application, to determine the filter. + // The callback takes a request object, Express-style. + routes: { + value: [ + {path: '/:filter', callback: 'handleFilter'} + ] + } + } + }); + + // Namespace this application under our custom Y.MVC namespace. + Y.namespace('TodoMVC').TodoApp = TodoApp; +}, '@VERSION@', { + requires: [ + 'app', + 'todo-list', + 'todo-view', + 'node', + 'event-focus' + ] }); diff --git a/architecture-examples/yuilibrary/js/models/todo.js b/architecture-examples/yuilibrary/js/models/todo.js new file mode 100644 index 0000000000..33b6a97826 --- /dev/null +++ b/architecture-examples/yuilibrary/js/models/todo.js @@ -0,0 +1,38 @@ +YUI.add('todo', function (Y) { + "use strict"; + // -- Todo Model ------------- + var Todo = Y.Base.create('todo', Y.Model, [Y.ModelSync.Local], { + // Set up the root localStorage key we save our Model data in. + root: 'todos-yui', + + // Toggle the completed state of the Todo. + toggle: function () { + this.save({completed: !this.get('completed')}); + }, + + // Destroy this Todo and remove it from localStorage. + clear: function () { + this.destroy({remove: true}); + } + }, { + + // Default attributes. + ATTRS: { + title: { + value: 'empty todo ...' + }, + completed: { + value: false + } + } + }); + + // Set this Model under our custom Y.MVC namespace. + Y.namespace('TodoMVC').Todo = Todo; + +}, '@VERSION@', { + requires: [ + 'gallery-model-sync-local', + 'model' + ] +}); diff --git a/architecture-examples/yuilibrary/js/models/todolist.js b/architecture-examples/yuilibrary/js/models/todolist.js new file mode 100644 index 0000000000..02d3bdf309 --- /dev/null +++ b/architecture-examples/yuilibrary/js/models/todolist.js @@ -0,0 +1,42 @@ +YUI.add('todo-list', function (Y) { + "use strict"; + + // Dependencies from Y.MVC. + var Todo = Y.TodoMVC.Todo, + TodoList; + + // -- TodoList Model list ----- + TodoList = Y.Base.create('todoList', Y.ModelList, [Y.ModelSync.Local], { + + // The related Model for our Model List. + model: Todo, + + // The root used for our localStorage key. + root: 'todos-yui', + + // Return a ModelList of our completed Models. + completed: function () { + return this.filter({ asList: true }, function (todo) { + return todo.get('completed'); + }); + }, + + // Return an ModelList of our un-completed Models. + remaining: function () { + return this.filter({ asList: true }, function (todo) { + return !todo.get('completed'); + }); + } + + }); + + // Set this Model List under our custom Y.MVC namespace. + Y.namespace('TodoMVC').TodoList = TodoList; + +}, '@VERSION@', { + requires: [ + 'gallery-model-sync-local', + 'model-list', + 'todo' + ] +}); diff --git a/architecture-examples/yuilibrary/js/views/todoview.js b/architecture-examples/yuilibrary/js/views/todoview.js new file mode 100644 index 0000000000..e6eab955a1 --- /dev/null +++ b/architecture-examples/yuilibrary/js/views/todoview.js @@ -0,0 +1,100 @@ +YUI.add('todo-view', function (Y) { + "use strict"; + + // -- Todo View ------------------- + var TodoView = Y.Base.create('todoView', Y.View, [], { + + // The container element that the View is rendered under. + containerTemplate: '
  • ', + + // Compile our template using Handlebars. + template: Y.Handlebars.compile(Y.one('#item-template').getHTML()), + + // Bind DOM events for handling changes to a specific Todo, + // for completion and editing. + events: { + '.toggle': { + click: 'toggleComplete' + }, + '.view': { + dblclick: 'edit' + }, + '.edit': { + blur: 'close', + keypress: 'enterUpdate' + }, + '.destroy': { + click: 'clear' + } + }, + + // Initialize this view by setting event handlers when the Model + // is updated or destroyed. + initializer: function () { + var model = this.get('model'); + + model.after('change', this.render, this); + }, + + // Render this view in our
  • container, and fill it with the + // data in our Model. + render: function () { + var container = this.get('container'), + model = this.get('model'); + + container.setHTML(this.template(model.toJSON())); + container.toggleClass('completed', model.get('completed')); + + this.set('inputNode', container.one('.edit')); + + return this; + }, + + // Toggle the linked Todo's completion status. + toggleComplete: function () { + this.get('model').toggle(); + }, + + // Turn on editing mode for the Todo by exposing the input field. + edit: function () { + this.get('container').addClass('editing'); + this.get('inputNode').focus(); + }, + + // Get the value from our input field while hiding it, and + // save it to our Todo when focus is lost from the field. + close: function (e) { + var value = this.get('inputNode').get('value'), + editedValue = Y.Escape.html(Y.Lang.trim(value)); + + this.get('container').removeClass('editing'); + + if (editedValue) { + this.get('model').save({title: editedValue}); + } else { + this.clear(); + } + }, + + // Also allow updating the Todo's text through the enter key. + enterUpdate: function (e) { + var ENTER_KEY = 13; + if (e.keyCode === ENTER_KEY) { + this.close(); + } + }, + + // Destroy the model when the delete button is clicked. + clear: function (e) { + this.get('model').clear(); + } + }); + + // Set this View under our custom Y.TodoMVC namespace. + Y.namespace('TodoMVC').TodoView = TodoView; +}, '@VERSION@', { + requires: [ + 'view', + 'handlebars' + ] +}); diff --git a/architecture-examples/yuilibrary/js/yui-3.4.0.min.js b/architecture-examples/yuilibrary/js/yui-3.4.0.min.js deleted file mode 100644 index e1320c15cd..0000000000 --- a/architecture-examples/yuilibrary/js/yui-3.4.0.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/* -YUI 3.4.0 (build 3928) -Copyright 2011 Yahoo! Inc. All rights reserved. -Licensed under the BSD License. -http://yuilibrary.com/license/ -*/ -if(typeof YUI!="undefined"){YUI._YUI=YUI;}var YUI=function(){var c=0,f=this,b=arguments,a=b.length,e=function(h,g){return(h&&h.hasOwnProperty&&(h instanceof g));},d=(typeof YUI_config!=="undefined")&&YUI_config;if(!(e(f,YUI))){f=new YUI();}else{f._init();if(YUI.GlobalConfig){f.applyConfig(YUI.GlobalConfig);}if(d){f.applyConfig(d);}if(!a){f._setup();}}if(a){for(;c-1){q="3.3.0";}p={applyConfig:function(D){D=D||l;var y,A,z=this.config,B=z.modules,x=z.groups,C=z.rls,w=this.Env._loader;for(A in D){if(D.hasOwnProperty(A)){y=D[A];if(B&&A=="modules"){o(B,y);}else{if(x&&A=="groups"){o(x,y);}else{if(C&&A=="rls"){o(C,y);}else{if(A=="win"){z[A]=y.contentWindow||y;z.doc=z[A].document;}else{if(A=="_yuid"){}else{z[A]=y;}}}}}}}if(w){w._config(D);}},_config:function(w){this.applyConfig(w);},_init:function(){var y,z=this,w=YUI.Env,x=z.Env,A;z.version=q;if(!x){z.Env={mods:{},versions:{},base:n,cdn:n+q+"/build/",_idx:0,_used:{},_attached:{},_missed:[],_yidx:0,_uidx:0,_guidp:"y",_loaded:{},_BASE_RE:/(?:\?(?:[^&]*&)*([^&]*))?\b(simpleyui|yui(?:-\w+)?)\/\2(?:-(min|debug))?\.js/,parseBasePath:function(F,D){var B=F.match(D),E,C;if(B){E=RegExp.leftContext||F.slice(0,F.indexOf(B[0]));C=B[3];if(B[1]){E+="?"+B[1];}E={filter:C,path:E};}return E;},getBase:w&&w.getBase||function(F){var D=(v&&v.getElementsByTagName("script"))||[],G=x.cdn,C,E,B,H;for(E=0,B=D.length;Ex&&x in w?w[x]:true;}}return z;};j.indexOf=q.indexOf?function(w,v){return q.indexOf.call(w,v);}:function(y,x){for(var w=0,v=y.length;w1?Array.prototype.join.call(arguments,m):y.toString();if(!(z in v)||(w&&v[z]==w)){v[z]=x.apply(x,arguments);}return v[z];};};b.merge=function(){var x=arguments,y=0,w=x.length,v={};for(;y-1;};g.each=function(y,w,z,x){var v;for(v in y){if(x||h(y,v)){w.call(z||b,y[v],v,y);}}return b;};g.some=function(y,w,z,x){var v;for(v in y){if(x||h(y,v)){if(w.call(z||b,y[v],v,y)){return true;}}}return false;};g.getValue=function(z,y){if(!b.Lang.isObject(z)){return u;}var w,x=b.Array(y),v=x.length;for(w=0;z!==u&&w=0){for(v=0;w!==u&&v0){J=O.url.shift();if(N&&!O.timer){O.timer=setTimeout(function(){D(Q);},N);}if(L===s){M=E(J,P,K);}else{M=k(J,P,K);}O.nodes.push(M);c(L,M,Q,J);G(M,Q,P);if(!l[L]){f(Q,J);}if(O.async){i(Q);}}},n=function(){if(g){return;}g=true;var J,K;for(J in z){if(z.hasOwnProperty(J)){K=z[J];if(K.autopurge&&K.finished){d(K.tId);delete z[J];}}}g=false;},j=function(K,J,L){L=L||{};var O="q"+(r++),N=L.purgethreshold||e.Get.PURGE_THRESH,M;if(r%N===0){n();}M=z[O]=e.merge(L);M.tId=O;M.type=K;M.url=J;M.finished=false;M.nodes=[];M.win=M.win||e.config.win;M.context=M.context||M;M.autopurge=(q in M)?M.autopurge:(K===s)?true:false;M.attributes=M.attributes||{};M.attributes.charset=L.charset||M.attributes.charset||A;if(C in M&&K===s){M.attributes.async=M.async;}M.url=(p.isString(M.url))?[M.url]:M.url;if(!M.url[0]){M.url.shift();}M.remaining=M.url.length;i(O);return{tId:O};};e.Get={PURGE_THRESH:20,abort:function(K){var L=(p.isString(K))?K:K.tId,J=z[L];if(J){J.aborted=true;}},script:function(J,K){return j(s,J,K);},css:function(J,K){return j("css",J,K);}};},"3.4.0",{requires:["yui-base"]});YUI.add("features",function(b){var c={};b.mix(b.namespace("Features"),{tests:c,add:function(d,e,f){c[d]=c[d]||{};c[d][e]=f;},all:function(e,f){var g=c[e],d=[];if(g){b.Object.each(g,function(i,h){d.push(h+":"+(b.Features.test(e,h,f)?1:0));});}return(d.length)?d.join(";"):"";},test:function(e,g,f){f=f||[];var d,i,k,j=c[e],h=j&&j[g];if(!h){}else{d=h.result;if(b.Lang.isUndefined(d)){i=h.ua;if(i){d=(b.UA[i]);}k=h.test;if(k&&((!i)||d)){d=k.apply(b,f);}h.result=d;}}return d;}});var a=b.Features.add;a("load","0",{"name":"graphics-canvas-default","test":function(f){var e=f.config.doc,d=e&&e.createElement("canvas");return(e&&!e.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")&&(d&&d.getContext&&d.getContext("2d")));},"trigger":"graphics"});a("load","1",{"name":"autocomplete-list-keys","test":function(d){return !(d.UA.ios||d.UA.android);},"trigger":"autocomplete-list"});a("load","2",{"name":"graphics-svg","test":function(e){var d=e.config.doc;return(d&&d.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"));},"trigger":"graphics"});a("load","3",{"name":"history-hash-ie","test":function(e){var d=e.config.doc&&e.config.doc.documentMode;return e.UA.ie&&(!("onhashchange" in e.config.win)||!d||d<8);},"trigger":"history-hash"});a("load","4",{"name":"graphics-vml-default","test":function(f){var e=f.config.doc,d=e&&e.createElement("canvas");return(e&&!e.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")&&(!d||!d.getContext||!d.getContext("2d")));},"trigger":"graphics"});a("load","5",{"name":"graphics-svg-default","test":function(e){var d=e.config.doc;return(d&&d.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"));},"trigger":"graphics"});a("load","6",{"name":"widget-base-ie","trigger":"widget-base","ua":"ie"});a("load","7",{"name":"transition-timer","test":function(g){var f=g.config.doc,e=(f)?f.documentElement:null,d=true;if(e&&e.style){d=!("MozTransition" in e.style||"WebkitTransition" in e.style);}return d;},"trigger":"transition"});a("load","8",{"name":"dom-style-ie","test":function(j){var h=j.Features.test,i=j.Features.add,f=j.config.win,g=j.config.doc,d="documentElement",e=false;i("style","computedStyle",{test:function(){return f&&"getComputedStyle" in f;}});i("style","opacity",{test:function(){return g&&"opacity" in g[d].style;}});e=(!h("style","opacity")&&!h("style","computedStyle"));return e;},"trigger":"dom-style"});a("load","9",{"name":"selector-css2","test":function(f){var e=f.config.doc,d=e&&!("querySelectorAll" in e); -return d;},"trigger":"selector"});a("load","10",{"name":"event-base-ie","test":function(e){var d=e.config.doc&&e.config.doc.implementation;return(d&&(!d.hasFeature("Events","2.0")));},"trigger":"node-base"});a("load","11",{"name":"dd-gestures","test":function(d){return(d.config.win&&("ontouchstart" in d.config.win&&!d.UA.chrome));},"trigger":"dd-drag"});a("load","12",{"name":"scrollview-base-ie","trigger":"scrollview-base","ua":"ie"});a("load","13",{"name":"graphics-canvas","test":function(f){var e=f.config.doc,d=e&&e.createElement("canvas");return(e&&!e.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")&&(d&&d.getContext&&d.getContext("2d")));},"trigger":"graphics"});a("load","14",{"name":"graphics-vml","test":function(f){var e=f.config.doc,d=e&&e.createElement("canvas");return(e&&!e.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")&&(!d||!d.getContext||!d.getContext("2d")));},"trigger":"graphics"});},"3.4.0",{requires:["yui-base"]});YUI.add("intl-base",function(b){var a=/[, ]/;b.mix(b.namespace("Intl"),{lookupBestLang:function(g,h){var f,j,c,e;function d(l){var k;for(k=0;k0){c=d(j);if(c){return c;}else{e=j.lastIndexOf("-");if(e>=0){j=j.substring(0,e);if(e>=2&&j.charAt(e-2)==="-"){j=j.substring(0,e-2);}}else{break;}}}}return"";}});},"3.4.0",{requires:["yui-base"]});YUI.add("yui-log",function(d){var c=d,e="yui:log",a="undefined",b={debug:1,info:1,warn:1,error:1};c.log=function(j,s,g,q){var l,p,n,k,o,i=c,r=i.config,h=(i.fire)?i:YUI.Env.globalEvents;if(r.debug){if(g){p=r.logExclude;n=r.logInclude;if(n&&!(g in n)){l=1;}else{if(n&&(g in n)){l=!n[g];}else{if(p&&(g in p)){l=p[g];}}}}if(!l){if(r.useBrowserConsole){k=(g)?g+": "+j:j;if(i.Lang.isFunction(r.logFn)){r.logFn.call(i,j,s,g);}else{if(typeof console!=a&&console.log){o=(s&&console[s]&&(s in b))?s:"log";console[o](k);}else{if(typeof opera!=a){opera.postError(k);}}}}if(h&&!q){if(h==i&&(!h.getEvent(e))){h.publish(e,{broadcast:2});}h.fire(e,{msg:j,cat:s,src:g});}}}return i;};c.message=function(){return c.log.apply(c,arguments);};},"3.4.0",{requires:["yui-base"]});YUI.add("yui-later",function(b){var a=[];b.later=function(j,f,k,g,h){j=j||0;g=(!b.Lang.isUndefined(g))?b.Array(g):g;var i=false,c=(f&&b.Lang.isString(k))?f[k]:k,d=function(){if(!i){if(!c.apply){c(g[0],g[1],g[2],g[3]);}else{c.apply(f,g||a);}}},e=(h)?setInterval(d,j):setTimeout(d,j);return{id:e,interval:h,cancel:function(){i=true;if(this.interval){clearInterval(e);}else{clearTimeout(e);}}};};b.Lang.later=b.later;},"3.4.0",{requires:["yui-base"]});YUI.add("loader-base",function(d){if(!YUI.Env[d.version]){(function(){var I=d.version,E="/build/",F=I+E,D=d.Env.base,A="gallery-2011.08.04-15-16",C="2in3",B="4",z="2.9.0",G=D+"combo?",H={version:I,root:F,base:d.Env.base,comboBase:G,skin:{defaultSkin:"sam",base:"assets/skins/",path:"skin.css",after:["cssreset","cssfonts","cssgrids","cssbase","cssreset-context","cssfonts-context"]},groups:{},patterns:{}},y=H.groups,x=function(K,L){var J=C+"."+(K||B)+"/"+(L||z)+E;y.yui2.base=D+J;y.yui2.root=J;},w=function(J){var K=(J||A)+E;y.gallery.base=D+K;y.gallery.root=K;};y[I]={};y.gallery={ext:false,combine:true,comboBase:G,update:w,patterns:{"gallery-":{},"lang/gallery-":{},"gallerycss-":{type:"css"}}};y.yui2={combine:true,ext:false,comboBase:G,update:x,patterns:{"yui2-":{configFn:function(J){if(/-skin|reset|fonts|grids|base/.test(J.name)){J.type="css";J.path=J.path.replace(/\.js/,".css");J.path=J.path.replace(/\/yui2-skin/,"/assets/skins/sam/yui2-skin");}}}}};w();x();YUI.Env[I]=H;}());}var f={},c=[],m=2048,a=YUI.Env,p=a._loaded,q="css",k="js",v="intl",s=d.version,u="",e=d.Object,r=e.each,j=d.Array,h=a._loaderQueue,t=a[s],b="skin-",i=d.Lang,n=a.mods,l,o,g=function(x,y,z,w){var A=x+"/"+y;if(!w){A+="-min";}A+="."+(z||q);return A;};d.Env.meta=t;d.Loader=function(A){var z=t.modules,x=this;l=t.md5;x.context=d;x.base=d.Env.meta.base+d.Env.meta.root;x.comboBase=d.Env.meta.comboBase;x.combine=A.base&&(A.base.indexOf(x.comboBase.substr(0,20))>-1);x.comboSep="&";x.maxURLLength=m;x.root=d.Env.meta.root;x.timeout=0;x.forceMap={};x.allowRollup=false;x.filters={};x.required={};x.patterns={};x.moduleInfo={};x.groups=d.merge(d.Env.meta.groups);x.skin=d.merge(d.Env.meta.skin);x.conditions={};x.config=A;x._internal=true;o=a._renderedMods;if(o){r(o,function y(C,B){x.moduleInfo[B]=C;});o=a._conditions;r(o,function w(C,B){x.conditions[B]=C;});}else{r(z,x.addModule,x);}if(!a._renderedMods){a._renderedMods=x.moduleInfo;a._conditions=x.conditions;}x._inspectPage();x._internal=false;x._config(A);x.testresults=null;if(d.config.tests){x.testresults=d.config.tests;}x.sorted=[];x.loaded=p[s];x.dirty=true;x.inserted={};x.skipped={};x.tested={};};d.Loader.prototype={FILTER_DEFS:{RAW:{"searchExp":"-min\\.js","replaceStr":".js"},DEBUG:{"searchExp":"-min\\.js","replaceStr":"-debug.js"}},_inspectPage:function(){r(n,function(y,x){if(y.details){var w=this.moduleInfo[x],A=y.details.requires,z=w&&w.requires;if(w){if(!w._inspected&&A&&z.length!=A.length){delete w.expanded;}}else{w=this.addModule(y.details,x);}w._inspected=true;}},this);},_requires:function(C,B){var y,A,D,E,w=this.moduleInfo,x=w[C],z=w[B];if(!x||!z){return false;}A=x.expanded_map;D=x.after_map;if(D&&(B in D)){return true;}D=z.after_map;if(D&&(C in D)){return false;}E=w[B]&&w[B].supersedes;if(E){for(y=0;y-1){R=X;}});if(Q&&(Q[V]||(R&&Q[R]))){y=V;if(Q[R]){y=R;}for(M=0;M-1){z=A;break;}}}if(z){if(A.action){A.action.call(this,B,x);}else{w=this.addModule(d.merge(z),B);w.temp=true;}}}return w;},_rollup:function(){},_reduce:function(B){B=B||this.required;var y,x,A,w,z=this.loadType,C=this.ignore?j.hash(this.ignore):false;for(y in B){if(B.hasOwnProperty(y)){w=this.getModule(y);if(((this.loaded[y]||n[y])&&!this.forceMap[y]&&!this.ignoreRegistered)||(z&&w&&w.type!=z)){delete B[y];}if(C&&C[y]){delete B[y];}A=w&&w.supersedes;if(A){for(x=0;x0){h.running=true;h.next()();}},insert:function(z,x,y){var w=this,A=d.merge(this);delete A.require;delete A.dirty;h.add(function(){w._insert(A,z,x,y);});this._continue();},loadNext:function(A){if(!this._loading){return;}var H,P,O,M,z,E,B,L,D,G,N,w,C,K,y,F,Q,R,J=this,x=J.loadType,S=function(T){J.loadNext(T.data);},I=function(V){J._combineComplete[x]=true;var U,T=F.length;for(U=0;UJ.maxURLLength)){if(z.substr(z.length-1,1)===J.comboSep){z=z.substr(0,(z.length-1));}Q.push(J._filter(z));z=N;}z+=w;if(O<(P-1)){z+=J.comboSep;}F.push(M.name);}}if(F.length&&(z!=N)){if(z.substr(z.length-1,1)===J.comboSep){z=z.substr(0,(z.length-1));}Q.push(J._filter(z));}}}if(F.length){if(x===q){E=d.Get.css;L=J.cssAttributes;}else{E=d.Get.script;L=J.jsAttributes;}E(Q,{data:J._loading,onSuccess:I,onFailure:J._onFailure,onTimeout:J._onTimeout,insertBefore:J.insertBefore,charset:J.charset,attributes:L,timeout:J.timeout,autopurge:false,context:J});return;}else{J._combineComplete[x]=true;}}if(A){if(A!==J._loading){return;}J.inserted[A]=true;if(J.onProgress){J.onProgress.call(J.context,{name:A,data:J.data});}}H=J.sorted;P=H.length;for(O=0;O=g.rollup);if(e){break;}}}}if(e){b[k]=true;d=true;this.getRequires(g);}}}}if(!d){break;}}};},"3.4.0",{requires:["loader-base"]});YUI.add("loader-yui3",function(a){YUI.Env[a.version].modules=YUI.Env[a.version].modules||{"align-plugin":{"requires":["node-screen","node-pluginhost"]},"anim":{"use":["anim-base","anim-color","anim-curve","anim-easing","anim-node-plugin","anim-scroll","anim-xy"]},"anim-base":{"requires":["base-base","node-style"]},"anim-color":{"requires":["anim-base"]},"anim-curve":{"requires":["anim-xy"]},"anim-easing":{"requires":["anim-base"]},"anim-node-plugin":{"requires":["node-pluginhost","anim-base"]},"anim-scroll":{"requires":["anim-base"]},"anim-xy":{"requires":["anim-base","node-screen"]},"app":{"use":["controller","model","model-list","view"]},"array-extras":{},"array-invoke":{},"arraylist":{},"arraylist-add":{"requires":["arraylist"]},"arraylist-filter":{"requires":["arraylist"]},"arraysort":{"requires":["yui-base"]},"async-queue":{"requires":["event-custom"]},"attribute":{"use":["attribute-base","attribute-complex"]},"attribute-base":{"requires":["event-custom"]},"attribute-complex":{"requires":["attribute-base"]},"autocomplete":{"use":["autocomplete-base","autocomplete-sources","autocomplete-list","autocomplete-plugin"]},"autocomplete-base":{"optional":["autocomplete-sources"],"requires":["array-extras","base-build","escape","event-valuechange","node-base"]},"autocomplete-filters":{"requires":["array-extras","text-wordbreak"]},"autocomplete-filters-accentfold":{"requires":["array-extras","text-accentfold","text-wordbreak"]},"autocomplete-highlighters":{"requires":["array-extras","highlight-base"]},"autocomplete-highlighters-accentfold":{"requires":["array-extras","highlight-accentfold"]},"autocomplete-list":{"after":["autocomplete-sources"],"lang":["en"],"requires":["autocomplete-base","event-resize","node-screen","selector-css3","shim-plugin","widget","widget-position","widget-position-align"],"skinnable":true},"autocomplete-list-keys":{"condition":{"name":"autocomplete-list-keys","test":function(b){return !(b.UA.ios||b.UA.android);},"trigger":"autocomplete-list"},"requires":["autocomplete-list","base-build"]},"autocomplete-plugin":{"requires":["autocomplete-list","node-pluginhost"]},"autocomplete-sources":{"optional":["io-base","json-parse","jsonp","yql"],"requires":["autocomplete-base"]},"base":{"use":["base-base","base-pluginhost","base-build"]},"base-base":{"after":["attribute-complex"],"requires":["attribute-base"]},"base-build":{"requires":["base-base"]},"base-pluginhost":{"requires":["base-base","pluginhost"]},"cache":{"use":["cache-base","cache-offline","cache-plugin"]},"cache-base":{"requires":["base"]},"cache-offline":{"requires":["cache-base","json"]},"cache-plugin":{"requires":["plugin","cache-base"]},"calendar":{"lang":["en","ru"],"requires":["calendar-base","calendarnavigator"],"skinnable":true},"calendar-base":{"lang":["en","ru"],"requires":["widget","substitute","datatype-date","datatype-date-math","cssgrids"],"skinnable":true},"calendarnavigator":{"requires":["plugin","classnamemanager"],"skinnable":true},"charts":{"requires":["dom","datatype-number","datatype-date","event-custom","event-mouseenter","widget","widget-position","widget-stack","graphics"]},"classnamemanager":{"requires":["yui-base"]},"clickable-rail":{"requires":["slider-base"]},"collection":{"use":["array-extras","arraylist","arraylist-add","arraylist-filter","array-invoke"]},"console":{"lang":["en","es"],"requires":["yui-log","widget","substitute"],"skinnable":true},"console-filters":{"requires":["plugin","console"],"skinnable":true},"controller":{"optional":["querystring-parse"],"requires":["array-extras","base-build","history"]},"cookie":{"requires":["yui-base"]},"createlink-base":{"requires":["editor-base"]},"cssbase":{"after":["cssreset","cssfonts","cssgrids","cssreset-context","cssfonts-context","cssgrids-context"],"type":"css"},"cssbase-context":{"after":["cssreset","cssfonts","cssgrids","cssreset-context","cssfonts-context","cssgrids-context"],"type":"css"},"cssfonts":{"type":"css"},"cssfonts-context":{"type":"css"},"cssgrids":{"optional":["cssreset","cssfonts"],"type":"css"},"cssreset":{"type":"css"},"cssreset-context":{"type":"css"},"dataschema":{"use":["dataschema-base","dataschema-json","dataschema-xml","dataschema-array","dataschema-text"]},"dataschema-array":{"requires":["dataschema-base"]},"dataschema-base":{"requires":["base"]},"dataschema-json":{"requires":["dataschema-base","json"]},"dataschema-text":{"requires":["dataschema-base"]},"dataschema-xml":{"requires":["dataschema-base"]},"datasource":{"use":["datasource-local","datasource-io","datasource-get","datasource-function","datasource-cache","datasource-jsonschema","datasource-xmlschema","datasource-arrayschema","datasource-textschema","datasource-polling"]},"datasource-arrayschema":{"requires":["datasource-local","plugin","dataschema-array"]},"datasource-cache":{"requires":["datasource-local","plugin","cache-base"]},"datasource-function":{"requires":["datasource-local"]},"datasource-get":{"requires":["datasource-local","get"]},"datasource-io":{"requires":["datasource-local","io-base"]},"datasource-jsonschema":{"requires":["datasource-local","plugin","dataschema-json"]},"datasource-local":{"requires":["base"]},"datasource-polling":{"requires":["datasource-local"]},"datasource-textschema":{"requires":["datasource-local","plugin","dataschema-text"]},"datasource-xmlschema":{"requires":["datasource-local","plugin","dataschema-xml"]},"datatable":{"use":["datatable-base","datatable-datasource","datatable-sort","datatable-scroll"]},"datatable-base":{"requires":["recordset-base","widget","substitute","event-mouseenter"],"skinnable":true},"datatable-datasource":{"requires":["datatable-base","plugin","datasource-local"]},"datatable-scroll":{"requires":["datatable-base","plugin","stylesheet"]},"datatable-sort":{"lang":["en"],"requires":["datatable-base","plugin","recordset-sort"]},"datatype":{"use":["datatype-number","datatype-date","datatype-xml"]},"datatype-date":{"supersedes":["datatype-date-format"],"use":["datatype-date-parse","datatype-date-format"]},"datatype-date-format":{"lang":["ar","ar-JO","ca","ca-ES","da","da-DK","de","de-AT","de-DE","el","el-GR","en","en-AU","en-CA","en-GB","en-IE","en-IN","en-JO","en-MY","en-NZ","en-PH","en-SG","en-US","es","es-AR","es-BO","es-CL","es-CO","es-EC","es-ES","es-MX","es-PE","es-PY","es-US","es-UY","es-VE","fi","fi-FI","fr","fr-BE","fr-CA","fr-FR","hi","hi-IN","id","id-ID","it","it-IT","ja","ja-JP","ko","ko-KR","ms","ms-MY","nb","nb-NO","nl","nl-BE","nl-NL","pl","pl-PL","pt","pt-BR","ro","ro-RO","ru","ru-RU","sv","sv-SE","th","th-TH","tr","tr-TR","vi","vi-VN","zh-Hans","zh-Hans-CN","zh-Hant","zh-Hant-HK","zh-Hant-TW"]},"datatype-date-math":{"requires":["yui-base"]},"datatype-date-parse":{},"datatype-number":{"use":["datatype-number-parse","datatype-number-format"]},"datatype-number-format":{},"datatype-number-parse":{},"datatype-xml":{"use":["datatype-xml-parse","datatype-xml-format"]},"datatype-xml-format":{},"datatype-xml-parse":{},"dd":{"use":["dd-ddm-base","dd-ddm","dd-ddm-drop","dd-drag","dd-proxy","dd-constrain","dd-drop","dd-scroll","dd-delegate"]},"dd-constrain":{"requires":["dd-drag"]},"dd-ddm":{"requires":["dd-ddm-base","event-resize"]},"dd-ddm-base":{"requires":["node","base","yui-throttle","classnamemanager"]},"dd-ddm-drop":{"requires":["dd-ddm"]},"dd-delegate":{"requires":["dd-drag","dd-drop-plugin","event-mouseenter"]},"dd-drag":{"requires":["dd-ddm-base"]},"dd-drop":{"requires":["dd-drag","dd-ddm-drop"]},"dd-drop-plugin":{"requires":["dd-drop"]},"dd-gestures":{"condition":{"name":"dd-gestures","test":function(b){return(b.config.win&&("ontouchstart" in b.config.win&&!b.UA.chrome)); -},"trigger":"dd-drag"},"requires":["dd-drag","event-synthetic","event-gestures"]},"dd-plugin":{"optional":["dd-constrain","dd-proxy"],"requires":["dd-drag"]},"dd-proxy":{"requires":["dd-drag"]},"dd-scroll":{"requires":["dd-drag"]},"dial":{"lang":["en","es"],"requires":["widget","dd-drag","substitute","event-mouseenter","event-move","event-key","transition","intl"],"skinnable":true},"dom":{"use":["dom-base","dom-screen","dom-style","selector-native","selector"]},"dom-base":{"requires":["dom-core"]},"dom-core":{"requires":["oop","features"]},"dom-deprecated":{"requires":["dom-base"]},"dom-screen":{"requires":["dom-base","dom-style"]},"dom-style":{"requires":["dom-base"]},"dom-style-ie":{"condition":{"name":"dom-style-ie","test":function(h){var f=h.Features.test,g=h.Features.add,d=h.config.win,e=h.config.doc,b="documentElement",c=false;g("style","computedStyle",{test:function(){return d&&"getComputedStyle" in d;}});g("style","opacity",{test:function(){return e&&"opacity" in e[b].style;}});c=(!f("style","opacity")&&!f("style","computedStyle"));return c;},"trigger":"dom-style"},"requires":["dom-style"]},"dump":{},"editor":{"use":["frame","selection","exec-command","editor-base","editor-para","editor-br","editor-bidi","editor-tab","createlink-base"]},"editor-base":{"requires":["base","frame","node","exec-command","selection"]},"editor-bidi":{"requires":["editor-base"]},"editor-br":{"requires":["editor-base"]},"editor-lists":{"requires":["editor-base"]},"editor-para":{"requires":["editor-base"]},"editor-tab":{"requires":["editor-base"]},"escape":{},"event":{"after":["node-base"],"use":["event-base","event-delegate","event-synthetic","event-mousewheel","event-mouseenter","event-key","event-focus","event-resize","event-hover","event-outside"]},"event-base":{"after":["node-base"],"requires":["event-custom-base"]},"event-base-ie":{"after":["event-base"],"condition":{"name":"event-base-ie","test":function(c){var b=c.config.doc&&c.config.doc.implementation;return(b&&(!b.hasFeature("Events","2.0")));},"trigger":"node-base"},"requires":["node-base"]},"event-custom":{"use":["event-custom-base","event-custom-complex"]},"event-custom-base":{"requires":["oop"]},"event-custom-complex":{"requires":["event-custom-base"]},"event-delegate":{"requires":["node-base"]},"event-flick":{"requires":["node-base","event-touch","event-synthetic"]},"event-focus":{"requires":["event-synthetic"]},"event-gestures":{"use":["event-flick","event-move"]},"event-hover":{"requires":["event-mouseenter"]},"event-key":{"requires":["event-synthetic"]},"event-mouseenter":{"requires":["event-synthetic"]},"event-mousewheel":{"requires":["node-base"]},"event-move":{"requires":["node-base","event-touch","event-synthetic"]},"event-outside":{"requires":["event-synthetic"]},"event-resize":{"requires":["node-base"]},"event-simulate":{"requires":["event-base"]},"event-synthetic":{"requires":["node-base","event-custom-complex"]},"event-touch":{"requires":["node-base"]},"event-valuechange":{"requires":["event-focus","event-synthetic"]},"exec-command":{"requires":["frame"]},"features":{"requires":["yui-base"]},"frame":{"requires":["base","node","selector-css3","substitute","yui-throttle"]},"get":{"requires":["yui-base"]},"graphics":{"requires":["node","event-custom","pluginhost"]},"graphics-canvas":{"condition":{"name":"graphics-canvas","test":function(d){var c=d.config.doc,b=c&&c.createElement("canvas");return(c&&!c.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")&&(b&&b.getContext&&b.getContext("2d")));},"trigger":"graphics"},"requires":["graphics"]},"graphics-canvas-default":{"condition":{"name":"graphics-canvas-default","test":function(d){var c=d.config.doc,b=c&&c.createElement("canvas");return(c&&!c.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")&&(b&&b.getContext&&b.getContext("2d")));},"trigger":"graphics"}},"graphics-svg":{"condition":{"name":"graphics-svg","test":function(c){var b=c.config.doc;return(b&&b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"));},"trigger":"graphics"},"requires":["graphics"]},"graphics-svg-default":{"condition":{"name":"graphics-svg-default","test":function(c){var b=c.config.doc;return(b&&b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"));},"trigger":"graphics"}},"graphics-vml":{"condition":{"name":"graphics-vml","test":function(d){var c=d.config.doc,b=c&&c.createElement("canvas");return(c&&!c.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")&&(!b||!b.getContext||!b.getContext("2d")));},"trigger":"graphics"},"requires":["graphics"]},"graphics-vml-default":{"condition":{"name":"graphics-vml-default","test":function(d){var c=d.config.doc,b=c&&c.createElement("canvas");return(c&&!c.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")&&(!b||!b.getContext||!b.getContext("2d")));},"trigger":"graphics"}},"highlight":{"use":["highlight-base","highlight-accentfold"]},"highlight-accentfold":{"requires":["highlight-base","text-accentfold"]},"highlight-base":{"requires":["array-extras","escape","text-wordbreak"]},"history":{"use":["history-base","history-hash","history-hash-ie","history-html5"]},"history-base":{"requires":["event-custom-complex"]},"history-hash":{"after":["history-html5"],"requires":["event-synthetic","history-base","yui-later"]},"history-hash-ie":{"condition":{"name":"history-hash-ie","test":function(c){var b=c.config.doc&&c.config.doc.documentMode;return c.UA.ie&&(!("onhashchange" in c.config.win)||!b||b<8);},"trigger":"history-hash"},"requires":["history-hash","node-base"]},"history-html5":{"optional":["json"],"requires":["event-base","history-base","node-base"]},"imageloader":{"requires":["base-base","node-style","node-screen"]},"intl":{"requires":["intl-base","event-custom"]},"intl-base":{"requires":["yui-base"]},"io":{"use":["io-base","io-xdr","io-form","io-upload-iframe","io-queue"]},"io-base":{"requires":["event-custom-base","querystring-stringify-simple"]},"io-form":{"requires":["io-base","node-base"]},"io-queue":{"requires":["io-base","queue-promote"]},"io-upload-iframe":{"requires":["io-base","node-base"]},"io-xdr":{"requires":["io-base","datatype-xml"]},"json":{"use":["json-parse","json-stringify"]},"json-parse":{},"json-stringify":{},"jsonp":{"requires":["get","oop"]},"jsonp-url":{"requires":["jsonp"]},"loader":{"use":["loader-base","loader-rollup","loader-yui3"]},"loader-base":{"requires":["get"]},"loader-rollup":{"requires":["loader-base"]},"loader-yui3":{"requires":["loader-base"]},"model":{"requires":["base-build","escape","json-parse"]},"model-list":{"requires":["array-extras","array-invoke","arraylist","base-build","escape","json-parse","model"]},"node":{"use":["node-base","node-event-delegate","node-pluginhost","node-screen","node-style"]},"node-base":{"requires":["event-base","node-core","dom-base"]},"node-core":{"requires":["dom-core","selector"]},"node-deprecated":{"requires":["node-base"]},"node-event-delegate":{"requires":["node-base","event-delegate"]},"node-event-html5":{"requires":["node-base"]},"node-event-simulate":{"requires":["node-base","event-simulate"]},"node-flick":{"requires":["classnamemanager","transition","event-flick","plugin"],"skinnable":true},"node-focusmanager":{"requires":["attribute","node","plugin","node-event-simulate","event-key","event-focus"]},"node-load":{"requires":["node-base","io-base"]},"node-menunav":{"requires":["node","classnamemanager","plugin","node-focusmanager"],"skinnable":true},"node-pluginhost":{"requires":["node-base","pluginhost"]},"node-screen":{"requires":["dom-screen","node-base"]},"node-style":{"requires":["dom-style","node-base"]},"oop":{"requires":["yui-base"]},"overlay":{"requires":["widget","widget-stdmod","widget-position","widget-position-align","widget-stack","widget-position-constrain"],"skinnable":true},"panel":{"requires":["widget","widget-stdmod","widget-position","widget-position-align","widget-stack","widget-position-constrain","widget-modality","widget-autohide","widget-buttons"],"skinnable":true},"plugin":{"requires":["base-base"]},"pluginhost":{"use":["pluginhost-base","pluginhost-config"]},"pluginhost-base":{"requires":["yui-base"]},"pluginhost-config":{"requires":["pluginhost-base"]},"profiler":{"requires":["yui-base"]},"querystring":{"use":["querystring-parse","querystring-stringify"]},"querystring-parse":{"requires":["yui-base","array-extras"]},"querystring-parse-simple":{"requires":["yui-base"]},"querystring-stringify":{"requires":["yui-base"]},"querystring-stringify-simple":{"requires":["yui-base"]},"queue-promote":{"requires":["yui-base"]},"range-slider":{"requires":["slider-base","slider-value-range","clickable-rail"]},"recordset":{"use":["recordset-base","recordset-sort","recordset-filter","recordset-indexer"]},"recordset-base":{"requires":["base","arraylist"]},"recordset-filter":{"requires":["recordset-base","array-extras","plugin"]},"recordset-indexer":{"requires":["recordset-base","plugin"]},"recordset-sort":{"requires":["arraysort","recordset-base","plugin"]},"resize":{"use":["resize-base","resize-proxy","resize-constrain"]},"resize-base":{"requires":["base","widget","substitute","event","oop","dd-drag","dd-delegate","dd-drop"],"skinnable":true},"resize-constrain":{"requires":["plugin","resize-base"]},"resize-plugin":{"optional":["resize-constrain"],"requires":["resize-base","plugin"]},"resize-proxy":{"requires":["plugin","resize-base"]},"rls":{"requires":["get","features"]},"scrollview":{"requires":["scrollview-base","scrollview-scrollbars"]},"scrollview-base":{"requires":["widget","event-gestures","transition"],"skinnable":true},"scrollview-base-ie":{"condition":{"name":"scrollview-base-ie","trigger":"scrollview-base","ua":"ie"},"requires":["scrollview-base"]},"scrollview-list":{"requires":["plugin"],"skinnable":true},"scrollview-paginator":{"requires":["plugin"]},"scrollview-scrollbars":{"requires":["classnamemanager","transition","plugin"],"skinnable":true},"selection":{"requires":["node"]},"selector":{"requires":["selector-native"]},"selector-css2":{"condition":{"name":"selector-css2","test":function(d){var c=d.config.doc,b=c&&!("querySelectorAll" in c); -return b;},"trigger":"selector"},"requires":["selector-native"]},"selector-css3":{"requires":["selector-native","selector-css2"]},"selector-native":{"requires":["dom-base"]},"shim-plugin":{"requires":["node-style","node-pluginhost"]},"slider":{"use":["slider-base","slider-value-range","clickable-rail","range-slider"]},"slider-base":{"requires":["widget","dd-constrain","substitute"],"skinnable":true},"slider-value-range":{"requires":["slider-base"]},"sortable":{"requires":["dd-delegate","dd-drop-plugin","dd-proxy"]},"sortable-scroll":{"requires":["dd-scroll","sortable"]},"stylesheet":{},"substitute":{"optional":["dump"]},"swf":{"requires":["event-custom","node","swfdetect","escape"]},"swfdetect":{},"tabview":{"requires":["widget","widget-parent","widget-child","tabview-base","node-pluginhost","node-focusmanager"],"skinnable":true},"tabview-base":{"requires":["node-event-delegate","classnamemanager","skin-sam-tabview"]},"tabview-plugin":{"requires":["tabview-base"]},"test":{"requires":["event-simulate","event-custom","substitute","json-stringify"],"skinnable":true},"text":{"use":["text-accentfold","text-wordbreak"]},"text-accentfold":{"requires":["array-extras","text-data-accentfold"]},"text-data-accentfold":{},"text-data-wordbreak":{},"text-wordbreak":{"requires":["array-extras","text-data-wordbreak"]},"transition":{"requires":["node-style"]},"transition-timer":{"condition":{"name":"transition-timer","test":function(e){var d=e.config.doc,c=(d)?d.documentElement:null,b=true;if(c&&c.style){b=!("MozTransition" in c.style||"WebkitTransition" in c.style);}return b;},"trigger":"transition"},"requires":["transition"]},"uploader":{"requires":["event-custom","node","base","swf"]},"view":{"requires":["base-build","node-event-delegate"]},"widget":{"use":["widget-base","widget-htmlparser","widget-uievents","widget-skin"]},"widget-anim":{"requires":["plugin","anim-base","widget"]},"widget-autohide":{"requires":["widget","event-outside","base-build","event-key"],"skinnable":false},"widget-base":{"requires":["attribute","event-focus","base-base","base-pluginhost","node-base","node-style","classnamemanager"],"skinnable":true},"widget-base-ie":{"condition":{"name":"widget-base-ie","trigger":"widget-base","ua":"ie"},"requires":["widget-base"]},"widget-buttons":{"requires":["widget","base-build"],"skinnable":false},"widget-child":{"requires":["base-build","widget"]},"widget-htmlparser":{"requires":["widget-base"]},"widget-locale":{"requires":["widget-base"]},"widget-modality":{"requires":["widget","event-outside","base-build"],"skinnable":false},"widget-parent":{"requires":["base-build","arraylist","widget"]},"widget-position":{"requires":["base-build","node-screen","widget"]},"widget-position-align":{"requires":["widget-position"]},"widget-position-constrain":{"requires":["widget-position"]},"widget-skin":{"requires":["widget-base"]},"widget-stack":{"requires":["base-build","widget"],"skinnable":true},"widget-stdmod":{"requires":["base-build","widget"]},"widget-uievents":{"requires":["widget-base","node-event-delegate"]},"yql":{"requires":["jsonp","jsonp-url"]},"yui":{},"yui-base":{},"yui-later":{"requires":["yui-base"]},"yui-log":{"requires":["yui-base"]},"yui-rls":{},"yui-throttle":{"requires":["yui-base"]}};YUI.Env[a.version].md5="516f2598fb0cef4337e32df3a89e5124";},"3.4.0",{requires:["loader-base"]});YUI.add("yui",function(a){},"3.4.0",{use:["yui-base","get","features","intl-base","yui-log","yui-later","loader-base","loader-rollup","loader-yui3"]}); \ No newline at end of file