card 1.15.pre2 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/card.gemspec +2 -1
  4. data/db/bootstrap/card_actions.yml +476 -518
  5. data/db/bootstrap/card_acts.yml +1 -1
  6. data/db/bootstrap/card_changes.yml +1937 -2172
  7. data/db/bootstrap/card_references.yml +2771 -2862
  8. data/db/bootstrap/cards.yml +1665 -1887
  9. data/db/migrate_core_cards/data/bootstrap_layout.json +1 -1
  10. data/lib/card/reference.rb +1 -1
  11. data/mod/01_core/set/all/collection.rb +1 -2
  12. data/mod/01_history/set/all/history.rb +76 -67
  13. data/mod/02_basic_types/set/all/all_css.rb +1 -1
  14. data/mod/03_machines/lib/javascript/{ace.js → script_ace.js} +0 -0
  15. data/mod/03_machines/lib/javascript/{wagn_menu.js → script_card_menu.js} +0 -0
  16. data/mod/03_machines/lib/javascript/{html5shiv-printshiv.js → script_html5shiv_printshiv.js} +0 -0
  17. data/mod/03_machines/lib/javascript/{jquery.js → script_jquery.js} +0 -0
  18. data/mod/03_machines/lib/javascript/{tinymce.js → script_tinymce.js} +0 -0
  19. data/mod/03_machines/lib/javascript/wagn.js.coffee +1 -4
  20. data/mod/03_machines/lib/stylesheets/style_cards.scss +2 -4
  21. data/mod/03_machines/lib/stylesheets/{jquery-ui-smoothness.css → style_jquery_ui_smoothness.css} +0 -0
  22. data/mod/03_machines/set/self/script_ace.rb +7 -3
  23. data/mod/03_machines/set/self/script_card_menu.rb +2 -7
  24. data/mod/03_machines/set/self/script_html5shiv_printshiv.rb +2 -7
  25. data/mod/03_machines/set/self/script_jquery.rb +2 -8
  26. data/mod/03_machines/set/self/script_jquery_helper.rb +1 -3
  27. data/mod/03_machines/set/self/script_slot.rb +1 -3
  28. data/mod/03_machines/set/self/script_tinymce.rb +2 -8
  29. data/mod/03_machines/set/self/style_bootstrap_compatible.rb +1 -5
  30. data/mod/03_machines/set/self/style_cards.rb +1 -3
  31. data/mod/03_machines/set/self/style_jquery_ui_smoothness.rb +2 -7
  32. data/mod/03_machines/set/type/css.rb +10 -6
  33. data/mod/03_machines/set/type/scss.rb +1 -2
  34. data/mod/04_settings/set/type/setting.rb +1 -1
  35. data/mod/05_email/set/self/follow_defaults.rb +1 -1
  36. data/mod/05_standard/file/favicon/icon-image.png +0 -0
  37. data/mod/05_standard/file/favicon/large-image.png +0 -0
  38. data/mod/05_standard/file/favicon/medium-image.png +0 -0
  39. data/mod/05_standard/file/favicon/original-image.png +0 -0
  40. data/mod/05_standard/file/favicon/small-image.png +0 -0
  41. data/mod/05_standard/set/all/attach.rb +1 -1
  42. data/mod/05_standard/set/all/rich_html/content.rb +1 -1
  43. data/mod/05_standard/set/all/rich_html/editing.rb +4 -4
  44. data/mod/05_standard/set/rstar/rules.rb +2 -2
  45. data/mod/05_standard/set/self/head.rb +3 -4
  46. data/mod/05_standard/set/self/signin.rb +2 -2
  47. data/mod/05_standard/set/type/signup.rb +2 -2
  48. data/mod/05_standard/set/type/user.rb +1 -1
  49. data/mod/06_bootstrap/lib/stylesheets/bootstrap_cards.scss +16 -1
  50. data/mod/06_bootstrap/lib/stylesheets/bootstrap_css.css +1 -1
  51. data/mod/06_bootstrap/lib/stylesheets/bootswatch_mixins.scss +282 -0
  52. data/mod/06_bootstrap/lib/stylesheets/theme_cerulean.css +3227 -2399
  53. data/mod/06_bootstrap/lib/stylesheets/theme_cosmo.css +2 -2
  54. data/mod/06_bootstrap/lib/stylesheets/theme_cyborg.css +2 -2
  55. data/mod/06_bootstrap/lib/stylesheets/theme_darkly.css +2 -2
  56. data/mod/06_bootstrap/lib/stylesheets/theme_flatly.css +2 -2
  57. data/mod/06_bootstrap/lib/stylesheets/theme_journal.css +2 -2
  58. data/mod/06_bootstrap/lib/stylesheets/theme_lumen.css +2 -2
  59. data/mod/06_bootstrap/lib/stylesheets/theme_paper.css +2 -2
  60. data/mod/06_bootstrap/lib/stylesheets/theme_readable.css +2 -2
  61. data/mod/06_bootstrap/lib/stylesheets/theme_sandstone.css +2 -2
  62. data/mod/06_bootstrap/lib/stylesheets/theme_simplex.css +2 -2
  63. data/mod/06_bootstrap/lib/stylesheets/theme_slate.css +2 -2
  64. data/mod/06_bootstrap/lib/stylesheets/theme_spacelab.css +2 -2
  65. data/mod/06_bootstrap/lib/stylesheets/theme_superhero.css +2 -2
  66. data/mod/06_bootstrap/lib/stylesheets/theme_united.css +2 -2
  67. data/mod/06_bootstrap/lib/stylesheets/theme_yeti.css +2 -2
  68. data/mod/06_bootstrap/set/all/bootstrap/form.rb +6 -7
  69. data/mod/06_bootstrap/set/all/rich_bootstrap.rb +2 -2
  70. data/mod/06_bootstrap/set/self/bootstrap_js.rb +1 -3
  71. data/mod/06_bootstrap/set/self/bootswatch_mixins.rb +9 -0
  72. data/mod/06_bootstrap/set/self/theme_cerulean.rb +9 -2
  73. data/mod/06_bootstrap/set/self/theme_cosmo.rb +2 -2
  74. data/mod/06_bootstrap/set/self/theme_cyborg.rb +2 -2
  75. data/mod/06_bootstrap/set/self/theme_darkly.rb +2 -2
  76. data/mod/06_bootstrap/set/self/theme_flatly.rb +2 -2
  77. data/mod/06_bootstrap/set/self/theme_journal.rb +2 -2
  78. data/mod/06_bootstrap/set/self/theme_lumen.rb +2 -2
  79. data/mod/06_bootstrap/set/self/theme_paper.rb +2 -2
  80. data/mod/06_bootstrap/set/self/theme_readable.rb +2 -2
  81. data/mod/06_bootstrap/set/self/theme_sandstone.rb +2 -2
  82. data/mod/06_bootstrap/set/self/theme_simplex.rb +2 -2
  83. data/mod/06_bootstrap/set/self/theme_slate.rb +2 -2
  84. data/mod/06_bootstrap/set/self/theme_spacelab.rb +2 -2
  85. data/mod/06_bootstrap/set/self/theme_superhero.rb +2 -2
  86. data/mod/06_bootstrap/set/self/theme_united.rb +2 -2
  87. data/mod/06_bootstrap/set/self/theme_yeti.rb +2 -2
  88. data/spec/lib/card/log_spec.rb +1 -1
  89. data/spec/lib/card/query_spec.rb +3 -3
  90. data/test/fixtures/card_actions.yml +1124 -1166
  91. data/test/fixtures/card_acts.yml +101 -101
  92. data/test/fixtures/card_changes.yml +5093 -5405
  93. data/test/fixtures/card_references.yml +3224 -3315
  94. data/test/fixtures/cards.yml +2287 -2586
  95. metadata +18 -17
  96. data/mod/05_standard/file/favicon/icon-image.ico +0 -0
  97. data/mod/05_standard/file/favicon/large-image.ico +0 -0
  98. data/mod/05_standard/file/favicon/medium-image.ico +0 -0
  99. data/mod/05_standard/file/favicon/original-image.ico +0 -0
  100. data/mod/05_standard/file/favicon/small-image.ico +0 -0
  101. data/mod/06_bootstrap/lib/stylesheets/theme_amelia.css +0 -5871
  102. data/mod/06_bootstrap/lib/stylesheets/theme_holo.css +0 -183
@@ -1,8 +1,2 @@
1
-
2
- view :raw do |args|
3
- File.read "#{Cardio.gem_root}/mod/03_machines/lib/javascript/tinymce.js"
4
- end
5
-
6
- view :editor do |args|
7
- "Content is stored in file and can't be edited."
8
- end
1
+ format { include ScriptAce::Format }
2
+ format(:html) { include ScriptAce::HtmlFormat }
@@ -2,8 +2,4 @@ view :raw do |args|
2
2
  File.read "#{Cardio.gem_root}/mod/03_machines/lib/stylesheets/#{card.codename}.css"
3
3
  end
4
4
 
5
- format :html do
6
- view :editor do |args|
7
- "Content is stored in file and can't be edited."
8
- end
9
- end
5
+ format(:html) { include ScriptAce::HtmlFormat }
@@ -3,6 +3,4 @@ view :raw do |args|
3
3
  File.read "#{Cardio.gem_root}/mod/03_machines/lib/stylesheets/style_cards.scss"
4
4
  end
5
5
 
6
- view :editor do |args|
7
- "Content is stored in file and can't be edited."
8
- end
6
+ format(:html) { include ScriptAce::HtmlFormat }
@@ -1,8 +1,3 @@
1
+ format { include StyleBootstrapCompatible::Format }
2
+ format(:html) { include ScriptAce::HtmlFormat }
1
3
 
2
- view :raw do |args|
3
- File.read "#{Cardio.gem_root}/mod/03_machines/lib/stylesheets/jquery-ui-smoothness.css"
4
- end
5
-
6
- view :editor do |args|
7
- "Content is stored in file and can't be edited."
8
- end
@@ -5,7 +5,7 @@ include MachineInput
5
5
 
6
6
  store_machine_output :filetype => "css"
7
7
 
8
- machine_input do
8
+ machine_input do
9
9
  compress_css format(:format => :css)._render_core
10
10
  end
11
11
 
@@ -15,28 +15,32 @@ def compress_css input
15
15
  rescue => e
16
16
  raise Card::Oops, "Stylesheet Error:\n#{ e.message }"
17
17
  end
18
- end
18
+ end
19
19
 
20
20
  def clean_html?
21
21
  false
22
22
  end
23
23
 
24
- format do
25
- def chunk_list #turn off autodetection of uri's
24
+ format do
25
+ def chunk_list #turn off autodetection of uri's
26
26
  :references
27
27
  end
28
28
  end
29
29
 
30
30
 
31
31
  format :html do
32
+ def get_inclusion_defaults nested_card
33
+ { :view => :closed }
34
+ end
35
+
32
36
  view :editor, :mod=>PlainText::HtmlFormat
33
-
37
+
34
38
  view :core do |args|
35
39
  # FIXME: scan must happen before process for inclusion interactions to work, but this will likely cause
36
40
  # problems with including other css?
37
41
  process_content ::CodeRay.scan( _render_raw, :css ).div, :size=>:icon
38
42
  end
39
-
43
+
40
44
  view :content_changes, :mod=>CoffeeScript::HtmlFormat
41
45
  end
42
46
 
@@ -4,12 +4,11 @@ def diff_args
4
4
  {:format=>:text}
5
5
  end
6
6
 
7
-
8
7
  format do
9
8
  include Css::Format
10
9
 
11
10
  view :core do |args|
12
- process_content compile_scss(_render_raw)
11
+ compile_scss(process_content _render_raw)
13
12
  end
14
13
 
15
14
  def compile_scss scss, style=:expanded
@@ -72,7 +72,7 @@ view :core do |args|
72
72
  end
73
73
 
74
74
  view :rule_help do |args|
75
- %{<div class="alert alert-info">#{process_content_object "{{+*right+*help}}"}</div>}
75
+ %{<div class="alert alert-info">#{process_content_object "{{+*right+*help|content}}"}</div>}
76
76
  end
77
77
 
78
78
 
@@ -57,7 +57,7 @@ format :html do
57
57
  :card => { :update_all_users => false }
58
58
  )
59
59
  args[:buttons] = %{
60
- #{ button_tag 'Submit and update all users', :disable_with=>'Updating', :class=>'follow-updater' }
60
+ #{ button_tag 'Submit and update all users', :disable_with=>'Updating', :class=>'follow-updater', :situation=>'primary' }
61
61
  #{ button_tag 'Submit', :class=>'follow' }
62
62
  #{ button_tag 'Cancel', :class=>'slotter', :type=>'button', :href=>path(:view=>:edit, :id=>card.id)}
63
63
  }
@@ -1,5 +1,5 @@
1
1
 
2
- require 'RMagick'
2
+ require 'rmagick'
3
3
  require 'paperclip'
4
4
 
5
5
  def attach_array
@@ -40,7 +40,7 @@ format :html do
40
40
  view :titled, :tags=>:comment do |args|
41
41
  wrap args do
42
42
  [
43
- _render_header( args.reverse_merge :optional_menu=>:hide ),
43
+ _render_header( args ),
44
44
  wrap_body( :content=>true ) { _render_core args },
45
45
  optional_render( :comment_box, args )
46
46
  ]
@@ -55,7 +55,7 @@ format :html do
55
55
  end
56
56
 
57
57
  args[:buttons] ||= %{
58
- #{ button_tag 'Submit', :class=>'create-submit-button', :disable_with=>'Submitting' }
58
+ #{ button_tag 'Submit', :class=>'create-submit-button', :disable_with=>'Submitting', :situation=>'primary' }
59
59
  #{ button_tag 'Cancel', :type=>'button', :class=>"create-cancel-button #{cancel[:class]}", :href=>cancel[:href] }
60
60
  }
61
61
 
@@ -75,7 +75,7 @@ format :html do
75
75
  args[:optional_help] = :show
76
76
 
77
77
  args[:buttons] = %{
78
- #{ button_tag 'Submit', :class=>'submit-button', :disable_with=>'Submitting' }
78
+ #{ button_tag 'Submit', :class=>'submit-button', :disable_with=>'Submitting', :situation=>'primary' }
79
79
  #{ button_tag 'Cancel', :class=>'cancel-button slotter', :href=>path, :type=>'button' }
80
80
  }
81
81
  end
@@ -117,7 +117,7 @@ format :html do
117
117
  :card => { :update_referencers => false }
118
118
  )
119
119
  args[:buttons] = %{
120
- #{ button_tag 'Rename and Update', :disable_with=>'Renaming', :class=>'renamer-updater' }
120
+ #{ button_tag 'Rename and Update', :disable_with=>'Renaming', :class=>'renamer-updater', :situation=>'primary' }
121
121
  #{ button_tag 'Rename', :disable_with=>'Renaming', :class=>'renamer' }
122
122
  #{ button_tag 'Cancel', :class=>'slotter', :type=>'button', :href=>path(:view=>:edit, :id=>card.id)}
123
123
  }
@@ -139,7 +139,7 @@ format :html do
139
139
  args[:variety] = :edit #YUCK!
140
140
  args[:hidden] ||= { :view=>:edit }
141
141
  args[:buttons] = %{
142
- #{ button_tag 'Submit', :disable_with=>'Submitting' }
142
+ #{ button_tag 'Submit', :disable_with=>'Submitting', :situation=>'primary' }
143
143
  #{ button_tag 'Cancel', :href=>path(:view=>:edit), :type=>'button', :class=>'slotter' }
144
144
  }
145
145
  end
@@ -65,7 +65,7 @@ format :html do
65
65
  </div>
66
66
 
67
67
  <div class="alert alert-info rule-instruction">
68
- #{ process_content "{{#{setting_name}+*right+*help}}" }
68
+ #{ process_content "{{#{setting_name}+*right+*help|content}}" }
69
69
  </div>
70
70
 
71
71
  <div class="card-body">
@@ -208,7 +208,7 @@ format :html do
208
208
  wrap_with( :div, :class=>'button-area' ) do
209
209
  [
210
210
  delete_button,
211
- button_tag( 'Submit', :class=>'rule-submit-button' ),
211
+ button_tag( 'Submit', :class=>'rule-submit-button', :situation=>'primary' ),
212
212
  button_tag( 'Cancel', :class=>'rule-cancel-button slotter', :type=>'button',
213
213
  :href=>cancel_path, :success=>true )
214
214
  ]
@@ -4,10 +4,10 @@ format :html do
4
4
  %(
5
5
  <meta charset="UTF-8">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
7
- #{ head_title }
7
+ #{ head_title }
8
8
  #{ head_buttons }
9
9
  #{ head_stylesheets }
10
- #{ head_javascript }
10
+ #{ head_javascript }
11
11
  )
12
12
  end
13
13
 
@@ -30,7 +30,7 @@ format :html do
30
30
  bits = []
31
31
  [:favicon, :logo].each do |name|
32
32
  if c = Card[name] and c.type_id == ImageID and !c.db_content.blank?
33
- bits << %{<link rel="shortcut icon" href="#{ subformat(c)._render_source :size=>:icon }" />}
33
+ bits << %{<link rel="shortcut icon" href="#{ subformat(c)._render_source :size=>:small }" />}
34
34
  break
35
35
  end
36
36
  end
@@ -55,7 +55,6 @@ format :html do
55
55
  manual_style = params[:style]
56
56
  style_card = Card[manual_style] if manual_style
57
57
  style_card ||= root.card.rule_card :style
58
-
59
58
  @css_path = if params[:debug] == 'style'
60
59
  page_path( style_card.cardname, :item => :import, :format => :css)
61
60
  elsif style_card
@@ -20,7 +20,7 @@ format :html do
20
20
  end
21
21
 
22
22
  def default_core_args args={}
23
- args[:buttons] = button_tag 'Sign in'
23
+ args[:buttons] = button_tag 'Sign in', :situation=>'primary'
24
24
  if Card.new(:type_id=>Card::SignupID).ok? :create
25
25
  args[:buttons] += link_to( '...or sign up!', card_path("account/signup"))
26
26
  end
@@ -53,7 +53,7 @@ format :html do
53
53
  args.merge!( {
54
54
  :title=>'Forgot Password',
55
55
  :optional_help=>:hide,
56
- :buttons => button_tag( 'Reset my password' ),
56
+ :buttons => button_tag( 'Reset my password', :situation=>'primary' ),
57
57
  :structure => true,
58
58
  :hidden => {
59
59
  :reset_password => true,
@@ -5,7 +5,7 @@ format :html do
5
5
  super args
6
6
  args.merge!(
7
7
  :optional_help => :show, #, :optional_menu=>:never
8
- :buttons => button_tag( 'Submit', :disable_with=>'Submitting' ),
8
+ :buttons => button_tag( 'Submit', :disable_with=>'Submitting', :situation=>'primary' ),
9
9
  :account => card.fetch( :trait=>:account, :new=>{} ),
10
10
  :title => 'Sign up',
11
11
  :hidden => {
@@ -16,7 +16,7 @@ format :html do
16
16
 
17
17
  if Auth.signed_in? and args[:account].confirm_ok?
18
18
  args[:title] = 'Invite'
19
- args[:buttons] = button_tag 'Send Invitation'
19
+ args[:buttons] = button_tag 'Send Invitation', :situation=>'primary'
20
20
  args[:hidden][:success] = '_self'
21
21
  end
22
22
  end
@@ -15,7 +15,7 @@ format :html do
15
15
  :optional_help=>:show,
16
16
  :optional_menu=>:never,
17
17
  :help_text=>help_text,
18
- :buttons => button_tag( 'Set up', :disable_with=>'Setting up' ),
18
+ :buttons => button_tag( 'Set up', :disable_with=>'Setting up', :situation=>'primary' ),
19
19
  :hidden => {
20
20
  :success => "REDIRECT: #{ Card.path_setting '/' }",
21
21
  'card[type_id]' => Card.default_accounted_type_id,
@@ -80,6 +80,18 @@ body.mceContentBody {
80
80
  }
81
81
 
82
82
 
83
+ /*---------- Card menu ------------*/
84
+
85
+ .card-slot > .card-header .card-menu-link {
86
+ display: none;
87
+ }
88
+ .card-slot.closed-view,
89
+ .card-slot:hover {
90
+ > .card-header .card-menu-link {
91
+ display: inline-block;
92
+ }
93
+ }
94
+
83
95
  /*----------- Change View ---------*/
84
96
 
85
97
  .change-view {
@@ -93,7 +105,10 @@ body.mceContentBody {
93
105
  }
94
106
  }
95
107
 
96
-
108
+ .titled-view > .card-header {
109
+ font-size: 1.3em;
110
+ margin: 3px 0
111
+ }
97
112
 
98
113
  /*---------- ( Richtext )-------------*/
99
114
 
@@ -1054,7 +1054,7 @@ th {
1054
1054
  content: "\e259";
1055
1055
  }
1056
1056
  .glyphicon-menu-up:before {
1057
- content: "\e260";
1057
+ content: "\e260";
1058
1058
  }
1059
1059
  * {
1060
1060
  -webkit-box-sizing: border-box;
@@ -0,0 +1,282 @@
1
+ // Gradients
2
+
3
+
4
+
5
+ // Horizontal gradient, from left to right
6
+ //
7
+ // Creates two color stops, start and end, by specifying a color and position for each color stop.
8
+ // Color stops are not available in IE9 and below.
9
+ @mixin gradient-horizontal($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
10
+ background-image: -webkit-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+
11
+ background-image: -o-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Opera 12
12
+ background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
13
+ background-repeat: repeat-x;
14
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down
15
+ }
16
+
17
+ // Vertical gradient, from top to bottom
18
+ //
19
+ // Creates two color stops, start and end, by specifying a color and position for each color stop.
20
+ // Color stops are not available in IE9 and below.
21
+ @mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
22
+ background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+
23
+ background-image: -o-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Opera 12
24
+ background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
25
+ background-repeat: repeat-x;
26
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down
27
+ }
28
+
29
+ @mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {
30
+ background-repeat: repeat-x;
31
+ background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1-6, Chrome 10+
32
+ background-image: -o-linear-gradient($deg, $start-color, $end-color); // Opera 12
33
+ background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
34
+ }
35
+ @mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
36
+ background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);
37
+ background-image: -o-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);
38
+ background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
39
+ background-repeat: no-repeat;
40
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback
41
+ }
42
+ @mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
43
+ background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color);
44
+ background-image: -o-linear-gradient($start-color, $mid-color $color-stop, $end-color);
45
+ background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
46
+ background-repeat: no-repeat;
47
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback
48
+ }
49
+ @mixin gradient-radial($inner-color: #555, $outer-color: #333) {
50
+ background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color);
51
+ background-image: radial-gradient(circle, $inner-color, $outer-color);
52
+ background-repeat: no-repeat;
53
+ }
54
+ @mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) {
55
+ background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
56
+ background-image: -o-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
57
+ background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
58
+ }
59
+
60
+
61
+ // Vendor Prefixes
62
+ //
63
+ // All vendor mixins are deprecated as of v3.2.0 due to the introduction of
64
+ // Autoprefixer in our Gruntfile. They will be removed in v4.
65
+
66
+ // - Animations
67
+ // - Backface visibility
68
+ // - Box shadow
69
+ // - Box sizing
70
+ // - Content columns
71
+ // - Hyphens
72
+ // - Placeholder text
73
+ // - Transformations
74
+ // - Transitions
75
+ // - User Select
76
+
77
+
78
+ // Animations
79
+ @mixin animation($animation) {
80
+ -webkit-animation: $animation;
81
+ -o-animation: $animation;
82
+ animation: $animation;
83
+ }
84
+ @mixin animation-name($name) {
85
+ -webkit-animation-name: $name;
86
+ animation-name: $name;
87
+ }
88
+ @mixin animation-duration($duration) {
89
+ -webkit-animation-duration: $duration;
90
+ animation-duration: $duration;
91
+ }
92
+ @mixin animation-timing-function($timing-function) {
93
+ -webkit-animation-timing-function: $timing-function;
94
+ animation-timing-function: $timing-function;
95
+ }
96
+ @mixin animation-delay($delay) {
97
+ -webkit-animation-delay: $delay;
98
+ animation-delay: $delay;
99
+ }
100
+ @mixin animation-iteration-count($iteration-count) {
101
+ -webkit-animation-iteration-count: $iteration-count;
102
+ animation-iteration-count: $iteration-count;
103
+ }
104
+ @mixin animation-direction($direction) {
105
+ -webkit-animation-direction: $direction;
106
+ animation-direction: $direction;
107
+ }
108
+ @mixin animation-fill-mode($fill-mode) {
109
+ -webkit-animation-fill-mode: $fill-mode;
110
+ animation-fill-mode: $fill-mode;
111
+ }
112
+
113
+ // Backface visibility
114
+ // Prevent browsers from flickering when using CSS 3D transforms.
115
+ // Default value is `visible`, but can be changed to `hidden`
116
+
117
+ @mixin backface-visibility($visibility){
118
+ -webkit-backface-visibility: $visibility;
119
+ -moz-backface-visibility: $visibility;
120
+ backface-visibility: $visibility;
121
+ }
122
+
123
+ // Drop shadows
124
+ //
125
+ // Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's
126
+ // supported browsers that have box shadow capabilities now support it.
127
+
128
+ @mixin box-shadow($shadow...) {
129
+ -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1
130
+ box-shadow: $shadow;
131
+ }
132
+
133
+ // Box sizing
134
+ @mixin box-sizing($boxmodel) {
135
+ -webkit-box-sizing: $boxmodel;
136
+ -moz-box-sizing: $boxmodel;
137
+ box-sizing: $boxmodel;
138
+ }
139
+
140
+ // CSS3 Content Columns
141
+ @mixin content-columns($column-count, $column-gap: $grid-gutter-width) {
142
+ -webkit-column-count: $column-count;
143
+ -moz-column-count: $column-count;
144
+ column-count: $column-count;
145
+ -webkit-column-gap: $column-gap;
146
+ -moz-column-gap: $column-gap;
147
+ column-gap: $column-gap;
148
+ }
149
+
150
+ // Optional hyphenation
151
+ @mixin hyphens($mode: auto) {
152
+ word-wrap: break-word;
153
+ -webkit-hyphens: $mode;
154
+ -moz-hyphens: $mode;
155
+ -ms-hyphens: $mode; // IE10+
156
+ -o-hyphens: $mode;
157
+ hyphens: $mode;
158
+ }
159
+
160
+ // Placeholder text
161
+ @mixin placeholder($color: $input-color-placeholder) {
162
+ // Firefox
163
+ &::-moz-placeholder {
164
+ color: $color;
165
+ opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
166
+ }
167
+ &:-ms-input-placeholder { color: $color; } // Internet Explorer 10+
168
+ &::-webkit-input-placeholder { color: $color; } // Safari and Chrome
169
+ }
170
+
171
+ // Transformations
172
+ @mixin scale($ratio...) {
173
+ -webkit-transform: scale($ratio);
174
+ -ms-transform: scale($ratio); // IE9 only
175
+ -o-transform: scale($ratio);
176
+ transform: scale($ratio);
177
+ }
178
+
179
+ @mixin scaleX($ratio) {
180
+ -webkit-transform: scaleX($ratio);
181
+ -ms-transform: scaleX($ratio); // IE9 only
182
+ -o-transform: scaleX($ratio);
183
+ transform: scaleX($ratio);
184
+ }
185
+ @mixin scaleY($ratio) {
186
+ -webkit-transform: scaleY($ratio);
187
+ -ms-transform: scaleY($ratio); // IE9 only
188
+ -o-transform: scaleY($ratio);
189
+ transform: scaleY($ratio);
190
+ }
191
+ @mixin skew($x, $y) {
192
+ -webkit-transform: skewX($x) skewY($y);
193
+ -ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
194
+ -o-transform: skewX($x) skewY($y);
195
+ transform: skewX($x) skewY($y);
196
+ }
197
+ @mixin translate($x, $y) {
198
+ -webkit-transform: translate($x, $y);
199
+ -ms-transform: translate($x, $y); // IE9 only
200
+ -o-transform: translate($x, $y);
201
+ transform: translate($x, $y);
202
+ }
203
+ @mixin translate3d($x, $y, $z) {
204
+ -webkit-transform: translate3d($x, $y, $z);
205
+ transform: translate3d($x, $y, $z);
206
+ }
207
+ @mixin rotate($degrees) {
208
+ -webkit-transform: rotate($degrees);
209
+ -ms-transform: rotate($degrees); // IE9 only
210
+ -o-transform: rotate($degrees);
211
+ transform: rotate($degrees);
212
+ }
213
+ @mixin rotateX($degrees) {
214
+ -webkit-transform: rotateX($degrees);
215
+ -ms-transform: rotateX($degrees); // IE9 only
216
+ -o-transform: rotateX($degrees);
217
+ transform: rotateX($degrees);
218
+ }
219
+ @mixin rotateY($degrees) {
220
+ -webkit-transform: rotateY($degrees);
221
+ -ms-transform: rotateY($degrees); // IE9 only
222
+ -o-transform: rotateY($degrees);
223
+ transform: rotateY($degrees);
224
+ }
225
+ @mixin perspective($perspective) {
226
+ -webkit-perspective: $perspective;
227
+ -moz-perspective: $perspective;
228
+ perspective: $perspective;
229
+ }
230
+ @mixin perspective-origin($perspective) {
231
+ -webkit-perspective-origin: $perspective;
232
+ -moz-perspective-origin: $perspective;
233
+ perspective-origin: $perspective;
234
+ }
235
+ @mixin transform-origin($origin) {
236
+ -webkit-transform-origin: $origin;
237
+ -moz-transform-origin: $origin;
238
+ -ms-transform-origin: $origin; // IE9 only
239
+ transform-origin: $origin;
240
+ }
241
+
242
+
243
+ // Transitions
244
+
245
+ @mixin transition($transition...) {
246
+ -webkit-transition: $transition;
247
+ -o-transition: $transition;
248
+ transition: $transition;
249
+ }
250
+ @mixin transition-property($transition-property...) {
251
+ -webkit-transition-property: $transition-property;
252
+ transition-property: $transition-property;
253
+ }
254
+ @mixin transition-delay($transition-delay) {
255
+ -webkit-transition-delay: $transition-delay;
256
+ transition-delay: $transition-delay;
257
+ }
258
+ @mixin transition-duration($transition-duration...) {
259
+ -webkit-transition-duration: $transition-duration;
260
+ transition-duration: $transition-duration;
261
+ }
262
+ @mixin transition-timing-function($timing-function) {
263
+ -webkit-transition-timing-function: $timing-function;
264
+ transition-timing-function: $timing-function;
265
+ }
266
+ @mixin transition-transform($transition...) {
267
+ -webkit-transition: -webkit-transform $transition;
268
+ -moz-transition: -moz-transform $transition;
269
+ -o-transition: -o-transform $transition;
270
+ transition: transform $transition;
271
+ }
272
+
273
+
274
+ // User select
275
+ // For selecting text on the page
276
+
277
+ @mixin user-select($select) {
278
+ -webkit-user-select: $select;
279
+ -moz-user-select: $select;
280
+ -ms-user-select: $select; // IE10+
281
+ user-select: $select;
282
+ }