less-rails-liftkit 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. data/.gitignore +7 -0
  2. data/.travis.yml +5 -0
  3. data/Gemfile +5 -0
  4. data/README.md +0 -0
  5. data/Rakefile +14 -0
  6. data/less-rails-liftkit.gemspec +19 -0
  7. data/lib/less/rails/liftkit/engine.rb +13 -0
  8. data/lib/less/rails/liftkit/version.rb +7 -0
  9. data/lib/less/rails/liftkit.rb +2 -0
  10. data/lib/less-rails-liftkit.rb +9 -0
  11. data/vendor/assets/javascripts/lift/liftkit/plugins/jquery.blockify.js +86 -0
  12. data/vendor/assets/javascripts/lift/liftkit/plugins/jquery.cycle.js +1503 -0
  13. data/vendor/assets/javascripts/lift/liftkit/plugins/jquery.dropdown.js +71 -0
  14. data/vendor/assets/javascripts/lift/liftkit/plugins/jquery.hashchange.js +390 -0
  15. data/vendor/assets/javascripts/lift/liftkit/plugins/jquery.modal.js +133 -0
  16. data/vendor/assets/javascripts/lift/liftkit/plugins/jquery.placeholder.js +106 -0
  17. data/vendor/assets/javascripts/lift/liftkit/plugins/jquery.stickybox.js +116 -0
  18. data/vendor/assets/javascripts/lift/liftkit/plugins/jquery.tabs.js +119 -0
  19. data/vendor/assets/javascripts/lift/liftkit/script.js +59 -0
  20. data/vendor/assets/javascripts/lift/liftkit/underscore.js +34 -0
  21. data/vendor/assets/javascripts/lift/liftkit.js +3 -0
  22. data/vendor/assets/stylesheets/lift/liftkit.css.less +1 -0
  23. data/vendor/frameworks/lift/liftkit/alerts.less +104 -0
  24. data/vendor/frameworks/lift/liftkit/buttons.less +160 -0
  25. data/vendor/frameworks/lift/liftkit/core.less +345 -0
  26. data/vendor/frameworks/lift/liftkit/fluid.less +93 -0
  27. data/vendor/frameworks/lift/liftkit/forms.less +401 -0
  28. data/vendor/frameworks/lift/liftkit/liftkit.less +64 -0
  29. data/vendor/frameworks/lift/liftkit/modal.less +34 -0
  30. data/vendor/frameworks/lift/liftkit/navigation.less +159 -0
  31. data/vendor/frameworks/lift/liftkit/responsive-fixed.less +238 -0
  32. data/vendor/frameworks/lift/liftkit/responsive-fluid.less +89 -0
  33. data/vendor/frameworks/lift/liftkit/scaffolding.less +116 -0
  34. data/vendor/frameworks/lift/liftkit/tables.less +54 -0
  35. data/vendor/frameworks/lift/liftkit/type.less +272 -0
  36. data/vendor/frameworks/lift/liftkit.less +1 -0
  37. metadata +114 -0
@@ -0,0 +1,106 @@
1
+ /*
2
+ * Placeholder plugin for jQuery
3
+ * ---
4
+ * Copyright 2010, Daniel Stocks (http://webcloud.se)
5
+ * Released under the MIT, BSD, and GPL Licenses.
6
+ */
7
+ (function($) {
8
+ function Placeholder(input) {
9
+ this.input = input;
10
+ if (input.attr('type') == 'password') {
11
+ this.handlePassword();
12
+ }
13
+ // Prevent placeholder values from submitting
14
+ $(input[0].form).submit(function() {
15
+ if (input.hasClass('placeholder') && input[0].value == input.attr('placeholder')) {
16
+ input[0].value = '';
17
+ }
18
+ });
19
+ }
20
+ Placeholder.prototype = {
21
+ show : function(loading) {
22
+ // FF and IE saves values when you refresh the page. If the user refreshes the page with
23
+ // the placeholders showing they will be the default values and the input fields won't be empty.
24
+ if (this.input[0].value === '' || (loading && this.valueIsPlaceholder())) {
25
+ if (this.isPassword) {
26
+ try {
27
+ this.input[0].setAttribute('type', 'text');
28
+ } catch (e) {
29
+ this.input.before(this.fakePassword.show()).hide();
30
+ }
31
+ }
32
+ this.input.addClass('placeholder');
33
+ this.input[0].value = this.input.attr('placeholder');
34
+ }
35
+ },
36
+ hide : function() {
37
+ if (this.valueIsPlaceholder() && this.input.hasClass('placeholder')) {
38
+ this.input.removeClass('placeholder');
39
+ this.input[0].value = '';
40
+ if (this.isPassword) {
41
+ try {
42
+ this.input[0].setAttribute('type', 'password');
43
+ } catch (e) { }
44
+ // Restore focus for Opera and IE
45
+ this.input.show();
46
+ this.input[0].focus();
47
+ }
48
+ }
49
+ },
50
+ valueIsPlaceholder : function() {
51
+ return this.input[0].value == this.input.attr('placeholder');
52
+ },
53
+ handlePassword: function() {
54
+ var input = this.input;
55
+ input.attr('realType', 'password');
56
+ this.isPassword = true;
57
+ // IE < 9 doesn't allow changing the type of password inputs
58
+ if ($.browser.msie && input[0].outerHTML) {
59
+ var fakeHTML = $(input[0].outerHTML.replace(/type=(['"])?password\1/gi, 'type=$1text$1'));
60
+ this.fakePassword = fakeHTML.val(input.attr('placeholder')).addClass('placeholder').focus(function() {
61
+ input.trigger('focus');
62
+ $(this).hide();
63
+ });
64
+ $(input[0].form).submit(function() {
65
+ fakeHTML.remove();
66
+ input.show()
67
+ });
68
+ }
69
+ }
70
+ };
71
+ var NATIVE_SUPPORT = !!("placeholder" in document.createElement( "input" ));
72
+ $.fn.placeholder = function() {
73
+ return NATIVE_SUPPORT ? this : this.each(function() {
74
+ var input = $(this);
75
+ var placeholder = new Placeholder(input);
76
+ placeholder.show(true);
77
+ input.focus(function() {
78
+ placeholder.hide();
79
+ });
80
+ input.blur(function() {
81
+ placeholder.show(false);
82
+ });
83
+
84
+ // On page refresh, IE doesn't re-populate user input
85
+ // until the window.onload event is fired.
86
+ if ($.browser.msie) {
87
+ $(window).load(function() {
88
+ if(input.val()) {
89
+ input.removeClass("placeholder");
90
+ }
91
+ placeholder.show(true);
92
+ });
93
+ // What's even worse, the text cursor disappears
94
+ // when tabbing between text inputs, here's a fix
95
+ input.focus(function() {
96
+ if(this.value == "") {
97
+ var range = this.createTextRange();
98
+ range.collapse(true);
99
+ range.moveStart('character', 0);
100
+ range.select();
101
+ }
102
+ });
103
+ }
104
+ });
105
+ }
106
+ })(jQuery);
@@ -0,0 +1,116 @@
1
+ /*!
2
+ * jQuery Stickybox plugin
3
+ * http://github.com/elidupuis
4
+ *
5
+ * Copyright 2010, Eli Dupuis
6
+ * Version: 0.4.1
7
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL (http://creativecommons.org/licenses/GPL/2.0/) licenses.
8
+ * Requires: jQuery v1.4.4 or later
9
+ * Based heavily on Remy Sharp's snippet at http://jqueryfordesigners.com/fixed-floating-elements/
10
+ */
11
+
12
+ (function($) {
13
+
14
+ var methods = {
15
+ init: function( options ) {
16
+ // iterate and reformat each matched element
17
+ return this.each(function() {
18
+ var $this = $(this),
19
+ opts = $.extend( {}, $.fn.stickybox.defaults, options ),
20
+ data = $this.data('stickybox');
21
+
22
+ // If the plugin hasn't been initialized yet
23
+ if ( ! data ) {
24
+
25
+ var top = $this.offset().top - parseFloat($this.css('marginTop').replace(/auto/, 0));
26
+
27
+ $(window).bind('scroll.stickybox resize.stickybox', function (event) {
28
+ var y = $(this).scrollTop(),
29
+ height = $(window).height(),
30
+ docHeight = $(document).height(),
31
+ context = opts.context.call(this, $this),
32
+ // topOffset = $this.data('stickybox').offsetTop,
33
+ bottomThreshold = context.offset().top + context.height() - $this.outerHeight(true) - opts.offset;
34
+
35
+ // if(window.console) window.console.log(context.height(), context.outerHeight(true));
36
+
37
+ if ( height > $this.outerHeight() ) {
38
+ if ( y >= (top - opts.offset) ) {
39
+ if (!$this.hasClass(opts.fixedClass)) {
40
+ $this.addClass( opts.fixedClass );
41
+ opts.captured.call();
42
+ };
43
+
44
+ // if ( !$this.data('stickybox').offsetTop ) {
45
+ // $this.data('stickybox').offsetTop = parseInt($this.css('top')) || 0;
46
+ // };
47
+ } else {
48
+ if ($this.hasClass(opts.fixedClass)) {
49
+ $this.removeClass( opts.fixedClass );
50
+ opts.released.call();
51
+ }
52
+ };
53
+ // check for bottom of context
54
+ if ( y > bottomThreshold ) {
55
+ if (!$this.hasClass(opts.bottomClass)) {
56
+ $this.addClass( opts.bottomClass );
57
+ opts.bottomCaptured.call();
58
+ }
59
+ }else{
60
+ if ($this.hasClass(opts.bottomClass)) {
61
+ $this.removeClass( opts.bottomClass );
62
+ opts.bottomReleased.call();
63
+ }
64
+ };
65
+
66
+ // check height of context vs height of stickybox:
67
+ if ( $this.outerHeight() > context.outerHeight() ) {
68
+ context.css('min-height', $this.outerHeight() );
69
+ };
70
+
71
+ };
72
+ });
73
+
74
+ // attach
75
+ $(this).data('stickybox', {
76
+ target : $this,
77
+ // offsetTop: 0,
78
+ opts: opts
79
+ });
80
+
81
+ };
82
+ });
83
+ },
84
+ destroy: function() {
85
+ // loop through matched elements and un
86
+ return this.each(function() {
87
+ $(this).removeClass( $(this).data('stickybox').opts.fixedClass + ' ' + $(this).data('stickybox').opts.bottomClass );
88
+ $(window).unbind('.stickybox');
89
+ });
90
+ }
91
+ };
92
+
93
+ // main plugin declaration:
94
+ $.fn.stickybox = function( method ) {
95
+ if ( methods[method] ) {
96
+ return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
97
+ } else if ( typeof method === 'object' || ! method ) {
98
+ return methods.init.apply( this, arguments );
99
+ } else {
100
+ $.error( 'Method ' + method + ' does not exist on jQuery.stickybox' );
101
+ };
102
+ };
103
+
104
+ // defaults
105
+ $.fn.stickybox.defaults = {
106
+ fixedClass: 'fixed', // class applied when window has been scolled passed threshold
107
+ bottomClass: 'bottom', // class applied when stickybox element reaches bottom of context container
108
+ context: function(){ return $('body'); }, // unique container (should have position:relative;)
109
+ offset: 0, // if your .fixed style has a top value other than 0, you'll need to set the same value here.
110
+ captured: function(){}, // callback function for when fixedClass is applied
111
+ released: function(){}, // callback function for when fixedClass is removed
112
+ bottomCaptured: function(){}, // callback function for when bottomClass is applied
113
+ bottomReleased: function(){} // callback function for when bottomClass is removed
114
+ };
115
+
116
+ })(jQuery);
@@ -0,0 +1,119 @@
1
+ // requires jQuery 1.6.x we're using .closest() (http://api.jquery.com/closest/)
2
+
3
+ !function( $ ){
4
+
5
+ function tab(element, selector){
6
+
7
+ // prepare variables
8
+ var $tabs = $(selector)
9
+ , $historyEndabledTabs = $tabs.filter('[data-history=true]');
10
+
11
+
12
+ // tab functionality
13
+ // expects an anchor tag that has an href linking it to an element with that ID.
14
+ function activate ( elm ) {
15
+
16
+ if(window.console) window.console.log('activate', elm);
17
+
18
+ $.each(elm, function(){
19
+
20
+ var $this = $(this)
21
+ , $parent = $this.closest($tabs)
22
+ , href = $this.attr('href')
23
+ , context = $parent.data('tabs') || $parent.data('pills')
24
+ , $tab = $(href, context);
25
+
26
+ // remove active from siblings
27
+ $parent.children('li').removeClass('active');
28
+
29
+ // add active to clicked tab
30
+ $this.parent().addClass('active');
31
+
32
+ // show appropriate tab content, hide the rest.
33
+ $.fn.tabs.transition($this, $tab);
34
+ // $tab.show().siblings().hide();
35
+
36
+ });
37
+
38
+ }
39
+
40
+
41
+ // capture clicks on tab triggers
42
+ // use .delegate() in the future?
43
+ $tabs.find('> li > a').bind('click', function(){
44
+ $this = $(this);
45
+
46
+ if ($this.closest($tabs).filter('[data-history=true]').length) {
47
+ // return true and let the hashchange functionality handle the tabbing and history...
48
+ return true;
49
+ }else{
50
+ // trigger tabs functionality
51
+ activate($this);
52
+ return false;
53
+ };
54
+ });
55
+
56
+
57
+ // Bind an event to window.onhashchange that, when the hash changes, gets the
58
+ // hash and triggers the standard tab functionality.
59
+ $(window).hashchange( function(){
60
+ // find the appropriate anchor based on the hash. defaults to first list item.
61
+ var hash = location.hash
62
+ , target = $('[href='+hash+']', $historyEndabledTabs)
63
+ , $trigger = (hash != '' && target.length) ? target : $('> li:first > a', $historyEndabledTabs);
64
+
65
+ // trigger the tab functionality
66
+ activate($trigger);
67
+
68
+ });
69
+
70
+ // Since the event is only triggered when the hash changes, we need to trigger
71
+ // the event now, to handle the hash the page may have loaded with.
72
+ // but only if there are history enabled tabs!
73
+ if ($historyEndabledTabs.length) {
74
+ $(window).hashchange();
75
+ };
76
+
77
+
78
+ // load up the first tab in all non-history tab units
79
+ activate($('> li:first > a', $tabs.not($historyEndabledTabs)));
80
+
81
+ if (location.hash != '' && $('[href=' + location.hash + ']', $historyEndabledTabs).length != 0) {
82
+ // activate any history-enabled tabs that do not contain the current hash
83
+ activate($('> li:first > a', $historyEndabledTabs.not(':has([href=' + location.hash + '])') ));
84
+ };
85
+
86
+
87
+ }
88
+
89
+
90
+ /* TABS/PILLS PLUGIN DEFINITION
91
+ * ============================ */
92
+
93
+
94
+ $.fn.tabs = function ( selector ) {
95
+ return this.each(function () {
96
+ // $(this).delegate(selector || 'ul[data-tabs], ul[data-pills]', 'click', tab);
97
+ tab(this, selector);
98
+ })
99
+ };
100
+
101
+ // the transition between tab content
102
+ // can be overridden by using a function like the one commented here
103
+ // $.fn.tabs.transition = function(trigger, content) {
104
+ // if(window.console) window.console.log('custom transition', elm, trigger);
105
+ // content.siblings().hide();
106
+ // content.fadeIn(1000);
107
+ // }
108
+ $.fn.tabs.transition = function(trigger, content){
109
+ content.show().siblings().hide();
110
+ };
111
+
112
+
113
+ $(document).ready(function () {
114
+ $('body').tabs('ul[data-tabs], ul[data-pills]');
115
+ });
116
+
117
+
118
+
119
+ }( window.jQuery );
@@ -0,0 +1,59 @@
1
+ /* Author: */
2
+
3
+ SITE = {
4
+ common: {
5
+ init: function(){
6
+ if(window.console) window.console.log('common.init()');
7
+
8
+ // define default easing function. jquery.easing required (http://gsgd.co.uk/sandbox/jquery/easing/)
9
+ // $.easing.def = "easeOutCirc";
10
+ }
11
+ },
12
+ bodyClass: {
13
+ init: function(){
14
+ if(window.console) window.console.log('bodyClass.init()');
15
+ },
16
+ bodyID1: function(){
17
+ if(window.console) window.console.log('bodyClass.bodyID1()');
18
+ },
19
+ bodyID2: function(){
20
+ if(window.console) window.console.log('bodyClass.bodyID2()');
21
+ }
22
+ }
23
+ };
24
+
25
+ // http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/
26
+ UTIL = {
27
+
28
+ fire : function(func,funcname, args){
29
+
30
+ var namespace = SITE; // indicate your obj literal namespace here
31
+
32
+ funcname = (funcname === undefined) ? 'init' : funcname;
33
+ if (func !== '' && namespace[func] && typeof namespace[func][funcname] == 'function'){
34
+ namespace[func][funcname](args);
35
+ }
36
+
37
+ },
38
+
39
+ loadEvents : function(){
40
+
41
+ var bodyId = document.body.id;
42
+
43
+ // hit up common first.
44
+ UTIL.fire('common');
45
+
46
+ // do all the classes too.
47
+ $.each(document.body.className.split(/\s+/),function(i,classnm){
48
+ UTIL.fire(classnm);
49
+ UTIL.fire(classnm,bodyId);
50
+ });
51
+
52
+ UTIL.fire('common','finalize');
53
+
54
+ }
55
+
56
+ };
57
+
58
+ // kick it all off here
59
+ $(document).ready(UTIL.loadEvents);
@@ -0,0 +1,34 @@
1
+ /**********/
2
+ /* =underscore */
3
+ /**********/
4
+
5
+ // Underscore.js 1.2.0
6
+ // (c) 2011 Jeremy Ashkenas, DocumentCloud Inc.
7
+ // Underscore is freely distributable under the MIT license.
8
+ // Portions of Underscore are inspired or borrowed from Prototype,
9
+ // Oliver Steele's Functional, and John Resig's Micro-Templating.
10
+ // For all details and documentation:
11
+ // http://documentcloud.github.com/underscore
12
+ (function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null)return a===c;var e=typeof a;if(e!=typeof c)return false;if(!a!=!c)return false;if(b.isNaN(a))return b.isNaN(c);var f=b.isString(a),g=b.isString(c);if(f||g)return f&&g&&String(a)==String(c);f=b.isNumber(a);g=b.isNumber(c);if(f||g)return f&&g&&+a==+c;f=b.isBoolean(a);g=b.isBoolean(c);if(f||g)return f&&g&&+a==+c;f=b.isDate(a);g=b.isDate(c);if(f||g)return f&&g&&a.getTime()==c.getTime();f=b.isRegExp(a);g=b.isRegExp(c);if(f||g)return f&&
13
+ g&&a.source==c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase;if(e!="object")return false;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(b.isFunction(a.isEqual))return a.isEqual(c);for(e=d.length;e--;)if(d[e]==a)return true;d.push(a);e=0;f=true;if(a.length===+a.length||c.length===+c.length){if(e=a.length,f=e==c.length)for(;e--;)if(!(f=e in a==e in c&&q(a[e],c[e],d)))break}else{for(var h in a)if(l.call(a,h)&&(e++,!(f=l.call(c,h)&&q(a[h],c[h],d))))break;if(f){for(h in c)if(l.call(c,
14
+ h)&&!e--)break;f=!e}}d.pop();return f}var r=this,F=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,G=k.unshift,u=o.toString,l=o.hasOwnProperty,v=k.forEach,w=k.map,x=k.reduce,y=k.reduceRight,z=k.filter,A=k.every,B=k.some,p=k.indexOf,C=k.lastIndexOf,o=Array.isArray,H=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};typeof module!=="undefined"&&module.exports?(module.exports=b,b._=b):r._=b;b.VERSION="1.2.0";var j=b.each=b.forEach=function(a,c,b){if(a!=null)if(v&&a.forEach===
15
+ v)a.forEach(c,b);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(b,a[e],e,a)===n)break}else for(e in a)if(l.call(a,e)&&c.call(b,a[e],e,a)===n)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.map===w)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=d!==void 0;a==null&&(a=[]);if(x&&a.reduce===x)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,
16
+ d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){a==null&&(a=[]);if(y&&a.reduceRight===y)return e&&(c=b.bind(c,e)),d!==void 0?a.reduceRight(c,d):a.reduceRight(c);a=(b.isArray(a)?a.slice():b.toArray(a)).reverse();return b.reduce(a,c,d,e)};b.find=b.detect=function(a,c,b){var e;D(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;
17
+ if(z&&a.filter===z)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(A&&a.every===A)return a.every(c,b);j(a,function(a,g,h){if(!(e=e&&c.call(b,a,g,h)))return n});return e};var D=b.some=b.any=function(a,c,d){var c=c||b.identity,e=false;if(a==null)return e;if(B&&a.some===B)return a.some(c,
18
+ d);j(a,function(a,b,h){if(e|=c.call(d,a,b,h))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;if(p&&a.indexOf===p)return a.indexOf(c)!=-1;D(a,function(a){if(b=a===c)return true});return b};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(c.call?c||a:a[c]).apply(a,d)})};b.pluck=function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;
19
+ var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});return e.value};b.shuffle=function(a){var c=[],b;j(a,function(a,f){f==0?c[0]=a:(b=Math.floor(Math.random()*(f+1)),c[f]=c[b],c[b]=a)});return c};b.sortBy=function(a,
20
+ c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,b){var d={};j(a,function(a,f){var g=b(a,f);(d[g]||(d[g]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):
21
+ b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,a.length-b):a[a.length-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a){return b.reduce(a,function(a,d){if(b.isArray(d))return a.concat(b.flatten(d));
22
+ a[a.length]=d;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]);return e};b.union=function(){return b.uniq(b.flatten(arguments))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};
23
+ b.difference=function(a,c){return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(C&&a.lastIndexOf===C)return a.lastIndexOf(b);
24
+ for(var d=a.length;d--;)if(a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};b.bind=function(a,b){if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));var d=i.call(arguments,2);return function(){return a.apply(b,d.concat(i.call(arguments)))}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});
25
+ return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var b=c.apply(this,arguments);return l.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};var E=function(a,b,d){var e;return function(){var f=this,g=arguments,h=function(){e=null;a.apply(f,g)};d&&clearTimeout(e);if(d||!e)e=setTimeout(h,b)}};b.throttle=
26
+ function(a,b){return E(a,b,false)};b.debounce=function(a,b){return E(a,b,true)};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments));return b.apply(this,d)}};b.compose=function(){var a=i.call(arguments);return function(){for(var b=i.call(arguments),d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return function(){if(--a<1)return b.apply(this,
27
+ arguments)}};b.keys=H||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)l.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]==null&&(a[d]=
28
+ b[d])});return a};b.clone=function(a){return b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(l.call(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return u.call(a)==="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=function(a){return!(!a||!l.call(a,"callee"))};
29
+ b.isFunction=function(a){return!(!a||!a.constructor||!a.call||!a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};b.isNumber=function(a){return!!(a===0||a&&a.toExponential&&a.toFixed)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||u.call(a)=="[object Boolean]"};b.isDate=function(a){return!(!a||!a.getTimezoneOffset||!a.setUTCFullYear)};b.isRegExp=function(a){return!(!a||!a.test||!a.exec||!(a.ignoreCase||a.ignoreCase===false))};b.isNull=
30
+ function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){r._=F;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&(?!\w+;|#\d+;|#x[\da-f]+;)/gi,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),function(c){I(c,b[c]=a[c])})};var J=0;b.uniqueId=function(a){var b=
31
+ J++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape,function(a,b){return"',_.escape("+b.replace(/\\'/g,"'")+"),'"}).replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,"'")+",'"}).replace(d.evaluate||null,function(a,
32
+ b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+"__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",d=new Function("obj",d);return c?d(c):d};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var t=function(a,c){return c?b(a).chain():a},I=function(a,c){m.prototype[a]=function(){var a=i.call(arguments);G.call(a,this._wrapped);return t(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),
33
+ function(a){var b=k[a];m.prototype[a]=function(){b.apply(this._wrapped,arguments);return t(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return t(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=true;return this};m.prototype.value=function(){return this._wrapped}})();
34
+
@@ -0,0 +1,3 @@
1
+ //= require lift/liftkit/underscore
2
+ //= require lift/liftkit/script
3
+ //= require_tree lift/liftkit/plugins
@@ -0,0 +1 @@
1
+ @import "lift/liftkit/liftkit";
@@ -0,0 +1,104 @@
1
+ .close {
2
+ margin: -3px -@basespace/2 0 0;
3
+ float: right;
4
+ color: @black;
5
+ font-size: 20px;
6
+ font-weight: bold;
7
+ line-height: @baseline * .75;
8
+ .opacity(20);
9
+ &:hover {
10
+ color: @black;
11
+ text-decoration: none;
12
+ .opacity(40);
13
+ }
14
+ }
15
+
16
+ .alert {
17
+ margin: 0 0 @basespace;
18
+ padding: @basespace/2 @basespace 0;
19
+ .border-radius(3px);
20
+ .transition(.2s);
21
+ border: 1px solid #888;
22
+ background: #aaa;
23
+
24
+ p {
25
+ font-size: @basesize - 2;
26
+ margin-bottom: @basespace/2;
27
+ color: @white;
28
+ }
29
+
30
+ &.primary {
31
+ border-color: darken(@primary, 10%);
32
+ background: @primary;
33
+ }
34
+
35
+ &.secondary {
36
+ border-color: darken(@secondary, 10%);
37
+ background: @secondary;
38
+ }
39
+
40
+ &.success {
41
+ border-color: darken(@success, 10%);
42
+ background: @success;
43
+ }
44
+
45
+ &.warning {
46
+ border-color: darken(@warning, 10%);
47
+ background: @warning;
48
+ }
49
+
50
+ &.danger {
51
+ border-color: darken(@danger, 10%);
52
+ background: @danger;
53
+ }
54
+ }
55
+
56
+ .message {
57
+ margin: 0 0 @basespace;
58
+ padding: @basespace/2 @basespace 0;
59
+ .border-radius(3px);
60
+ .transition(.2s);
61
+
62
+ p {
63
+ font-size: @basesize - 2;
64
+ margin-bottom: @basespace/2;
65
+ }
66
+
67
+ ul {
68
+ margin-bottom: @basespace/2;
69
+ li {
70
+ font-size: @basesize - 2;
71
+ }
72
+ }
73
+
74
+ border: 1px solid @grayLight;
75
+ background: #eee;
76
+
77
+ p, ul, ol, dl, li { color: @white; }
78
+ strong { color: @white; }
79
+
80
+ &.primary {
81
+ border-color: darken(@primary, 10%);
82
+ background: @primary;
83
+ }
84
+
85
+ &.secondary {
86
+ border-color: darken(@secondary, 10%);
87
+ background: @secondary;
88
+ }
89
+
90
+ &.success {
91
+ border-color: darken(@success, 10%);
92
+ background: @success;
93
+ }
94
+
95
+ &.warning {
96
+ border-color: darken(@warning, 10%);
97
+ background: @warning;
98
+ }
99
+
100
+ &.danger {
101
+ border-color: darken(@danger, 10%);
102
+ background: @danger;
103
+ }
104
+ }