신수용

changed directory name

Showing 455 changed files with 0 additions and 3331 deletions
1 -var path = require('path');
2 -
3 -module.exports = {
4 - includePaths: [
5 - path.join(__dirname, 'app/assets/stylesheets')
6 - ]
7 -};
1 -// Fixed Width Icons
2 -// -------------------------
3 -.@{fa-css-prefix}-fw {
4 - width: (18em / 14);
5 - text-align: center;
6 -}
1 -// Fixed Width Icons
2 -// -------------------------
3 -.#{$fa-css-prefix}-fw {
4 - width: (18em / 14);
5 - text-align: center;
6 -}
1 -// Mixins
2 -// --------------------------
3 -
4 -@mixin fa-icon() {
5 - display: inline-block;
6 - font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 - font-size: inherit; // can't have font-size inherit on line above, so need to override
8 - text-rendering: auto; // optimizelegibility throws things off #1094
9 - -webkit-font-smoothing: antialiased;
10 - -moz-osx-font-smoothing: grayscale;
11 -
12 -}
13 -
14 -@mixin fa-icon-rotate($degrees, $rotation) {
15 - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
16 - -webkit-transform: rotate($degrees);
17 - -ms-transform: rotate($degrees);
18 - transform: rotate($degrees);
19 -}
20 -
21 -@mixin fa-icon-flip($horiz, $vert, $rotation) {
22 - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
23 - -webkit-transform: scale($horiz, $vert);
24 - -ms-transform: scale($horiz, $vert);
25 - transform: scale($horiz, $vert);
26 -}
1 -{
2 - "name": "jquery",
3 - "version": "2.1.4",
4 - "main": "dist/jquery.js",
5 - "license": "MIT",
6 - "ignore": [
7 - "**/.*",
8 - "build",
9 - "dist/cdn",
10 - "speed",
11 - "test",
12 - "*.md",
13 - "AUTHORS.txt",
14 - "Gruntfile.js",
15 - "package.json"
16 - ],
17 - "devDependencies": {
18 - "sizzle": "2.1.1-jquery.2.1.2",
19 - "requirejs": "2.1.10",
20 - "qunit": "1.14.0",
21 - "sinon": "1.8.1"
22 - },
23 - "keywords": [
24 - "jquery",
25 - "javascript",
26 - "library"
27 - ],
28 - "homepage": "https://github.com/jquery/jquery",
29 - "_release": "2.1.4",
30 - "_resolution": {
31 - "type": "version",
32 - "tag": "2.1.4",
33 - "commit": "7751e69b615c6eca6f783a81e292a55725af6b85"
34 - },
35 - "_source": "git://github.com/jquery/jquery.git",
36 - "_target": ">= 1.9.1",
37 - "_originalSource": "jquery"
38 -}
...\ No newline at end of file ...\ No newline at end of file
1 -Copyright 2014 jQuery Foundation and other contributors
2 -http://jquery.com/
3 -
4 -Permission is hereby granted, free of charge, to any person obtaining
5 -a copy of this software and associated documentation files (the
6 -"Software"), to deal in the Software without restriction, including
7 -without limitation the rights to use, copy, modify, merge, publish,
8 -distribute, sublicense, and/or sell copies of the Software, and to
9 -permit persons to whom the Software is furnished to do so, subject to
10 -the following conditions:
11 -
12 -The above copyright notice and this permission notice shall be
13 -included in all copies or substantial portions of the Software.
14 -
15 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1 -define([
2 - "../core",
3 - "../core/parseHTML",
4 - "../ajax",
5 - "../traversing",
6 - "../manipulation",
7 - "../selector",
8 - // Optional event/alias dependency
9 - "../event/alias"
10 -], function( jQuery ) {
11 -
12 -// Keep a copy of the old load method
13 -var _load = jQuery.fn.load;
14 -
15 -/**
16 - * Load a url into a page
17 - */
18 -jQuery.fn.load = function( url, params, callback ) {
19 - if ( typeof url !== "string" && _load ) {
20 - return _load.apply( this, arguments );
21 - }
22 -
23 - var selector, type, response,
24 - self = this,
25 - off = url.indexOf(" ");
26 -
27 - if ( off >= 0 ) {
28 - selector = jQuery.trim( url.slice( off ) );
29 - url = url.slice( 0, off );
30 - }
31 -
32 - // If it's a function
33 - if ( jQuery.isFunction( params ) ) {
34 -
35 - // We assume that it's the callback
36 - callback = params;
37 - params = undefined;
38 -
39 - // Otherwise, build a param string
40 - } else if ( params && typeof params === "object" ) {
41 - type = "POST";
42 - }
43 -
44 - // If we have elements to modify, make the request
45 - if ( self.length > 0 ) {
46 - jQuery.ajax({
47 - url: url,
48 -
49 - // if "type" variable is undefined, then "GET" method will be used
50 - type: type,
51 - dataType: "html",
52 - data: params
53 - }).done(function( responseText ) {
54 -
55 - // Save response for use in complete callback
56 - response = arguments;
57 -
58 - self.html( selector ?
59 -
60 - // If a selector was specified, locate the right elements in a dummy div
61 - // Exclude scripts to avoid IE 'Permission Denied' errors
62 - jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
63 -
64 - // Otherwise use the full result
65 - responseText );
66 -
67 - }).complete( callback && function( jqXHR, status ) {
68 - self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
69 - });
70 - }
71 -
72 - return this;
73 -};
74 -
75 -});
1 -define([
2 - "../core",
3 - "../ajax"
4 -], function( jQuery ) {
5 -
6 -// Install script dataType
7 -jQuery.ajaxSetup({
8 - accepts: {
9 - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
10 - },
11 - contents: {
12 - script: /(?:java|ecma)script/
13 - },
14 - converters: {
15 - "text script": function( text ) {
16 - jQuery.globalEval( text );
17 - return text;
18 - }
19 - }
20 -});
21 -
22 -// Handle cache's special case and crossDomain
23 -jQuery.ajaxPrefilter( "script", function( s ) {
24 - if ( s.cache === undefined ) {
25 - s.cache = false;
26 - }
27 - if ( s.crossDomain ) {
28 - s.type = "GET";
29 - }
30 -});
31 -
32 -// Bind script tag hack transport
33 -jQuery.ajaxTransport( "script", function( s ) {
34 - // This transport only deals with cross domain requests
35 - if ( s.crossDomain ) {
36 - var script, callback;
37 - return {
38 - send: function( _, complete ) {
39 - script = jQuery("<script>").prop({
40 - async: true,
41 - charset: s.scriptCharset,
42 - src: s.url
43 - }).on(
44 - "load error",
45 - callback = function( evt ) {
46 - script.remove();
47 - callback = null;
48 - if ( evt ) {
49 - complete( evt.type === "error" ? 404 : 200, evt.type );
50 - }
51 - }
52 - );
53 - document.head.appendChild( script[ 0 ] );
54 - },
55 - abort: function() {
56 - if ( callback ) {
57 - callback();
58 - }
59 - }
60 - };
61 - }
62 -});
63 -
64 -});
1 -define([
2 - "../../core"
3 -], function( jQuery ) {
4 - return jQuery.now();
5 -});
1 -define([
2 - "../core",
3 - "../core/access",
4 - "./support"
5 -], function( jQuery, access, support ) {
6 -
7 -var rfocusable = /^(?:input|select|textarea|button)$/i;
8 -
9 -jQuery.fn.extend({
10 - prop: function( name, value ) {
11 - return access( this, jQuery.prop, name, value, arguments.length > 1 );
12 - },
13 -
14 - removeProp: function( name ) {
15 - return this.each(function() {
16 - delete this[ jQuery.propFix[ name ] || name ];
17 - });
18 - }
19 -});
20 -
21 -jQuery.extend({
22 - propFix: {
23 - "for": "htmlFor",
24 - "class": "className"
25 - },
26 -
27 - prop: function( elem, name, value ) {
28 - var ret, hooks, notxml,
29 - nType = elem.nodeType;
30 -
31 - // Don't get/set properties on text, comment and attribute nodes
32 - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
33 - return;
34 - }
35 -
36 - notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
37 -
38 - if ( notxml ) {
39 - // Fix name and attach hooks
40 - name = jQuery.propFix[ name ] || name;
41 - hooks = jQuery.propHooks[ name ];
42 - }
43 -
44 - if ( value !== undefined ) {
45 - return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
46 - ret :
47 - ( elem[ name ] = value );
48 -
49 - } else {
50 - return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
51 - ret :
52 - elem[ name ];
53 - }
54 - },
55 -
56 - propHooks: {
57 - tabIndex: {
58 - get: function( elem ) {
59 - return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
60 - elem.tabIndex :
61 - -1;
62 - }
63 - }
64 - }
65 -});
66 -
67 -if ( !support.optSelected ) {
68 - jQuery.propHooks.selected = {
69 - get: function( elem ) {
70 - var parent = elem.parentNode;
71 - if ( parent && parent.parentNode ) {
72 - parent.parentNode.selectedIndex;
73 - }
74 - return null;
75 - }
76 - };
77 -}
78 -
79 -jQuery.each([
80 - "tabIndex",
81 - "readOnly",
82 - "maxLength",
83 - "cellSpacing",
84 - "cellPadding",
85 - "rowSpan",
86 - "colSpan",
87 - "useMap",
88 - "frameBorder",
89 - "contentEditable"
90 -], function() {
91 - jQuery.propFix[ this.toLowerCase() ] = this;
92 -});
93 -
94 -});
1 -define([
2 - "../var/support"
3 -], function( support ) {
4 -
5 -(function() {
6 - var input = document.createElement( "input" ),
7 - select = document.createElement( "select" ),
8 - opt = select.appendChild( document.createElement( "option" ) );
9 -
10 - input.type = "checkbox";
11 -
12 - // Support: iOS<=5.1, Android<=4.2+
13 - // Default value for a checkbox should be "on"
14 - support.checkOn = input.value !== "";
15 -
16 - // Support: IE<=11+
17 - // Must access selectedIndex to make default options select
18 - support.optSelected = opt.selected;
19 -
20 - // Support: Android<=2.3
21 - // Options inside disabled selects are incorrectly marked as disabled
22 - select.disabled = true;
23 - support.optDisabled = !opt.disabled;
24 -
25 - // Support: IE<=11+
26 - // An input loses its value after becoming a radio
27 - input = document.createElement( "input" );
28 - input.value = "t";
29 - input.type = "radio";
30 - support.radioValue = input.value === "t";
31 -})();
32 -
33 -return support;
34 -
35 -});
1 -define([
2 - "../core"
3 -], function( jQuery ) {
4 -
5 -// Multifunctional method to get and set values of a collection
6 -// The value/s can optionally be executed if it's a function
7 -var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
8 - var i = 0,
9 - len = elems.length,
10 - bulk = key == null;
11 -
12 - // Sets many values
13 - if ( jQuery.type( key ) === "object" ) {
14 - chainable = true;
15 - for ( i in key ) {
16 - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
17 - }
18 -
19 - // Sets one value
20 - } else if ( value !== undefined ) {
21 - chainable = true;
22 -
23 - if ( !jQuery.isFunction( value ) ) {
24 - raw = true;
25 - }
26 -
27 - if ( bulk ) {
28 - // Bulk operations run against the entire set
29 - if ( raw ) {
30 - fn.call( elems, value );
31 - fn = null;
32 -
33 - // ...except when executing function values
34 - } else {
35 - bulk = fn;
36 - fn = function( elem, key, value ) {
37 - return bulk.call( jQuery( elem ), value );
38 - };
39 - }
40 - }
41 -
42 - if ( fn ) {
43 - for ( ; i < len; i++ ) {
44 - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
45 - }
46 - }
47 - }
48 -
49 - return chainable ?
50 - elems :
51 -
52 - // Gets
53 - bulk ?
54 - fn.call( elems ) :
55 - len ? fn( elems[0], key ) : emptyGet;
56 -};
57 -
58 -return access;
59 -
60 -});
1 -// Initialize a jQuery object
2 -define([
3 - "../core",
4 - "./var/rsingleTag",
5 - "../traversing/findFilter"
6 -], function( jQuery, rsingleTag ) {
7 -
8 -// A central reference to the root jQuery(document)
9 -var rootjQuery,
10 -
11 - // A simple way to check for HTML strings
12 - // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
13 - // Strict HTML recognition (#11290: must start with <)
14 - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
15 -
16 - init = jQuery.fn.init = function( selector, context ) {
17 - var match, elem;
18 -
19 - // HANDLE: $(""), $(null), $(undefined), $(false)
20 - if ( !selector ) {
21 - return this;
22 - }
23 -
24 - // Handle HTML strings
25 - if ( typeof selector === "string" ) {
26 - if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
27 - // Assume that strings that start and end with <> are HTML and skip the regex check
28 - match = [ null, selector, null ];
29 -
30 - } else {
31 - match = rquickExpr.exec( selector );
32 - }
33 -
34 - // Match html or make sure no context is specified for #id
35 - if ( match && (match[1] || !context) ) {
36 -
37 - // HANDLE: $(html) -> $(array)
38 - if ( match[1] ) {
39 - context = context instanceof jQuery ? context[0] : context;
40 -
41 - // Option to run scripts is true for back-compat
42 - // Intentionally let the error be thrown if parseHTML is not present
43 - jQuery.merge( this, jQuery.parseHTML(
44 - match[1],
45 - context && context.nodeType ? context.ownerDocument || context : document,
46 - true
47 - ) );
48 -
49 - // HANDLE: $(html, props)
50 - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
51 - for ( match in context ) {
52 - // Properties of context are called as methods if possible
53 - if ( jQuery.isFunction( this[ match ] ) ) {
54 - this[ match ]( context[ match ] );
55 -
56 - // ...and otherwise set as attributes
57 - } else {
58 - this.attr( match, context[ match ] );
59 - }
60 - }
61 - }
62 -
63 - return this;
64 -
65 - // HANDLE: $(#id)
66 - } else {
67 - elem = document.getElementById( match[2] );
68 -
69 - // Support: Blackberry 4.6
70 - // gEBID returns nodes no longer in the document (#6963)
71 - if ( elem && elem.parentNode ) {
72 - // Inject the element directly into the jQuery object
73 - this.length = 1;
74 - this[0] = elem;
75 - }
76 -
77 - this.context = document;
78 - this.selector = selector;
79 - return this;
80 - }
81 -
82 - // HANDLE: $(expr, $(...))
83 - } else if ( !context || context.jquery ) {
84 - return ( context || rootjQuery ).find( selector );
85 -
86 - // HANDLE: $(expr, context)
87 - // (which is just equivalent to: $(context).find(expr)
88 - } else {
89 - return this.constructor( context ).find( selector );
90 - }
91 -
92 - // HANDLE: $(DOMElement)
93 - } else if ( selector.nodeType ) {
94 - this.context = this[0] = selector;
95 - this.length = 1;
96 - return this;
97 -
98 - // HANDLE: $(function)
99 - // Shortcut for document ready
100 - } else if ( jQuery.isFunction( selector ) ) {
101 - return typeof rootjQuery.ready !== "undefined" ?
102 - rootjQuery.ready( selector ) :
103 - // Execute immediately if ready is not present
104 - selector( jQuery );
105 - }
106 -
107 - if ( selector.selector !== undefined ) {
108 - this.selector = selector.selector;
109 - this.context = selector.context;
110 - }
111 -
112 - return jQuery.makeArray( selector, this );
113 - };
114 -
115 -// Give the init function the jQuery prototype for later instantiation
116 -init.prototype = jQuery.fn;
117 -
118 -// Initialize central reference
119 -rootjQuery = jQuery( document );
120 -
121 -return init;
122 -
123 -});
1 -define([
2 - "../core",
3 - "./var/rsingleTag",
4 - "../manipulation" // buildFragment
5 -], function( jQuery, rsingleTag ) {
6 -
7 -// data: string of html
8 -// context (optional): If specified, the fragment will be created in this context, defaults to document
9 -// keepScripts (optional): If true, will include scripts passed in the html string
10 -jQuery.parseHTML = function( data, context, keepScripts ) {
11 - if ( !data || typeof data !== "string" ) {
12 - return null;
13 - }
14 - if ( typeof context === "boolean" ) {
15 - keepScripts = context;
16 - context = false;
17 - }
18 - context = context || document;
19 -
20 - var parsed = rsingleTag.exec( data ),
21 - scripts = !keepScripts && [];
22 -
23 - // Single tag
24 - if ( parsed ) {
25 - return [ context.createElement( parsed[1] ) ];
26 - }
27 -
28 - parsed = jQuery.buildFragment( [ data ], context, scripts );
29 -
30 - if ( scripts && scripts.length ) {
31 - jQuery( scripts ).remove();
32 - }
33 -
34 - return jQuery.merge( [], parsed.childNodes );
35 -};
36 -
37 -return jQuery.parseHTML;
38 -
39 -});
1 -define([
2 - "../core",
3 - "../core/init",
4 - "../deferred"
5 -], function( jQuery ) {
6 -
7 -// The deferred used on DOM ready
8 -var readyList;
9 -
10 -jQuery.fn.ready = function( fn ) {
11 - // Add the callback
12 - jQuery.ready.promise().done( fn );
13 -
14 - return this;
15 -};
16 -
17 -jQuery.extend({
18 - // Is the DOM ready to be used? Set to true once it occurs.
19 - isReady: false,
20 -
21 - // A counter to track how many items to wait for before
22 - // the ready event fires. See #6781
23 - readyWait: 1,
24 -
25 - // Hold (or release) the ready event
26 - holdReady: function( hold ) {
27 - if ( hold ) {
28 - jQuery.readyWait++;
29 - } else {
30 - jQuery.ready( true );
31 - }
32 - },
33 -
34 - // Handle when the DOM is ready
35 - ready: function( wait ) {
36 -
37 - // Abort if there are pending holds or we're already ready
38 - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
39 - return;
40 - }
41 -
42 - // Remember that the DOM is ready
43 - jQuery.isReady = true;
44 -
45 - // If a normal DOM Ready event fired, decrement, and wait if need be
46 - if ( wait !== true && --jQuery.readyWait > 0 ) {
47 - return;
48 - }
49 -
50 - // If there are functions bound, to execute
51 - readyList.resolveWith( document, [ jQuery ] );
52 -
53 - // Trigger any bound ready events
54 - if ( jQuery.fn.triggerHandler ) {
55 - jQuery( document ).triggerHandler( "ready" );
56 - jQuery( document ).off( "ready" );
57 - }
58 - }
59 -});
60 -
61 -/**
62 - * The ready event handler and self cleanup method
63 - */
64 -function completed() {
65 - document.removeEventListener( "DOMContentLoaded", completed, false );
66 - window.removeEventListener( "load", completed, false );
67 - jQuery.ready();
68 -}
69 -
70 -jQuery.ready.promise = function( obj ) {
71 - if ( !readyList ) {
72 -
73 - readyList = jQuery.Deferred();
74 -
75 - // Catch cases where $(document).ready() is called after the browser event has already occurred.
76 - // We once tried to use readyState "interactive" here, but it caused issues like the one
77 - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
78 - if ( document.readyState === "complete" ) {
79 - // Handle it asynchronously to allow scripts the opportunity to delay ready
80 - setTimeout( jQuery.ready );
81 -
82 - } else {
83 -
84 - // Use the handy event callback
85 - document.addEventListener( "DOMContentLoaded", completed, false );
86 -
87 - // A fallback to window.onload, that will always work
88 - window.addEventListener( "load", completed, false );
89 - }
90 - }
91 - return readyList.promise( obj );
92 -};
93 -
94 -// Kick off the DOM ready check even if the user does not
95 -jQuery.ready.promise();
96 -
97 -});
1 -define(function() {
2 - // Match a standalone tag
3 - return (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
4 -});
1 -define(function() {
2 -
3 -function addGetHookIf( conditionFn, hookFn ) {
4 - // Define the hook, we'll check on the first run if it's really needed.
5 - return {
6 - get: function() {
7 - if ( conditionFn() ) {
8 - // Hook not needed (or it's not possible to use it due
9 - // to missing dependency), remove it.
10 - delete this.get;
11 - return;
12 - }
13 -
14 - // Hook needed; redefine it so that the support test is not executed again.
15 - return (this.get = hookFn).apply( this, arguments );
16 - }
17 - };
18 -}
19 -
20 -return addGetHookIf;
21 -
22 -});
1 -define([
2 - "../core",
3 - "./var/rnumnonpx",
4 - "./var/rmargin",
5 - "./var/getStyles",
6 - "../selector" // contains
7 -], function( jQuery, rnumnonpx, rmargin, getStyles ) {
8 -
9 -function curCSS( elem, name, computed ) {
10 - var width, minWidth, maxWidth, ret,
11 - style = elem.style;
12 -
13 - computed = computed || getStyles( elem );
14 -
15 - // Support: IE9
16 - // getPropertyValue is only needed for .css('filter') (#12537)
17 - if ( computed ) {
18 - ret = computed.getPropertyValue( name ) || computed[ name ];
19 - }
20 -
21 - if ( computed ) {
22 -
23 - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
24 - ret = jQuery.style( elem, name );
25 - }
26 -
27 - // Support: iOS < 6
28 - // A tribute to the "awesome hack by Dean Edwards"
29 - // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
30 - // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
31 - if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
32 -
33 - // Remember the original values
34 - width = style.width;
35 - minWidth = style.minWidth;
36 - maxWidth = style.maxWidth;
37 -
38 - // Put in the new values to get a computed value out
39 - style.minWidth = style.maxWidth = style.width = ret;
40 - ret = computed.width;
41 -
42 - // Revert the changed values
43 - style.width = width;
44 - style.minWidth = minWidth;
45 - style.maxWidth = maxWidth;
46 - }
47 - }
48 -
49 - return ret !== undefined ?
50 - // Support: IE
51 - // IE returns zIndex value as an integer.
52 - ret + "" :
53 - ret;
54 -}
55 -
56 -return curCSS;
57 -});
1 -define([
2 - "../core",
3 - "../manipulation" // appendTo
4 -], function( jQuery ) {
5 -
6 -var iframe,
7 - elemdisplay = {};
8 -
9 -/**
10 - * Retrieve the actual display of a element
11 - * @param {String} name nodeName of the element
12 - * @param {Object} doc Document object
13 - */
14 -// Called only from within defaultDisplay
15 -function actualDisplay( name, doc ) {
16 - var style,
17 - elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
18 -
19 - // getDefaultComputedStyle might be reliably used only on attached element
20 - display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
21 -
22 - // Use of this method is a temporary fix (more like optimization) until something better comes along,
23 - // since it was removed from specification and supported only in FF
24 - style.display : jQuery.css( elem[ 0 ], "display" );
25 -
26 - // We don't have any data stored on the element,
27 - // so use "detach" method as fast way to get rid of the element
28 - elem.detach();
29 -
30 - return display;
31 -}
32 -
33 -/**
34 - * Try to determine the default display value of an element
35 - * @param {String} nodeName
36 - */
37 -function defaultDisplay( nodeName ) {
38 - var doc = document,
39 - display = elemdisplay[ nodeName ];
40 -
41 - if ( !display ) {
42 - display = actualDisplay( nodeName, doc );
43 -
44 - // If the simple way fails, read from inside an iframe
45 - if ( display === "none" || !display ) {
46 -
47 - // Use the already-created iframe if possible
48 - iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
49 -
50 - // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
51 - doc = iframe[ 0 ].contentDocument;
52 -
53 - // Support: IE
54 - doc.write();
55 - doc.close();
56 -
57 - display = actualDisplay( nodeName, doc );
58 - iframe.detach();
59 - }
60 -
61 - // Store the correct default display
62 - elemdisplay[ nodeName ] = display;
63 - }
64 -
65 - return display;
66 -}
67 -
68 -return defaultDisplay;
69 -
70 -});
1 -define([
2 - "../core",
3 - "../var/support"
4 -], function( jQuery, support ) {
5 -
6 -(function() {
7 - var pixelPositionVal, boxSizingReliableVal,
8 - docElem = document.documentElement,
9 - container = document.createElement( "div" ),
10 - div = document.createElement( "div" );
11 -
12 - if ( !div.style ) {
13 - return;
14 - }
15 -
16 - // Support: IE9-11+
17 - // Style of cloned element affects source element cloned (#8908)
18 - div.style.backgroundClip = "content-box";
19 - div.cloneNode( true ).style.backgroundClip = "";
20 - support.clearCloneStyle = div.style.backgroundClip === "content-box";
21 -
22 - container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
23 - "position:absolute";
24 - container.appendChild( div );
25 -
26 - // Executing both pixelPosition & boxSizingReliable tests require only one layout
27 - // so they're executed at the same time to save the second computation.
28 - function computePixelPositionAndBoxSizingReliable() {
29 - div.style.cssText =
30 - // Support: Firefox<29, Android 2.3
31 - // Vendor-prefix box-sizing
32 - "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
33 - "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
34 - "border:1px;padding:1px;width:4px;position:absolute";
35 - div.innerHTML = "";
36 - docElem.appendChild( container );
37 -
38 - var divStyle = window.getComputedStyle( div, null );
39 - pixelPositionVal = divStyle.top !== "1%";
40 - boxSizingReliableVal = divStyle.width === "4px";
41 -
42 - docElem.removeChild( container );
43 - }
44 -
45 - // Support: node.js jsdom
46 - // Don't assume that getComputedStyle is a property of the global object
47 - if ( window.getComputedStyle ) {
48 - jQuery.extend( support, {
49 - pixelPosition: function() {
50 -
51 - // This test is executed only once but we still do memoizing
52 - // since we can use the boxSizingReliable pre-computing.
53 - // No need to check if the test was already performed, though.
54 - computePixelPositionAndBoxSizingReliable();
55 - return pixelPositionVal;
56 - },
57 - boxSizingReliable: function() {
58 - if ( boxSizingReliableVal == null ) {
59 - computePixelPositionAndBoxSizingReliable();
60 - }
61 - return boxSizingReliableVal;
62 - },
63 - reliableMarginRight: function() {
64 -
65 - // Support: Android 2.3
66 - // Check if div with explicit width and no margin-right incorrectly
67 - // gets computed margin-right based on width of container. (#3333)
68 - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
69 - // This support function is only executed once so no memoizing is needed.
70 - var ret,
71 - marginDiv = div.appendChild( document.createElement( "div" ) );
72 -
73 - // Reset CSS: box-sizing; display; margin; border; padding
74 - marginDiv.style.cssText = div.style.cssText =
75 - // Support: Firefox<29, Android 2.3
76 - // Vendor-prefix box-sizing
77 - "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
78 - "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
79 - marginDiv.style.marginRight = marginDiv.style.width = "0";
80 - div.style.width = "1px";
81 - docElem.appendChild( container );
82 -
83 - ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
84 -
85 - docElem.removeChild( container );
86 - div.removeChild( marginDiv );
87 -
88 - return ret;
89 - }
90 - });
91 - }
92 -})();
93 -
94 -return support;
95 -
96 -});
1 -define([
2 - "../core"
3 -], function( jQuery ) {
4 -
5 -// A method for quickly swapping in/out CSS properties to get correct calculations.
6 -jQuery.swap = function( elem, options, callback, args ) {
7 - var ret, name,
8 - old = {};
9 -
10 - // Remember the old values, and insert the new ones
11 - for ( name in options ) {
12 - old[ name ] = elem.style[ name ];
13 - elem.style[ name ] = options[ name ];
14 - }
15 -
16 - ret = callback.apply( elem, args || [] );
17 -
18 - // Revert the old values
19 - for ( name in options ) {
20 - elem.style[ name ] = old[ name ];
21 - }
22 -
23 - return ret;
24 -};
25 -
26 -return jQuery.swap;
27 -
28 -});
1 -define(function() {
2 - return [ "Top", "Right", "Bottom", "Left" ];
3 -});
1 -define(function() {
2 - return function( elem ) {
3 - // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
4 - // IE throws on elements created in popups
5 - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
6 - if ( elem.ownerDocument.defaultView.opener ) {
7 - return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
8 - }
9 -
10 - return window.getComputedStyle( elem, null );
11 - };
12 -});
1 -define([
2 - "../../core",
3 - "../../selector"
4 - // css is assumed
5 -], function( jQuery ) {
6 -
7 - return function( elem, el ) {
8 - // isHidden might be called from jQuery#filter function;
9 - // in that case, element will be second argument
10 - elem = el || elem;
11 - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
12 - };
13 -});
1 -define(function() {
2 - return (/^margin/);
3 -});
1 -define([
2 - "../../var/pnum"
3 -], function( pnum ) {
4 - return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
5 -});
1 -define([
2 - "../core"
3 -], function( jQuery ) {
4 -
5 -/**
6 - * Determines whether an object can have data
7 - */
8 -jQuery.acceptData = function( owner ) {
9 - // Accepts only:
10 - // - Node
11 - // - Node.ELEMENT_NODE
12 - // - Node.DOCUMENT_NODE
13 - // - Object
14 - // - Any
15 - /* jshint -W018 */
16 - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
17 -};
18 -
19 -return jQuery.acceptData;
20 -});
1 -define([
2 - "../Data"
3 -], function( Data ) {
4 - return new Data();
5 -});
1 -define([
2 - "../Data"
3 -], function( Data ) {
4 - return new Data();
5 -});
1 -define([
2 - "./core",
3 - "./core/access",
4 - "./css"
5 -], function( jQuery, access ) {
6 -
7 -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
8 -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
9 - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
10 - // Margin is only for outerHeight, outerWidth
11 - jQuery.fn[ funcName ] = function( margin, value ) {
12 - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
13 - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
14 -
15 - return access( this, function( elem, type, value ) {
16 - var doc;
17 -
18 - if ( jQuery.isWindow( elem ) ) {
19 - // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
20 - // isn't a whole lot we can do. See pull request at this URL for discussion:
21 - // https://github.com/jquery/jquery/pull/764
22 - return elem.document.documentElement[ "client" + name ];
23 - }
24 -
25 - // Get document width or height
26 - if ( elem.nodeType === 9 ) {
27 - doc = elem.documentElement;
28 -
29 - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
30 - // whichever is greatest
31 - return Math.max(
32 - elem.body[ "scroll" + name ], doc[ "scroll" + name ],
33 - elem.body[ "offset" + name ], doc[ "offset" + name ],
34 - doc[ "client" + name ]
35 - );
36 - }
37 -
38 - return value === undefined ?
39 - // Get width or height on the element, requesting but not forcing parseFloat
40 - jQuery.css( elem, type, extra ) :
41 -
42 - // Set width or height on the element
43 - jQuery.style( elem, type, value, extra );
44 - }, type, chainable ? margin : undefined, chainable, null );
45 - };
46 - });
47 -});
48 -
49 -return jQuery;
50 -});
1 -define([
2 - "../core",
3 - "../css"
4 -], function( jQuery ) {
5 -
6 -function Tween( elem, options, prop, end, easing ) {
7 - return new Tween.prototype.init( elem, options, prop, end, easing );
8 -}
9 -jQuery.Tween = Tween;
10 -
11 -Tween.prototype = {
12 - constructor: Tween,
13 - init: function( elem, options, prop, end, easing, unit ) {
14 - this.elem = elem;
15 - this.prop = prop;
16 - this.easing = easing || "swing";
17 - this.options = options;
18 - this.start = this.now = this.cur();
19 - this.end = end;
20 - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
21 - },
22 - cur: function() {
23 - var hooks = Tween.propHooks[ this.prop ];
24 -
25 - return hooks && hooks.get ?
26 - hooks.get( this ) :
27 - Tween.propHooks._default.get( this );
28 - },
29 - run: function( percent ) {
30 - var eased,
31 - hooks = Tween.propHooks[ this.prop ];
32 -
33 - if ( this.options.duration ) {
34 - this.pos = eased = jQuery.easing[ this.easing ](
35 - percent, this.options.duration * percent, 0, 1, this.options.duration
36 - );
37 - } else {
38 - this.pos = eased = percent;
39 - }
40 - this.now = ( this.end - this.start ) * eased + this.start;
41 -
42 - if ( this.options.step ) {
43 - this.options.step.call( this.elem, this.now, this );
44 - }
45 -
46 - if ( hooks && hooks.set ) {
47 - hooks.set( this );
48 - } else {
49 - Tween.propHooks._default.set( this );
50 - }
51 - return this;
52 - }
53 -};
54 -
55 -Tween.prototype.init.prototype = Tween.prototype;
56 -
57 -Tween.propHooks = {
58 - _default: {
59 - get: function( tween ) {
60 - var result;
61 -
62 - if ( tween.elem[ tween.prop ] != null &&
63 - (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
64 - return tween.elem[ tween.prop ];
65 - }
66 -
67 - // Passing an empty string as a 3rd parameter to .css will automatically
68 - // attempt a parseFloat and fallback to a string if the parse fails.
69 - // Simple values such as "10px" are parsed to Float;
70 - // complex values such as "rotate(1rad)" are returned as-is.
71 - result = jQuery.css( tween.elem, tween.prop, "" );
72 - // Empty strings, null, undefined and "auto" are converted to 0.
73 - return !result || result === "auto" ? 0 : result;
74 - },
75 - set: function( tween ) {
76 - // Use step hook for back compat.
77 - // Use cssHook if its there.
78 - // Use .style if available and use plain properties where available.
79 - if ( jQuery.fx.step[ tween.prop ] ) {
80 - jQuery.fx.step[ tween.prop ]( tween );
81 - } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
82 - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
83 - } else {
84 - tween.elem[ tween.prop ] = tween.now;
85 - }
86 - }
87 - }
88 -};
89 -
90 -// Support: IE9
91 -// Panic based approach to setting things on disconnected nodes
92 -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
93 - set: function( tween ) {
94 - if ( tween.elem.nodeType && tween.elem.parentNode ) {
95 - tween.elem[ tween.prop ] = tween.now;
96 - }
97 - }
98 -};
99 -
100 -jQuery.easing = {
101 - linear: function( p ) {
102 - return p;
103 - },
104 - swing: function( p ) {
105 - return 0.5 - Math.cos( p * Math.PI ) / 2;
106 - }
107 -};
108 -
109 -jQuery.fx = Tween.prototype.init;
110 -
111 -// Back Compat <1.8 extension point
112 -jQuery.fx.step = {};
113 -
114 -});
1 -define([
2 - "../core",
3 - "../event"
4 -], function( jQuery ) {
5 -
6 -// Attach a bunch of functions for handling common AJAX events
7 -jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
8 - jQuery.fn[ type ] = function( fn ) {
9 - return this.on( type, fn );
10 - };
11 -});
12 -
13 -});
1 -define([
2 - "../core",
3 - "../event"
4 -], function( jQuery ) {
5 -
6 -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
7 - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
8 - "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
9 -
10 - // Handle event binding
11 - jQuery.fn[ name ] = function( data, fn ) {
12 - return arguments.length > 0 ?
13 - this.on( name, null, data, fn ) :
14 - this.trigger( name );
15 - };
16 -});
17 -
18 -jQuery.fn.extend({
19 - hover: function( fnOver, fnOut ) {
20 - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
21 - },
22 -
23 - bind: function( types, data, fn ) {
24 - return this.on( types, null, data, fn );
25 - },
26 - unbind: function( types, fn ) {
27 - return this.off( types, null, fn );
28 - },
29 -
30 - delegate: function( selector, types, data, fn ) {
31 - return this.on( types, selector, data, fn );
32 - },
33 - undelegate: function( selector, types, fn ) {
34 - // ( namespace ) or ( selector, types [, fn] )
35 - return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
36 - }
37 -});
38 -
39 -});
1 -define([
2 - "../var/support"
3 -], function( support ) {
4 -
5 -support.focusinBubbles = "onfocusin" in window;
6 -
7 -return support;
8 -
9 -});
1 -define([
2 - "../core"
3 -], function( jQuery ) {
4 -
5 -// Register as a named AMD module, since jQuery can be concatenated with other
6 -// files that may use define, but not via a proper concatenation script that
7 -// understands anonymous AMD modules. A named AMD is safest and most robust
8 -// way to register. Lowercase jquery is used because AMD module names are
9 -// derived from file names, and jQuery is normally delivered in a lowercase
10 -// file name. Do this after creating the global so that if an AMD module wants
11 -// to call noConflict to hide this version of jQuery, it will work.
12 -
13 -// Note that for maximum portability, libraries that are not jQuery should
14 -// declare themselves as anonymous modules, and avoid setting a global if an
15 -// AMD loader is present. jQuery is a special case. For more information, see
16 -// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
17 -
18 -if ( typeof define === "function" && define.amd ) {
19 - define( "jquery", [], function() {
20 - return jQuery;
21 - });
22 -}
23 -
24 -});
1 -define([
2 - "../core",
3 - "../var/strundefined"
4 -], function( jQuery, strundefined ) {
5 -
6 -var
7 - // Map over jQuery in case of overwrite
8 - _jQuery = window.jQuery,
9 -
10 - // Map over the $ in case of overwrite
11 - _$ = window.$;
12 -
13 -jQuery.noConflict = function( deep ) {
14 - if ( window.$ === jQuery ) {
15 - window.$ = _$;
16 - }
17 -
18 - if ( deep && window.jQuery === jQuery ) {
19 - window.jQuery = _jQuery;
20 - }
21 -
22 - return jQuery;
23 -};
24 -
25 -// Expose jQuery and $ identifiers, even in AMD
26 -// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
27 -// and CommonJS for browser emulators (#13566)
28 -if ( typeof noGlobal === strundefined ) {
29 - window.jQuery = window.$ = jQuery;
30 -}
31 -
32 -});
1 -/*!
2 - * jQuery JavaScript Library v@VERSION
3 - * http://jquery.com/
4 - *
5 - * Includes Sizzle.js
6 - * http://sizzlejs.com/
7 - *
8 - * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
9 - * Released under the MIT license
10 - * http://jquery.org/license
11 - *
12 - * Date: @DATE
13 - */
14 -
15 -(function( global, factory ) {
16 -
17 - if ( typeof module === "object" && typeof module.exports === "object" ) {
18 - // For CommonJS and CommonJS-like environments where a proper `window`
19 - // is present, execute the factory and get jQuery.
20 - // For environments that do not have a `window` with a `document`
21 - // (such as Node.js), expose a factory as module.exports.
22 - // This accentuates the need for the creation of a real `window`.
23 - // e.g. var jQuery = require("jquery")(window);
24 - // See ticket #14549 for more info.
25 - module.exports = global.document ?
26 - factory( global, true ) :
27 - function( w ) {
28 - if ( !w.document ) {
29 - throw new Error( "jQuery requires a window with a document" );
30 - }
31 - return factory( w );
32 - };
33 - } else {
34 - factory( global );
35 - }
36 -
37 -// Pass this if window is not defined yet
38 -}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
39 -
40 -// Support: Firefox 18+
41 -// Can't be in strict mode, several libs including ASP.NET trace
42 -// the stack via arguments.caller.callee and Firefox dies if
43 -// you try to trace through "use strict" call chains. (#13335)
44 -//"use strict";
1 -define([
2 - "./core",
3 - "./selector",
4 - "./traversing",
5 - "./callbacks",
6 - "./deferred",
7 - "./core/ready",
8 - "./data",
9 - "./queue",
10 - "./queue/delay",
11 - "./attributes",
12 - "./event",
13 - "./event/alias",
14 - "./manipulation",
15 - "./manipulation/_evalUrl",
16 - "./wrap",
17 - "./css",
18 - "./css/hiddenVisibleSelectors",
19 - "./serialize",
20 - "./ajax",
21 - "./ajax/xhr",
22 - "./ajax/script",
23 - "./ajax/jsonp",
24 - "./ajax/load",
25 - "./event/ajax",
26 - "./effects",
27 - "./effects/animatedSelector",
28 - "./offset",
29 - "./dimensions",
30 - "./deprecated",
31 - "./exports/amd",
32 - "./exports/global"
33 -], function( jQuery ) {
34 -
35 -return jQuery;
36 -
37 -});
1 -define([
2 - "../ajax"
3 -], function( jQuery ) {
4 -
5 -jQuery._evalUrl = function( url ) {
6 - return jQuery.ajax({
7 - url: url,
8 - type: "GET",
9 - dataType: "script",
10 - async: false,
11 - global: false,
12 - "throws": true
13 - });
14 -};
15 -
16 -return jQuery._evalUrl;
17 -
18 -});
1 -define([
2 - "../var/support"
3 -], function( support ) {
4 -
5 -(function() {
6 - var fragment = document.createDocumentFragment(),
7 - div = fragment.appendChild( document.createElement( "div" ) ),
8 - input = document.createElement( "input" );
9 -
10 - // Support: Safari<=5.1
11 - // Check state lost if the name is set (#11217)
12 - // Support: Windows Web Apps (WWA)
13 - // `name` and `type` must use .setAttribute for WWA (#14901)
14 - input.setAttribute( "type", "radio" );
15 - input.setAttribute( "checked", "checked" );
16 - input.setAttribute( "name", "t" );
17 -
18 - div.appendChild( input );
19 -
20 - // Support: Safari<=5.1, Android<4.2
21 - // Older WebKit doesn't clone checked state correctly in fragments
22 - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
23 -
24 - // Support: IE<=11+
25 - // Make sure textarea (and checkbox) defaultValue is properly cloned
26 - div.innerHTML = "<textarea>x</textarea>";
27 - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
28 -})();
29 -
30 -return support;
31 -
32 -});
1 -define(function() {
2 - return (/^(?:checkbox|radio)$/i);
3 -});
1 -define([
2 - "./core",
3 - "./data/var/data_priv",
4 - "./deferred",
5 - "./callbacks"
6 -], function( jQuery, data_priv ) {
7 -
8 -jQuery.extend({
9 - queue: function( elem, type, data ) {
10 - var queue;
11 -
12 - if ( elem ) {
13 - type = ( type || "fx" ) + "queue";
14 - queue = data_priv.get( elem, type );
15 -
16 - // Speed up dequeue by getting out quickly if this is just a lookup
17 - if ( data ) {
18 - if ( !queue || jQuery.isArray( data ) ) {
19 - queue = data_priv.access( elem, type, jQuery.makeArray(data) );
20 - } else {
21 - queue.push( data );
22 - }
23 - }
24 - return queue || [];
25 - }
26 - },
27 -
28 - dequeue: function( elem, type ) {
29 - type = type || "fx";
30 -
31 - var queue = jQuery.queue( elem, type ),
32 - startLength = queue.length,
33 - fn = queue.shift(),
34 - hooks = jQuery._queueHooks( elem, type ),
35 - next = function() {
36 - jQuery.dequeue( elem, type );
37 - };
38 -
39 - // If the fx queue is dequeued, always remove the progress sentinel
40 - if ( fn === "inprogress" ) {
41 - fn = queue.shift();
42 - startLength--;
43 - }
44 -
45 - if ( fn ) {
46 -
47 - // Add a progress sentinel to prevent the fx queue from being
48 - // automatically dequeued
49 - if ( type === "fx" ) {
50 - queue.unshift( "inprogress" );
51 - }
52 -
53 - // Clear up the last queue stop function
54 - delete hooks.stop;
55 - fn.call( elem, next, hooks );
56 - }
57 -
58 - if ( !startLength && hooks ) {
59 - hooks.empty.fire();
60 - }
61 - },
62 -
63 - // Not public - generate a queueHooks object, or return the current one
64 - _queueHooks: function( elem, type ) {
65 - var key = type + "queueHooks";
66 - return data_priv.get( elem, key ) || data_priv.access( elem, key, {
67 - empty: jQuery.Callbacks("once memory").add(function() {
68 - data_priv.remove( elem, [ type + "queue", key ] );
69 - })
70 - });
71 - }
72 -});
73 -
74 -jQuery.fn.extend({
75 - queue: function( type, data ) {
76 - var setter = 2;
77 -
78 - if ( typeof type !== "string" ) {
79 - data = type;
80 - type = "fx";
81 - setter--;
82 - }
83 -
84 - if ( arguments.length < setter ) {
85 - return jQuery.queue( this[0], type );
86 - }
87 -
88 - return data === undefined ?
89 - this :
90 - this.each(function() {
91 - var queue = jQuery.queue( this, type, data );
92 -
93 - // Ensure a hooks for this queue
94 - jQuery._queueHooks( this, type );
95 -
96 - if ( type === "fx" && queue[0] !== "inprogress" ) {
97 - jQuery.dequeue( this, type );
98 - }
99 - });
100 - },
101 - dequeue: function( type ) {
102 - return this.each(function() {
103 - jQuery.dequeue( this, type );
104 - });
105 - },
106 - clearQueue: function( type ) {
107 - return this.queue( type || "fx", [] );
108 - },
109 - // Get a promise resolved when queues of a certain type
110 - // are emptied (fx is the type by default)
111 - promise: function( type, obj ) {
112 - var tmp,
113 - count = 1,
114 - defer = jQuery.Deferred(),
115 - elements = this,
116 - i = this.length,
117 - resolve = function() {
118 - if ( !( --count ) ) {
119 - defer.resolveWith( elements, [ elements ] );
120 - }
121 - };
122 -
123 - if ( typeof type !== "string" ) {
124 - obj = type;
125 - type = undefined;
126 - }
127 - type = type || "fx";
128 -
129 - while ( i-- ) {
130 - tmp = data_priv.get( elements[ i ], type + "queueHooks" );
131 - if ( tmp && tmp.empty ) {
132 - count++;
133 - tmp.empty.add( resolve );
134 - }
135 - }
136 - resolve();
137 - return defer.promise( obj );
138 - }
139 -});
140 -
141 -return jQuery;
142 -});
1 -define([
2 - "../core",
3 - "../queue",
4 - "../effects" // Delay is optional because of this dependency
5 -], function( jQuery ) {
6 -
7 -// Based off of the plugin by Clint Helfers, with permission.
8 -// http://blindsignals.com/index.php/2009/07/jquery-delay/
9 -jQuery.fn.delay = function( time, type ) {
10 - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
11 - type = type || "fx";
12 -
13 - return this.queue( type, function( next, hooks ) {
14 - var timeout = setTimeout( next, time );
15 - hooks.stop = function() {
16 - clearTimeout( timeout );
17 - };
18 - });
19 -};
20 -
21 -return jQuery.fn.delay;
22 -});
1 -define([
2 - "./core"
3 -], function( jQuery ) {
4 -
5 -/*
6 - * Optional (non-Sizzle) selector module for custom builds.
7 - *
8 - * Note that this DOES NOT SUPPORT many documented jQuery
9 - * features in exchange for its smaller size:
10 - *
11 - * Attribute not equal selector
12 - * Positional selectors (:first; :eq(n); :odd; etc.)
13 - * Type selectors (:input; :checkbox; :button; etc.)
14 - * State-based selectors (:animated; :visible; :hidden; etc.)
15 - * :has(selector)
16 - * :not(complex selector)
17 - * custom selectors via Sizzle extensions
18 - * Leading combinators (e.g., $collection.find("> *"))
19 - * Reliable functionality on XML fragments
20 - * Requiring all parts of a selector to match elements under context
21 - * (e.g., $div.find("div > *") now matches children of $div)
22 - * Matching against non-elements
23 - * Reliable sorting of disconnected nodes
24 - * querySelectorAll bug fixes (e.g., unreliable :focus on WebKit)
25 - *
26 - * If any of these are unacceptable tradeoffs, either use Sizzle or
27 - * customize this stub for the project's specific needs.
28 - */
29 -
30 -var docElem = window.document.documentElement,
31 - selector_hasDuplicate,
32 - matches = docElem.matches ||
33 - docElem.webkitMatchesSelector ||
34 - docElem.mozMatchesSelector ||
35 - docElem.oMatchesSelector ||
36 - docElem.msMatchesSelector,
37 - selector_sortOrder = function( a, b ) {
38 - // Flag for duplicate removal
39 - if ( a === b ) {
40 - selector_hasDuplicate = true;
41 - return 0;
42 - }
43 -
44 - var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );
45 -
46 - if ( compare ) {
47 - // Disconnected nodes
48 - if ( compare & 1 ) {
49 -
50 - // Choose the first element that is related to our document
51 - if ( a === document || jQuery.contains(document, a) ) {
52 - return -1;
53 - }
54 - if ( b === document || jQuery.contains(document, b) ) {
55 - return 1;
56 - }
57 -
58 - // Maintain original order
59 - return 0;
60 - }
61 -
62 - return compare & 4 ? -1 : 1;
63 - }
64 -
65 - // Not directly comparable, sort on existence of method
66 - return a.compareDocumentPosition ? -1 : 1;
67 - };
68 -
69 -jQuery.extend({
70 - find: function( selector, context, results, seed ) {
71 - var elem, nodeType,
72 - i = 0;
73 -
74 - results = results || [];
75 - context = context || document;
76 -
77 - // Same basic safeguard as Sizzle
78 - if ( !selector || typeof selector !== "string" ) {
79 - return results;
80 - }
81 -
82 - // Early return if context is not an element or document
83 - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
84 - return [];
85 - }
86 -
87 - if ( seed ) {
88 - while ( (elem = seed[i++]) ) {
89 - if ( jQuery.find.matchesSelector(elem, selector) ) {
90 - results.push( elem );
91 - }
92 - }
93 - } else {
94 - jQuery.merge( results, context.querySelectorAll(selector) );
95 - }
96 -
97 - return results;
98 - },
99 - unique: function( results ) {
100 - var elem,
101 - duplicates = [],
102 - i = 0,
103 - j = 0;
104 -
105 - selector_hasDuplicate = false;
106 - results.sort( selector_sortOrder );
107 -
108 - if ( selector_hasDuplicate ) {
109 - while ( (elem = results[i++]) ) {
110 - if ( elem === results[ i ] ) {
111 - j = duplicates.push( i );
112 - }
113 - }
114 - while ( j-- ) {
115 - results.splice( duplicates[ j ], 1 );
116 - }
117 - }
118 -
119 - return results;
120 - },
121 - text: function( elem ) {
122 - var node,
123 - ret = "",
124 - i = 0,
125 - nodeType = elem.nodeType;
126 -
127 - if ( !nodeType ) {
128 - // If no nodeType, this is expected to be an array
129 - while ( (node = elem[i++]) ) {
130 - // Do not traverse comment nodes
131 - ret += jQuery.text( node );
132 - }
133 - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
134 - // Use textContent for elements
135 - return elem.textContent;
136 - } else if ( nodeType === 3 || nodeType === 4 ) {
137 - return elem.nodeValue;
138 - }
139 - // Do not include comment or processing instruction nodes
140 -
141 - return ret;
142 - },
143 - contains: function( a, b ) {
144 - var adown = a.nodeType === 9 ? a.documentElement : a,
145 - bup = b && b.parentNode;
146 - return a === bup || !!( bup && bup.nodeType === 1 && adown.contains(bup) );
147 - },
148 - isXMLDoc: function( elem ) {
149 - return (elem.ownerDocument || elem).documentElement.nodeName !== "HTML";
150 - },
151 - expr: {
152 - attrHandle: {},
153 - match: {
154 - bool: /^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$/i,
155 - needsContext: /^[\x20\t\r\n\f]*[>+~]/
156 - }
157 - }
158 -});
159 -
160 -jQuery.extend( jQuery.find, {
161 - matches: function( expr, elements ) {
162 - return jQuery.find( expr, null, null, elements );
163 - },
164 - matchesSelector: function( elem, expr ) {
165 - return matches.call( elem, expr );
166 - },
167 - attr: function( elem, name ) {
168 - return elem.getAttribute( name );
169 - }
170 -});
171 -
172 -});
1 -define([
2 - "./core",
3 - "sizzle"
4 -], function( jQuery, Sizzle ) {
5 -
6 -jQuery.find = Sizzle;
7 -jQuery.expr = Sizzle.selectors;
8 -jQuery.expr[":"] = jQuery.expr.pseudos;
9 -jQuery.unique = Sizzle.uniqueSort;
10 -jQuery.text = Sizzle.getText;
11 -jQuery.isXMLDoc = Sizzle.isXML;
12 -jQuery.contains = Sizzle.contains;
13 -
14 -});
1 -define([
2 - "./core",
3 - "./manipulation/var/rcheckableType",
4 - "./core/init",
5 - "./traversing", // filter
6 - "./attributes/prop"
7 -], function( jQuery, rcheckableType ) {
8 -
9 -var r20 = /%20/g,
10 - rbracket = /\[\]$/,
11 - rCRLF = /\r?\n/g,
12 - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
13 - rsubmittable = /^(?:input|select|textarea|keygen)/i;
14 -
15 -function buildParams( prefix, obj, traditional, add ) {
16 - var name;
17 -
18 - if ( jQuery.isArray( obj ) ) {
19 - // Serialize array item.
20 - jQuery.each( obj, function( i, v ) {
21 - if ( traditional || rbracket.test( prefix ) ) {
22 - // Treat each array item as a scalar.
23 - add( prefix, v );
24 -
25 - } else {
26 - // Item is non-scalar (array or object), encode its numeric index.
27 - buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
28 - }
29 - });
30 -
31 - } else if ( !traditional && jQuery.type( obj ) === "object" ) {
32 - // Serialize object item.
33 - for ( name in obj ) {
34 - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
35 - }
36 -
37 - } else {
38 - // Serialize scalar item.
39 - add( prefix, obj );
40 - }
41 -}
42 -
43 -// Serialize an array of form elements or a set of
44 -// key/values into a query string
45 -jQuery.param = function( a, traditional ) {
46 - var prefix,
47 - s = [],
48 - add = function( key, value ) {
49 - // If value is a function, invoke it and return its value
50 - value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
51 - s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
52 - };
53 -
54 - // Set traditional to true for jQuery <= 1.3.2 behavior.
55 - if ( traditional === undefined ) {
56 - traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
57 - }
58 -
59 - // If an array was passed in, assume that it is an array of form elements.
60 - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
61 - // Serialize the form elements
62 - jQuery.each( a, function() {
63 - add( this.name, this.value );
64 - });
65 -
66 - } else {
67 - // If traditional, encode the "old" way (the way 1.3.2 or older
68 - // did it), otherwise encode params recursively.
69 - for ( prefix in a ) {
70 - buildParams( prefix, a[ prefix ], traditional, add );
71 - }
72 - }
73 -
74 - // Return the resulting serialization
75 - return s.join( "&" ).replace( r20, "+" );
76 -};
77 -
78 -jQuery.fn.extend({
79 - serialize: function() {
80 - return jQuery.param( this.serializeArray() );
81 - },
82 - serializeArray: function() {
83 - return this.map(function() {
84 - // Can add propHook for "elements" to filter or add form elements
85 - var elements = jQuery.prop( this, "elements" );
86 - return elements ? jQuery.makeArray( elements ) : this;
87 - })
88 - .filter(function() {
89 - var type = this.type;
90 -
91 - // Use .is( ":disabled" ) so that fieldset[disabled] works
92 - return this.name && !jQuery( this ).is( ":disabled" ) &&
93 - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
94 - ( this.checked || !rcheckableType.test( type ) );
95 - })
96 - .map(function( i, elem ) {
97 - var val = jQuery( this ).val();
98 -
99 - return val == null ?
100 - null :
101 - jQuery.isArray( val ) ?
102 - jQuery.map( val, function( val ) {
103 - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
104 - }) :
105 - { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
106 - }).get();
107 - }
108 -});
109 -
110 -return jQuery;
111 -});
1 -define([
2 - "./core",
3 - "./var/indexOf",
4 - "./traversing/var/rneedsContext",
5 - "./core/init",
6 - "./traversing/findFilter",
7 - "./selector"
8 -], function( jQuery, indexOf, rneedsContext ) {
9 -
10 -var rparentsprev = /^(?:parents|prev(?:Until|All))/,
11 - // Methods guaranteed to produce a unique set when starting from a unique set
12 - guaranteedUnique = {
13 - children: true,
14 - contents: true,
15 - next: true,
16 - prev: true
17 - };
18 -
19 -jQuery.extend({
20 - dir: function( elem, dir, until ) {
21 - var matched = [],
22 - truncate = until !== undefined;
23 -
24 - while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
25 - if ( elem.nodeType === 1 ) {
26 - if ( truncate && jQuery( elem ).is( until ) ) {
27 - break;
28 - }
29 - matched.push( elem );
30 - }
31 - }
32 - return matched;
33 - },
34 -
35 - sibling: function( n, elem ) {
36 - var matched = [];
37 -
38 - for ( ; n; n = n.nextSibling ) {
39 - if ( n.nodeType === 1 && n !== elem ) {
40 - matched.push( n );
41 - }
42 - }
43 -
44 - return matched;
45 - }
46 -});
47 -
48 -jQuery.fn.extend({
49 - has: function( target ) {
50 - var targets = jQuery( target, this ),
51 - l = targets.length;
52 -
53 - return this.filter(function() {
54 - var i = 0;
55 - for ( ; i < l; i++ ) {
56 - if ( jQuery.contains( this, targets[i] ) ) {
57 - return true;
58 - }
59 - }
60 - });
61 - },
62 -
63 - closest: function( selectors, context ) {
64 - var cur,
65 - i = 0,
66 - l = this.length,
67 - matched = [],
68 - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
69 - jQuery( selectors, context || this.context ) :
70 - 0;
71 -
72 - for ( ; i < l; i++ ) {
73 - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
74 - // Always skip document fragments
75 - if ( cur.nodeType < 11 && (pos ?
76 - pos.index(cur) > -1 :
77 -
78 - // Don't pass non-elements to Sizzle
79 - cur.nodeType === 1 &&
80 - jQuery.find.matchesSelector(cur, selectors)) ) {
81 -
82 - matched.push( cur );
83 - break;
84 - }
85 - }
86 - }
87 -
88 - return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
89 - },
90 -
91 - // Determine the position of an element within the set
92 - index: function( elem ) {
93 -
94 - // No argument, return index in parent
95 - if ( !elem ) {
96 - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
97 - }
98 -
99 - // Index in selector
100 - if ( typeof elem === "string" ) {
101 - return indexOf.call( jQuery( elem ), this[ 0 ] );
102 - }
103 -
104 - // Locate the position of the desired element
105 - return indexOf.call( this,
106 -
107 - // If it receives a jQuery object, the first element is used
108 - elem.jquery ? elem[ 0 ] : elem
109 - );
110 - },
111 -
112 - add: function( selector, context ) {
113 - return this.pushStack(
114 - jQuery.unique(
115 - jQuery.merge( this.get(), jQuery( selector, context ) )
116 - )
117 - );
118 - },
119 -
120 - addBack: function( selector ) {
121 - return this.add( selector == null ?
122 - this.prevObject : this.prevObject.filter(selector)
123 - );
124 - }
125 -});
126 -
127 -function sibling( cur, dir ) {
128 - while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
129 - return cur;
130 -}
131 -
132 -jQuery.each({
133 - parent: function( elem ) {
134 - var parent = elem.parentNode;
135 - return parent && parent.nodeType !== 11 ? parent : null;
136 - },
137 - parents: function( elem ) {
138 - return jQuery.dir( elem, "parentNode" );
139 - },
140 - parentsUntil: function( elem, i, until ) {
141 - return jQuery.dir( elem, "parentNode", until );
142 - },
143 - next: function( elem ) {
144 - return sibling( elem, "nextSibling" );
145 - },
146 - prev: function( elem ) {
147 - return sibling( elem, "previousSibling" );
148 - },
149 - nextAll: function( elem ) {
150 - return jQuery.dir( elem, "nextSibling" );
151 - },
152 - prevAll: function( elem ) {
153 - return jQuery.dir( elem, "previousSibling" );
154 - },
155 - nextUntil: function( elem, i, until ) {
156 - return jQuery.dir( elem, "nextSibling", until );
157 - },
158 - prevUntil: function( elem, i, until ) {
159 - return jQuery.dir( elem, "previousSibling", until );
160 - },
161 - siblings: function( elem ) {
162 - return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
163 - },
164 - children: function( elem ) {
165 - return jQuery.sibling( elem.firstChild );
166 - },
167 - contents: function( elem ) {
168 - return elem.contentDocument || jQuery.merge( [], elem.childNodes );
169 - }
170 -}, function( name, fn ) {
171 - jQuery.fn[ name ] = function( until, selector ) {
172 - var matched = jQuery.map( this, fn, until );
173 -
174 - if ( name.slice( -5 ) !== "Until" ) {
175 - selector = until;
176 - }
177 -
178 - if ( selector && typeof selector === "string" ) {
179 - matched = jQuery.filter( selector, matched );
180 - }
181 -
182 - if ( this.length > 1 ) {
183 - // Remove duplicates
184 - if ( !guaranteedUnique[ name ] ) {
185 - jQuery.unique( matched );
186 - }
187 -
188 - // Reverse order for parents* and prev-derivatives
189 - if ( rparentsprev.test( name ) ) {
190 - matched.reverse();
191 - }
192 - }
193 -
194 - return this.pushStack( matched );
195 - };
196 -});
197 -
198 -return jQuery;
199 -});
1 -define([
2 - "../core",
3 - "../var/indexOf",
4 - "./var/rneedsContext",
5 - "../selector"
6 -], function( jQuery, indexOf, rneedsContext ) {
7 -
8 -var risSimple = /^.[^:#\[\.,]*$/;
9 -
10 -// Implement the identical functionality for filter and not
11 -function winnow( elements, qualifier, not ) {
12 - if ( jQuery.isFunction( qualifier ) ) {
13 - return jQuery.grep( elements, function( elem, i ) {
14 - /* jshint -W018 */
15 - return !!qualifier.call( elem, i, elem ) !== not;
16 - });
17 -
18 - }
19 -
20 - if ( qualifier.nodeType ) {
21 - return jQuery.grep( elements, function( elem ) {
22 - return ( elem === qualifier ) !== not;
23 - });
24 -
25 - }
26 -
27 - if ( typeof qualifier === "string" ) {
28 - if ( risSimple.test( qualifier ) ) {
29 - return jQuery.filter( qualifier, elements, not );
30 - }
31 -
32 - qualifier = jQuery.filter( qualifier, elements );
33 - }
34 -
35 - return jQuery.grep( elements, function( elem ) {
36 - return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
37 - });
38 -}
39 -
40 -jQuery.filter = function( expr, elems, not ) {
41 - var elem = elems[ 0 ];
42 -
43 - if ( not ) {
44 - expr = ":not(" + expr + ")";
45 - }
46 -
47 - return elems.length === 1 && elem.nodeType === 1 ?
48 - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
49 - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
50 - return elem.nodeType === 1;
51 - }));
52 -};
53 -
54 -jQuery.fn.extend({
55 - find: function( selector ) {
56 - var i,
57 - len = this.length,
58 - ret = [],
59 - self = this;
60 -
61 - if ( typeof selector !== "string" ) {
62 - return this.pushStack( jQuery( selector ).filter(function() {
63 - for ( i = 0; i < len; i++ ) {
64 - if ( jQuery.contains( self[ i ], this ) ) {
65 - return true;
66 - }
67 - }
68 - }) );
69 - }
70 -
71 - for ( i = 0; i < len; i++ ) {
72 - jQuery.find( selector, self[ i ], ret );
73 - }
74 -
75 - // Needed because $( selector, context ) becomes $( context ).find( selector )
76 - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
77 - ret.selector = this.selector ? this.selector + " " + selector : selector;
78 - return ret;
79 - },
80 - filter: function( selector ) {
81 - return this.pushStack( winnow(this, selector || [], false) );
82 - },
83 - not: function( selector ) {
84 - return this.pushStack( winnow(this, selector || [], true) );
85 - },
86 - is: function( selector ) {
87 - return !!winnow(
88 - this,
89 -
90 - // If this is a positional/relative selector, check membership in the returned set
91 - // so $("p:first").is("p:last") won't return true for a doc with two "p".
92 - typeof selector === "string" && rneedsContext.test( selector ) ?
93 - jQuery( selector ) :
94 - selector || [],
95 - false
96 - ).length;
97 - }
98 -});
99 -
100 -});
1 -define([
2 - "../../core",
3 - "../../selector"
4 -], function( jQuery ) {
5 - return jQuery.expr.match.needsContext;
6 -});
1 -define(function() {
2 - return [];
3 -});
1 -define(function() {
2 - // [[Class]] -> type pairs
3 - return {};
4 -});
1 -define([
2 - "./arr"
3 -], function( arr ) {
4 - return arr.concat;
5 -});
1 -define([
2 - "./class2type"
3 -], function( class2type ) {
4 - return class2type.hasOwnProperty;
5 -});
1 -define([
2 - "./arr"
3 -], function( arr ) {
4 - return arr.indexOf;
5 -});
1 -define(function() {
2 - return (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
3 -});
1 -define([
2 - "./arr"
3 -], function( arr ) {
4 - return arr.push;
5 -});
1 -define(function() {
2 - return (/\S+/g);
3 -});
1 -define([
2 - "./arr"
3 -], function( arr ) {
4 - return arr.slice;
5 -});
1 -define(function() {
2 - return typeof undefined;
3 -});
1 -define(function() {
2 - // All support tests are defined in their respective modules.
3 - return {};
4 -});
1 -define([
2 - "./class2type"
3 -], function( class2type ) {
4 - return class2type.toString;
5 -});
1 -define([
2 - "./core",
3 - "./core/init",
4 - "./manipulation", // clone
5 - "./traversing" // parent, contents
6 -], function( jQuery ) {
7 -
8 -jQuery.fn.extend({
9 - wrapAll: function( html ) {
10 - var wrap;
11 -
12 - if ( jQuery.isFunction( html ) ) {
13 - return this.each(function( i ) {
14 - jQuery( this ).wrapAll( html.call(this, i) );
15 - });
16 - }
17 -
18 - if ( this[ 0 ] ) {
19 -
20 - // The elements to wrap the target around
21 - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
22 -
23 - if ( this[ 0 ].parentNode ) {
24 - wrap.insertBefore( this[ 0 ] );
25 - }
26 -
27 - wrap.map(function() {
28 - var elem = this;
29 -
30 - while ( elem.firstElementChild ) {
31 - elem = elem.firstElementChild;
32 - }
33 -
34 - return elem;
35 - }).append( this );
36 - }
37 -
38 - return this;
39 - },
40 -
41 - wrapInner: function( html ) {
42 - if ( jQuery.isFunction( html ) ) {
43 - return this.each(function( i ) {
44 - jQuery( this ).wrapInner( html.call(this, i) );
45 - });
46 - }
47 -
48 - return this.each(function() {
49 - var self = jQuery( this ),
50 - contents = self.contents();
51 -
52 - if ( contents.length ) {
53 - contents.wrapAll( html );
54 -
55 - } else {
56 - self.append( html );
57 - }
58 - });
59 - },
60 -
61 - wrap: function( html ) {
62 - var isFunction = jQuery.isFunction( html );
63 -
64 - return this.each(function( i ) {
65 - jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
66 - });
67 - },
68 -
69 - unwrap: function() {
70 - return this.parent().each(function() {
71 - if ( !jQuery.nodeName( this, "body" ) ) {
72 - jQuery( this ).replaceWith( this.childNodes );
73 - }
74 - }).end();
75 - }
76 -});
77 -
78 -return jQuery;
79 -});
1 -// Include gulp
2 -var gulp = require('gulp');
3 -
4 -// Include Our Plugins
5 -var jshint = require('gulp-jshint');
6 -var sass = require('gulp-sass');
7 -var nodemon = require('gulp-nodemon');
8 -var concat = require('gulp-concat');
9 -
10 -// Lint Task
11 -gulp.task('lint', function() {
12 - return gulp.src(['app.js', 'routes/**/*.js', 'models/**/*.js', 'config/**/*.js', 'public/javascripts/**/*.js'])
13 - .pipe(jshint())
14 - .pipe(jshint.reporter('default'));
15 -});
16 -
17 -// Compile Our Sass
18 -gulp.task('sass', function() {
19 - return gulp.src(['scss/*.scss'])
20 - .pipe(sass())
21 - .pipe(concat('style.css'))
22 - .pipe(gulp.dest('public/stylesheets'));
23 -});
24 -
25 -// Watch Files For Changes
26 -gulp.task('watch', function() {
27 - gulp.watch('scss/**/*.scss', ['sass']);
28 -});
29 -
30 -gulp.task('nodemon', function (cb) {
31 - var started = false;
32 - return nodemon({
33 - script: 'bin/www'
34 - }).on('start', function () {
35 - // to avoid nodemon being started multiple times
36 - // thanks @matthisk
37 - if (!started) {
38 - cb();
39 - started = true;
40 - }
41 - });
42 -});
43 -
44 -// Default Task
45 -gulp.task('default', ['lint', 'sass', 'watch', 'nodemon']);
1 -var mongoose = require('mongoose'),
2 - Schema = mongoose.Schema;
3 -
4 -var schema = new Schema({
5 - name: {type: String, required: true, trim: true},
6 - email: {type: String, required: true, index: true, unique: true, trim: true},
7 - password: {type: String},
8 - createdAt: {type: Date, default: Date.now}
9 -}, {
10 - toJSON: { virtuals: true},
11 - toObject: {virtuals: true}
12 -});
13 -
14 -var User = mongoose.model('User', schema);
15 -
16 -module.exports = User;
1 -// 전체 삭제
2 -db.users.drop()
3 -
4 -// Insert (Create)
5 -db.users.insert({name: 'Kim', age: 30, tel: '555-6666', gender: 'm'})
6 -db.users.insert({name: 'Lee', age: 22, tel: '444-6666', gender: 'm'})
7 -db.users.insert({name: 'Cho', age: 23, tel: '222-2222', gender: 'm'})
8 -db.users.insert({name: 'Park', age: 43, gender: 'f', scores: [100, 200, 600]})
9 -db.users.insert({name: 'Choi', age: 26, gender: 'f', department: {name: 'CS', loc: 'Yongin'}})
10 -
11 -// Query (Read)
12 -db.users.find()
13 -db.users.find({gender: 'm'})
14 -db.users.find({name: { $in: ['Park', 'Choi']}})
15 -db.users.find({gender: 'm', age: { $gt: 25}})
16 -db.users.find({$or: [{age: {$lte: 23}}, {gender: 'f'}]})
17 -
18 -db.users.find({scores: 200})
19 -db.users.find({'department.name': 'CS'})
20 -
21 -// Modify (Update)
22 -db.users.update({name: 'Lee'}, {$set: {age: 23}})
23 -db.users.update({name: 'Cho'}, {name: 'Choo', age: 40, scores: [100, 200]})
24 -db.users.update({name: 'Jay'}, {name: 'Jay', gender: 'm', age: 50}, {upsert: true})
25 -db.users.update({name: 'Jay'}, {name: 'Jay', gender: 'f', age: 25}, {upsert: true})
26 -db.users.update({name: 'Choo'}, {$set: {gender: 'f'}})
27 -db.users.update({name: 'Lee'}, {$unset: {tel: 1}})
28 -
29 -// Remove (Delete)
30 -db.users.count()
31 -db.users.remove({name: 'Choi'})
32 -db.users.count()
33 -
34 -// Aggregate
35 -db.users.find()
36 -db.users.aggregate([
37 - {$match: {age: {$gt: 23}}},
38 - {$group: {_id: "$gender", cnt: {$sum: 1} }},
39 - {$sort: {cnt: -1}}
40 -])
1 -{
2 - "name": "ex01",
3 - "version": "0.0.0",
4 - "private": true,
5 - "scripts": {
6 - "start": "node ./bin/www"
7 - },
8 - "dependencies": {
9 - "body-parser": "~1.13.1",
10 - "connect-flash": "^0.1.1",
11 - "cookie-parser": "~1.3.5",
12 - "debug": "~2.2.0",
13 - "express": "~4.13.0",
14 - "express-session": "^1.11.3",
15 - "jade": "~1.11.0",
16 - "method-override": "^2.3.5",
17 - "moment": "^2.10.6",
18 - "mongoose": "^4.1.11",
19 - "morgan": "~1.6.1",
20 - "node-sass-middleware": "0.8.0",
21 - "serve-favicon": "~2.3.0"
22 - },
23 - "devDependencies": {
24 - "gulp": "^3.9.0",
25 - "gulp-concat": "^2.6.0",
26 - "gulp-jshint": "^1.11.2",
27 - "gulp-nodemon": "^2.0.4",
28 - "gulp-sass": "^2.0.4"
29 - }
30 -}
1 -form.todos {
2 - width: 100%;
3 - margin: 0 0 1em 0;
4 - padding: 1em;
5 - background: #acddf2; }
6 - form.todos .main input[type='text'] {
7 - font-size: 1.4em;
8 - border: 1px solid #2c9cd2;
9 - padding: 0.5em 1em;
10 - margin-bottom: 1em;
11 - width: 100%;
12 - box-sizing: border-box; }
13 - form.todos .actions button {
14 - margin-top: 1em; }
15 -
16 -.tasks {
17 - width: 100%;
18 - list-style: none;
19 - padding: 0;
20 - margin: 0; }
21 - .tasks li.task {
22 - border-bottom: 1px solid #eaeaea;
23 - padding: 1em 0; }
24 - .tasks li.task span {
25 - display: inline-block;
26 - margin-right: 1em; }
27 - .tasks li.task .check {
28 - width: 2em;
29 - height: 2em;
30 - border-radius: 1em;
31 - border: 1px solid #2c9cd2;
32 - vertical-align: bottom; }
33 - .tasks li.task .content {
34 - font-size: 1.1em;
35 - font-weight: bold;
36 - line-height: 2em; }
37 - .tasks li.task .category {
38 - float: right;
39 - min-width: 5em;
40 - font-size: 0.9em; }
41 - .tasks li.task .priority {
42 - font-size: 0.8em;
43 - border-radius: 0.8em;
44 - background-color: #888;
45 - color: #fff;
46 - height: 200%;
47 - line-height: 1.6em;
48 - text-align: center;
49 - padding: 0 1em; }
50 - .tasks li.task .priority.p2 {
51 - background-color: #b0b33c; }
52 - .tasks li.task .priority.p3 {
53 - background-color: #a51e23; }
54 - .tasks li.task .deadline {
55 - color: #ccc;
56 - font-size: 0.9em; }
57 -
58 -.side .section {
59 - background: #888;
60 - width: 100%;
61 - color: #fff; }
62 - .side .section a {
63 - color: #fff;
64 - display: inline-block;
65 - text-decoration: none;
66 - width: 100%;
67 - box-sizing: border-box;
68 - padding: 0.5em 1em 0.5em 3em;
69 - border-bottom: 1px solid #fff; }
70 - .side .section a:last-child {
71 - border-bottom: 0; }
72 - .side .section a.all {
73 - background: #444; }
74 - .side .section a.selected {
75 - padding-left: 1em;
76 - background-color: #009eec; }
77 - .side .section a.selected:before {
78 - font-family: FontAwesome;
79 - content: "\f00c";
80 - display: inline-block;
81 - vertical-align: middle;
82 - padding-right: 1em; }
83 - .side .section a:hover, .side .section a.selected:hover {
84 - background-color: #337AB7; }
85 -
86 -.form-signin {
87 - width: 320px;
88 - height: 300px;
89 - padding: 0;
90 - top: 10em;
91 - left: 50%;
92 - position: absolute;
93 - margin: 0 0 0 -160px; }
94 - .form-signin .checkbox {
95 - margin-bottom: 10px;
96 - font-weight: normal; }
97 - .form-signin .form-control {
98 - position: relative;
99 - height: auto;
100 - box-sizing: border-box;
101 - padding: 10px;
102 - font-size: 16px; }
103 - .form-signin .form-control:focus {
104 - z-index: 2; }
105 - .form-signin input[type="email"] {
106 - margin-bottom: -1px;
107 - border-bottom-right-radius: 0;
108 - border-bottom-left-radius: 0; }
109 - .form-signin input[type="password"] {
110 - margin-bottom: 10px;
111 - border-top-left-radius: 0;
112 - border-top-right-radius: 0; }
113 -
114 -body {
115 - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
116 - margin-top: 50px;
117 - padding-top: 1em; }
118 -
119 -a {
120 - color: #00B7FF; }
121 -
122 -.jumbotron {
123 - margin-top: -1em;
124 - background: url("/images/bg.jpg") no-repeat left top;
125 - -webkit-background-size: 100%;
126 - -moz-background-size: 100%;
127 - -o-background-size: 100%;
128 - background-size: 100%;
129 - min-height: 20em;
130 - color: #fff;
131 - text-shadow: 2px 2px 10px rgba(0, 0, 0, 0.3); }
132 -
133 -.form-actions {
134 - padding: 19px 20px 20px;
135 - margin-top: 20px;
136 - margin-bottom: 20px;
137 - background-color: #f5f5f5;
138 - border-top: 1px solid #e5e5e5; }
139 -
140 -.footer {
141 - position: absolute;
142 - bottom: 0;
143 - width: 100%;
144 - height: 60px;
145 - background-color: #f5f5f5; }
146 - .footer .container {
147 - padding-right: 1em;
148 - padding-left: 1em; }
149 - .footer .container .text-muted {
150 - margin: 20px 0;
151 - color: #bbb; }
1 -var express = require('express'),
2 - todos = require('./todos'),
3 - User = require('../models/User');
4 -var router = express.Router();
5 -
6 -/* GET home page. */
7 -router.get('/', function(req, res, next) {
8 - res.render('index');
9 -});
10 -
11 -router.get('/signin', function(req, res, next) {
12 - res.render('signin');
13 -});
14 -
15 -router.post('/signin', function(req, res, next) {
16 - User.findOne({email: req.body.email}, function(err, user) {
17 - if (err) {
18 - res.render('error', {message: "Error", error: err});
19 - } else if (!user) {
20 - req.flash('danger', '존재하지 않는 사용자 입니다.');
21 - res.redirect('back');
22 - } else if (user.password !== req.body.password) {
23 - req.flash('danger', '비밀번호가 일치하지 않습니다.');
24 - res.redirect('back');
25 - } else {
26 - req.session.user = user;
27 - req.flash('success', '로그인 되었습니다.');
28 - res.redirect('/todos');
29 - }
30 - });
31 -});
32 -
33 -router.get('/signout', function(req, res, next) {
34 - delete req.session.user;
35 - req.flash('success', '로그아웃 되었습니다.');
36 - res.redirect('/');
37 -});
38 -router.use('/todos', todos);
39 -
40 -module.exports = router;
1 -var express = require('express');
2 -var router = express.Router();
3 -
4 -router.get('/', function(req, res, next) {
5 - res.render('todos', {
6 - tasks: [
7 - {_id: 1, content: '이런저런일1', category: '학교', priority: 3, deadline: null},
8 - {_id: 2, content: '이런저런일2', category: null, priority: 2, deadline: null},
9 - {_id: 3, content: '이런저런일3', category: '집', priority: 3, deadline: new Date("2015-12-25")},
10 - {_id: 4, content: '이런저런일4', category: '학교', priority: 1, deadline: new Date("2015-11-21")},
11 - {_id: 5, content: '이런저런일5', category: '집', priority: 2, deadline: null},
12 - ],
13 - categories: [
14 - '학교',
15 - '집',
16 - ]
17 - });
18 -});
19 -
20 -router.post('/', function(req, res, next) {
21 - req.flash('success', '새로운 할 일이 저장되었습니다.');
22 - res.redirect('/todos');
23 -});
24 -
25 -router.put('/:id', function(req, res, next) {
26 - req.flash('success', '할 일이 변경되었습니다.');
27 - res.redirect('/todos');
28 -});
29 -
30 -router.delete('/:id', function(req, res, next) {
31 - req.flash('success', '할 일이 삭제되었습니다.');
32 - res.redirect('/todos');
33 -});
34 -
35 -module.exports = router;
1 -var express = require('express'),
2 - User = require('../models/User');
3 -var router = express.Router();
4 -
5 -function needAuth(req, res, next) {
6 - if (req.session.user) {
7 - next();
8 - } else {
9 - req.flash('danger', '로그인이 필요합니다.');
10 - res.redirect('/signin');
11 - }
12 -}
13 -
14 -function validateForm(form, options) {
15 - var name = form.name || "";
16 - var email = form.email || "";
17 - name = name.trim();
18 - email = email.trim();
19 -
20 - if (!name) {
21 - return '이름을 입력해주세요.';
22 - }
23 -
24 - if (!email) {
25 - return '이메일을 입력해주세요.';
26 - }
27 -
28 - if (!form.password && options.needPassword) {
29 - return '비밀번호를 입력해주세요.';
30 - }
31 -
32 - if (form.password !== form.password_confirmation) {
33 - return '비밀번호가 일치하지 않습니다.';
34 - }
35 -
36 - if (form.password.length < 6) {
37 - return '비밀번호는 6글자 이상이어야 합니다.';
38 - }
39 -
40 - return null;
41 -}
42 -
43 -/* GET users listing. */
44 -router.get('/', needAuth, function(req, res, next) {
45 - User.find({}, function(err, users) {
46 - if (err) {
47 - return next(err);
48 - }
49 - res.render('users/index', {users: users});
50 - });
51 -});
52 -
53 -router.get('/new', function(req, res, next) {
54 - res.render('users/new', {messages: req.flash()});
55 -});
56 -
57 -router.get('/:id/edit', function(req, res, next) {
58 - User.findById(req.params.id, function(err, user) {
59 - if (err) {
60 - return next(err);
61 - }
62 - res.render('users/edit', {user: user});
63 - });
64 -});
65 -
66 -router.put('/:id', function(req, res, next) {
67 - var err = validateForm(req.body);
68 - if (err) {
69 - req.flash('danger', err);
70 - return res.redirect('back');
71 - }
72 -
73 - User.findById({_id: req.params.id}, function(err, user) {
74 - if (err) {
75 - return next(err);
76 - }
77 - if (!user) {
78 - req.flash('danger', '존재하지 않는 사용자입니다.');
79 - return res.redirect('back');
80 - }
81 -
82 - if (user.password !== req.body.current_password) {
83 - req.flash('danger', '현재 비밀번호가 일치하지 않습니다.');
84 - return res.redirect('back');
85 - }
86 -
87 - user.name = req.body.name;
88 - user.email = req.body.email;
89 - if (req.body.password) {
90 - user.password = req.body.password;
91 - }
92 -
93 - user.save(function(err) {
94 - if (err) {
95 - return next(err);
96 - }
97 - req.flash('success', '사용자 정보가 변경되었습니다.');
98 - res.redirect('/users');
99 - });
100 - });
101 -});
102 -
103 -router.delete('/:id', function(req, res, next) {
104 - User.findOneAndRemove({_id: req.params.id}, function(err) {
105 - if (err) {
106 - return next(err);
107 - }
108 - req.flash('success', '사용자 계정이 삭제되었습니다.');
109 - res.redirect('/users');
110 - });
111 -});
112 -
113 -router.get('/:id', function(req, res, next) {
114 - User.findById(req.params.id, function(err, user) {
115 - if (err) {
116 - return next(err);
117 - }
118 - res.render('users/show', {user: user});
119 - });
120 -});
121 -
122 -router.post('/', function(req, res, next) {
123 - var err = validateForm(req.body, {needPassword: true});
124 - if (err) {
125 - req.flash('danger', err);
126 - return res.redirect('back');
127 - }
128 - User.findOne({email: req.body.email}, function(err, user) {
129 - if (err) {
130 - return next(err);
131 - }
132 - if (user) {
133 - req.flash('danger', '동일한 이메일 주소가 이미 존재합니다.');
134 - res.redirect('back');
135 - }
136 - var newUser = new User({
137 - name: req.body.name,
138 - email: req.body.email,
139 - });
140 - newUser.password = req.body.password;
141 -
142 - newUser.save(function(err) {
143 - if (err) {
144 - return next(err);
145 - } else {
146 - req.flash('success', '가입이 완료되었습니다. 로그인 해주세요.');
147 - res.redirect('/');
148 - }
149 - });
150 - });
151 -});
152 -
153 -
154 -module.exports = router;
1 -.form-signin {
2 - width: 320px;
3 - height: 300px;
4 - padding: 0;
5 - top: 10em;
6 - left: 50%;
7 - position: absolute;
8 - margin: 0 0 0 -160px;
9 -
10 - .checkbox {
11 - margin-bottom: 10px;
12 - font-weight: normal;
13 - }
14 - .form-control {
15 - position: relative;
16 - height: auto;
17 - box-sizing: border-box;
18 - padding: 10px;
19 - font-size: 16px;
20 - }
21 - .form-control:focus {
22 - z-index: 2;
23 - }
24 - input[type="email"] {
25 - margin-bottom: -1px;
26 - border-bottom-right-radius: 0;
27 - border-bottom-left-radius: 0;
28 - }
29 - input[type="password"] {
30 - margin-bottom: 10px;
31 - border-top-left-radius: 0;
32 - border-top-right-radius: 0;
33 - }
34 -}
1 -body {
2 - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
3 - margin-top: 50px;
4 - padding-top: 1em;
5 - & > .main-content {
6 - min-height: 400px;
7 - }
8 -}
9 -a {
10 - color: #00B7FF
11 -}
12 -
13 -.jumbotron {
14 - margin-top: -1em;
15 - background: url('/images/bg.jpg') no-repeat left top;
16 - -webkit-background-size: 100%;
17 - -moz-background-size: 100%;
18 - -o-background-size: 100%;
19 - background-size: 100%;
20 - min-height: 20em;
21 - color: #fff;
22 - text-shadow: 2px 2px 10px rgba(0, 0, 0, 0.3);
23 -}
24 -
25 -.form-actions {
26 - padding: 19px 20px 20px;
27 - margin-top: 20px;
28 - margin-bottom: 20px;
29 - background-color: #f5f5f5;
30 - border-top: 1px solid #e5e5e5;
31 -}
32 -
33 -.footer {
34 - margin-top: 1em;
35 - width: 100%;
36 - height: 60px;
37 - background-color: #f5f5f5;
38 -
39 - .container {
40 - padding-right: 1em;
41 - padding-left: 1em;
42 -
43 - .text-muted {
44 - margin: 20px 0;
45 - color: #bbb;
46 - }
47 - }
48 -}
1 -form.todos {
2 - width: 100%;
3 - margin: 0 0 1em 0;
4 - padding: 1em;
5 - background: #acddf2;
6 - .main {
7 - input[type='text'] {
8 - font-size: 1.4em;
9 - border: 1px solid #2c9cd2;
10 - padding: 0.5em 1em;
11 - margin-bottom: 1em;
12 - width: 100%;
13 - box-sizing: border-box;
14 - }
15 - }
16 - .actions button {
17 - margin-top: 1em;
18 - }
19 -}
20 -
21 -.tasks {
22 - width: 100%;
23 - list-style: none;
24 - padding: 0;
25 - margin: 0;
26 - li.task {
27 - border-bottom: 1px solid #eaeaea;
28 - padding: 1em 0;
29 - span {
30 - display: inline-block;
31 - margin-right: 1em;
32 - }
33 - .check {
34 - width: 2em;
35 - height: 2em;
36 - border-radius: 1em;
37 - border: 1px solid #2c9cd2;
38 - vertical-align: bottom;
39 - }
40 - .content {
41 - font-size: 1.1em;
42 - font-weight: bold;
43 - line-height: 2em;
44 - }
45 - .category {
46 - float: right;
47 - min-width: 5em;
48 - font-size: 0.9em;
49 - }
50 - .priority {
51 - font-size: 0.8em;
52 - border-radius: 0.8em;
53 - background-color: #888;
54 - color: #fff;
55 - height: 200%;
56 - line-height: 1.6em;
57 - text-align: center;
58 - padding: 0 1em;
59 -
60 - &.p2 {
61 - background-color: #b0b33c;
62 - }
63 - &.p3 {
64 - background-color: #a51e23;
65 - }
66 - }
67 - .deadline {
68 - color: #ccc;
69 - font-size: 0.9em;
70 - }
71 - }
72 -}
73 -.side {
74 - .section {
75 - background: #888;
76 - width: 100%;
77 - color: #fff;
78 - a {
79 - color: #fff;
80 - display: inline-block;
81 - text-decoration: none;
82 - width: 100%;
83 - box-sizing: border-box;
84 - padding: 0.5em 1em 0.5em 3em;
85 - border-bottom: 1px solid #fff;
86 -
87 - &:last-child {
88 - border-bottom: 0;
89 - }
90 -
91 - &.all {
92 - background: #444;
93 - }
94 - }
95 -
96 - a.selected {
97 - padding-left: 1em;
98 - background-color: #009eec;
99 - &:before {
100 - font-family: FontAwesome;
101 - content: "\f00c";
102 - display: inline-block;
103 - vertical-align: middle;
104 - padding-right: 1em;
105 - }
106 - }
107 -
108 - a:hover, a.selected:hover {
109 - background-color: #337AB7;
110 - }
111 - }
112 -}
1 -extends layout
2 -
3 -block content
4 - .container
5 - .panel.panel-danger(style='margin-top:2em')
6 - .panel-heading
7 - h3.panel-title= message
8 - .panel-body
9 - p= error.status
10 - pre #{error.stack}
1 -.footer
2 - .container
3 - p.text-muted
4 - | All rights reserved. &copy; 2015 Myongji University.
1 -form.form-inline(action='/todos', method='POST', class='todos')
2 - .form
3 - .main
4 - input(type='text', id='task', name='task', placeholder='해야할 일이 무엇인가요?')
5 - .sub
6 - .form-group
7 - input.form-control(type='text', id='category', name='category', placeholder='분류')
8 - .form-group
9 - select.form-control(name='priority')
10 - option(value='1') 중요
11 - option(value='2', selected) 보통
12 - option(value='3') 사소
13 - .form-group
14 - input.form-control(type='date', id='deadline', name='deadline')
15 - .actions
16 - button.btn.btn-primary.btn-lg.btn-block(type='submit') 저장
17 -
18 -ul.tasks
19 - each task in tasks
20 - li.task(data-id='#{task._id}')
21 - span.check
22 - span.content= task.content
23 - if task.category
24 - span.label.label-default.category= task.category
25 - span.priority(class='p#{task.priority}')
26 - case task.priority
27 - when 1
28 - | 사소
29 - when 2
30 - | 보통
31 - when 3
32 - | 중요
33 - if task.deadline
34 - span.deadline= moment(task.deadline).format('YYYY-MM-DD')
35 -
1 -h3 완료여부
2 -.section.priority
3 - a(data-value='completed').selected 완료
4 - a(data-value='uncompleted').selected 미완료
5 - a(data-value='all').all 전체
6 -
7 -h3 마감
8 -.section.deadline
9 - a(data-value='past') 과거
10 - a(data-value='today').selected 오늘
11 - a(data-value='week') 이번주
12 - a(data-value='month') 이번달
13 - a(data-value='all').all 전체
14 -
15 -h3 중요도
16 -.section.priority
17 - a(data-value='3').selected 중요
18 - a(data-value='2') 보통
19 - a(data-value='1') 사소
20 - a(data-value='all').all 전체
21 -
22 -
23 -h3 분류
24 -.section.categories
25 - each category in categories
26 - a(data-value='text').selected= category
27 - a(data-value='none').selected <분류없음>
28 - a(data-value='all').all 전체
1 -.navbar.navbar-inverse.navbar-fixed-top
2 - .container
3 - .navbar-header
4 - button.navbar-toggle.collapsed(type='button', data-toggle='collapse', data-target='#navbar', aria-expanded='false', aria-controls='navbar')
5 - span.sr-only Toggle navigation
6 - span.icon-bar
7 - span.icon-bar
8 - span.icon-bar
9 - a.navbar-brand(href='/')
10 - i.fa.fa-home
11 - #navbar.collapse.navbar-collapse
12 - ul.nav.navbar-nav
13 - li
14 - a(href='/todos') Todo List
15 - li
16 - a(href='/users') Users
17 - ul.nav.navbar-nav.navbar-right
18 - if (!currentUser)
19 - li
20 - a(href='/signin') Signin
21 - li
22 - a(href='/users/new') Signup
23 - else
24 - li
25 - a(href='/users/#{currentUser._id}') Profile
26 - li
27 - a(href='/signout') Signout
28 -
1 -extends layout
2 -
3 -block hero-unit
4 - .jumbotron
5 - .container
6 - h1 BIGBANG-TODO
7 -
8 -block content
9 - .container
10 - .row
11 - .col-md-6
12 - h3 서비스 목적
13 - p 본 서비스는 웹프로그래밍 수업을 위해서 sample로 만들어보는 것입니다.
14 - .col-md-6
15 - h3 주요 기능
16 - ul
17 - li 사용자 관리
18 - li 할 일 기록
19 - li 기록 내용: 분류, 내용, 중요도, deadline
20 - li 완료된 일 체크
21 -
1 -doctype html
2 -html(lang='ko')
3 - head
4 - block title
5 - title BBDO
6 - meta(charset='UTF-8')
7 - link(rel='stylesheet', href='/bower_components/bootstrap/dist/css/bootstrap-theme.css')
8 - link(rel='stylesheet', href='/bower_components/bootstrap/dist/css/bootstrap.css')
9 - link(rel='stylesheet', href='/bower_components/font-awesome/css/font-awesome.min.css')
10 - link(rel='stylesheet', href='/stylesheets/style.css')
11 - script(type='text/javascript', src='/bower_components/jquery/dist/jquery.js')
12 - script(type='text/javascript', src='/bower_components/bootstrap/dist/js/bootstrap.js')
13 - body
14 - block top-nav
15 - include ./includes/topnav
16 - block hero-unit
17 - if flashMessages
18 - each texts, type in flashMessages
19 - .container
20 - .alert(class='alert-#{type}')
21 - each msg in texts
22 - p= msg
23 - block content
24 -
25 - block footer
26 - include ./includes/footer
1 -extends layout
2 -
3 -block content
4 - .container
5 - form.form-signin(action='/signin', method='POST')
6 - label(for='email', class='sr-only') Email address
7 - input(
8 - type='email', id='email', name='email', class='form-control',
9 - placeholder='Email address', required, autofocus
10 - )
11 - label(for='password', class='sr-only') Password
12 - input(
13 - type='password', id='password', name='password', class='form-control',
14 - placeholder='Password', required, autofocus
15 - )
16 - button.btn.btn-lg.btn-primary.btn-block(type='submit') 로그인
17 - hr
18 - a.btn.btn-default.btn-mini(href='/users/new') 회원가입
19 - |
20 - a.btn.btn-default.btn-mini(href='/reset-password') 비밀번호 재설정
21 -
1 -extends layout
2 -
3 -block content
4 - .container
5 - .row
6 - .col-md-8
7 - include ./includes/todo-main
8 - .col-md-4.side
9 - include ./includes/todo-side
1 -extends ../layout
2 -
3 -block content
4 - .container
5 - h1.page-header 회원정보 수정
6 - form(action='/users/#{user._id}?_method=PUT', method='POST')
7 - .form-group
8 - label(for='name') Name
9 - input.form-control(type='text', id='name', name='name', placeholder='Your name', value=user.name)
10 - .form-group
11 - label(for='email') Email address
12 - input.form-control(type='email', id='email', name='email', placeholder='Email', value=user.email)
13 - .form-group
14 - label(for='current_password') 현재 Password
15 - input.form-control(type='password', id='current_password', name='current_password', placeholder='현재 Password')
16 - .form-group
17 - label(for='password') 변경할 Password
18 - input.form-control(type='password', id='password', name='password', placeholder='변경할 Password')
19 - .form-group
20 - label(for='password_confirmation') Password 확인
21 - input.form-control(type='password', id='password_confirmation', name='password_confirmation', placeholder='변경할 Password 확인')
22 - div.form-actions
23 - a.btn.btn-default(href='javascript:window.history.back();') 뒤로
24 - |
25 - button.btn.btn-primary(type='submit') 수정
1 -extends ../layout
2 -
3 -block content
4 - .container
5 - h1.page-header 회원 목록
6 -
7 - table.table.table-striped.table-bordered
8 - thead
9 - tr
10 - th 이름
11 - th 이메일
12 - th 가입일시
13 - th
14 - tbody
15 - each user in users
16 - tr
17 - td
18 - a(href='/users/#{user._id}')= user.name
19 - td= user.email
20 - td= moment(user.createdAt).format('YYYY-MM-DD HH:mm:ss')
21 - td
22 - a.btn.btn-xs.btn-default(href='/users/#{user._id}/edit') 수정
23 - |
24 - a.btn.btn-xs.btn-default(href='/users/#{user._id}?_method=DELETE') 삭제
25 - a.btn.btn-primary(href='/users/new') 사용자추가
1 -extends ../layout
2 -
3 -block content
4 - .container
5 - h1.page-header 회원가입
6 - form(action='/users', method='POST')
7 - .form-group
8 - label(for='name') Name
9 - input.form-control(type='text', id='name', name='name', placeholder='Your name')
10 - .form-group
11 - label(for='email') Email address
12 - input.form-control(type='email', id='email', name='email', placeholder='Email')
13 - .form-group
14 - label(for='password') Password
15 - input.form-control(type='password', id='password', name='password', placeholder='Password')
16 - .form-group
17 - label(for='password_confirmation') Password 확인
18 - input.form-control(type='password', id='password_confirmation', name='password_confirmation', placeholder='Password')
19 - div.form-actions
20 - a.btn.btn-default(href='javascript:window.history.back();') 뒤로
21 - |
22 - button.btn.btn-primary(type='submit') 회원가입
1 -extends ../layout
2 -
3 -block content
4 - .container
5 - h1.page-header 회원 정보
6 -
7 - ul
8 - li 이름: #{user.name}
9 - li 이메일: #{user.email}
10 -
11 - hr
12 - p
13 - a.btn.btn-default(href='/users/') 목록
14 - |
15 - a.btn.btn-default(href='/users/#{user._id}/edit') 수정
16 - |
17 - a.btn.btn-default(href='/users/#{user._id}?_method=DELETE') 삭제
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.