biola_wcms_components 0.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.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +74 -0
- data/Rakefile +1 -0
- data/app/assets/images/.gitkeep +0 -0
- data/app/assets/javascripts/biola-wcms-components.js.coffee +15 -0
- data/app/assets/javascripts/components/forms/json_editor.js.coffee +20 -0
- data/app/assets/javascripts/components/forms/person_lookup.js.coffee +29 -0
- data/app/assets/javascripts/components/forms/presentation_data_editor.js.coffee +69 -0
- data/app/assets/javascripts/components/forms/yaml_editor.js.coffee +39 -0
- data/app/assets/javascripts/configuration/file_uploader.js.coffee +55 -0
- data/app/assets/javascripts/configuration/setup_redactor.js.coffee +65 -0
- data/app/assets/stylesheets/_mixins.scss +43 -0
- data/app/assets/stylesheets/_settings.scss +1 -0
- data/app/assets/stylesheets/biola-wcms-components.scss +11 -0
- data/app/assets/stylesheets/components/alerts/_message_list.scss +3 -0
- data/app/assets/stylesheets/components/forms/_person_lookup.scss +72 -0
- data/app/assets/stylesheets/components/forms/_presentation_data_editor.scss +38 -0
- data/app/assets/stylesheets/components/navigation/_site_nav.scss +24 -0
- data/app/helpers/wcms_components/alerts_helper.rb +41 -0
- data/app/helpers/wcms_components/component_helper.rb +9 -0
- data/app/helpers/wcms_components/navigation_helper.rb +32 -0
- data/app/views/wcms_components/alerts/_message_list.html.slim +8 -0
- data/app/views/wcms_components/forms/_json_editor.html.slim +13 -0
- data/app/views/wcms_components/forms/_person_lookup.html.slim +12 -0
- data/app/views/wcms_components/forms/_presentation_data_editor.html.slim +36 -0
- data/app/views/wcms_components/forms/_redactor_editor.html.slim +32 -0
- data/app/views/wcms_components/forms/_text_area.html.slim +13 -0
- data/app/views/wcms_components/forms/_yaml_editor.html.slim +16 -0
- data/app/views/wcms_components/navigation/_page_nav.html.slim +33 -0
- data/app/views/wcms_components/navigation/_site_nav.html.slim +38 -0
- data/app/views/wcms_components/shared/.gitkeep +0 -0
- data/app/views/wcms_components/shared/_embedded_image_uploader.html.slim +6 -0
- data/biola_wcms_components.gemspec +27 -0
- data/config/locales/en.yml +4 -0
- data/lib/biola_wcms_components.rb +22 -0
- data/lib/biola_wcms_components/configuration.rb +9 -0
- data/lib/biola_wcms_components/engine.rb +6 -0
- data/lib/biola_wcms_components/version.rb +3 -0
- data/lib/components/menu_block.rb +130 -0
- data/lib/components/presentation_data_editor.rb +199 -0
- data/vendor/assets/javascripts/handlebars.js +3750 -0
- data/vendor/assets/javascripts/redactor.js +8312 -0
- data/vendor/assets/javascripts/redactor_fullscreen.js +123 -0
- data/vendor/assets/javascripts/typeahead.js +11 -0
- data/vendor/assets/stylesheets/redactor.css +924 -0
- metadata +176 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3564d479c782c49da3714d46d516fbc535e40cfa
|
4
|
+
data.tar.gz: 19904bda0bb747bfd063e87683cdb12391ec7de3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bea91bf31935f7321f8a5e2aadfa5e7eceef27781eb5abbc70bbb346e5dffafc03adc46a80c2d39932e93126222e495f1a70e3e54d7003e25d2068ae65c6c287
|
7
|
+
data.tar.gz: 3157ae4e247df688200788bfac820cec812a1199c5fbb43217c24e82893902b24bac5e94dba651d34369331fd93b02008e7bb77778b8fb8257b8594477203f17
|
data/.gitignore
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.1.4
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Ryan Hall
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# Biola WCMS Components
|
2
|
+
|
3
|
+
This provides reusable UX components for our differnet WCMS projects
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'biola_wcms_components'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install biola_wcms_components
|
18
|
+
|
19
|
+
#### Dependencies
|
20
|
+
|
21
|
+
* ace-rails-ap
|
22
|
+
* coffee-rails
|
23
|
+
* sass-rails
|
24
|
+
* slim
|
25
|
+
* rails (this is not an explicit dependency but I haven't tested it using anything else)
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
### Rails > 3.1
|
30
|
+
|
31
|
+
Include the following in `application.css.scss`.
|
32
|
+
|
33
|
+
@import "biola-wcms-components";
|
34
|
+
|
35
|
+
Include the following in `application.js.coffee`.
|
36
|
+
|
37
|
+
#= require biola-wcms-components
|
38
|
+
|
39
|
+
|
40
|
+
### Components
|
41
|
+
|
42
|
+
In your view file, you will render `wcms_component("path/to/component", options)`
|
43
|
+
|
44
|
+
Example:
|
45
|
+
|
46
|
+
= wcms_component "forms/presentation_data_editor",
|
47
|
+
schema: @generic_object.presentation_data_template.schema,
|
48
|
+
data: @generic_object.presentation_data,
|
49
|
+
form: f,
|
50
|
+
embedded_image_url: create_embedded_images_url
|
51
|
+
|
52
|
+
Currently, look in `app/views/wcms_components` for available components.
|
53
|
+
|
54
|
+
|
55
|
+
#### Other requirements
|
56
|
+
|
57
|
+
* `current_user` - should be defined an ApplicationController. Should return user when logged in
|
58
|
+
|
59
|
+
#### Configuration
|
60
|
+
|
61
|
+
Create a new file called `/config/initializers/biola_wcms_components.rb`
|
62
|
+
|
63
|
+
BiolaWcmsComponents.configure do |config|
|
64
|
+
config.default_redactor_buttons = ['bold', 'italic', 'orderedlist', 'unorderedlist']
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
## Contributing
|
69
|
+
|
70
|
+
1. Fork it
|
71
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
72
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
73
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
74
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#= require ace/ace
|
2
|
+
#= require ace/mode-yaml
|
3
|
+
#= require ace/mode-json
|
4
|
+
#= require ace/worker-json
|
5
|
+
#
|
6
|
+
# Handlebars and typeahead are needed for the person-lookup component
|
7
|
+
#= require handlebars
|
8
|
+
#= require typeahead
|
9
|
+
#
|
10
|
+
#= require redactor
|
11
|
+
#= require redactor_fullscreen
|
12
|
+
#
|
13
|
+
#= require_tree ./configuration
|
14
|
+
#= require_tree ./components
|
15
|
+
#= require_self
|
@@ -0,0 +1,20 @@
|
|
1
|
+
$(document).ready ->
|
2
|
+
$('.ace_json_editor').each ->
|
3
|
+
editor_area = document.createElement('div')
|
4
|
+
this.appendChild(editor_area)
|
5
|
+
|
6
|
+
# Initialize Ace Editor
|
7
|
+
editor = ace.edit(editor_area)
|
8
|
+
editor.getSession().setMode("ace/mode/json")
|
9
|
+
editor.getSession().setTabSize(2)
|
10
|
+
editor.getSession().setUseWrapMode(true);
|
11
|
+
editor.setPrintMarginColumn(800)
|
12
|
+
editor.setOptions({
|
13
|
+
minLines: 8,
|
14
|
+
maxLines: Infinity
|
15
|
+
});
|
16
|
+
|
17
|
+
textarea = $(this).children('textarea').hide()
|
18
|
+
editor.getSession().setValue textarea.val()
|
19
|
+
editor.getSession().on "change", ->
|
20
|
+
textarea.val editor.getSession().getValue()
|
@@ -0,0 +1,29 @@
|
|
1
|
+
$(document).ready ->
|
2
|
+
if $('.person-lookup').length > 0
|
3
|
+
people_search_url = $('.person-lookup').first().data('lookup-url')
|
4
|
+
|
5
|
+
peopleSearch = new Bloodhound(
|
6
|
+
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value')
|
7
|
+
queryTokenizer: Bloodhound.tokenizers.whitespace
|
8
|
+
# The prefetch url returns a list of all the faculty
|
9
|
+
prefetch: people_search_url
|
10
|
+
remote: people_search_url + '?q=%QUERY'
|
11
|
+
)
|
12
|
+
|
13
|
+
peopleSearch.initialize()
|
14
|
+
$('.person-lookup .typeahead').typeahead null,
|
15
|
+
name: 'people-search'
|
16
|
+
displayKey: (person) ->
|
17
|
+
person.name + " <#{person.email || person.id}>"
|
18
|
+
highlight: true
|
19
|
+
source: peopleSearch.ttAdapter()
|
20
|
+
templates:
|
21
|
+
empty: '<div class="tt-empty-message">No one found with that name</div>'
|
22
|
+
suggestion: Handlebars.compile(
|
23
|
+
'<span class="image" style="background-image: url({{image}})" ></span>' +
|
24
|
+
'<span class="name">{{name}}</span> <span class="affiliations">{{affiliations}}</span>'
|
25
|
+
)
|
26
|
+
|
27
|
+
# We need to submit the ID through a hidden input for improved lookup.
|
28
|
+
$('.person-lookup .typeahead').on "typeahead:selected typeahead:autocompleted", (e,datum) ->
|
29
|
+
$('.person-lookup .hidden-person-id').val datum.id
|
@@ -0,0 +1,69 @@
|
|
1
|
+
$(document).ready ->
|
2
|
+
if $('#presentation_data_editor').length > 0
|
3
|
+
|
4
|
+
# Disable all framework fields, otherwise they will save on submit
|
5
|
+
$('.array_wrapper .framework').find('input, textarea').each ->
|
6
|
+
this.disabled = true
|
7
|
+
|
8
|
+
# Delete an array item when you click the delete button
|
9
|
+
$('.array_wrapper').on 'click', '.delete_array_item', ->
|
10
|
+
$(this).parents('.array_item').remove()
|
11
|
+
false
|
12
|
+
|
13
|
+
# Add an new array item from the last array_item
|
14
|
+
$('.array_wrapper .add_array_item').click ->
|
15
|
+
last_item = $(this).siblings('.array_item').last()
|
16
|
+
framework = $(this).siblings('.array_item.framework').last()
|
17
|
+
new_item = framework.clone()
|
18
|
+
new_item.removeClass("framework")
|
19
|
+
|
20
|
+
# Get array number for last item
|
21
|
+
last_number = last_item.find('input, textarea').first().attr('id').match(/\d+/)
|
22
|
+
new_number = +last_number[0] + 1
|
23
|
+
|
24
|
+
# Loop through each element and enable it.
|
25
|
+
# They have to be disabled in the framework form so they don't get submitted
|
26
|
+
new_item.find('input, textarea').each ->
|
27
|
+
this.id = this.id.replace(/\d+/, new_number)
|
28
|
+
this.disabled = false
|
29
|
+
this.value = ""
|
30
|
+
|
31
|
+
# Append to DOM after last item
|
32
|
+
last_item.after(new_item)
|
33
|
+
|
34
|
+
# Setup redactor for new item
|
35
|
+
# NOTE: This is the reason I am copying the 'framework' item above,
|
36
|
+
# because redactor is already setup for the other items.
|
37
|
+
# I explicitly exclude redactor setup from items nested under 'framework'
|
38
|
+
setupRedactorEditorsUnder(new_item)
|
39
|
+
|
40
|
+
false
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
##############################
|
47
|
+
# Setup drag-drop image upload
|
48
|
+
##############################
|
49
|
+
uploadImage = (file, input) ->
|
50
|
+
fileUploader.sendFileToServer file, 'embedded_image', ((url) ->
|
51
|
+
input.value = url
|
52
|
+
), ->
|
53
|
+
alert('There was a problem uploading the image')
|
54
|
+
|
55
|
+
$('#presentation_data_editor').on 'dragover', 'input.drop-image-uploader', (e) ->
|
56
|
+
event.preventDefault()
|
57
|
+
event.stopPropagation()
|
58
|
+
$(this).addClass('dragging')
|
59
|
+
|
60
|
+
$('#presentation_data_editor').on 'dragleave', 'input.drop-image-uploader', (e) ->
|
61
|
+
event.preventDefault()
|
62
|
+
event.stopPropagation()
|
63
|
+
$(this).removeClass('dragging')
|
64
|
+
|
65
|
+
$('#presentation_data_editor').on 'drop', 'input.drop-image-uploader', (e) ->
|
66
|
+
event.preventDefault()
|
67
|
+
event.stopPropagation()
|
68
|
+
uploadImage(e.originalEvent.dataTransfer.files[0], this)
|
69
|
+
$(this).removeClass('dragging')
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# This is depricated. We will keep this around until we have moved everything over to the new
|
2
|
+
# plain data form editor.
|
3
|
+
|
4
|
+
$(document).ready ->
|
5
|
+
$('.ace_yaml_editor').each ->
|
6
|
+
editor_area = document.createElement('div')
|
7
|
+
this.appendChild(editor_area)
|
8
|
+
|
9
|
+
# Initialize Ace Editor
|
10
|
+
editor = ace.edit(editor_area)
|
11
|
+
editor.getSession().setMode("ace/mode/yaml")
|
12
|
+
editor.getSession().setTabSize(2)
|
13
|
+
editor.setPrintMarginColumn(800)
|
14
|
+
editor.setOptions({
|
15
|
+
minLines: 8,
|
16
|
+
maxLines: Infinity
|
17
|
+
});
|
18
|
+
|
19
|
+
textarea = $(this).children('textarea').hide()
|
20
|
+
editor.getSession().setValue textarea.val()
|
21
|
+
editor.getSession().on "change", ->
|
22
|
+
textarea.val editor.getSession().getValue()
|
23
|
+
|
24
|
+
|
25
|
+
# Setup drag-drop image upload
|
26
|
+
editor.container.addEventListener 'dragover', (e) =>
|
27
|
+
e.preventDefault()
|
28
|
+
e.stopPropagation()
|
29
|
+
|
30
|
+
editor.container.addEventListener 'dragleave', (e) =>
|
31
|
+
e.preventDefault()
|
32
|
+
e.stopPropagation()
|
33
|
+
|
34
|
+
editor.container.addEventListener 'drop', (e) =>
|
35
|
+
e.preventDefault()
|
36
|
+
e.stopPropagation()
|
37
|
+
fileUploader.sendFileToServer e.dataTransfer.files[0], 'embedded_image', (url) ->
|
38
|
+
editor.insert('"' + url + '"')
|
39
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# In order to use you must first set up an uploader
|
2
|
+
# Example:
|
3
|
+
# fileUploader.addUploader('embedded_image', "http://api.example.com/uploader");
|
4
|
+
#
|
5
|
+
# Then you can send a file to that uploader whenever you are ready.
|
6
|
+
# Example:
|
7
|
+
# fileUploader.sendFileToServer file, 'embedded_image', ((url) ->
|
8
|
+
# alert 'success!'
|
9
|
+
# ), ->
|
10
|
+
# alert 'error :('
|
11
|
+
#
|
12
|
+
|
13
|
+
|
14
|
+
window.fileUploader ||= {
|
15
|
+
uploaders: {}
|
16
|
+
}
|
17
|
+
|
18
|
+
fileUploader.addUploader = (key, url) ->
|
19
|
+
fileUploader.uploaders[key] = url
|
20
|
+
|
21
|
+
fileUploader.sendFileToServer = (file, urlKey, successCallback, errorCallback) ->
|
22
|
+
if fileUploader.uploaders[urlKey]
|
23
|
+
form_data = new FormData()
|
24
|
+
form_data.append('file', file)
|
25
|
+
form_data.append('authenticity_token', $('[name=csrf-token').attr('content'))
|
26
|
+
|
27
|
+
xhr = new XMLHttpRequest()
|
28
|
+
xhr.open "POST", fileUploader.uploaders[urlKey]
|
29
|
+
|
30
|
+
# complete
|
31
|
+
xhr.onreadystatechange = $.proxy(->
|
32
|
+
if xhr.readyState is 4
|
33
|
+
data = xhr.responseText
|
34
|
+
data = data.replace(/^\[/, "")
|
35
|
+
data = data.replace(/\]$/, "")
|
36
|
+
json = undefined
|
37
|
+
try
|
38
|
+
json = ((if typeof data is "string" then $.parseJSON(data) else data))
|
39
|
+
catch err
|
40
|
+
json = error: true
|
41
|
+
|
42
|
+
if json.error
|
43
|
+
if errorCallback
|
44
|
+
errorCallback()
|
45
|
+
else
|
46
|
+
alert('There was a problem uploading the file')
|
47
|
+
else
|
48
|
+
successCallback(json.filelink)
|
49
|
+
return
|
50
|
+
, this)
|
51
|
+
xhr.send form_data
|
52
|
+
|
53
|
+
else
|
54
|
+
alert('Uploader is not configured.')
|
55
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
setupRedactor = (obj) ->
|
2
|
+
# Default Options
|
3
|
+
options =
|
4
|
+
minHeight: 200
|
5
|
+
allowedTags: ['p', 'br']
|
6
|
+
buttons: []
|
7
|
+
|
8
|
+
# Add any custom data attributes to the default options
|
9
|
+
if obj.data('linkable') # in case you want to support links without explicitly giving a link button.
|
10
|
+
options.allowedTags = $.merge(options.allowedTags, 'a')
|
11
|
+
if data = obj.data('buttons')
|
12
|
+
buttons = data.split(' ')
|
13
|
+
options.buttons = $.merge(options.buttons, buttons)
|
14
|
+
options.allowedTags = $.merge(options.allowedTags, buttonsToTags(buttons))
|
15
|
+
if tuned_data = obj.data('formatting')
|
16
|
+
formatting = tuned_data.split (' ')
|
17
|
+
options.formatting = tuned_data.split (' ')
|
18
|
+
if options.allowedTags.indexOf('a') >= 0
|
19
|
+
options.convertLinks = true;
|
20
|
+
if options.buttons.indexOf('fullscreen') >= 0
|
21
|
+
options.plugins = ['fullscreen']
|
22
|
+
|
23
|
+
# Uniq all arrays
|
24
|
+
options.buttons = $.unique(options.buttons)
|
25
|
+
if formatting
|
26
|
+
options.formatting = $.unique(options.formatting)
|
27
|
+
options.allowedTags = $.unique(options.allowedTags)
|
28
|
+
|
29
|
+
# Initialize redactor
|
30
|
+
obj.redactor(options)
|
31
|
+
|
32
|
+
|
33
|
+
button_to_tag_mapping =
|
34
|
+
bold: ['b', 'strong']
|
35
|
+
italic: ['i', 'em']
|
36
|
+
link: ['a']
|
37
|
+
orderedlist: ['ol', 'li']
|
38
|
+
table: ['table', 'tr', 'tbody', 'td']
|
39
|
+
unorderedlist: ['ul', 'li']
|
40
|
+
|
41
|
+
buttonsToTags = (buttons) ->
|
42
|
+
tags = []
|
43
|
+
$.each buttons, (index, value) ->
|
44
|
+
if mapping = button_to_tag_mapping[value]
|
45
|
+
tags = $.merge(tags, mapping)
|
46
|
+
tags
|
47
|
+
|
48
|
+
|
49
|
+
window.setupRedactorEditorsUnder = (obj) ->
|
50
|
+
# Initialize redactor on items with the class 'redactor'
|
51
|
+
$(obj).find("textarea.redactor:enabled").each (i) ->
|
52
|
+
# Don't setup redactor if the textarea inherits from a "framework" item.
|
53
|
+
# framework items are hidden and are used to add new items to a form array.
|
54
|
+
# If it inherits from .redactor-box that means it has already been initialized.
|
55
|
+
unless $(this).parents('.framework, .redactor-box').length > 0
|
56
|
+
setupRedactor($(this))
|
57
|
+
|
58
|
+
|
59
|
+
$(document).ready ->
|
60
|
+
# Run on startup
|
61
|
+
setupRedactorEditorsUnder('body')
|
62
|
+
|
63
|
+
# Run when modals open
|
64
|
+
$(".modal").on "shown.bs.modal", (e) ->
|
65
|
+
setupRedactorEditorsUnder('.modal')
|
@@ -0,0 +1,43 @@
|
|
1
|
+
//===============================================
|
2
|
+
// Toggle-able media queries and old IE helper
|
3
|
+
// See: http://jakearchibald.github.io/sass-ie/
|
4
|
+
//===============================================
|
5
|
+
$fix-mqs: false !default;
|
6
|
+
$old-ie: false !default;
|
7
|
+
$max-width-extreme:9999px;
|
8
|
+
|
9
|
+
@mixin respond($min-width:0, $max-width:$max-width-extreme, $orientation:null) {
|
10
|
+
// If we're outputting for a fixed media query set...
|
11
|
+
@if $fix-mqs {
|
12
|
+
// ...and if we should apply these rules...
|
13
|
+
@if $fix-mqs >= $min-width and $fix-mqs <= $max-width {
|
14
|
+
// ...output the content the user gave us.
|
15
|
+
@content;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
@else {
|
19
|
+
// Otherwise, output it using a regular media query
|
20
|
+
$query:'screen';
|
21
|
+
|
22
|
+
@if $min-width > 0 {
|
23
|
+
$query:$query + " and (min-width:#{$min-width})";
|
24
|
+
}
|
25
|
+
@if $max-width < $max-width-extreme {
|
26
|
+
$query:$query + " and (max-width:#{$max-width})";
|
27
|
+
}
|
28
|
+
@if $orientation {
|
29
|
+
$query:$query + " and (orientation:#{$orientation})";
|
30
|
+
}
|
31
|
+
|
32
|
+
@media #{$query} {
|
33
|
+
@content;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
@mixin old-ie {
|
39
|
+
// Only use this content if we're dealing with old IE
|
40
|
+
@if $old-ie {
|
41
|
+
@content;
|
42
|
+
}
|
43
|
+
}
|