Browse Source

v1.0.0

master
장선근 8 years ago
commit
4f3274f5b1
  1. 62
      .gitignore
  2. 3
      README.md
  3. 334
      _src/admin/js/admin.js
  4. 861
      _src/admin/js/jquery.formatter.js
  5. 484
      _src/admin/js/jquery.tmpl.js
  6. 172
      _src/admin/js/modules/board.js
  7. 123
      _src/admin/js/modules/faq.js
  8. 175
      _src/admin/js/modules/member.js
  9. 152
      _src/admin/scss/_animation.scss
  10. 355
      _src/admin/scss/_bootstrap_custom.scss
  11. 111
      _src/admin/scss/_buttons.scss
  12. 175
      _src/admin/scss/_form.scss
  13. 122
      _src/admin/scss/_grid.scss
  14. 297
      _src/admin/scss/_layout.scss
  15. 54
      _src/admin/scss/_mixins.scss
  16. 11
      _src/admin/scss/_modal.scss
  17. 70
      _src/admin/scss/_pages.scss
  18. 230
      _src/admin/scss/_plugins_custom.scss
  19. 27
      _src/admin/scss/_variables.scss
  20. 64
      _src/admin/scss/admin.scss
  21. 1
      _src/common/css/global.css
  22. 200
      _src/common/css/toastr.css
  23. 87
      _src/common/js/board.js
  24. 140
      _src/common/js/global.js
  25. 620
      _src/common/js/jquery.blockUI.js
  26. 114
      _src/common/js/jquery.cookie.js
  27. 194
      _src/common/js/member.js
  28. 435
      _src/common/js/toastr.js
  29. 64
      _src/desktop/scss/_layout.scss
  30. 5
      _src/desktop/scss/_mixins.scss
  31. 34
      _src/desktop/scss/_variables.scss
  32. 53
      _src/desktop/scss/desktop.scss
  33. 79
      _src/desktop/scss/pages/_board.scss
  34. 116
      _src/desktop/scss/pages/_members.scss
  35. 61
      _src/desktop/scss/pages/_social.scss
  36. 20
      _src/plugins/fontawesome5/_animated.scss
  37. 20
      _src/plugins/fontawesome5/_bordered-pulled.scss
  38. 16
      _src/plugins/fontawesome5/_core.scss
  39. 6
      _src/plugins/fontawesome5/_fixed-width.scss
  40. 995
      _src/plugins/fontawesome5/_icons.scss
  41. 23
      _src/plugins/fontawesome5/_larger.scss
  42. 18
      _src/plugins/fontawesome5/_list.scss
  43. 57
      _src/plugins/fontawesome5/_mixins.scss
  44. 23
      _src/plugins/fontawesome5/_rotated-flipped.scss
  45. 5
      _src/plugins/fontawesome5/_screen-reader.scss
  46. 31
      _src/plugins/fontawesome5/_stacked.scss
  47. 1008
      _src/plugins/fontawesome5/_variables.scss
  48. 21
      _src/plugins/fontawesome5/fa-brands.scss
  49. 22
      _src/plugins/fontawesome5/fa-light.scss
  50. 22
      _src/plugins/fontawesome5/fa-regular.scss
  51. 23
      _src/plugins/fontawesome5/fa-solid.scss
  52. 16
      _src/plugins/fontawesome5/fontawesome.scss
  53. 333
      _src/plugins/jquery-ui-1.12.1.custom/AUTHORS.txt
  54. 43
      _src/plugins/jquery-ui-1.12.1.custom/LICENSE.txt
  55. 11008
      _src/plugins/jquery-ui-1.12.1.custom/external/jquery/jquery.js
  56. BIN
      _src/plugins/jquery-ui-1.12.1.custom/images/ui-icons_444444_256x240.png
  57. BIN
      _src/plugins/jquery-ui-1.12.1.custom/images/ui-icons_555555_256x240.png
  58. BIN
      _src/plugins/jquery-ui-1.12.1.custom/images/ui-icons_777620_256x240.png
  59. BIN
      _src/plugins/jquery-ui-1.12.1.custom/images/ui-icons_777777_256x240.png
  60. BIN
      _src/plugins/jquery-ui-1.12.1.custom/images/ui-icons_cc0000_256x240.png
  61. BIN
      _src/plugins/jquery-ui-1.12.1.custom/images/ui-icons_ffffff_256x240.png
  62. 333
      _src/plugins/jquery-ui-1.12.1.custom/index.html
  63. 701
      _src/plugins/jquery-ui-1.12.1.custom/jquery-ui.css
  64. 4705
      _src/plugins/jquery-ui-1.12.1.custom/jquery-ui.js
  65. 7
      _src/plugins/jquery-ui-1.12.1.custom/jquery-ui.min.css
  66. 8
      _src/plugins/jquery-ui-1.12.1.custom/jquery-ui.min.js
  67. 275
      _src/plugins/jquery-ui-1.12.1.custom/jquery-ui.structure.css
  68. 5
      _src/plugins/jquery-ui-1.12.1.custom/jquery-ui.structure.min.css
  69. 443
      _src/plugins/jquery-ui-1.12.1.custom/jquery-ui.theme.css
  70. 5
      _src/plugins/jquery-ui-1.12.1.custom/jquery-ui.theme.min.css
  71. 74
      _src/plugins/jquery-ui-1.12.1.custom/package.json
  72. 122
      gulpfile.js
  73. 5693
      package-lock.json
  74. 32
      package.json
  75. 9
      public_html/.htaccess
  76. 1
      public_html/assets/css/admin.min.css
  77. 1
      public_html/assets/css/desktop.min.css
  78. 1
      public_html/assets/css/mobile.min.css
  79. BIN
      public_html/assets/fonts/FontAwesome.otf
  80. BIN
      public_html/assets/fonts/fa-brands-400.eot
  81. 1008
      public_html/assets/fonts/fa-brands-400.svg
  82. BIN
      public_html/assets/fonts/fa-brands-400.ttf
  83. BIN
      public_html/assets/fonts/fa-brands-400.woff
  84. BIN
      public_html/assets/fonts/fa-brands-400.woff2
  85. BIN
      public_html/assets/fonts/fa-light-300.eot
  86. 2004
      public_html/assets/fonts/fa-light-300.svg
  87. BIN
      public_html/assets/fonts/fa-light-300.ttf
  88. BIN
      public_html/assets/fonts/fa-light-300.woff
  89. BIN
      public_html/assets/fonts/fa-light-300.woff2
  90. BIN
      public_html/assets/fonts/fa-regular-400.eot
  91. 2004
      public_html/assets/fonts/fa-regular-400.svg
  92. BIN
      public_html/assets/fonts/fa-regular-400.ttf
  93. BIN
      public_html/assets/fonts/fa-regular-400.woff
  94. BIN
      public_html/assets/fonts/fa-regular-400.woff2
  95. BIN
      public_html/assets/fonts/fa-solid-900.eot
  96. 2004
      public_html/assets/fonts/fa-solid-900.svg
  97. BIN
      public_html/assets/fonts/fa-solid-900.ttf
  98. BIN
      public_html/assets/fonts/fa-solid-900.woff
  99. BIN
      public_html/assets/fonts/fa-solid-900.woff2
  100. BIN
      public_html/assets/fonts/fontawesome-webfont.eot

62
.gitignore

@ -0,0 +1,62 @@
# ---> CodeIgniter
*/config/development
*/logs/log-*.php
!*/logs/index.html
*/cache/*
!*/cache/index.html
!*/cache/.htaccess
# ---> JetBrains
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
*.iml
## Directory-based project format:
.idea/
# if you remove the above rule, at least ignore the following:
# User-specific stuff:
# .idea/workspace.xml
# .idea/tasks.xml
# .idea/dictionaries
# Sensitive or high-churn files:
# .idea/dataSources.ids
# .idea/dataSources.xml
# .idea/sqlDataSources.xml
# .idea/dynamic.xml
# .idea/uiDesigner.xml
# Gradle:
# .idea/gradle.xml
# .idea/libraries
# Mongo Explorer plugin:
# .idea/mongoSettings.xml
## File-based project format:
*.ipr
*.iws
## Plugin-specific files:
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
node_modules/
_session/
/public_html/files/
/wheeparam/application/cache/*
!/wheeparam/application/cache/index.html
!/wheeparam/application/cache/.htaccess

3
README.md

@ -0,0 +1,3 @@
# WheeparamBoard
휘파람보드

334
_src/admin/js/admin.js

@ -0,0 +1,334 @@
APP.init = function(){
APP.initPage();
APP.initMenu();
APP.initMask();
APP.initModal();
APP.initPlugins();
APP.initCheckboxAll();
};
APP.initPage = function(){
if( $('body').height() < $(window).height() )
{
$('html,body').css('height', '100%');
}
};
APP.initMenu = function(){
$('.btn-menu-toggle').click(function(e){
$('#left-panel').toggleClass('opened');
$('#left-panel').niceScroll().resize();
});
$('#main .main').niceScroll({
cursorborder : "1px solid rgba(0,0,0, 0.15)",
cursorwidth : '12px',
cursorcolor : 'rgba(0,0,0, 0.5)'
});
$('#left-panel').niceScroll({
cursorborder : "1px solid rgba(0,0,0, 0.15)",
cursorwidth : '12px',
cursorcolor : 'rgba(0,0,0, 0.5)'
});
$("#left-panel li").each(function(){
if( $(this).data('active') && $(this).data('active') == menuActive)
{
$(this).addClass('active');
$(this).parents('li').addClass('open');
$(this).parents('ul').show();
}
});
$('#left-panel #main-navigation a.parent').click(function(e){
e.preventDefault();
$(this).parent().toggleClass('open');
$('#left-panel').niceScroll().resize();
});
};
APP.initPlugins = function() {
$.datepicker.regional['ko'] = {
closeText: '닫기',
prevText: '이전달',
nextText: '다음달',
currentText: '오늘',
monthNames: ['1월','2월','3월','4월','5월','6월', '7월','8월','9월','10월','11월','12월'],
monthNamesShort: ['1월','2월','3월','4월','5월','6월', '7월','8월','9월','10월','11월','12월'],
dayNames: ['일','월','화','수','목','금','토'],
dayNamesShort: ['일','월','화','수','목','금','토'],
dayNamesMin: ['일','월','화','수','목','금','토'],
weekHeader: 'Wk',
dateFormat: 'yy-mm-dd',
firstDay: 0,
isRTL: false,
showMonthAfterYear: true,
yearSuffix: ''
};
$.datepicker.setDefaults($.datepicker.regional['ko']);
$('[data-toggle="datepicker"]').datepicker();
$("body").on("click", '[data-toggle="datepicker"]', function(){
if (!$(this).hasClass("hasDatepicker"))
{
$(this).datepicker();
$(this).datepicker("show");
}
});
$('[data-toggle="formatter"]').each(function(){
if( $(this).data('pattern') )
{
$(this).formatter({
pattern : $(this).data('pattern'),
persistent: true
});
}
});
};
APP.initCheckboxAll = function(){
$('[data-checkbox]').click(function(){
var $check = $(this);
var is_all = ($check.data('checkbox-all') && $check.data('checkbox-all').toString() == 'true');
var name = $check.data('checkbox');
var checked = $check.prop('checked');
var $allCheck = is_all ? $check : $('[data-checkbox="'+name+'"][data-checkbox-all="true"]');
if( is_all ) {
$('[data-checkbox="'+name+'"]').prop('checked', checked );
}
else {
$allCheck.prop('checked', $('[data-checkbox="'+name+'"]').not('[data-checkbox-all="true"]').length == $('[data-checkbox="'+name+'"]:checked').not('[data-checkbox-all="true"]').length);
}
});
};
/**********************************************************************************************************************
* MODAL 관련
*********************************************************************************************************************/
APP.MASK = null;
APP.MASK2 = null;
APP.modal = null;
APP.modal2 = null;
APP.initMask = function(){
APP.MASK = new ax5.ui.mask({
zIndex: 1000
});
APP.MASK2 = new ax5.ui.mask({
zIndex: 2000
});
};
APP.initModal = function() {
APP.modal = new ax5.ui.modal({
absolute: true,
iframeLoadingMsg: '<i class="far fa-spinner"></i>'
});
APP.modal2 = new ax5.ui.modal({
absolute: true,
iframeLoadingMsg: '<i class="far fa-spinner"></i>'
});
};
APP.MODAL = function() {
var modalCallback = {};
var defaultCss = {
width: 400,
height: 400,
position: {
left: "center",
top: "middle"
}
};
var defaultOption = $.extend(true, {}, defaultCss, {
iframeLoadingMsg: "",
iframe: {
method: "get",
url: "#"
},
closeToEsc: true,
onStateChanged: function onStateChanged() {
// mask
if (this.state === "open") {
APP.MASK.open();
} else if (this.state === "close") {
APP.MASK.close();
}
},
animateTime: 100,
zIndex: 1001,
absolute: true,
fullScreen: false,
header: {
title: "새로운 윈도우",
btns: {
close: {
label: '<i class="far fa-times"></i>', onClick: function onClick() {
APP.MODAL.callback();
}
}
}
}
});
var open = function(modalConfig) {
modalConfig = $.extend(true, {}, defaultOption, modalConfig);
$(document.body).addClass("modalOpened");
this.modalCallback = modalConfig.callback;
this.modalSendData = modalConfig.sendData;
APP.modal.open(modalConfig);
};
var css = function css(modalCss) {
modalCss = $.extend(true, {}, defaultCss, modalCss);
APP.modal.css(modalCss);
};
var align = function align(modalAlign) {
APP.modal.align(modalAlign);
};
var close = function close(data) {
APP.modal.close();
setTimeout(function () {
$(document.body).removeClass("modalOpened");
}, 500);
};
var minimize = function minimize() {
APP.modal.minimize();
};
var maximize = function maximize() {
APP.modal.maximize();
};
var callback = function callback(data) {
if (this.modalCallback) {
this.modalCallback(data);
}
this.close(data);
};
var getData = function getData() {
if (this.modalSendData) {
return this.modalSendData();
}
};
return {
"open": open,
"css": css,
"align": align,
"close": close,
"minimize": minimize,
"maximize": maximize,
"callback": callback,
"modalCallback": modalCallback,
"getData": getData
};
}();
APP.MODAL2 = function() {
var modalCallback = {};
var defaultCss = {
width: 400,
height: 400,
position: {
left: "center",
top: "middle"
}
};
var defaultOption = $.extend(true, {}, defaultCss, {
iframeLoadingMsg: "",
iframe: {
method: "get",
url: "#"
},
closeToEsc: true,
onStateChanged: function onStateChanged() {
// mask
if (this.state === "open") {
APP.MASK2.open();
} else if (this.state === "close") {
APP.MASK2.close();
}
},
animateTime: 100,
zIndex: 2001,
absolute: true,
fullScreen: false,
header: {
title: "새로운 윈도우",
btns: {
close: {
label: '<i class="far fa-times"></i>', onClick: function onClick() {
APP.MODAL2.callback();
}
}
}
}
});
var open = function(modalConfig) {
modalConfig = $.extend(true, {}, defaultOption, modalConfig);
$(document.body).addClass("modalOpened");
this.modalCallback = modalConfig.callback;
this.modalSendData = modalConfig.sendData;
APP.modal2.open(modalConfig);
};
var css = function css(modalCss) {
modalCss = $.extend(true, {}, defaultCss, modalCss);
APP.modal2.css(modalCss);
};
var align = function align(modalAlign) {
APP.modal2.align(modalAlign);
};
var close = function close(data) {
APP.modal2.close();
setTimeout(function () {
$(document.body).removeClass("modalOpened");
}, 500);
};
var minimize = function minimize() {
APP.modal2.minimize();
};
var maximize = function maximize() {
APP.modal2.maximize();
};
var callback = function callback(data) {
if (this.modalCallback) {
this.modalCallback(data);
}
this.close(data);
};
var getData = function getData() {
if (this.modalSendData) {
return this.modalSendData();
}
};
return {
"open": open,
"css": css,
"align": align,
"close": close,
"minimize": minimize,
"maximize": maximize,
"callback": callback,
"modalCallback": modalCallback,
"getData": getData
};
}();
$(function(){
APP.init();
});

861
_src/admin/js/jquery.formatter.js

@ -0,0 +1,861 @@
/*!
* v0.1.5
* Copyright (c) 2014 First Opinion
* formatter.js is open sourced under the MIT license.
*
* thanks to digitalBush/jquery.maskedinput for some of the trickier
* keycode handling
*/
//
// Uses CommonJS, AMD or browser globals to create a jQuery plugin.
//
// Similar to jqueryPlugin.js but also tries to
// work in a CommonJS environment.
// It is unlikely jQuery will run in a CommonJS
// environment. See jqueryPlugin.js if you do
// not want to add the extra CommonJS detection.
//
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jQuery'], factory);
} else if (typeof exports === 'object') {
factory(require('jQuery'));
} else {
// Browser globals
factory(root.jQuery);
}
}(this, function (jQuery) {
/*
* pattern.js
*
* Utilities to parse str pattern and return info
*
*/
var pattern = function () {
// Define module
var pattern = {};
// Match information
var DELIM_SIZE = 4;
// Our regex used to parse
var regexp = new RegExp('{{([^}]+)}}', 'g');
//
// Helper method to parse pattern str
//
var getMatches = function (pattern) {
// Populate array of matches
var matches = [], match;
while (match = regexp.exec(pattern)) {
matches.push(match);
}
return matches;
};
//
// Create an object holding all formatted characters
// with corresponding positions
//
pattern.parse = function (pattern) {
// Our obj to populate
var info = {
inpts: {},
chars: {}
};
// Pattern information
var matches = getMatches(pattern), pLength = pattern.length;
// Counters
var mCount = 0, iCount = 0, i = 0;
// Add inpts, move to end of match, and process
var processMatch = function (val) {
var valLength = val.length;
for (var j = 0; j < valLength; j++) {
info.inpts[iCount] = val.charAt(j);
iCount++;
}
mCount++;
i += val.length + DELIM_SIZE - 1;
};
// Process match or add chars
for (i; i < pLength; i++) {
if (mCount < matches.length && i === matches[mCount].index) {
processMatch(matches[mCount][1]);
} else {
info.chars[i - mCount * DELIM_SIZE] = pattern.charAt(i);
}
}
// Set mLength and return
info.mLength = i - mCount * DELIM_SIZE;
return info;
};
// Expose
return pattern;
}();
/*
* utils.js
*
* Independent helper methods (cross browser, etc..)
*
*/
var utils = function () {
// Define module
var utils = {};
// Useragent info for keycode handling
var uAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null;
//
// Shallow copy properties from n objects to destObj
//
utils.extend = function (destObj) {
for (var i = 1; i < arguments.length; i++) {
for (var key in arguments[i]) {
destObj[key] = arguments[i][key];
}
}
return destObj;
};
//
// Add a given character to a string at a defined pos
//
utils.addChars = function (str, chars, pos) {
return str.substr(0, pos) + chars + str.substr(pos, str.length);
};
//
// Remove a span of characters
//
utils.removeChars = function (str, start, end) {
return str.substr(0, start) + str.substr(end, str.length);
};
//
// Return true/false is num false between bounds
//
utils.isBetween = function (num, bounds) {
bounds.sort(function (a, b) {
return a - b;
});
return num > bounds[0] && num < bounds[1];
};
//
// Helper method for cross browser event listeners
//
utils.addListener = function (el, evt, handler) {
return typeof el.addEventListener !== 'undefined' ? el.addEventListener(evt, handler, false) : el.attachEvent('on' + evt, handler);
};
//
// Helper method for cross browser implementation of preventDefault
//
utils.preventDefault = function (evt) {
return evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;
};
//
// Helper method for cross browser implementation for grabbing
// clipboard data
//
utils.getClip = function (evt) {
if (evt.clipboardData) {
return evt.clipboardData.getData('Text');
}
if (window.clipboardData) {
return window.clipboardData.getData('Text');
}
};
//
// Loop over object and checking for matching properties
//
utils.getMatchingKey = function (which, keyCode, keys) {
// Loop over and return if matched.
for (var k in keys) {
var key = keys[k];
if (which === key.which && keyCode === key.keyCode) {
return k;
}
}
};
//
// Returns true/false if k is a del keyDown
//
utils.isDelKeyDown = function (which, keyCode) {
var keys = {
'backspace': {
'which': 8,
'keyCode': 8
},
'delete': {
'which': 46,
'keyCode': 46
}
};
return utils.getMatchingKey(which, keyCode, keys);
};
//
// Returns true/false if k is a del keyPress
//
utils.isDelKeyPress = function (which, keyCode) {
var keys = {
'backspace': {
'which': 8,
'keyCode': 8,
'shiftKey': false
},
'delete': {
'which': 0,
'keyCode': 46
}
};
return utils.getMatchingKey(which, keyCode, keys);
};
// //
// // Determine if keydown relates to specialKey
// //
// utils.isSpecialKeyDown = function (which, keyCode) {
// var keys = {
// 'tab': { 'which': 9, 'keyCode': 9 },
// 'enter': { 'which': 13, 'keyCode': 13 },
// 'end': { 'which': 35, 'keyCode': 35 },
// 'home': { 'which': 36, 'keyCode': 36 },
// 'leftarrow': { 'which': 37, 'keyCode': 37 },
// 'uparrow': { 'which': 38, 'keyCode': 38 },
// 'rightarrow': { 'which': 39, 'keyCode': 39 },
// 'downarrow': { 'which': 40, 'keyCode': 40 },
// 'F5': { 'which': 116, 'keyCode': 116 }
// };
// return utils.getMatchingKey(which, keyCode, keys);
// };
//
// Determine if keypress relates to specialKey
//
utils.isSpecialKeyPress = function (which, keyCode) {
var keys = {
'tab': {
'which': 0,
'keyCode': 9
},
'enter': {
'which': 13,
'keyCode': 13
},
'end': {
'which': 0,
'keyCode': 35
},
'home': {
'which': 0,
'keyCode': 36
},
'leftarrow': {
'which': 0,
'keyCode': 37
},
'uparrow': {
'which': 0,
'keyCode': 38
},
'rightarrow': {
'which': 0,
'keyCode': 39
},
'downarrow': {
'which': 0,
'keyCode': 40
},
'F5': {
'which': 116,
'keyCode': 116
}
};
return utils.getMatchingKey(which, keyCode, keys);
};
//
// Returns true/false if modifier key is held down
//
utils.isModifier = function (evt) {
return evt.ctrlKey || evt.altKey || evt.metaKey;
};
//
// Iterates over each property of object or array.
//
utils.forEach = function (collection, callback, thisArg) {
if (collection.hasOwnProperty('length')) {
for (var index = 0, len = collection.length; index < len; index++) {
if (callback.call(thisArg, collection[index], index, collection) === false) {
break;
}
}
} else {
for (var key in collection) {
if (collection.hasOwnProperty(key)) {
if (callback.call(thisArg, collection[key], key, collection) === false) {
break;
}
}
}
}
};
// Expose
return utils;
}();
/*
* pattern-matcher.js
*
* Parses a pattern specification and determines appropriate pattern for an
* input string
*
*/
var patternMatcher = function (pattern, utils) {
//
// Parse a matcher string into a RegExp. Accepts valid regular
// expressions and the catchall '*'.
// @private
//
var parseMatcher = function (matcher) {
if (matcher === '*') {
return /.*/;
}
return new RegExp(matcher);
};
//
// Parse a pattern spec and return a function that returns a pattern
// based on user input. The first matching pattern will be chosen.
// Pattern spec format:
// Array [
// Object: { Matcher(RegExp String) : Pattern(Pattern String) },
// ...
// ]
function patternMatcher(patternSpec) {
var matchers = [], patterns = [];
// Iterate over each pattern in order.
utils.forEach(patternSpec, function (patternMatcher) {
// Process single property object to obtain pattern and matcher.
utils.forEach(patternMatcher, function (patternStr, matcherStr) {
var parsedPattern = pattern.parse(patternStr), regExpMatcher = parseMatcher(matcherStr);
matchers.push(regExpMatcher);
patterns.push(parsedPattern);
// Stop after one iteration.
return false;
});
});
var getPattern = function (input) {
var matchedIndex;
utils.forEach(matchers, function (matcher, index) {
if (matcher.test(input)) {
matchedIndex = index;
return false;
}
});
return matchedIndex === undefined ? null : patterns[matchedIndex];
};
return {
getPattern: getPattern,
patterns: patterns,
matchers: matchers
};
}
// Expose
return patternMatcher;
}(pattern, utils);
/*
* inpt-sel.js
*
* Cross browser implementation to get and set input selections
*
*/
var inptSel = function () {
// Define module
var inptSel = {};
//
// Get begin and end positions of selected input. Return 0's
// if there is no selectiion data
//
inptSel.get = function (el) {
// If normal browser return with result
if (typeof el.selectionStart === 'number') {
return {
begin: el.selectionStart,
end: el.selectionEnd
};
}
// Uh-Oh. We must be IE. Fun with TextRange!!
var range = document.selection.createRange();
// Determine if there is a selection
if (range && range.parentElement() === el) {
var inputRange = el.createTextRange(), endRange = el.createTextRange(), length = el.value.length;
// Create a working TextRange for the input selection
inputRange.moveToBookmark(range.getBookmark());
// Move endRange begin pos to end pos (hence endRange)
endRange.collapse(false);
// If we are at the very end of the input, begin and end
// must both be the length of the el.value
if (inputRange.compareEndPoints('StartToEnd', endRange) > -1) {
return {
begin: length,
end: length
};
}
// Note: moveStart usually returns the units moved, which
// one may think is -length, however, it will stop when it
// gets to the begin of the range, thus giving us the
// negative value of the pos.
return {
begin: -inputRange.moveStart('character', -length),
end: -inputRange.moveEnd('character', -length)
};
}
//Return 0's on no selection data
return {
begin: 0,
end: 0
};
};
//
// Set the caret position at a specified location
//
inptSel.set = function (el, pos) {
// Normalize pos
if (typeof pos !== 'object') {
pos = {
begin: pos,
end: pos
};
}
// If normal browser
if (el.setSelectionRange) {
el.focus();
el.setSelectionRange(pos.begin, pos.end);
} else if (el.createTextRange) {
var range = el.createTextRange();
range.collapse(true);
range.moveEnd('character', pos.end);
range.moveStart('character', pos.begin);
range.select();
}
};
// Expose
return inptSel;
}();
/*
* formatter.js
*
* Class used to format input based on passed pattern
*
*/
var formatter = function (patternMatcher, inptSel, utils) {
// Defaults
var defaults = {
persistent: false,
repeat: false,
placeholder: ' '
};
// Regexs for input validation
var inptRegs = {
'9': /[0-9]/,
'a': /[A-Za-z]/,
'*': /[A-Za-z0-9]/
};
//
// Class Constructor - Called with new Formatter(el, opts)
// Responsible for setting up required instance variables, and
// attaching the event listener to the element.
//
function Formatter(el, opts) {
// Cache this
var self = this;
// Make sure we have an element. Make accesible to instance
self.el = el;
if (!self.el) {
throw new TypeError('Must provide an existing element');
}
// Merge opts with defaults
self.opts = utils.extend({}, defaults, opts);
// 1 pattern is special case
if (typeof self.opts.pattern !== 'undefined') {
self.opts.patterns = self._specFromSinglePattern(self.opts.pattern);
delete self.opts.pattern;
}
// Make sure we have valid opts
if (typeof self.opts.patterns === 'undefined') {
throw new TypeError('Must provide a pattern or array of patterns');
}
self.patternMatcher = patternMatcher(self.opts.patterns);
// Upate pattern with initial value
self._updatePattern();
// Init values
self.hldrs = {};
self.focus = 0;
// Add Listeners
utils.addListener(self.el, 'keydown', function (evt) {
self._keyDown(evt);
});
utils.addListener(self.el, 'keypress', function (evt) {
self._keyPress(evt);
});
utils.addListener(self.el, 'paste', function (evt) {
self._paste(evt);
});
// Persistence
if (self.opts.persistent) {
// Format on start
self._processKey('', false);
self.el.blur();
// Add Listeners
utils.addListener(self.el, 'focus', function (evt) {
self._focus(evt);
});
utils.addListener(self.el, 'click', function (evt) {
self._focus(evt);
});
utils.addListener(self.el, 'touchstart', function (evt) {
self._focus(evt);
});
}
}
//
// @public
// Add new char
//
Formatter.addInptType = function (chr, reg) {
inptRegs[chr] = reg;
};
//
// @public
// Apply the given pattern to the current input without moving caret.
//
Formatter.prototype.resetPattern = function (str) {
// Update opts to hold new pattern
this.opts.patterns = str ? this._specFromSinglePattern(str) : this.opts.patterns;
// Get current state
this.sel = inptSel.get(this.el);
this.val = this.el.value;
// Init values
this.delta = 0;
// Remove all formatted chars from val
this._removeChars();
this.patternMatcher = patternMatcher(this.opts.patterns);
// Update pattern
var newPattern = this.patternMatcher.getPattern(this.val);
this.mLength = newPattern.mLength;
this.chars = newPattern.chars;
this.inpts = newPattern.inpts;
// Format on start
this._processKey('', false, true);
};
//
// @private
// Determine correct format pattern based on input val
//
Formatter.prototype._updatePattern = function () {
// Determine appropriate pattern
var newPattern = this.patternMatcher.getPattern(this.val);
// Only update the pattern if there is an appropriate pattern for the value.
// Otherwise, leave the current pattern (and likely delete the latest character.)
if (newPattern) {
// Get info about the given pattern
this.mLength = newPattern.mLength;
this.chars = newPattern.chars;
this.inpts = newPattern.inpts;
}
};
//
// @private
// Handler called on all keyDown strokes. All keys trigger
// this handler. Only process delete keys.
//
Formatter.prototype._keyDown = function (evt) {
// The first thing we need is the character code
var k = evt.which || evt.keyCode;
// If delete key
if (k && utils.isDelKeyDown(evt.which, evt.keyCode)) {
// Process the keyCode and prevent default
this._processKey(null, k);
return utils.preventDefault(evt);
}
};
//
// @private
// Handler called on all keyPress strokes. Only processes
// character keys (as long as no modifier key is in use).
//
Formatter.prototype._keyPress = function (evt) {
// The first thing we need is the character code
var k, isSpecial;
// Mozilla will trigger on special keys and assign the the value 0
// We want to use that 0 rather than the keyCode it assigns.
k = evt.which || evt.keyCode;
isSpecial = utils.isSpecialKeyPress(evt.which, evt.keyCode);
// Process the keyCode and prevent default
if (!utils.isDelKeyPress(evt.which, evt.keyCode) && !isSpecial && !utils.isModifier(evt)) {
this._processKey(String.fromCharCode(k), false);
return utils.preventDefault(evt);
}
};
//
// @private
// Handler called on paste event.
//
Formatter.prototype._paste = function (evt) {
// Process the clipboard paste and prevent default
this._processKey(utils.getClip(evt), false);
return utils.preventDefault(evt);
};
//
// @private
// Handle called on focus event.
//
Formatter.prototype._focus = function () {
// Wrapped in timeout so that we can grab input selection
var self = this;
setTimeout(function () {
// Grab selection
var selection = inptSel.get(self.el);
// Char check
var isAfterStart = selection.end > self.focus, isFirstChar = selection.end === 0;
// If clicked in front of start, refocus to start
if (isAfterStart || isFirstChar) {
inptSel.set(self.el, self.focus);
}
}, 0);
};
//
// @private
// Using the provided key information, alter el value.
//
Formatter.prototype._processKey = function (chars, delKey, ignoreCaret) {
// Get current state
this.sel = inptSel.get(this.el);
this.val = this.el.value;
// Init values
this.delta = 0;
// If chars were highlighted, we need to remove them
if (this.sel.begin !== this.sel.end) {
this.delta = -1 * Math.abs(this.sel.begin - this.sel.end);
this.val = utils.removeChars(this.val, this.sel.begin, this.sel.end);
} else if (delKey && delKey === 46) {
this._delete();
} else if (delKey && this.sel.begin - 1 >= 0) {
// Always have a delta of at least -1 for the character being deleted.
this.val = utils.removeChars(this.val, this.sel.end - 1, this.sel.end);
this.delta -= 1;
} else if (delKey) {
return true;
}
// If the key is not a del key, it should convert to a str
if (!delKey) {
// Add char at position and increment delta
this.val = utils.addChars(this.val, chars, this.sel.begin);
this.delta += chars.length;
}
// Format el.value (also handles updating caret position)
this._formatValue(ignoreCaret);
};
//
// @private
// Deletes the character in front of it
//
Formatter.prototype._delete = function () {
// Adjust focus to make sure its not on a formatted char
while (this.chars[this.sel.begin]) {
this._nextPos();
}
// As long as we are not at the end
if (this.sel.begin < this.val.length) {
// We will simulate a delete by moving the caret to the next char
// and then deleting
this._nextPos();
this.val = utils.removeChars(this.val, this.sel.end - 1, this.sel.end);
this.delta = -1;
}
};
//
// @private
// Quick helper method to move the caret to the next pos
//
Formatter.prototype._nextPos = function () {
this.sel.end++;
this.sel.begin++;
};
//
// @private
// Alter element value to display characters matching the provided
// instance pattern. Also responsible for updating
//
Formatter.prototype._formatValue = function (ignoreCaret) {
// Set caret pos
this.newPos = this.sel.end + this.delta;
// Remove all formatted chars from val
this._removeChars();
// Switch to first matching pattern based on val
this._updatePattern();
// Validate inputs
this._validateInpts();
// Add formatted characters
this._addChars();
// Set value and adhere to maxLength
this.el.value = this.val.substr(0, this.mLength);
// Set new caret position
if (typeof ignoreCaret === 'undefined' || ignoreCaret === false) {
inptSel.set(this.el, this.newPos);
}
};
//
// @private
// Remove all formatted before and after a specified pos
//
Formatter.prototype._removeChars = function () {
// Delta shouldn't include placeholders
if (this.sel.end > this.focus) {
this.delta += this.sel.end - this.focus;
}
// Account for shifts during removal
var shift = 0;
// Loop through all possible char positions
for (var i = 0; i <= this.mLength; i++) {
// Get transformed position
var curChar = this.chars[i], curHldr = this.hldrs[i], pos = i + shift, val;
// If after selection we need to account for delta
pos = i >= this.sel.begin ? pos + this.delta : pos;
val = this.val.charAt(pos);
// Remove char and account for shift
if (curChar && curChar === val || curHldr && curHldr === val) {
this.val = utils.removeChars(this.val, pos, pos + 1);
shift--;
}
}
// All hldrs should be removed now
this.hldrs = {};
// Set focus to last character
this.focus = this.val.length;
};
//
// @private
// Make sure all inpts are valid, else remove and update delta
//
Formatter.prototype._validateInpts = function () {
// Loop over each char and validate
for (var i = 0; i < this.val.length; i++) {
// Get char inpt type
var inptType = this.inpts[i];
// Checks
var isBadType = !inptRegs[inptType], isInvalid = !isBadType && !inptRegs[inptType].test(this.val.charAt(i)), inBounds = this.inpts[i];
// Remove if incorrect and inbounds
if ((isBadType || isInvalid) && inBounds) {
this.val = utils.removeChars(this.val, i, i + 1);
this.focusStart--;
this.newPos--;
this.delta--;
i--;
}
}
};
//
// @private
// Loop over val and add formatted chars as necessary
//
Formatter.prototype._addChars = function () {
if (this.opts.persistent) {
// Loop over all possible characters
for (var i = 0; i <= this.mLength; i++) {
if (!this.val.charAt(i)) {
// Add placeholder at pos
this.val = utils.addChars(this.val, this.opts.placeholder, i);
this.hldrs[i] = this.opts.placeholder;
}
this._addChar(i);
}
// Adjust focus to make sure its not on a formatted char
while (this.chars[this.focus]) {
this.focus++;
}
} else {
// Avoid caching val.length, as they may change in _addChar.
for (var j = 0; j <= this.val.length; j++) {
// When moving backwards there are some race conditions where we
// dont want to add the character
if (this.delta <= 0 && j === this.focus) {
return true;
}
// Place character in current position of the formatted string.
this._addChar(j);
}
}
};
//
// @private
// Add formattted char at position
//
Formatter.prototype._addChar = function (i) {
// If char exists at position
var chr = this.chars[i];
if (!chr) {
return true;
}
// If chars are added in between the old pos and new pos
// we need to increment pos and delta
if (utils.isBetween(i, [
this.sel.begin - 1,
this.newPos + 1
])) {
this.newPos++;
this.delta++;
}
// If character added before focus, incr
if (i <= this.focus) {
this.focus++;
}
// Updateholder
if (this.hldrs[i]) {
delete this.hldrs[i];
this.hldrs[i + 1] = this.opts.placeholder;
}
// Update value
this.val = utils.addChars(this.val, chr, i);
};
//
// @private
// Create a patternSpec for passing into patternMatcher that
// has exactly one catch all pattern.
//
Formatter.prototype._specFromSinglePattern = function (patternStr) {
return [{ '*': patternStr }];
};
// Expose
return Formatter;
}(patternMatcher, inptSel, utils);
// A really lightweight plugin wrapper around the constructor,
// preventing against multiple instantiations
var pluginName = 'formatter';
$.fn[pluginName] = function (options) {
// Initiate plugin if options passed
if (typeof options == 'object') {
this.each(function () {
if (!$.data(this, 'plugin_' + pluginName)) {
$.data(this, 'plugin_' + pluginName,
new formatter(this, options));
}
});
}
// Add resetPattern method to plugin
this.resetPattern = function (str) {
this.each(function () {
var formatted = $.data(this, 'plugin_' + pluginName);
// resetPattern for instance
if (formatted) { formatted.resetPattern(str); }
});
// Chainable please
return this;
};
// Chainable please
return this;
};
$.fn[pluginName].addInptType = function (chr, regexp) {
formatter.addInptType(chr, regexp);
};
}));

484
_src/admin/js/jquery.tmpl.js

@ -0,0 +1,484 @@
/*!
* jQuery Templates Plugin 1.0.0pre
* http://github.com/jquery/jquery-tmpl
* Requires jQuery 1.4.2
*
* Copyright 2011, Software Freedom Conservancy, Inc.
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*/
(function( jQuery, undefined ){
var oldManip = jQuery.fn.domManip, tmplItmAtt = "_tmplitem", htmlExpr = /^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,
newTmplItems = {}, wrappedItems = {}, appendToTmplItems, topTmplItem = { key: 0, data: {} }, itemKey = 0, cloneIndex = 0, stack = [];
function newTmplItem( options, parentItem, fn, data ) {
// Returns a template item data structure for a new rendered instance of a template (a 'template item').
// The content field is a hierarchical array of strings and nested items (to be
// removed and replaced by nodes field of dom elements, once inserted in DOM).
var newItem = {
data: data || (data === 0 || data === false) ? data : (parentItem ? parentItem.data : {}),
_wrap: parentItem ? parentItem._wrap : null,
tmpl: null,
parent: parentItem || null,
nodes: [],
calls: tiCalls,
nest: tiNest,
wrap: tiWrap,
html: tiHtml,
update: tiUpdate
};
if ( options ) {
jQuery.extend( newItem, options, { nodes: [], parent: parentItem });
}
if ( fn ) {
// Build the hierarchical content to be used during insertion into DOM
newItem.tmpl = fn;
newItem._ctnt = newItem._ctnt || newItem.tmpl( jQuery, newItem );
newItem.key = ++itemKey;
// Keep track of new template item, until it is stored as jQuery Data on DOM element
(stack.length ? wrappedItems : newTmplItems)[itemKey] = newItem;
}
return newItem;
}
// Override appendTo etc., in order to provide support for targeting multiple elements. (This code would disappear if integrated in jquery core).
jQuery.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function( name, original ) {
jQuery.fn[ name ] = function( selector ) {
var ret = [], insert = jQuery( selector ), elems, i, l, tmplItems,
parent = this.length === 1 && this[0].parentNode;
appendToTmplItems = newTmplItems || {};
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
insert[ original ]( this[0] );
ret = this;
} else {
for ( i = 0, l = insert.length; i < l; i++ ) {
cloneIndex = i;
elems = (i > 0 ? this.clone(true) : this).get();
jQuery( insert[i] )[ original ]( elems );
ret = ret.concat( elems );
}
cloneIndex = 0;
ret = this.pushStack( ret, name, insert.selector );
}
tmplItems = appendToTmplItems;
appendToTmplItems = null;
jQuery.tmpl.complete( tmplItems );
return ret;
};
});
jQuery.fn.extend({
// Use first wrapped element as template markup.
// Return wrapped set of template items, obtained by rendering template against data.
tmpl: function( data, options, parentItem ) {
return jQuery.tmpl( this[0], data, options, parentItem );
},
// Find which rendered template item the first wrapped DOM element belongs to
tmplItem: function() {
return jQuery.tmplItem( this[0] );
},
// Consider the first wrapped element as a template declaration, and get the compiled template or store it as a named template.
template: function( name ) {
return jQuery.template( name, this[0] );
},
domManip: function( args, table, callback, options ) {
if ( args[0] && jQuery.isArray( args[0] )) {
var dmArgs = jQuery.makeArray( arguments ), elems = args[0], elemsLength = elems.length, i = 0, tmplItem;
while ( i < elemsLength && !(tmplItem = jQuery.data( elems[i++], "tmplItem" ))) {}
if ( tmplItem && cloneIndex ) {
dmArgs[2] = function( fragClone ) {
// Handler called by oldManip when rendered template has been inserted into DOM.
jQuery.tmpl.afterManip( this, fragClone, callback );
};
}
oldManip.apply( this, dmArgs );
} else {
oldManip.apply( this, arguments );
}
cloneIndex = 0;
if ( !appendToTmplItems ) {
jQuery.tmpl.complete( newTmplItems );
}
return this;
}
});
jQuery.extend({
// Return wrapped set of template items, obtained by rendering template against data.
tmpl: function( tmpl, data, options, parentItem ) {
var ret, topLevel = !parentItem;
if ( topLevel ) {
// This is a top-level tmpl call (not from a nested template using {{tmpl}})
parentItem = topTmplItem;
tmpl = jQuery.template[tmpl] || jQuery.template( null, tmpl );
wrappedItems = {}; // Any wrapped items will be rebuilt, since this is top level
} else if ( !tmpl ) {
// The template item is already associated with DOM - this is a refresh.
// Re-evaluate rendered template for the parentItem
tmpl = parentItem.tmpl;
newTmplItems[parentItem.key] = parentItem;
parentItem.nodes = [];
if ( parentItem.wrapped ) {
updateWrapped( parentItem, parentItem.wrapped );
}
// Rebuild, without creating a new template item
return jQuery( build( parentItem, null, parentItem.tmpl( jQuery, parentItem ) ));
}
if ( !tmpl ) {
return []; // Could throw...
}
if ( typeof data === "function" ) {
data = data.call( parentItem || {} );
}
if ( options && options.wrapped ) {
updateWrapped( options, options.wrapped );
}
ret = jQuery.isArray( data ) ?
jQuery.map( data, function( dataItem ) {
return dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null;
}) :
[ newTmplItem( options, parentItem, tmpl, data ) ];
return topLevel ? jQuery( build( parentItem, null, ret ) ) : ret;
},
// Return rendered template item for an element.
tmplItem: function( elem ) {
var tmplItem;
if ( elem instanceof jQuery ) {
elem = elem[0];
}
while ( elem && elem.nodeType === 1 && !(tmplItem = jQuery.data( elem, "tmplItem" )) && (elem = elem.parentNode) ) {}
return tmplItem || topTmplItem;
},
// Set:
// Use $.template( name, tmpl ) to cache a named template,
// where tmpl is a template string, a script element or a jQuery instance wrapping a script element, etc.
// Use $( "selector" ).template( name ) to provide access by name to a script block template declaration.
// Get:
// Use $.template( name ) to access a cached template.
// Also $( selectorToScriptBlock ).template(), or $.template( null, templateString )
// will return the compiled template, without adding a name reference.
// If templateString includes at least one HTML tag, $.template( templateString ) is equivalent
// to $.template( null, templateString )
template: function( name, tmpl ) {
if (tmpl) {
// Compile template and associate with name
if ( typeof tmpl === "string" ) {
// This is an HTML string being passed directly in.
tmpl = buildTmplFn( tmpl );
} else if ( tmpl instanceof jQuery ) {
tmpl = tmpl[0] || {};
}
if ( tmpl.nodeType ) {
// If this is a template block, use cached copy, or generate tmpl function and cache.
tmpl = jQuery.data( tmpl, "tmpl" ) || jQuery.data( tmpl, "tmpl", buildTmplFn( tmpl.innerHTML ));
// Issue: In IE, if the container element is not a script block, the innerHTML will remove quotes from attribute values whenever the value does not include white space.
// This means that foo="${x}" will not work if the value of x includes white space: foo="${x}" -> foo=value of x.
// To correct this, include space in tag: foo="${ x }" -> foo="value of x"
}
return typeof name === "string" ? (jQuery.template[name] = tmpl) : tmpl;
}
// Return named compiled template
return name ? (typeof name !== "string" ? jQuery.template( null, name ):
(jQuery.template[name] ||
// If not in map, and not containing at least on HTML tag, treat as a selector.
// (If integrated with core, use quickExpr.exec)
jQuery.template( null, htmlExpr.test( name ) ? name : jQuery( name )))) : null;
},
encode: function( text ) {
// Do HTML encoding replacing < > & and ' and " by corresponding entities.
return ("" + text).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;");
}
});
jQuery.extend( jQuery.tmpl, {
tag: {
"tmpl": {
_default: { $2: "null" },
open: "if($notnull_1){__=__.concat($item.nest($1,$2));}"
// tmpl target parameter can be of type function, so use $1, not $1a (so not auto detection of functions)
// This means that {{tmpl foo}} treats foo as a template (which IS a function).
// Explicit parens can be used if foo is a function that returns a template: {{tmpl foo()}}.
},
"wrap": {
_default: { $2: "null" },
open: "$item.calls(__,$1,$2);__=[];",
close: "call=$item.calls();__=call._.concat($item.wrap(call,__));"
},
"each": {
_default: { $2: "$index, $value" },
open: "if($notnull_1){$.each($1a,function($2){with(this){",
close: "}});}"
},
"if": {
open: "if(($notnull_1) && $1a){",
close: "}"
},
"else": {
_default: { $1: "true" },
open: "}else if(($notnull_1) && $1a){"
},
"html": {
// Unecoded expression evaluation.
open: "if($notnull_1){__.push($1a);}"
},
"=": {
// Encoded expression evaluation. Abbreviated form is ${}.
_default: { $1: "$data" },
open: "if($notnull_1){__.push($.encode($1a));}"
},
"!": {
// Comment tag. Skipped by parser
open: ""
}
},
// This stub can be overridden, e.g. in jquery.tmplPlus for providing rendered events
complete: function( items ) {
newTmplItems = {};
},
// Call this from code which overrides domManip, or equivalent
// Manage cloning/storing template items etc.
afterManip: function afterManip( elem, fragClone, callback ) {
// Provides cloned fragment ready for fixup prior to and after insertion into DOM
var content = fragClone.nodeType === 11 ?
jQuery.makeArray(fragClone.childNodes) :
fragClone.nodeType === 1 ? [fragClone] : [];
// Return fragment to original caller (e.g. append) for DOM insertion
callback.call( elem, fragClone );
// Fragment has been inserted:- Add inserted nodes to tmplItem data structure. Replace inserted element annotations by jQuery.data.
storeTmplItems( content );
cloneIndex++;
}
});
//========================== Private helper functions, used by code above ==========================
function build( tmplItem, nested, content ) {
// Convert hierarchical content into flat string array
// and finally return array of fragments ready for DOM insertion
var frag, ret = content ? jQuery.map( content, function( item ) {
return (typeof item === "string") ?
// Insert template item annotations, to be converted to jQuery.data( "tmplItem" ) when elems are inserted into DOM.
(tmplItem.key ? item.replace( /(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g, "$1 " + tmplItmAtt + "=\"" + tmplItem.key + "\" $2" ) : item) :
// This is a child template item. Build nested template.
build( item, tmplItem, item._ctnt );
}) :
// If content is not defined, insert tmplItem directly. Not a template item. May be a string, or a string array, e.g. from {{html $item.html()}}.
tmplItem;
if ( nested ) {
return ret;
}
// top-level template
ret = ret.join("");
// Support templates which have initial or final text nodes, or consist only of text
// Also support HTML entities within the HTML markup.
ret.replace( /^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/, function( all, before, middle, after) {
frag = jQuery( middle ).get();
storeTmplItems( frag );
if ( before ) {
frag = unencode( before ).concat(frag);
}
if ( after ) {
frag = frag.concat(unencode( after ));
}
});
return frag ? frag : unencode( ret );
}
function unencode( text ) {
// Use createElement, since createTextNode will not render HTML entities correctly
var el = document.createElement( "div" );
el.innerHTML = text;
return jQuery.makeArray(el.childNodes);
}
// Generate a reusable function that will serve to render a template against data
function buildTmplFn( markup ) {
return new Function("jQuery","$item",
// Use the variable __ to hold a string array while building the compiled template. (See https://github.com/jquery/jquery-tmpl/issues#issue/10).
"var $=jQuery,call,__=[],$data=$item.data;" +
// Introduce the data as local variables using with(){}
"with($data){__.push('" +
// Convert the template into pure JavaScript
jQuery.trim(markup)
.replace( /([\\'])/g, "\\$1" )
.replace( /[\r\t\n]/g, " " )
.replace( /\$\{([^\}]*)\}/g, "{{= $1}}" )
.replace( /\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,
function( all, slash, type, fnargs, target, parens, args ) {
var tag = jQuery.tmpl.tag[ type ], def, expr, exprAutoFnDetect;
if ( !tag ) {
throw "Unknown template tag: " + type;
}
def = tag._default || [];
if ( parens && !/\w$/.test(target)) {
target += parens;
parens = "";
}
if ( target ) {
target = unescape( target );
args = args ? ("," + unescape( args ) + ")") : (parens ? ")" : "");
// Support for target being things like a.toLowerCase();
// In that case don't call with template item as 'this' pointer. Just evaluate...
expr = parens ? (target.indexOf(".") > -1 ? target + unescape( parens ) : ("(" + target + ").call($item" + args)) : target;
exprAutoFnDetect = parens ? expr : "(typeof(" + target + ")==='function'?(" + target + ").call($item):(" + target + "))";
} else {
exprAutoFnDetect = expr = def.$1 || "null";
}
fnargs = unescape( fnargs );
return "');" +
tag[ slash ? "close" : "open" ]
.split( "$notnull_1" ).join( target ? "typeof(" + target + ")!=='undefined' && (" + target + ")!=null" : "true" )
.split( "$1a" ).join( exprAutoFnDetect )
.split( "$1" ).join( expr )
.split( "$2" ).join( fnargs || def.$2 || "" ) +
"__.push('";
}) +
"');}return __;"
);
}
function updateWrapped( options, wrapped ) {
// Build the wrapped content.
options._wrap = build( options, true,
// Suport imperative scenario in which options.wrapped can be set to a selector or an HTML string.
jQuery.isArray( wrapped ) ? wrapped : [htmlExpr.test( wrapped ) ? wrapped : jQuery( wrapped ).html()]
).join("");
}
function unescape( args ) {
return args ? args.replace( /\\'/g, "'").replace(/\\\\/g, "\\" ) : null;
}
function outerHtml( elem ) {
var div = document.createElement("div");
div.appendChild( elem.cloneNode(true) );
return div.innerHTML;
}
// Store template items in jQuery.data(), ensuring a unique tmplItem data data structure for each rendered template instance.
function storeTmplItems( content ) {
var keySuffix = "_" + cloneIndex, elem, elems, newClonedItems = {}, i, l, m;
for ( i = 0, l = content.length; i < l; i++ ) {
if ( (elem = content[i]).nodeType !== 1 ) {
continue;
}
elems = elem.getElementsByTagName("*");
for ( m = elems.length - 1; m >= 0; m-- ) {
processItemKey( elems[m] );
}
processItemKey( elem );
}
function processItemKey( el ) {
var pntKey, pntNode = el, pntItem, tmplItem, key;
// Ensure that each rendered template inserted into the DOM has its own template item,
if ( (key = el.getAttribute( tmplItmAtt ))) {
while ( pntNode.parentNode && (pntNode = pntNode.parentNode).nodeType === 1 && !(pntKey = pntNode.getAttribute( tmplItmAtt ))) { }
if ( pntKey !== key ) {
// The next ancestor with a _tmplitem expando is on a different key than this one.
// So this is a top-level element within this template item
// Set pntNode to the key of the parentNode, or to 0 if pntNode.parentNode is null, or pntNode is a fragment.
pntNode = pntNode.parentNode ? (pntNode.nodeType === 11 ? 0 : (pntNode.getAttribute( tmplItmAtt ) || 0)) : 0;
if ( !(tmplItem = newTmplItems[key]) ) {
// The item is for wrapped content, and was copied from the temporary parent wrappedItem.
tmplItem = wrappedItems[key];
tmplItem = newTmplItem( tmplItem, newTmplItems[pntNode]||wrappedItems[pntNode] );
tmplItem.key = ++itemKey;
newTmplItems[itemKey] = tmplItem;
}
if ( cloneIndex ) {
cloneTmplItem( key );
}
}
el.removeAttribute( tmplItmAtt );
} else if ( cloneIndex && (tmplItem = jQuery.data( el, "tmplItem" )) ) {
// This was a rendered element, cloned during append or appendTo etc.
// TmplItem stored in jQuery data has already been cloned in cloneCopyEvent. We must replace it with a fresh cloned tmplItem.
cloneTmplItem( tmplItem.key );
newTmplItems[tmplItem.key] = tmplItem;
pntNode = jQuery.data( el.parentNode, "tmplItem" );
pntNode = pntNode ? pntNode.key : 0;
}
if ( tmplItem ) {
pntItem = tmplItem;
// Find the template item of the parent element.
// (Using !=, not !==, since pntItem.key is number, and pntNode may be a string)
while ( pntItem && pntItem.key != pntNode ) {
// Add this element as a top-level node for this rendered template item, as well as for any
// ancestor items between this item and the item of its parent element
pntItem.nodes.push( el );
pntItem = pntItem.parent;
}
// Delete content built during rendering - reduce API surface area and memory use, and avoid exposing of stale data after rendering...
delete tmplItem._ctnt;
delete tmplItem._wrap;
// Store template item as jQuery data on the element
jQuery.data( el, "tmplItem", tmplItem );
}
function cloneTmplItem( key ) {
key = key + keySuffix;
tmplItem = newClonedItems[key] =
(newClonedItems[key] || newTmplItem( tmplItem, newTmplItems[tmplItem.parent.key + keySuffix] || tmplItem.parent ));
}
}
}
//---- Helper functions for template item ----
function tiCalls( content, tmpl, data, options ) {
if ( !content ) {
return stack.pop();
}
stack.push({ _: content, tmpl: tmpl, item:this, data: data, options: options });
}
function tiNest( tmpl, data, options ) {
// nested template, using {{tmpl}} tag
return jQuery.tmpl( jQuery.template( tmpl ), data, options, this );
}
function tiWrap( call, wrapped ) {
// nested template, using {{wrap}} tag
var options = call.options || {};
options.wrapped = wrapped;
// Apply the template, which may incorporate wrapped content,
return jQuery.tmpl( jQuery.template( call.tmpl ), call.data, options, call.item );
}
function tiHtml( filter, textOnly ) {
var wrapped = this._wrap;
return jQuery.map(
jQuery( jQuery.isArray( wrapped ) ? wrapped.join("") : wrapped ).filter( filter || "*" ),
function(e) {
return textOnly ?
e.innerText || e.textContent :
e.outerHTML || outerHtml(e);
});
}
function tiUpdate() {
var coll = this.nodes;
jQuery.tmpl( null, null, null, this).insertBefore( coll[0] );
jQuery( coll ).remove();
}
})( jQuery );

172
_src/admin/js/modules/board.js

@ -0,0 +1,172 @@
APP.BOARD.keyCheck = function(value) {
if (value == '') return "게시판 고유키를 입력하세요";
if (!APP.REGEX.uniqueID.test(value)) return "게시판 고유키는 영어 소문자로 시작하는 3~20 글자로 영어와 숫자만 사용가능합니다.";
if (APP.BOARD.existCheck(value)) return "이미 존재하는 키 입니다.";
return true;
};
APP.BOARD.existCheck = function(brd_key) {
var info = null;
$.ajax({
url : base_url + '/ajax/board/info',
type : 'get',
async : false,
cache : false,
data : {
brd_key : brd_key,
is_raw : true
},
success:function(res){
info = res;
}
});
return info;
};
APP.BOARD.CATEGORY.form = function(brd_key, bca_parent, bca_idx) {
var brd_key = typeof brd_key != 'undefined' && brd_key ? brd_key : null;
var bca_parent = typeof bca_parent != 'undefined' && bca_parent >= 0 ? bca_parent : null;
var bca_idx = typeof bca_idx != 'undefined' && bca_idx ? bca_idx : null;
if(! brd_key )
{
alert('게시판이 지정되지 않았습니다.');
return false;
}
if(parseInt(bca_parent) < 0)
{
alert('부모 카테고리가 선택되지 않았습니다.');
return false;
}
APP.MODAL.open({
width: 400,
height :200,
header : {
title : bca_idx ? '카테고리 정보 수정' : '카테고리 추가'
},
callback : function(){
parent.location.reload();
},
iframe : {
method : 'get',
url : '/admin/board/category_form',
param : {
brd_key : brd_key,
bca_parent : bca_parent,
bca_idx : bca_idx
}
}
});
};
APP.BOARD.CATEGORY.remove = function(bca_idx) {
if( APP.BOARD.CATEGORY.count(bca_idx) > 0 )
{
alert('해당 카테고리의 하위 카테고리가 존재합니다. 하위 카테고리를 먼저 삭제해주세요');
return false;
}
var post_count = APP.BOARD.CATEGORY.postCount(bca_idx);
if( post_count > 0 )
{
if(! confirm('해당 카테고리에 등록된 글이 '+post_count+'건이 있습니다. 삭제를 진행하시겠습니까?' )) {
return false;
}
}
if(! confirm('해당 카테고리를 삭제하시겠습니까?')) return false;
$.ajax({
url : base_url + "/ajax/board/category",
type : 'DELETE',
cache : false,
async: false,
data : {
bca_idx : bca_idx
},
success:function(res){
if( res.result )
{
alert('카테고리 삭제에 성공하였습니다.');
location.reload();
}
else {
alert('카테고리 삭제에 실패하였습니다.');
location.reload();
}
}
})
};
APP.BOARD.EXTRA.form = function(brd_key, bmt_idx)
{
brd_key = typeof brd_key !='undefined' && brd_key ? brd_key : null;
bmt_idx = typeof bmt_idx !='undefined' && bmt_idx ? bmt_idx : null;
if(! brd_key )
{
alert('게시판이 지정되지 않았습니다.');
return false;
}
APP.MODAL.open({
width: 400,
height :200,
header : {
title : bmt_idx ? '입력필드 수정' : '입력필드 추가'
},
callback : function(){
parent.location.reload();
},
iframe : {
method : 'get',
url : '/admin/board/extra_form',
param : {
brd_key : brd_key,
bmt_idx : bmt_idx
}
}
});
};
APP.BOARD.EXTRA.remove = function(brd_key,bmt_idx)
{
brd_key = typeof brd_key !='undefined' && brd_key ? brd_key : null;
bmt_idx = typeof bmt_idx !='undefined' && bmt_idx ? bmt_idx : null;
if(! bmt_idx )
{
alert('잘못된 접근입니다.');
return false;
}
if(! confirm('해당 필드로 등록된 글이 있을경우, 해당 필드값도 같이 사라집니다. 계속 진행 하시겠습니까?')) return false;
$.ajax({
url : base_url + "/ajax/board/extra",
type : 'DELETE',
cache : false,
async: false,
data : {
brd_key : brd_key,
bmt_idx : bmt_idx
},
success:function(res){
if( res.result )
{
alert('입력필드 삭제에 성공하였습니다.');
location.reload();
}
else {
alert('입력필드 삭제에 실패하였습니다.');
location.reload();
}
}
})
};

123
_src/admin/js/modules/faq.js

@ -0,0 +1,123 @@
var faq = {};
faq.form = function(fac_idx, faq_idx)
{
var faq_idx = (typeof faq_idx == 'string' || typeof faq_idx == 'number' ) ? faq_idx : null;
var fac_idx = (typeof fac_idx == 'string' || typeof fac_idx == 'number' ) ? fac_idx : null;
if(! fac_idx) {
alert('FAQ 분류 정보가 없습니다.');
return false;
}
APP.MODAL.open({
width: 800,
height :650,
header : {
title : faq_idx ? 'FAQ 정보 수정' : 'FAQ 추가'
},
callback : function(){
location.reload();
},
iframe : {
method : 'get',
url : '/admin/management/faq_form',
param : {
fac_idx : fac_idx,
faq_idx : faq_idx
}
}
});
};
faq.remove = function(faq_idx) {
if(typeof faq_idx == 'undefined' || ! faq_idx || faq_idx.trim() == '') {
alert('잘못된 접근입니다.');
}
if(! confirm('해당 FAQ를 삭제하시겠습니까?')) return false;
$.ajax({
url : '/ajax/faq/info',
type : 'delete',
async:false,
cache:false,
data:{faq_idx:faq_idx},
success:function(res){
alert('FAQ가 삭제되었습니다.');
location.reload();
}
});
};
/**
* FAQ 분류
* @type {{}}
*/
faq.category = {};
faq.category.form = function(fac_idx)
{
var fac_idx = (typeof fac_idx == 'string' || typeof fac_idx == 'number' ) ? fac_idx : null;
APP.MODAL.open({
width: $(window).width() > 600 ? 600 : $(window).width(),
height :250,
header : {
title : fac_idx ? 'FAQ 분류 정보 수정' : 'FAQ 분류 추가'
},
callback : function(){
location.reload();
},
iframe : {
method : 'get',
url : '/admin/management/faq_category_form',
param : {
fac_idx : fac_idx
}
}
});
};
faq.category.exist = function(fac_idx) {
if(typeof fac_idx == 'undefined' || ! fac_idx || fac_idx.trim() == '') return false;
var result = false;
$.ajax({
url : '/ajax/faq/category',
type:'get',
async:false,
cache:false,
data:{fac_idx:fac_idx},
success:function (res) {
result = !(res && typeof res.fac_idx != 'undefined' && res.fac_idx);
}
});
return result;
};
faq.category.remove = function(fac_idx) {
if(typeof fac_idx == 'undefined' || ! fac_idx || fac_idx.trim() == '') {
alert('잘못된 접근입니다.');
}
var count = 0;
$.ajax({
url : '/ajax/faq/lists',
type : 'get',
async:false,
cache: false,
data : {fac_idx:fac_idx},
success:function(res){
count = res.total_count;
}
});
var msg = ( count > 0 ) ? '해당 FAQ 분류에 ' + count + '개의 FAQ 목록이 등록되어 있습니다.\nFAQ 분류을 삭제할시 등록된 FAQ 목록도 같이 삭제됩니다.\n\n계속 하시겠습니까?' : 'FAQ 분류을 삭제하시겠습니까?';
if(! confirm(msg)) return false;
$.ajax({
url : '/ajax/faq/category',
type : 'delete',
async:false,
cache:false,
data:{fac_idx:fac_idx},
success:function(res){
alert('FAQ 분류가 삭제되었습니다.');
location.href= base_url + "/admin/management/faq";
}
});
};

175
_src/admin/js/modules/member.js

@ -0,0 +1,175 @@
/**********************************************************************************************************************
* 회원정보 팝업
*********************************************************************************************************************/
APP.MEMBER.POP_INFO_ADMIN = function(mem_idx) {
if( typeof mem_idx == 'undefined' || ! mem_idx ) {
alert('잘못된 접근입니다.');
return false;
}
APP.MODAL.open({
width: 800,
height :600,
header : {
title : '회원 정보'
},
callback : function(){
location.reload();
},
iframe : {
method : 'get',
url : '/admin/members/info/' + mem_idx,
param : {}
}
});
};
/**********************************************************************************************************************
* 회원 비밀번호 변경 팝업
*********************************************************************************************************************/
APP.MEMBER.POP_PASSWORD_ADMIN = function(mem_idx) {
if( typeof mem_idx == 'undefined' || ! mem_idx ) {
alert('잘못된 접근입니다.');
return false;
}
APP.MODAL.open({
width: 800,
height :600,
header : {
title : '비밀번호 변경'
},
callback : function(){
location.reload();
},
iframe : {
method : 'get',
url : '/admin/members/password/' + mem_idx,
param : {}
}
});
};
/**********************************************************************************************************************
* 회원 정보수정 팝업
*********************************************************************************************************************/
APP.MEMBER.POP_MODIFY_ADMIN = function(mem_idx) {
if( typeof mem_idx == 'undefined' || ! mem_idx ) {
alert('잘못된 접근입니다.');
return false;
}
APP.MODAL.open({
width: 800,
height :600,
header : {
title : '회원 정보 수정'
},
callback : function(){
location.reload();
},
iframe : {
method : 'get',
url : '/admin/members/modify/' + mem_idx,
param : {}
}
});
};
/**********************************************************************************************************************
* 회원 포인트 정보 팝업
*********************************************************************************************************************/
APP.MEMBER.POP_POINT_ADMIN = function(mem_idx) {
if( typeof mem_idx == 'undefined' || ! mem_idx ) {
alert('잘못된 접근입니다.');
return false;
}
APP.MODAL.open({
width: 800,
height :600,
header : {
title : '회원 포인트 관리'
},
callback : function(){
location.reload();
},
iframe : {
method : 'get',
url : '/admin/members/point/' + mem_idx,
param : {}
}
});
};
/**********************************************************************************************************************
* 회원 포인트 추가 팝업
*********************************************************************************************************************/
APP.MEMBER.POP_POINT_FORM_ADMIN = function(mem_idx) {
var mem_idx = typeof mem_idx != 'undefined' && mem_idx ? mem_idx : null;
if(! mem_idx) {
alert('잘못된 접근입니다.');
return;
}
APP.MODAL2.callback = function(){
location.reload();
};
APP.MODAL2.open({
width: 410,
height :200,
header : {
title : '회원 포인트 추가'
},
callback : function(){
location.reload();
},
iframe : {
method : 'get',
url : '/admin/members/point_form/' + mem_idx
}
});
};
/**********************************************************************************************************************
* 회원 STATUS 변경
*********************************************************************************************************************/
APP.MEMBER.STATUS_CHANGE = function(mem_idx, current_status, change_status) {
if( typeof mem_idx == 'undefined' || ! mem_idx || typeof current_status == 'undefined' || ! current_status || typeof change_status == 'undefined' || ! change_status ) {
alert(LANG.common_msg_invalid_access);
return false;
}
var change_status_msg = '';
if( change_status == 'Y' ) change_status_msg = LANG.member_status_y;
else if (change_status == 'N') change_status_msg = LANG.member_status_n;
else if (change_status == 'D') change_status_msg = LANG.member_status_d;
else if (change_status == 'H') change_status_msg = LANG.member_status_h;
else {
alert(LANG.common_msg_invalid_access);
return false;
}
if( ! confirm('해당 회원의 상태를 [' + change_status_msg + '] 상태로 변경합니까?') ) return;
$.ajax({
url : '/ajax/members/status',
type : 'POST',
async : false,
cache : false,
data : {
mem_idx : mem_idx,
current_status : current_status,
change_status : change_status
},
success:function(){
alert('지정한 회원의 상태를 [' + change_status_msg + '] 상태로 변경하였습니다.');
location.reload();
}
})
};
$(function(){
});

152
_src/admin/scss/_animation.scss

@ -0,0 +1,152 @@
@-webkit-keyframes SLIDE-UP {
0% {
opacity: 0.0;
-webkit-transform: translateY(30px) scale(1)
}
100% {
opacity: 1.0;
-webkit-transform: translateY(0%) scale(1)
}
}
@-moz-keyframes SLIDE-UP {
0% {
opacity: 0.0;
-moz-transform: translateY(30px) scale(1)
}
100% {
opacity: 1.0;
-moz-transform: translateY(0%) scale(1)
}
}
@keyframes SLIDE-UP {
0% {
opacity: 0.0;
-webkit-transform: translateY(30px) scale(1);
-moz-transform: translateY(30px) scale(1);
-ms-transform: translateY(30px) scale(1);
-o-transform: translateY(30px) scale(1);
transform: translateY(30px) scale(1)
}
100% {
opacity: 1.0;
-webkit-transform: translateY(0%) scale(1);
-moz-transform: translateY(0%) scale(1);
-ms-transform: translateY(0%) scale(1);
-o-transform: translateY(0%) scale(1);
transform: translateY(0%) scale(1)
}
}
@-webkit-keyframes SLIDE-DOWN {
0% {
opacity: 0.0;
-webkit-transform: translateY(-30px) scale(1)
}
100% {
opacity: 1.0;
-webkit-transform: translateY(0%) scale(1)
}
}
@-moz-keyframes SLIDE-DOWN {
0% {
opacity: 0.0;
-moz-transform: translateY(-30px) scale(1)
}
100% {
opacity: 1.0;
-moz-transform: translateY(0%) scale(1)
}
}
@keyframes SLIDE-DOWN {
0% {
opacity: 0.0;
-webkit-transform: translateY(-30px) scale(1);
-moz-transform: translateY(-30px) scale(1);
-ms-transform: translateY(-30px) scale(1);
-o-transform: translateY(-30px) scale(1);
transform: translateY(-30px) scale(1)
}
100% {
opacity: 1.0;
-webkit-transform: translateY(0%) scale(1);
-moz-transform: translateY(0%) scale(1);
-ms-transform: translateY(0%) scale(1);
-o-transform: translateY(0%) scale(1);
transform: translateY(0%) scale(1)
}
}
@-webkit-keyframes SLIDE-IN-LEFT {
0% {
-webkit-transform: translateX(-30px) scale(1)
}
100% {
-webkit-transform: translateY(0%) scale(1)
}
}
@-moz-keyframes SLIDE-IN-LEFT {
0% {
-moz-transform: translateX(-30px) scale(1)
}
100% {
-moz-transform: translateY(0%) scale(1)
}
}
@keyframes SLIDE-IN-LEFT {
0% {
-webkit-transform: translateX(-30px) scale(1);
-moz-transform: translateX(-30px) scale(1);
-ms-transform: translateX(-30px) scale(1);
-o-transform: translateX(-30px) scale(1);
transform: translateX(-30px) scale(1)
}
100% {
-webkit-transform: translateY(0%) scale(1);
-moz-transform: translateY(0%) scale(1);
-ms-transform: translateY(0%) scale(1);
-o-transform: translateY(0%) scale(1);
transform: translateY(0%) scale(1)
}
}
@-webkit-keyframes SLIDE-IN-RIGHT {
0% {
-webkit-transform: translateX(30px) scale(1)
}
100% {
-webkit-transform: translateY(0%) scale(1)
}
}
@-moz-keyframes SLIDE-IN-RIGHT {
0% {
-moz-transform: translateX(30px) scale(1)
}
100% {
-moz-transform: translateY(0%) scale(1)
}
}
@keyframes SLIDE-IN-RIGHT {
0% {
-webkit-transform: translateX(30px) scale(1);
-moz-transform: translateX(30px) scale(1);
-ms-transform: translateX(30px) scale(1);
-o-transform: translateX(30px) scale(1);
transform: translateX(30px) scale(1)
}
100% {
-webkit-transform: translateY(0%) scale(1);
-moz-transform: translateY(0%) scale(1);
-ms-transform: translateY(0%) scale(1);
-o-transform: translateY(0%) scale(1);
transform: translateY(0%) scale(1)
}
}

355
_src/admin/scss/_bootstrap_custom.scss

@ -0,0 +1,355 @@
/* 좌측메뉴 */
#logo-group #logo>a {font-family:Arial;}
nav ul ul li>a {font-size:12px;}
/* 회원 메뉴 */
.dropdown-menu>li>a {font-size:12px;}
/* 페이지네이션 */
.pagination>li>a, .pagination>li>span { color:#777; }
.pagination>.disabled>a, .pagination>.disabled>a:focus, .pagination>.disabled>a:hover, .pagination>.disabled>span, .pagination>.disabled>span:focus, .pagination>.disabled>span:hover { color :#ddd;}
.pagination>.active>a, .pagination>.active>a:focus, .pagination>.active>a:hover, .pagination>.active>span, .pagination>.active>span:focus, .pagination>.active>span:hover { background:$btn-primary-bg; border-color:$btn-primary-border;}
/* Input */
input[type="checkbox"], input[type="radio"] { display: inline-block; position: static; margin: 0 3px; vertical-align: middle; }
.form-control{ display: block; width: 100%; height: 26px; padding: 3px 6px; font-size: 13px; line-height: 1.42857; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 3px; box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); -webkit-transition: border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s; -o-transition: border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s; transition: border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}
.nav-cards {
margin-bottom:20px;
> li {
float:none;
margin:0;
> .card {
padding: 10px 20px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color:#eee;
background-color: rgba(0,0,0,.15);
&:focus,
&:hover {
text-decoration: none;
background-color: hsla(0,0%,100%,.08);
}
&.selected {
color:#f9be03;
}
}
}
}
.nav-card-tabs {
margin-bottom:0px;
&:after {
clear:both;
content:'';
display:table;
}
> li {
float:left;
margin:0;
> .card {
padding: 10px 20px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color:#eee;
background-color: hsla(0,0%,100%,.08);
&:focus,
&:hover {
text-decoration: none;
background-color: hsla(0,0%,100%,.08);
color:#f9be03;
}
&.selected,
&.selected:hover {
color:#f9be03;
background-color:rgba(0,0,0,.15);
}
}
}
}
label,
label.control-label {font-weight:400;}
.panel.panel-dark {
background-color:transparent;
.panel-heading {
position: relative;
background-color: rgba(0,0,0,.15);
line-height:50px;
.panel-title {
font-size:16px;
}
}
.panel-body {
border-left:1px solid rgba(0,0,0,.15);
border-right:1px solid rgba(0,0,0,.15);
border-bottom:1px solid rgba(0,0,0, .15);
&.no-padding {
padding:0px;
}
.cke_chrome {
border:0px;
}
}
.panel-footer {
position: relative;
background-color: rgba(0,0,0,.15);
border:0px;
text-align:right;
}
}
.form-control {
color:#eee;
height: 38px;
padding: 6px 12px;
font-size: 14px;
vertical-align: middle;
background-color: hsla(0,0%,100%,.25);
-webkit-transition: background-color .2s;
-moz-transition: background-color .2s;
-ms-transition: background-color .2s;
-o-transition: background-color .2s;
transition: background-color .2s;
box-shadow:none;
border:0;
line-height:1.5em;
&:focus {
outline: 0;
-webkit-box-shadow: none;
box-shadow: none;
}
&:focus:not([disabled]):not([readonly]) {
color: #555;
background-color: #eee;
}
&[disabled],
&[readonly] {
background:rgba(0,0,0,0.1);
color:#797979;
}
}
select.form-control {
margin-top:1px;
}
.form-control-inline {
display:inline-block;
width:auto;
}
textarea.form-control {
resize:vertical;;
}
.form-flex {
.form-group {
-webkit-display:flex;
display:flex;
.control-label {
width:150px;
display:block;
text-align:right;
padding-top:11px;
&.control-label-sm {
width:100px;
}
&.control-label-xs {
width:50px;
}
}
.controls {
margin-left:15px;
flex:1;
vertical-align: middle;
.form-control-static {
padding-top:11px;
}
}
}
}
.alert-info {
color: #fff;
background-color: rgba(0,0,0,0.14);
border-color: transparent;
}
.alert-danger {
background-color: rgba(0,0,0,0.14);
border-color: transparent;
}
.w-check {
position: relative;
margin:0;
line-height:21px;
padding:7.5px 0;
& + .w-check {
margin-left:30px;
}
input[type="checkbox"] {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip:rect(0,0,0,0); border: 0;
& + span {
display: inline-block;
position: relative;
padding-left: 30px;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
&:before {
content: '';
position: absolute;
left: 0;
width: 21px;
height: 21px;
line-height:21px;
text-align: center;
background: rgba(0,0,0,0.15);
border: 0px;
font-family:'Font Awesome 5 Pro';
}
}
&:checked + span:before {
content:'\f00c';
background: rgba(0,0,0,0.5);
color: #cc7b19;
}
}
}
.w-radio {
position: relative;
margin:0;
line-height:21px;
padding:7.5px 0;
& + .w-radio {
margin-left:30px;
}
input[type="radio"] {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip:rect(0,0,0,0); border: 0;
& + span {
display: inline-block;
position: relative;
padding-left: 30px;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
&:before {
content: '';
position: absolute;
left: 0;
width: 21px;
height: 21px;
line-height:21px;
text-align: center;
background: rgba(0,0,0,0.15);
border: 0px;
border-radius: 100%;
font-family:'Font Awesome 5 Pro';
}
}
&:checked + span:before {
content:'\f00c';
background: rgba(0,0,0,0.5);
color: #cc7b19;
}
}
}
.pagination {
> li {
> a,
> span {
color:#fff;
background:rgba(0,0,0, 0.15);
border:0px;
&:focus,
&:hover {
color:#cc7b19;
background-color:rgba(0,0,0,0.15);
border:0px;
}
}
&.active {
> a,
> a:focus,
> a:hover,
> span,
> span:focus,
> span:hover {
background:rgba(0,0,0, 0.5);
color:#fff;
}
}
&.disabled {
> a,
> a:focus,
> a:hover,
> span,
> span:focus,
> span:hover {
background:rgba(0,0,0, 0.15);
color:#797979;
}
}
}
}
.dropdown-menu-dark {
background:#3f4245;
.divider {
background:rgba(0,0,0,0.15);
}
}

111
_src/admin/scss/_buttons.scss

@ -0,0 +1,111 @@
.btn {
display: inline-block;
margin-bottom: 0;
font-weight: 500;
text-align: center;
vertical-align: middle;
touch-action: manipulation;
cursor: pointer;
background-image: none;
border: 1px solid transparent;
white-space: nowrap;
padding: 3px 7px;
font-size: 13px;
line-height: 1.42857;
border-radius: 5px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
&:focus,
&.focus,
&:active:focus,
&:active.focus,
&.active:focus,
&.active.focus {
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
&:hover,
&:focus,
&.focus {
color: #242424;
text-decoration: none;
}
&:active,
&.active {
outline: 0;
background-image: none;
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
&.disabled,
&[disabled],
fieldset[disabled] & {
cursor: not-allowed; opacity: 0.65; filter: alpha(opacity=65); box-shadow: none;
}
&a.disabled,
fieldset[disabled] &a {
pointer-events: none;
}
&.btn-default,
&.btn-white {
@include button-generator(#fff, hsla(0,0%,100%,.25), transparent, hsla(0,0%,100%,.3), transparent);
}
&.btn-primary {
@include button-generator(#fff, #cc7b19, transparent, #b56d16, transparent);
}
&.btn-warning {
@include button-generator($btn-warning-text, $btn-warning-bg, $btn-warning-border, $btn-warning-hover-bg, $btn-warning-hover-border);
}
&.btn-danger {
@include button-generator($btn-danger-text, $btn-danger-bg, $btn-danger-bg, $btn-danger-hover-bg, $btn-danger-hover-bg);
}
&.btn-lg,
.btn-group-lg > & {
padding: 6px 12px;
font-size: 17px;
line-height: 1.33333;
border-radius: 5px;
}
&.btn-sm,
.btn-group-sm > & {
padding: 2px 4px;
font-size: 12px;
line-height: 1.5;
border-radius: 2px;
}
&.btn-xs,
.btn-group-xs > & {
padding: 1px 5px;
font-size: 12px;
line-height: 1.5;
border-radius: 2px;
}
&.btn-block {
display:block;
width:100%;
+ .btn-block {
margin-top: 5px;
}
&input[type="submit"],
&input[type="reset"],
&input[type="button"] {
width: 100%;
}
}
}

175
_src/admin/scss/_form.scss

@ -0,0 +1,175 @@
/* 버튼그룹 */
.ax-button-group {
display: table;
width: 100%;
min-height: 40px;
.left,
.right {
display: table-cell;
vertical-align: bottom;
padding: 0 5px 10px 5px;
h1, h2, h3, h4, h5, h6 {
line-height: 26px;
}
}
.left {
text-align:left;
}
.right {
text-align:right;
}
&.ax-button-group-bottom {
.left, .right {
padding: 0px;
vertical-align:middle;
}
&.sm {
min-height: 30px;
.left, .right {
padding: 0 5px 7px 5px;
}
}
.pagination {
margin: 0px;
}
}
}
[data-ax-tbl] {
font-size: 0.9em;
background: #fff;
border-top: 1px solid #D8D8D8;
border-right: 1px solid #D8D8D8;
border-left: 1px solid #D8D8D8;
position: relative;
[data-ax-tr] {
border-bottom: 1px solid #D8D8D8;
&:after {
@include admin_clearfix;
}
[data-ax-td] {
float: left;
display: table;
table-layout: fixed;
width: 300px;
vertical-align: top;
min-height: 40px;
&.width-auto {
width:auto;
}
&.width-100 {
width:100%;
}
[data-ax-td-label] {
display: table-cell;
width: 100px;
padding: 7px;
@include background-gradient(#fbfbfb, #f6f6f6);
border-right: 1px solid #D8D8D8;
vertical-align: middle;
text-align: center;
color: #363636;
fieldset[readonly] &,
fieldset[disabled] & {
color: #c8c8c8;
}
a {
color: #363636;
}
}
+ [data-ax-td] [data-ax-td-label] { border-left: 1px solid #D8D8D8 }
[data-ax-td-wrap] {
display: table-cell;
padding: 7px 7px;
color: #68717b;
line-height: 1em;
a {
color: #68717b;
&:after {
content: ' ';
}
}
.form-control,
.btn {
vertical-align: middle;
}
.form-control {
font-size:1em;
&.inline-block {
display: inline-block;
width: auto;
}
}
textarea.form-control {
resize:vertical;
}
.form-control-static {
padding: 7px;
min-height:0px;
}
.radio-inline,
.checkbox-inline {
line-height: 21px;
padding: 0;
display: inline-block;
input[type="checkbox"],
input[type="radio"] {
display: inline-block;
position: static;
margin: 0 3px;
vertical-align: middle;
}
}
.radio-inline {
margin-top:5px;
+ .radio-inline {
margin-top:5px;
}
}
fieldset[readonly] &,
fieldset[disabled] & {
color: #c8c8c8;
.form-control {
background-color: #eee;
opacity: 1;
}
}
}
}
}
}

122
_src/admin/scss/_grid.scss

@ -0,0 +1,122 @@
[data-ax5grid] {
margin:0;
padding:0;
position:relative;
background:transparent;
border:0px;
table {
border-collapse: separate;
border-spacing: 0;
border: 0 none;
width: 100%;
height: 100%;
thead {
tr {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
margin: 0;
padding: 0;
position: relative;
overflow: hidden;
background-color: rgba(0,0,0,.15);
border: 0px none;
color: #fff;
th {
box-sizing: border-box;
overflow: hidden;
position: relative;
padding: 10px;
border: 0 none;
height:38px;
text-align:center;
&:last-child {
border-right:0px;
}
}
}
}
tbody {
tr {
border-bottom: 0 none;
background:transparent;
td {
line-height:21px;
padding:10px;
&:last-child {
border-right:0px;
}
&.empty {
height:300px;
vertical-align: middle;
text-align:center;
}
&.active {
color:#f9be03;
}
a {
color:#fff;
}
}
&:last-child {
td {
border-bottom:0px;
}
}
}
}
tfoot {
tr {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
margin: 0;
padding: 0;
position: relative;
overflow: hidden;
background-color: rgba(0,0,0,.15);
border: 0px none;
color: #fff;
td {
box-sizing: border-box;
overflow: hidden;
position: relative;
padding: 10px;
border: 0 none;
height:38px;
text-align:center;
&:last-child {
border-right:0px;
}
}
&:last-child {
td {
border-bottom:0px;
}
}
}
}
}
}

297
_src/admin/scss/_layout.scss

@ -0,0 +1,297 @@
html,
body {
min-height:100%;
}
body,
html,
input,
select,
button,
textarea {
font-family: Roboto, "Spoqa Han Sans", "Spoqa Han Sans JP", Sans-serif;
}
.application {
position:absolute;
top:0;
left:0;
right:0;
bottom:0;
-webkit-display:flex;
display:flex;
flex-direction: column;
}
.background-container {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1;
background-color: #3f4245;
.bg-1 {
background-image: url(../images/admin/bg-dark.png);
background-size: cover;
background-position: center center;
background-repeat: no-repeat;
width: 100%;
height: 100%;
position: absolute;
z-index: 2;
}
.bg-2 {
position: absolute;
width: 100%;
height: 100%;
background: url(../images/admin/bg-noise.png);
z-index: 2;
}
}
#nav-bar {
flex-grow: 0;
flex-shrink: 0;
z-index: 1000;
background-color: rgba(0,0,0,.7);
height:60px;
width:100%;
.logo {
display:flex;
height:60px;
//background:rgba(0,0,0,.7);
color:#fff;
font-weight:900;
font-size:20px;
justify-content: center;
align-items: center;
text-decoration: none;
width:200px;
}
.btn-menu-toggle {
display:none;
@media screen and (max-width:768px) {
display:block;
position:fixed;
right:15px;
top:15px;
font-size:24px;
background:transparent;
border:0;
color:#fff;
}
}
.btn-logout {
position:fixed;
right:15px;
top:15px;
font-size:24px;
background:transparent;
border:0;
color:#fff;
@media screen and (max-width:768px) {
display:none;
}
}
}
#content {
position: relative;
flex-grow: 1;
overflow: hidden;
-webkit-overflow-scrolling: touch;
display:flex;
#left-panel {
width:200px;
overflow:hidden;
background-color: rgba(0,0,0,.15);
@media screen and (max-width:768px) {
width:0px;
&.opened {
width:100%;
position: absolute;
z-index: 100;
background: #000;
}
}
#main-navigation {
list-style:none;
padding:0;
margin:0;
> li {
display:block;
position:relative;
-webkit-transition: all .2s ease;
-moz-transition: all .2s ease;
-ms-transition: all .2s ease;
-o-transition: all .2s ease;
transition: all .2s ease;
&:first-child {
border-top: 0;
}
> a {
display:block;
padding:20px 10px;
color:#c8c8c8;
border-left:2px solid #293242;
font-size:14px;
text-decoration: none;
-webkit-transition: all .2s ease;
-moz-transition: all .2s ease;
-ms-transition: all .2s ease;
-o-transition: all .2s ease;
transition: all .2s ease;
> i {
margin-right:5px;
}
&:after {
content:"\f105";
font-family:'Font Awesome 5 Pro';
position:absolute; right:20px; top:20px;
-webkit-transition: all .2s ease;
-moz-transition: all .2s ease;
-ms-transition: all .2s ease;
-o-transition: all .2s ease;
transition: all .2s ease;
}
}
> ul {
height:0;
visibility: hidden;
opacity:0;
margin:0;
padding:0;
list-style:none;
-webkit-transition: all .2s ease;
-moz-transition: all .2s ease;
-ms-transition: all .2s ease;
-o-transition: all .2s ease;
transition: all .2s ease;
> li {
display:block;
//border-top:1px solid rgba(#ccc,0.4);
> a {
padding:15px 25px;
display:block;
color:#c8c8c8;
text-decoration:none;
background: rgba(0,0,0,0.4);
}
&:hover > a {
color:#fff;
}
&.active {
> a {
background:#fff;
color:#282828;
}
}
}
}
&.open {
> a:after {
-webkit-transform: rotate(90deg);
-moz-transform:rotate(90deg);
transform:rotate(90deg);
}
> ul {
height:auto;
visibility: visible;
opacity:1;
}
}
&:active > a,
&:hover > a {
border-color:#96ddfe;
color:#f1f3f6;
}
}
}
}
#main {
-webkit-flex:1;
flex:1;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
flex-grow: 1;
position:relative;
color:#fff;
.main {
padding:15px;
height:100%;
overflow-x:hidden;
overflow-y:scroll;
}
}
}
#header {
background:#3498db;
>:first-child {
background:#3498db;
}
}
.frame-content {
background-color:#3f4245;
min-height:100%;
color:#fff;
padding:15px;
}
.page-header {
-webkit-display:flex;
display:flex;
background-color: rgba(0,0,0,.15);
border:0px;
color: hsla(0,0%,100%,.7);
margin:-15px -15px 15px;
padding:0px 15px;
height:60px;
justify-content: left;
align-items: center;
z-index:10;
@media screen and (max-width:768px) {
left:0px;
}
.page-title {
margin:0px;
font-size:18px;
}
}

54
_src/admin/scss/_mixins.scss

@ -0,0 +1,54 @@
@mixin admin_clearfix{
display:table;
content:'';
clear:both;
}
@mixin background-gradient($start, $end )
{
background-color: $start;
background-image: -webkit-linear-gradient(top, $start, $end);
background-image: linear-gradient(to bottom,$start, $end);
}
@mixin button-generator($txt-color, $bg-color, $border-color, $hover-color, $hover-border-color )
{
color: $txt-color;
background-color: $bg-color;
border-color: $border-color;
&:focus, &.focus {
color: $txt-color;
background-color: $hover-color;
border-color: $border-color;
}
&:hover {
color: $txt-color;
background-color: $hover-color;
border-color: $hover-border-color;
}
&:active, &.active, .open > &.dropdown-toggle {
color: $txt-color;
background-color: $hover-color;
border-color: $hover-border-color;
}
&:active:hover, &:active:focus, &:active.focus, &.active:hover, &.active:focus, &.active.focus, .open > &.dropdown-toggle:hover, .open > &.dropdown-toggle:focus, .open > &.dropdown-toggle.focus {
color: $txt-color;
background-color: $hover-color;
border-color: $hover-border-color;
}
&:active, &.active, .open > &.dropdown-toggle {
background-image: none;
}
&.disabled:hover, &.disabled:focus, &.disabled.focus, &[disabled]:hover, &[disabled]:focus, &[disabled].focus, fieldset[disabled] &:hover, fieldset[disabled] &:focus, fieldset[disabled] &.focus {
background-color: #fff;
border-color: #8f8f8f;
}
.badge {
color: #fff; background-color: #242424;
}
}

11
_src/admin/scss/_modal.scss

@ -0,0 +1,11 @@
.ax5modal {
background-color: #3f4245;
border-color:rgba(0,0,0,0.4);
.ax-modal-header {
background:rgba(0,0,0,.15);
color:#fff;
font-weight:400;
border:0px;
}
}

70
_src/admin/scss/_pages.scss

@ -0,0 +1,70 @@
#login-form {
width:100%;
height:100%;
display:flex;
background:url(../images/admin/login-bg.jpg);
justify-content: center;
align-items: center;
.login-logo {
font-size:32px;
font-weight:900;
color:#fff;
-webkit-animation: SLIDE-UP 0.6s linear forwards;
-o-animation: SLIDE-UP 0.6s linear forwards;
animation: SLIDE-UP 0.6s linear forwards;
margin-bottom:20px;
text-align:center;
}
.login-notice {
color:#ccc;
font-size:12px;
text-align:center;
letter-spacing: -0.04em;
margin-top:10px;
}
.login-panel {
-webkit-animation: SLIDE-DOWN 0.6s linear forwards;
-o-animation: SLIDE-DOWN 0.6s linear forwards;
animation: SLIDE-DOWN 0.6s linear forwards;
border:1px solid #788694;
width: 320px;
box-shadow: 0 0 10px #000;
border-radius: 8px;
overflow: hidden;
background: rgba(0,0,0,0.5);
margin:0 auto;
.login-heading {
padding: 10px 15px;
border-top-right-radius: 2px;
border-top-left-radius: 2px;
color: #ccc;
border-bottom: 1px solid #788694;
font-size: 0.9em;
background: rgba(255,255,255,0.1);
text-align:center;
}
.login-body {
padding: 20px 20px;
color: #eee;
text-align: left;
}
.form-control {
background:transparent;
text-align:center;
color:#fff;
border: #ccc 1px solid;
}
.btn {
background:#000;
color:#fff;
border:1px solid #ccc;
padding: 10px;
}
}
}

230
_src/admin/scss/_plugins_custom.scss

@ -0,0 +1,230 @@
/* JQUERY-UI */
.ui-icon,
.ui-widget-content .ui-icon { background-image: url("../images/jquery-ui/ui-icons_444444_256x240.png"); }
.ui-widget-header .ui-icon { background-image: url("../images/jquery-ui/ui-icons_444444_256x240.png"); }
.ui-state-hover .ui-icon,
.ui-state-focus .ui-icon,
.ui-button:hover .ui-icon,
.ui-button:focus .ui-icon { background-image: url("../images/jquery-ui/ui-icons_555555_256x240.png"); }
.ui-state-active .ui-icon,
.ui-button:active .ui-icon { background-image: url("../images/jquery-ui/ui-icons_ffffff_256x240.png"); }
.ui-state-highlight .ui-icon,
.ui-button .ui-state-highlight.ui-icon { background-image: url("../images/jquery-ui/ui-icons_777620_256x240.png"); }
.ui-state-error .ui-icon,
.ui-state-error-text .ui-icon { background-image: url("../images/jquery-ui/ui-icons_cc0000_256x240.png"); }
.ui-button .ui-icon { background-image: url("../images/jquery-ui/ui-icons_777777_256x240.png");}
.ui-button.ui-state-active:hover,
.ui-button:active,
.ui-state-active,
.ui-widget-content
.ui-state-active,
.ui-widget-header
.ui-state-active,
a.ui-button:active {
border: 1px solid $btn-primary-border;
background: $btn-primary-bg;
color:#fff;
}
/* AX5UI-MODAL */
.ax5modal .ax-modal-header { font-size:13px;}
/* 순서변경시 아이콘에 커서변경 */
.sort-handle-icon {cursor:move;}
/* 카테고리용 */
.category-list {
background:rgba(0,0,0,0.15);
padding:15px 20px;
li {
background:url(../images/admin/treeview_line.gif) 0px 0px no-repeat;
display:block;
> div {
display:block;
padding:5px 5px 0px 22px;
line-height:23px;
color:#fff;
text-decoration:none;
vertical-align:middle;
span {
vertical-align:bottom;
}
> span.move-item {
cursor:move;
border:1px dashed transparent;
&:hover {
//border:1px dashed #e0e0e0;
color:#cc7b19;
}
}
> button.btn-xs {
margin-left:10px;
display:none;
+button {
margin-left:0px;
}
}
&:hover {
>button {
display:inline-block;
}
}
}
&:last-child { background-position-y:-1768px; }
}
> li {
background:none;
&.ui-sortable-placeholder {
background:#f0f0f0;
}
> div {
padding-left:0px;
> button.btn-xs {
display:inline-block;
}
}
> ul > li {
background-position-y: -2px;
> ul.items > li {
background-position: 22px -2px;
> div {
padding-left: 44px;
}
&:last-child {
background-position-y: -1768px;
}
}
}
}
}
.cke {
border:0px !important;
.cke_inner {
background:transparent;
}
.cke_bottom,
.cke_top {
border:0px;
background:rgba(0,0,0, 0.14);
}
.cke_combo_button,
.cke_button {
background: rgba(0,0,0,.14);
}
.cke_toolgroup {
background:transparent;
}
.cke_toolbar_separator {
//background:transparent;
}
.cke_path_item, .cke_path_empty {
color:#fff;
text-shadow:none;
}
}
.ui-datepicker {
border:0px !important;
border-radius:0px !important;
background:#3f4245;
box-shadow: 0px 10px 10px rgba(0,0,0,0.15);
padding:0px;
.ui-datepicker-header {
border-radius:0px !important;
border:0px;
background:rgba(0,0,0,0.15);
.ui-datepicker-title {
color:#fff;
}
.ui-datepicker-prev,
.ui-datepicker-next {
border-radius:0px;
width:auto;
font-weight:400;
&:after {
font-size: 16px;
text-align: center;
display: inline-block;
}
.ui-icon {
display:none
}
&.ui-state-hover {
background:transparent;
color:#cc7b19;
border:0px;
}
}
.ui-datepicker-prev {
&:after {
content:'\f32a';
font-family:'Font Awesome 5 Pro';
color:#fff;
}
}
.ui-datepicker-next {
&:after {
content:'\f32b';
font-family:'Font Awesome 5 Pro';
color:#fff;
}
}
}
.ui-datepicker-calendar {
color:#fff;
td {
border:0px;
padding:0px;
a {
background:transparent;
color:#fff;
border:0px !important;
&.ui-state-active {
background:#3498db;
}
&.ui-state-highlight {
background:#cc7b19;
color:#fff;
}
}
}
}
}

27
_src/admin/scss/_variables.scss

@ -0,0 +1,27 @@
// Default Button 색상 지정
$btn-default-text : #242424;
$btn-default-bg : #fff;
$btn-default-border : #8f8f8f;
$btn-default-hover-bg : #e6e6e6;
$btn-default-hover-border : #4f4f4f;
// Primary Button 색상 지정
$btn-primary-text : #fff;
$btn-primary-bg : #3498db;
$btn-primary-border : #616161;
$btn-primary-hover-bg : #256d9c;
$btn-primary-hover-border : #000;
// Warning Button 색상 지정
$btn-warning-text : #242424;
$btn-warning-bg : #FFB802;
$btn-warning-border : #b58200;
$btn-warning-hover-bg : #ce9400;
$btn-warning-hover-border : #352600;
// Danger Button 색상 지정
$btn-danger-text : #fff;
$btn-danger-bg : #e32815;
$btn-danger-border : #e37170;
$btn-danger-hover-bg : #e34249;
$btn-danger-hover-border : #e37170;

64
_src/admin/scss/admin.scss

@ -0,0 +1,64 @@
@charset "UTF-8";
@import "variables";
@import "mixins";
@import "animation";
@import "bootstrap_custom";
@import "plugins_custom";
@import "modal";
@import "layout";
@import "buttons";
@import "grid";
@import "form";
@import "pages";
/* 높이/너비/마진/패딩 */
@for $i from 1 to 100 {
.H#{$i * 5} {
height: 5px * $i !important;
}
}
@for $i from 1 to 100{
.W#{$i * 5} {
width: 5px * $i !important;
}
}
@for $i from 1 to 10 {
.M#{$i * 5} {
margin:5px * $i;
}
.MT#{$i * 5} {
margin-top:5px * $i;
}
.MR#{$i*5} {
margin-right:5px * $i;
}
.MB#{$i * 5} {
margin-bottom:5px * $i;
}
.ML#{$i * 5} {
margin-left:5px * $i;
}
.PT#{$i * 5} {
padding-top:5px * $i;
}
.PR#{$i * 5} {
padding-right:5px * $i;
}
.PB#{$i * 5} {
padding-bottom:5px * $i;
}
.PL#{$i * 5} {
padding-left:5px * $i;
}
.P#{$i * 5} {
padding:5px * $i;
}
}
.ellipsis { text-overflow:ellipsis; white-space:nowrap; word-wrap:normal; overflow:hidden; }
.admin-help-wrap {
width:700px; margin:0 auto;
li > img {width:700px;}
.point-color {color:#e60035}
}

1
_src/common/css/global.css

@ -0,0 +1 @@
html, body { min-height:100%; }

200
_src/common/css/toastr.css

@ -0,0 +1,200 @@
.toast-title {
font-weight: bold;
}
.toast-message {
-ms-word-wrap: break-word;
word-wrap: break-word;
}
.toast-message a,
.toast-message label {
color: #ffffff;
}
.toast-message a:hover {
color: #cccccc;
text-decoration: none;
}
.toast-close-button {
position: relative;
right: -0.3em;
top: -0.3em;
float: right;
font-size: 20px;
font-weight: bold;
color: #ffffff;
-webkit-text-shadow: 0 1px 0 #ffffff;
text-shadow: 0 1px 0 #ffffff;
opacity: 0.8;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
filter: alpha(opacity=80);
}
.toast-close-button:hover,
.toast-close-button:focus {
color: #000000;
text-decoration: none;
cursor: pointer;
opacity: 0.4;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
filter: alpha(opacity=40);
}
/*Additional properties for button version
iOS requires the button element instead of an anchor tag.
If you want the anchor version, it requires `href="#"`.*/
button.toast-close-button {
padding: 0;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
}
.toast-top-center {
top: 0;
right: 0;
width: 100%;
}
.toast-bottom-center {
bottom: 0;
right: 0;
width: 100%;
}
.toast-top-full-width {
top: 0;
right: 0;
width: 100%;
}
.toast-bottom-full-width {
bottom: 0;
right: 0;
width: 100%;
}
.toast-top-left {
top: 12px;
left: 12px;
}
.toast-top-right {
top: 12px;
right: 12px;
}
.toast-bottom-right {
right: 12px;
bottom: 12px;
}
.toast-bottom-left {
bottom: 12px;
left: 12px;
}
#toast-container {
position: fixed;
z-index: 999999;
pointer-events: none;
/*overrides*/
}
#toast-container * {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
#toast-container > div {
position: relative;
pointer-events: auto;
overflow: hidden;
margin: 0 0 6px;
padding: 15px 15px 15px 50px;
width: 300px;
-moz-border-radius: 3px 3px 3px 3px;
-webkit-border-radius: 3px 3px 3px 3px;
border-radius: 3px 3px 3px 3px;
background-position: 15px center;
background-repeat: no-repeat;
-moz-box-shadow: 0 0 12px #999999;
-webkit-box-shadow: 0 0 12px #999999;
box-shadow: 0 0 12px #999999;
color: #ffffff;
opacity: 0.8;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
filter: alpha(opacity=80);
}
#toast-container > :hover {
-moz-box-shadow: 0 0 12px #000000;
-webkit-box-shadow: 0 0 12px #000000;
box-shadow: 0 0 12px #000000;
opacity: 1;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
filter: alpha(opacity=100);
cursor: pointer;
}
#toast-container > .toast-info {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;
}
#toast-container > .toast-error {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
}
#toast-container > .toast-success {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
}
#toast-container > .toast-warning {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
}
#toast-container.toast-top-center > div,
#toast-container.toast-bottom-center > div {
width: 300px;
margin-left: auto;
margin-right: auto;
}
#toast-container.toast-top-full-width > div,
#toast-container.toast-bottom-full-width > div {
width: 96%;
margin-left: auto;
margin-right: auto;
}
.toast {
background-color: #030303;
}
.toast-success {
background-color: #51a351;
}
.toast-error {
background-color: #bd362f;
}
.toast-info {
background-color: #2f96b4;
}
.toast-warning {
background-color: #f89406;
}
.toast-progress {
position: absolute;
left: 0;
bottom: 0;
height: 4px;
background-color: #000000;
opacity: 0.4;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
filter: alpha(opacity=40);
}
/*Responsive Design*/
@media all and (max-width: 240px) {
#toast-container > div {
padding: 8px 8px 8px 50px;
width: 11em;
}
#toast-container .toast-close-button {
right: -0.2em;
top: -0.2em;
}
}
@media all and (min-width: 241px) and (max-width: 480px) {
#toast-container > div {
padding: 8px 8px 8px 50px;
width: 18em;
}
#toast-container .toast-close-button {
right: -0.2em;
top: -0.2em;
}
}
@media all and (min-width: 481px) and (max-width: 768px) {
#toast-container > div {
padding: 15px 15px 15px 50px;
width: 25em;
}
}

87
_src/common/js/board.js

@ -0,0 +1,87 @@
APP.BOARD = {};
APP.BOARD.CATEGORY = {};
APP.BOARD.EXTRA = {};
APP.BOARD.COMMENT = {};
/**
* 특정 카테고리의 하위 카테고리가 몇개인지 가져온다.
* @param bca_idx
*/
APP.BOARD.CATEGORY.count = function(bca_idx)
{
if (typeof bca_idx == 'undefined' || ! bca_idx) return 0;
var count = 0;
$.ajax({
url : base_url + "/ajax/board/category_count",
type : 'get',
cache : false,
async : false,
data : {
bca_idx: bca_idx
},
success:function(res)
{
count = res.result;
}
})
return count;
};
APP.BOARD.CATEGORY.postCount = function(bca_idx)
{
if (typeof bca_idx == 'undefined' || ! bca_idx) return 0;
var count = 0;
$.ajax({
url : base_url + "/ajax/board/category_post_count",
type : 'get',
cache : false,
async : false,
data : {
bca_idx: bca_idx
},
success:function(res)
{
count = res.result;
}
});
return count;
};
APP.BOARD.COMMENT.modify= function( cmt_idx )
{
APP.POPUP({
title : '_blank',
width : 800,
height : 600,
url : base_url + '/board/comment/modify/' + cmt_idx
});
};
APP.BOARD.COMMENT.reply= function( cmt_idx, cmt_num )
{
APP.POPUP({
title : '_blank',
width : 800,
height : 600,
url : base_url + '/board/comment/reply/' + cmt_idx + '/' + cmt_num
});
};
$(function(){
var $form_post = $('[data-form="post"]');
if( $form_post.length > 0 )
{
$form_post.on('submit', function(){
$.blockUI({
css: {width:'25px',top:'49%',left:'49%',border:'0px none',backgroundColor:'transparent',cursor:'wait'},
message : '<img src="/assets/images/common/ajax-loader.gif" alt="로딩중">',
baseZ : 10000,
overlayCSS : {opacity : 0}
});
});
}
});

140
_src/common/js/global.js

@ -0,0 +1,140 @@
/***********************************************************************************
* IE 8 이하 브라우져 console.log 에러처리
***********************************************************************************/
if(!window.console || !window.console.log) {window.console = {log : function(){}};}
/***********************************************************************************
* AJAX Error BlockUI 처리
***********************************************************************************/
$(function(){
$(document).ajaxError(function(event, request, settings){
var message = '알수없는 오류가 발생하였습니다.';
if( typeof request.responseJSON != 'undefined' && typeof request.responseJSON.message != 'undefined' ) {
message = request.responseJSON.message;
}
else {
if( request.status == 500 ) message = '서버 코드 오류가 발생하였습니다.\n관리자에게 문의하세요';
else if ( request.status == 401 ) message = '해당 명령을 실행할 권한이 없습니다.';
}
toastr.error(message, '오류 발생');
}).ajaxStart(function(){
$.blockUI({
css: {width:'25px',top:'49%',left:'49%',border:'0px none',backgroundColor:'transparent',cursor:'wait'},
message : '<img src="/assets/images/common/ajax-loader.gif" alt="로딩중">',
baseZ : 10000,
overlayCSS : {opacity : 0}
});
}).ajaxComplete(function(){
$.unblockUI();
});
});
var APP = {};
APP.POPUP = null;
APP.REGEX = {};
APP.REGEX.uniqueID = /^[a-z][a-z0-9_]{2,19}$/g;
(function($) {
APP.POPUP = function(option) {
var defaults={
title : '_blank',
width : 800,
height : 600,
url : ''
};
var options = $.extend({}, defaults, option);
cw = screen.availWidth;
ch = screen.availHeight;
sw = options.width;
sh = options.height;
ml = (cw - sw) / 2;
mt = (ch - sh) / 2;
var option = 'width='+sw+',height='+sh+',top='+mt+',left='+ml+',scrollbars=yes,resizable=no';
var win = window.open(options.url, options.title, option);
if (win == null || typeof(win) == "undefined" || (win == null && win.outerWidth == 0) || (win != null && win.outerHeight == 0))
{
alert("팝업 차단 기능이 설정되어있습니다\n\n차단 기능을 해제(팝업허용) 한 후 다시 이용해 주십시오.");
return;
}
};
})(jQuery);
/**
* 언어셋 변경
* @param lang
* @constructor
*/
APP.SET_LANG = function(lang)
{
$.cookie('site_lang', lang, {expires:30, path:'/'});
location.reload();
};
/**
* 팝업창 닫기버튼 init
*/
$('[data-toggle="btn-popup-close"]').click(function(e){
var type = $(this).data('type');
var idx = $(this).data('idx');
var cookie = $(this).data('cookie');
if( type == 'Y')
{
window.close();
}
else if( type == 'N' )
{
$("#popup-" + idx ).remove();
}
if( cookie == 1 )
{
$.cookie('popup_'+idx, 1, {expires:1, path:'/'});
}
});
/**
* SNS 공유
*/
$("a[data-toggle='sns-share']").click(function(e){
e.preventDefault();
var _this = $(this);
var sns_type = _this.data('service');
var href = _this.data('url');
var title = _this.data('title');
var loc = "";
var img = $("meta[name='og:image']").attr('content');
if( ! sns_type || !href || !title) return;
if( sns_type == 'facebook' ) {
loc = '//www.facebook.com/sharer/sharer.php?u='+encodeURIComponent(href);
}
else if ( sns_type == 'twitter' ) {
loc = '//twitter.com/home?status='+encodeURIComponent(title)+' '+href;
}
else if ( sns_type == 'google' ) {
loc = '//plus.google.com/share?url='+href;
}
else if ( sns_type == 'pinterest' ) {
loc = '//www.pinterest.com/pin/create/button/?url='+href+'&media='+img+'&description='+encodeURIComponent(title);
}
else if ( sns_type == 'kakaostory') {
loc = 'https://story.kakao.com/share?url='+encodeURIComponent(href);
}
else if ( sns_type == 'band' ) {
loc = 'http://www.band.us/plugin/share?body='+encodeURIComponent(title)+'%0A'+encodeURIComponent(href);
}
else if ( sns_type == 'naver' ) {
loc = "http://share.naver.com/web/shareView.nhn?url="+encodeURIComponent(href)+"&title="+encodeURIComponent(title);
}
else {
return false;
}
APP.POPUP({ url : loc});
return false;
});

620
_src/common/js/jquery.blockUI.js

@ -0,0 +1,620 @@
/*!
* jQuery blockUI plugin
* Version 2.70.0-2014.11.23
* Requires jQuery v1.7 or later
*
* Examples at: http://malsup.com/jquery/block/
* Copyright (c) 2007-2013 M. Alsup
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Thanks to Amir-Hossein Sobhi for some excellent contributions!
*/
;(function() {
/*jshint eqeqeq:false curly:false latedef:false */
"use strict";
function setup($) {
$.fn._fadeIn = $.fn.fadeIn;
var noOp = $.noop || function() {};
// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
// confusing userAgent strings on Vista)
var msie = /MSIE/.test(navigator.userAgent);
var ie6 = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);
var mode = document.documentMode || 0;
var setExpr = $.isFunction( document.createElement('div').style.setExpression );
// global $ methods for blocking/unblocking the entire page
$.blockUI = function(opts) { install(window, opts); };
$.unblockUI = function(opts) { remove(window, opts); };
// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)
$.growlUI = function(title, message, timeout, onClose) {
var $m = $('<div class="growlUI"></div>');
if (title) $m.append('<h1>'+title+'</h1>');
if (message) $m.append('<h2>'+message+'</h2>');
if (timeout === undefined) timeout = 3000;
// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications
var callBlock = function(opts) {
opts = opts || {};
$.blockUI({
message: $m,
fadeIn : typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700,
fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,
timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,
centerY: false,
showOverlay: false,
onUnblock: onClose,
css: $.blockUI.defaults.growlCSS
});
};
callBlock();
var nonmousedOpacity = $m.css('opacity');
$m.mouseover(function() {
callBlock({
fadeIn: 0,
timeout: 30000
});
var displayBlock = $('.blockMsg');
displayBlock.stop(); // cancel fadeout if it has started
displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency
}).mouseout(function() {
$('.blockMsg').fadeOut(1000);
});
// End konapun additions
};
// plugin method for blocking element content
$.fn.block = function(opts) {
if ( this[0] === window ) {
$.blockUI( opts );
return this;
}
var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});
this.each(function() {
var $el = $(this);
if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))
return;
$el.unblock({ fadeOut: 0 });
});
return this.each(function() {
if ($.css(this,'position') == 'static') {
this.style.position = 'relative';
$(this).data('blockUI.static', true);
}
this.style.zoom = 1; // force 'hasLayout' in ie
install(this, opts);
});
};
// plugin method for unblocking element content
$.fn.unblock = function(opts) {
if ( this[0] === window ) {
$.unblockUI( opts );
return this;
}
return this.each(function() {
remove(this, opts);
});
};
$.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!
// override these in your code to change the default behavior and style
$.blockUI.defaults = {
// message displayed when blocking (use null for no message)
message: '<h1>Please wait...</h1>',
title: null, // title string; only used when theme == true
draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded)
theme: false, // set to true to use with jQuery UI themes
// styles for the message when blocking; if you wish to disable
// these and use an external stylesheet then do this in your code:
// $.blockUI.defaults.css = {};
css: {
padding: 0,
margin: 0,
width: '30%',
top: '40%',
left: '35%',
textAlign: 'center',
color: '#000',
border: '3px solid #aaa',
backgroundColor:'#fff',
cursor: 'wait'
},
// minimal style set used when themes are used
themedCSS: {
width: '30%',
top: '40%',
left: '35%'
},
// styles for the overlay
overlayCSS: {
backgroundColor: '#000',
opacity: 0.6,
cursor: 'wait'
},
// style to replace wait cursor before unblocking to correct issue
// of lingering wait cursor
cursorReset: 'default',
// styles applied when using $.growlUI
growlCSS: {
width: '350px',
top: '10px',
left: '',
right: '10px',
border: 'none',
padding: '5px',
opacity: 0.6,
cursor: 'default',
color: '#fff',
backgroundColor: '#000',
'-webkit-border-radius':'10px',
'-moz-border-radius': '10px',
'border-radius': '10px'
},
// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
// (hat tip to Jorge H. N. de Vasconcelos)
/*jshint scripturl:true */
iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',
// force usage of iframe in non-IE browsers (handy for blocking applets)
forceIframe: false,
// z-index for the blocking overlay
baseZ: 1000,
// set these to true to have the message automatically centered
centerX: true, // <-- only effects element blocking (page block controlled via css above)
centerY: true,
// allow body element to be stetched in ie6; this makes blocking look better
// on "short" pages. disable if you wish to prevent changes to the body height
allowBodyStretch: true,
// enable if you want key and mouse events to be disabled for content that is blocked
bindEvents: true,
// be default blockUI will supress tab navigation from leaving blocking content
// (if bindEvents is true)
constrainTabKey: true,
// fadeIn time in millis; set to 0 to disable fadeIn on block
fadeIn: 200,
// fadeOut time in millis; set to 0 to disable fadeOut on unblock
fadeOut: 400,
// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
timeout: 0,
// disable if you don't want to show the overlay
showOverlay: true,
// if true, focus will be placed in the first available input field when
// page blocking
focusInput: true,
// elements that can receive focus
focusableElements: ':input:enabled:visible',
// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
// no longer needed in 2012
// applyPlatformOpacityRules: true,
// callback method invoked when fadeIn has completed and blocking message is visible
onBlock: null,
// callback method invoked when unblocking has completed; the callback is
// passed the element that has been unblocked (which is the window object for page
// blocks) and the options that were passed to the unblock call:
// onUnblock(element, options)
onUnblock: null,
// callback method invoked when the overlay area is clicked.
// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.
onOverlayClick: null,
// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
quirksmodeOffsetHack: 4,
// class name of the message block
blockMsgClass: 'blockMsg',
// if it is already blocked, then ignore it (don't unblock and reblock)
ignoreIfBlocked: false
};
// private data and functions follow...
var pageBlock = null;
var pageBlockEls = [];
function install(el, opts) {
var css, themedCSS;
var full = (el == window);
var msg = (opts && opts.message !== undefined ? opts.message : undefined);
opts = $.extend({}, $.blockUI.defaults, opts || {});
if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))
return;
opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
if (opts.onOverlayClick)
opts.overlayCSS.cursor = 'pointer';
themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
msg = msg === undefined ? opts.message : msg;
// remove the current block (if there is one)
if (full && pageBlock)
remove(window, {fadeOut:0});
// if an existing element is being used as the blocking content then we capture
// its current place in the DOM (and current display style) so we can restore
// it when we unblock
if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
var node = msg.jquery ? msg[0] : msg;
var data = {};
$(el).data('blockUI.history', data);
data.el = node;
data.parent = node.parentNode;
data.display = node.style.display;
data.position = node.style.position;
if (data.parent)
data.parent.removeChild(node);
}
$(el).data('blockUI.onUnblock', opts.onUnblock);
var z = opts.baseZ;
// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
// layer1 is the iframe layer which is used to supress bleed through of underlying content
// layer2 is the overlay layer which has opacity and a wait cursor (by default)
// layer3 is the message content that is displayed while blocking
var lyr1, lyr2, lyr3, s;
if (msie || opts.forceIframe)
lyr1 = $('<iframe class="blockUI" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+opts.iframeSrc+'"></iframe>');
else
lyr1 = $('<div class="blockUI" style="display:none"></div>');
if (opts.theme)
lyr2 = $('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+ (z++) +';display:none"></div>');
else
lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
if (opts.theme && full) {
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:fixed">';
if ( opts.title ) {
s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
}
s += '<div class="ui-widget-content ui-dialog-content"></div>';
s += '</div>';
}
else if (opts.theme) {
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:absolute">';
if ( opts.title ) {
s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
}
s += '<div class="ui-widget-content ui-dialog-content"></div>';
s += '</div>';
}
else if (full) {
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage" style="z-index:'+(z+10)+';display:none;position:fixed"></div>';
}
else {
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement" style="z-index:'+(z+10)+';display:none;position:absolute"></div>';
}
lyr3 = $(s);
// if we have a message, style it
if (msg) {
if (opts.theme) {
lyr3.css(themedCSS);
lyr3.addClass('ui-widget-content');
}
else
lyr3.css(css);
}
// style the overlay
if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)
lyr2.css(opts.overlayCSS);
lyr2.css('position', full ? 'fixed' : 'absolute');
// make iframe layer transparent in IE
if (msie || opts.forceIframe)
lyr1.css('opacity',0.0);
//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
$.each(layers, function() {
this.appendTo($par);
});
if (opts.theme && opts.draggable && $.fn.draggable) {
lyr3.draggable({
handle: '.ui-dialog-titlebar',
cancel: 'li'
});
}
// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);
if (ie6 || expr) {
// give body 100% height
if (full && opts.allowBodyStretch && $.support.boxModel)
$('html,body').css('height','100%');
// fix ie6 issue when blocked element has a border width
if ((ie6 || !$.support.boxModel) && !full) {
var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
var fixT = t ? '(0 - '+t+')' : 0;
var fixL = l ? '(0 - '+l+')' : 0;
}
// simulate fixed position
$.each(layers, function(i,o) {
var s = o[0].style;
s.position = 'absolute';
if (i < 2) {
if (full)
s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"');
else
s.setExpression('height','this.parentNode.offsetHeight + "px"');
if (full)
s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
else
s.setExpression('width','this.parentNode.offsetWidth + "px"');
if (fixL) s.setExpression('left', fixL);
if (fixT) s.setExpression('top', fixT);
}
else if (opts.centerY) {
if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
s.marginTop = 0;
}
else if (!opts.centerY && full) {
var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;
var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
s.setExpression('top',expression);
}
});
}
// show the message
if (msg) {
if (opts.theme)
lyr3.find('.ui-widget-content').append(msg);
else
lyr3.append(msg);
if (msg.jquery || msg.nodeType)
$(msg).show();
}
if ((msie || opts.forceIframe) && opts.showOverlay)
lyr1.show(); // opacity is zero
if (opts.fadeIn) {
var cb = opts.onBlock ? opts.onBlock : noOp;
var cb1 = (opts.showOverlay && !msg) ? cb : noOp;
var cb2 = msg ? cb : noOp;
if (opts.showOverlay)
lyr2._fadeIn(opts.fadeIn, cb1);
if (msg)
lyr3._fadeIn(opts.fadeIn, cb2);
}
else {
if (opts.showOverlay)
lyr2.show();
if (msg)
lyr3.show();
if (opts.onBlock)
opts.onBlock.bind(lyr3)();
}
// bind key and mouse events
bind(1, el, opts);
if (full) {
pageBlock = lyr3[0];
pageBlockEls = $(opts.focusableElements,pageBlock);
if (opts.focusInput)
setTimeout(focus, 20);
}
else
center(lyr3[0], opts.centerX, opts.centerY);
if (opts.timeout) {
// auto-unblock
var to = setTimeout(function() {
if (full)
$.unblockUI(opts);
else
$(el).unblock(opts);
}, opts.timeout);
$(el).data('blockUI.timeout', to);
}
}
// remove the block
function remove(el, opts) {
var count;
var full = (el == window);
var $el = $(el);
var data = $el.data('blockUI.history');
var to = $el.data('blockUI.timeout');
if (to) {
clearTimeout(to);
$el.removeData('blockUI.timeout');
}
opts = $.extend({}, $.blockUI.defaults, opts || {});
bind(0, el, opts); // unbind events
if (opts.onUnblock === null) {
opts.onUnblock = $el.data('blockUI.onUnblock');
$el.removeData('blockUI.onUnblock');
}
var els;
if (full) // crazy selector to handle odd field errors in ie6/7
els = $('body').children().filter('.blockUI').add('body > .blockUI');
else
els = $el.find('>.blockUI');
// fix cursor issue
if ( opts.cursorReset ) {
if ( els.length > 1 )
els[1].style.cursor = opts.cursorReset;
if ( els.length > 2 )
els[2].style.cursor = opts.cursorReset;
}
if (full)
pageBlock = pageBlockEls = null;
if (opts.fadeOut) {
count = els.length;
els.stop().fadeOut(opts.fadeOut, function() {
if ( --count === 0)
reset(els,data,opts,el);
});
}
else
reset(els, data, opts, el);
}
// move blocking element back into the DOM where it started
function reset(els,data,opts,el) {
var $el = $(el);
if ( $el.data('blockUI.isBlocked') )
return;
els.each(function(i,o) {
// remove via DOM calls so we don't lose event handlers
if (this.parentNode)
this.parentNode.removeChild(this);
});
if (data && data.el) {
data.el.style.display = data.display;
data.el.style.position = data.position;
data.el.style.cursor = 'default'; // #59
if (data.parent)
data.parent.appendChild(data.el);
$el.removeData('blockUI.history');
}
if ($el.data('blockUI.static')) {
$el.css('position', 'static'); // #22
}
if (typeof opts.onUnblock == 'function')
opts.onUnblock(el,opts);
// fix issue in Safari 6 where block artifacts remain until reflow
var body = $(document.body), w = body.width(), cssW = body[0].style.width;
body.width(w-1).width(w);
body[0].style.width = cssW;
}
// bind/unbind the handler
function bind(b, el, opts) {
var full = el == window, $el = $(el);
// don't bother unbinding if there is nothing to unbind
if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
return;
$el.data('blockUI.isBlocked', b);
// don't bind events when overlay is not in use or if bindEvents is false
if (!full || !opts.bindEvents || (b && !opts.showOverlay))
return;
// bind anchors and inputs for mouse and key events
var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';
if (b)
$(document).bind(events, opts, handler);
else
$(document).unbind(events, handler);
// former impl...
// var $e = $('a,:input');
// b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
}
// event handler to suppress keyboard/mouse events when blocking
function handler(e) {
// allow tab navigation (conditionally)
if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {
if (pageBlock && e.data.constrainTabKey) {
var els = pageBlockEls;
var fwd = !e.shiftKey && e.target === els[els.length-1];
var back = e.shiftKey && e.target === els[0];
if (fwd || back) {
setTimeout(function(){focus(back);},10);
return false;
}
}
}
var opts = e.data;
var target = $(e.target);
if (target.hasClass('blockOverlay') && opts.onOverlayClick)
opts.onOverlayClick(e);
// allow events within the message content
if (target.parents('div.' + opts.blockMsgClass).length > 0)
return true;
// allow events for content that is not being blocked
return target.parents().children().filter('div.blockUI').length === 0;
}
function focus(back) {
if (!pageBlockEls)
return;
var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
if (e)
e.focus();
}
function center(el, x, y) {
var p = el.parentNode, s = el.style;
var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
if (x) s.left = l > 0 ? (l+'px') : '0';
if (y) s.top = t > 0 ? (t+'px') : '0';
}
function sz(el, p) {
return parseInt($.css(el,p),10)||0;
}
}
/*global define:true */
if (typeof define === 'function' && define.amd && define.amd.jQuery) {
define(['jquery'], setup);
} else {
setup(jQuery);
}
})();

114
_src/common/js/jquery.cookie.js

@ -0,0 +1,114 @@
/*!
* jQuery Cookie Plugin v1.4.1
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2006, 2014 Klaus Hartl
* Released under the MIT license
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD (Register as an anonymous module)
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// Node/CommonJS
module.exports = factory(require('jquery'));
} else {
// Browser globals
factory(jQuery);
}
}(function ($) {
var pluses = /\+/g;
function encode(s) {
return config.raw ? s : encodeURIComponent(s);
}
function decode(s) {
return config.raw ? s : decodeURIComponent(s);
}
function stringifyCookieValue(value) {
return encode(config.json ? JSON.stringify(value) : String(value));
}
function parseCookieValue(s) {
if (s.indexOf('"') === 0) {
// This is a quoted cookie as according to RFC2068, unescape...
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}
try {
// Replace server-side written pluses with spaces.
// If we can't decode the cookie, ignore it, it's unusable.
// If we can't parse the cookie, ignore it, it's unusable.
s = decodeURIComponent(s.replace(pluses, ' '));
return config.json ? JSON.parse(s) : s;
} catch(e) {}
}
function read(s, converter) {
var value = config.raw ? s : parseCookieValue(s);
return $.isFunction(converter) ? converter(value) : value;
}
var config = $.cookie = function (key, value, options) {
// Write
if (arguments.length > 1 && !$.isFunction(value)) {
options = $.extend({}, config.defaults, options);
if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
}
return (document.cookie = [
encode(key), '=', stringifyCookieValue(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : ''
].join(''));
}
// Read
var result = key ? undefined : {},
// To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all. Also prevents odd result when
// calling $.cookie().
cookies = document.cookie ? document.cookie.split('; ') : [],
i = 0,
l = cookies.length;
for (; i < l; i++) {
var parts = cookies[i].split('='),
name = decode(parts.shift()),
cookie = parts.join('=');
if (key === name) {
// If second argument (value) is a function it's a converter...
result = read(cookie, value);
break;
}
// Prevent storing a cookie that we couldn't decode.
if (!key && (cookie = read(cookie)) !== undefined) {
result[name] = cookie;
}
}
return result;
};
config.defaults = {};
$.removeCookie = function (key, options) {
// Must not alter options, thus extending a fresh object...
$.cookie(key, '', $.extend({}, options, { expires: -1 }));
return !$.cookie(key);
};
}));

194
_src/common/js/member.js

@ -0,0 +1,194 @@
APP.MEMBER = {};
/**
* 회원 관련 자바스크립트 초기화
*/
APP.MEMBER.init = function() {
APP.MEMBER.InitLoginForm(); // 로그인폼 init
APP.MEMBER.initCheckExist();
APP.MEMBER.InitRegisterForm();
APP.MEMBER.InitMemberModifyForm();
};
APP.MEMBER.InitRegisterForm = function() {
$('[data-form="form-register"]').submit(function(e) {
e.preventDefault();
var $form = $(this);
$.ajax({
type : 'PUT',
data : $form.serialize(),
url : base_url + '/ajax/members/info',
success:function(res){
if(res.result == true) {
alert(LANG.member_join_success);
location.href = base_url + "/members/login";
}
}
});
});
};
APP.MEMBER.InitMemberModifyForm = function() {
$('[data-form="form-member-modify"]').submit(function(e) {
e.preventDefault();
var $form = $(this);
$.ajax({
type : 'POST',
data : $form.serialize(),
url : base_url + '/ajax/members/info',
success:function(res){
if(res.result == true) {
alert(res.message);
location.reload();
}
}
});
});
};
/**
* 로그인 초기화
* @constructor
*/
APP.MEMBER.InitLoginForm = function() {
$('[data-role="form-login"]').submit(function (e) {
e.preventDefault();
var $form = $(this);
var elementLoginID = $form.find('[name="login_id"]');
var elementLoginPass = $form.find('[name="login_pass"]');
if(elementLoginID.val().trim() == '')
{
alert(LANG.member_login_userid_required);
elementLoginID.focus();
return false;
}
if(elementLoginPass.val().trim() == '')
{
alert(LANG.member_login_password_required);
elementLoginPass.focus();
return false;
}
$.ajax({
url : base_url + 'ajax/members/login',
type : "POST",
data : $form.serialize(),
success:function(res) {
if (res.result == true) {
location.href = res.reurl ? res.reurl : base_url;
}
},
error : function(e){
elementLoginPass.val('');
}
})
});
};
/**
* 중복확인 버튼 이벤트 연결
*/
APP.MEMBER.initCheckExist = function() {
$('[data-toggle="check-member-exist"]').each(function(){
var $btn = $(this);
$btn.on('click', function(){
var $target = $("#" + $btn.data('target'));
var key = $btn.data('check');
var value = $target.val();
if( typeof value == 'undefined' || ! value || ! value.trim() )
{
alert(LANG.member_join_user_id_required );
$target.focus();
return false;
}
var wordCheck = APP.MEMBER.denyWordCheck(key,value);
if( wordCheck == 'VALID_EMAIL' )
{
alert(LANG.member_join_no_valid_email_address );
$target.focus();
return false;
}
else if(! wordCheck)
{
alert(LANG.member_join_user_id_contains_deny_word );
$target.focus();
return false;
}
if( APP.MEMBER.getInfo(key, value) )
{
alert(LANG.member_join_user_id_already_exists );
$target.focus();
return false;
}
alert(LANG.member_join_user_id_available );
return true;
});
});
};
/**
* 사용자의 정보 가져오기
* @param key 가져올 기준
* @param value
* @returns {*}
*/
APP.MEMBER.getInfo = function(key, value) {
var info = null;
$.ajax({
url : base_url + '/ajax/members/info',
type : 'get',
async : false,
cache : false,
data : {
key : key,
value : value
},
success:function(res){
info = res.result;
}
});
return info;
};
/**
* 아이디와 닉네임 금지단어 사용여부 체크
* @param key 아이디/닉네임
* @param value 체크할
* @returns {*}
*/
APP.MEMBER.denyWordCheck = function(key,value) {
var result = null;
$.ajax({
url : base_url + '/ajax/members/word_check',
type : 'get',
async : false,
cache : false,
data : {
key:key,
value : value
},
success:function(res) {
result = res.result;
}
});
return result;
};
APP.MEMBER.POP_CHANGE_PHOTO = function() {
APP.POPUP({
url : '/members/photo_change',
width : 600,
height :150
});
};
$(document).ready(APP.MEMBER.init);

435
_src/common/js/toastr.js

@ -0,0 +1,435 @@
/*
* Toastr
* Copyright 2012-2015
* Authors: John Papa, Hans Fjällemark, and Tim Ferrell.
* All Rights Reserved.
* Use, reproduction, distribution, and modification of this code is subject to the terms and
* conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php
*
* ARIA Support: Greta Krafsig
*
* Project: https://github.com/CodeSeven/toastr
*/
/* global define */
; (function (define) {
define(['jquery'], function ($) {
return (function () {
var $container;
var listener;
var toastId = 0;
var toastType = {
error: 'error',
info: 'info',
success: 'success',
warning: 'warning'
};
var toastr = {
clear: clear,
remove: remove,
error: error,
getContainer: getContainer,
info: info,
options: {},
subscribe: subscribe,
success: success,
version: '2.1.2',
warning: warning
};
var previousToast;
return toastr;
////////////////
function error(message, title, optionsOverride) {
return notify({
type: toastType.error,
iconClass: getOptions().iconClasses.error,
message: message,
optionsOverride: optionsOverride,
title: title
});
}
function getContainer(options, create) {
if (!options) { options = getOptions(); }
$container = $('#' + options.containerId);
if ($container.length) {
return $container;
}
if (create) {
$container = createContainer(options);
}
return $container;
}
function info(message, title, optionsOverride) {
return notify({
type: toastType.info,
iconClass: getOptions().iconClasses.info,
message: message,
optionsOverride: optionsOverride,
title: title
});
}
function subscribe(callback) {
listener = callback;
}
function success(message, title, optionsOverride) {
return notify({
type: toastType.success,
iconClass: getOptions().iconClasses.success,
message: message,
optionsOverride: optionsOverride,
title: title
});
}
function warning(message, title, optionsOverride) {
return notify({
type: toastType.warning,
iconClass: getOptions().iconClasses.warning,
message: message,
optionsOverride: optionsOverride,
title: title
});
}
function clear($toastElement, clearOptions) {
var options = getOptions();
if (!$container) { getContainer(options); }
if (!clearToast($toastElement, options, clearOptions)) {
clearContainer(options);
}
}
function remove($toastElement) {
var options = getOptions();
if (!$container) { getContainer(options); }
if ($toastElement && $(':focus', $toastElement).length === 0) {
removeToast($toastElement);
return;
}
if ($container.children().length) {
$container.remove();
}
}
// internal functions
function clearContainer (options) {
var toastsToClear = $container.children();
for (var i = toastsToClear.length - 1; i >= 0; i--) {
clearToast($(toastsToClear[i]), options);
}
}
function clearToast ($toastElement, options, clearOptions) {
var force = clearOptions && clearOptions.force ? clearOptions.force : false;
if ($toastElement && (force || $(':focus', $toastElement).length === 0)) {
$toastElement[options.hideMethod]({
duration: options.hideDuration,
easing: options.hideEasing,
complete: function () { removeToast($toastElement); }
});
return true;
}
return false;
}
function createContainer(options) {
$container = $('<div/>')
.attr('id', options.containerId)
.addClass(options.positionClass)
.attr('aria-live', 'polite')
.attr('role', 'alert');
$container.appendTo($(options.target));
return $container;
}
function getDefaults() {
return {
tapToDismiss: true,
toastClass: 'toast',
containerId: 'toast-container',
debug: false,
showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery
showDuration: 300,
showEasing: 'swing', //swing and linear are built into jQuery
onShown: undefined,
hideMethod: 'fadeOut',
hideDuration: 1000,
hideEasing: 'swing',
onHidden: undefined,
closeMethod: false,
closeDuration: false,
closeEasing: false,
extendedTimeOut: 1000,
iconClasses: {
error: 'toast-error',
info: 'toast-info',
success: 'toast-success',
warning: 'toast-warning'
},
iconClass: 'toast-info',
positionClass: 'toast-top-right',
timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky
titleClass: 'toast-title',
messageClass: 'toast-message',
escapeHtml: false,
target: 'body',
closeHtml: '<button type="button">&times;</button>',
newestOnTop: true,
preventDuplicates: false,
progressBar: false
};
}
function publish(args) {
if (!listener) { return; }
listener(args);
}
function notify(map) {
var options = getOptions();
var iconClass = map.iconClass || options.iconClass;
if (typeof (map.optionsOverride) !== 'undefined') {
options = $.extend(options, map.optionsOverride);
iconClass = map.optionsOverride.iconClass || iconClass;
}
if (shouldExit(options, map)) { return; }
toastId++;
$container = getContainer(options, true);
var intervalId = null;
var $toastElement = $('<div/>');
var $titleElement = $('<div/>');
var $messageElement = $('<div/>');
var $progressElement = $('<div/>');
var $closeElement = $(options.closeHtml);
var progressBar = {
intervalId: null,
hideEta: null,
maxHideTime: null
};
var response = {
toastId: toastId,
state: 'visible',
startTime: new Date(),
options: options,
map: map
};
personalizeToast();
displayToast();
handleEvents();
publish(response);
if (options.debug && console) {
console.log(response);
}
return $toastElement;
function escapeHtml(source) {
if (source == null)
source = "";
return new String(source)
.replace(/&/g, '&amp;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;');
}
function personalizeToast() {
setIcon();
setTitle();
setMessage();
setCloseButton();
setProgressBar();
setSequence();
}
function handleEvents() {
$toastElement.hover(stickAround, delayedHideToast);
if (!options.onclick && options.tapToDismiss) {
$toastElement.click(hideToast);
}
if (options.closeButton && $closeElement) {
$closeElement.click(function (event) {
if (event.stopPropagation) {
event.stopPropagation();
} else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {
event.cancelBubble = true;
}
hideToast(true);
});
}
if (options.onclick) {
$toastElement.click(function (event) {
options.onclick(event);
hideToast();
});
}
}
function displayToast() {
$toastElement.hide();
$toastElement[options.showMethod](
{duration: options.showDuration, easing: options.showEasing, complete: options.onShown}
);
if (options.timeOut > 0) {
intervalId = setTimeout(hideToast, options.timeOut);
progressBar.maxHideTime = parseFloat(options.timeOut);
progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;
if (options.progressBar) {
progressBar.intervalId = setInterval(updateProgress, 10);
}
}
}
function setIcon() {
if (map.iconClass) {
$toastElement.addClass(options.toastClass).addClass(iconClass);
}
}
function setSequence() {
if (options.newestOnTop) {
$container.prepend($toastElement);
} else {
$container.append($toastElement);
}
}
function setTitle() {
if (map.title) {
$titleElement.append(!options.escapeHtml ? map.title : escapeHtml(map.title)).addClass(options.titleClass);
$toastElement.append($titleElement);
}
}
function setMessage() {
if (map.message) {
$messageElement.append(!options.escapeHtml ? map.message : escapeHtml(map.message)).addClass(options.messageClass);
$toastElement.append($messageElement);
}
}
function setCloseButton() {
if (options.closeButton) {
$closeElement.addClass('toast-close-button').attr('role', 'button');
$toastElement.prepend($closeElement);
}
}
function setProgressBar() {
if (options.progressBar) {
$progressElement.addClass('toast-progress');
$toastElement.prepend($progressElement);
}
}
function shouldExit(options, map) {
if (options.preventDuplicates) {
if (map.message === previousToast) {
return true;
} else {
previousToast = map.message;
}
}
return false;
}
function hideToast(override) {
var method = override && options.closeMethod !== false ? options.closeMethod : options.hideMethod;
var duration = override && options.closeDuration !== false ?
options.closeDuration : options.hideDuration;
var easing = override && options.closeEasing !== false ? options.closeEasing : options.hideEasing;
if ($(':focus', $toastElement).length && !override) {
return;
}
clearTimeout(progressBar.intervalId);
return $toastElement[method]({
duration: duration,
easing: easing,
complete: function () {
removeToast($toastElement);
if (options.onHidden && response.state !== 'hidden') {
options.onHidden();
}
response.state = 'hidden';
response.endTime = new Date();
publish(response);
}
});
}
function delayedHideToast() {
if (options.timeOut > 0 || options.extendedTimeOut > 0) {
intervalId = setTimeout(hideToast, options.extendedTimeOut);
progressBar.maxHideTime = parseFloat(options.extendedTimeOut);
progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;
}
}
function stickAround() {
clearTimeout(intervalId);
progressBar.hideEta = 0;
$toastElement.stop(true, true)[options.showMethod](
{duration: options.showDuration, easing: options.showEasing}
);
}
function updateProgress() {
var percentage = ((progressBar.hideEta - (new Date().getTime())) / progressBar.maxHideTime) * 100;
$progressElement.width(percentage + '%');
}
}
function getOptions() {
return $.extend({}, getDefaults(), toastr.options);
}
function removeToast($toastElement) {
if (!$container) { $container = getContainer(); }
if ($toastElement.is(':visible')) {
return;
}
$toastElement.remove();
$toastElement = null;
if ($container.children().length === 0) {
$container.remove();
previousToast = undefined;
}
}
})();
});
}(typeof define === 'function' && define.amd ? define : function (deps, factory) {
if (typeof module !== 'undefined' && module.exports) { //Node
module.exports = factory(require('jquery'));
} else {
window.toastr = factory(window.jQuery);
}
}));

64
_src/desktop/scss/_layout.scss

@ -0,0 +1,64 @@
#header {
height:60px;
.navbar-main { background-color: $navbar-default-bg; border-color: $navbar-default-border; border-radius : $navbar-default-border-radius; }
.navbar-main .navbar-brand { color: $navbar-default-brand-color; }
.navbar-main .navbar-brand:hover,
.navbar-main .navbar-brand:focus { color: $navbar-default-brand-hover-color; background-color: $navbar-default-brand-hover-bg; }
.navbar-main .navbar-text { color: $navbar-default-color; }
.navbar-main .navbar-nav {}
.navbar-main .navbar-nav > li > a { color: $navbar-default-link-color; }
.navbar-main .navbar-nav > li > a:hover,
.navbar-main .navbar-nav > li > a:focus { color: $navbar-default-link-hover-color; background-color: $navbar-default-link-hover-bg; }
.navbar-main .navbar-nav > .active > a,
.navbar-main .navbar-nav > .active > a:hover,
.navbar-main .navbar-nav > .active > a:focus { color: $navbar-default-link-active-color; background-color: $navbar-default-link-active-bg; }
.navbar-main .navbar-nav > .disabled > a,
.navbar-main .navbar-nav > .disabled > a:hover,
.navbar-main .navbar-nav > .disabled > a:focus { color: $navbar-default-link-disabled-color; background-color: $navbar-default-link-disabled-bg; }
.navbar-main .navbar-toggle { border-color: $navbar-default-toggle-border-color; }
.navbar-main .navbar-toggle:hover,
.navbar-main .navbar-toggle:focus {background-color: $navbar-default-toggle-hover-bg; }
.navbar-main .navbar-toggle .icon-bar { background-color: $navbar-default-toggle-icon-bar-bg; }
.navbar-main .navbar-collapse,
.navbar-main .navbar-form { border-color: $navbar-default-border;}
.navbar-main .navbar-nav > .open > a,
.navbar-main .navbar-nav > .open > a:hover,
.navbar-main .navbar-nav > .open > a:focus { background-color: $navbar-default-link-active-bg; color: $navbar-default-link-active-color; }
@media (max-width: 768px) {
.navbar-main .navbar-nav > .open .dropdown-menu > li > a { color: $navbar-default-link-color; }
.navbar-main .navbar-nav > .open .dropdown-menu > li > a:hover,
.navbar-main .navbar-nav > .open .dropdown-menu > li > a:focus { color: $navbar-default-link-hover-color; background-color: $navbar-default-link-hover-bg;}
.navbar-main .navbar-nav > .open .dropdown-menu > .active > a,
.navbar-main .navbar-nav > .open .dropdown-menu > .active > a:hover,
.navbar-main .navbar-nav > .open .dropdown-menu > .active > a:focus { color: $navbar-default-link-active-color; background-color: $navbar-default-link-active-bg; }
.navbar-main .navbar-nav > .open .dropdown-menu > .disabled > a,
.navbar-main .navbar-nav > .open .dropdown-menu > .disabled > a:hover,
.navbar-main .navbar-nav > .open .dropdown-menu > .disabled > a:focus {color: $navbar-default-link-disabled-color; background-color: $navbar-default-link-disabled-bg;}
}
.navbar-main .navbar-link,
.navbar-main .btn-link { color: $navbar-default-link-color; }
.navbar-main .navbar-link:hover,
.navbar-main .btn-link:hover,
.navbar-main .btn-link:focus {color: $navbar-default-link-hover-color; }
.navbar-main .btn-link[disabled],
fieldset[disabled] .navbar-main .btn-link,
fieldset[disabled] .navbar-main .btn-link:hover,
fieldset[disabled] .navbar-main .btn-link:focus { color:$navbar-default-link-disabled-color; }
}
body {
//padding-bottom:$footer-height;
}
#contents {
background : $body-bg-color;
padding:30px 0px;
}
#footer {
height:$footer-height;
background : $footer-bg-color;
width:100%;
border-top:$footer-border-top;
}

5
_src/desktop/scss/_mixins.scss

@ -0,0 +1,5 @@
@mixin clearfix{
display:table;
content:'';
clear:both;
}

34
_src/desktop/scss/_variables.scss

@ -0,0 +1,34 @@
/**
* 공통 요소 선언
*/
$primary-color : #3498db;
$primary-hover-color : #256d9c;
$primary-border-color : #0464db;
/**
* 상단 메뉴바
*/
$navbar-default-bg : $primary-color;
$navbar-default-border : $primary-border-color;
$navbar-default-border-radius : 0px;
$navbar-default-brand-color : #fff;
$navbar-default-brand-hover-color : #333;
$navbar-default-brand-hover-bg : $primary-color;
$navbar-default-color : #fff;
$navbar-default-link-color : #fff;
$navbar-default-link-hover-color : #f0f0f0;
$navbar-default-link-hover-bg : $primary-hover-color;
$navbar-default-link-active-color : #f0f0f0;
$navbar-default-link-active-bg : $primary-hover-color;
$navbar-default-link-disabled-color : #898989;
$navbar-default-link-disabled-bg : $primary-color;
$navbar-default-toggle-border-color : $navbar-default-border;
$navbar-default-toggle-hover-bg : $navbar-default-border;
$navbar-default-toggle-icon-bar-bg : $primary-color;
$body-bg-color : #ffffff;
$footer-bg-color : #fefefe;
$footer-border-top: 1px solid #f2f2f2;
$footer-height : 200px;

53
_src/desktop/scss/desktop.scss

@ -0,0 +1,53 @@
@charset "UTF-8";
@import "variables";
@import "mixins";
@import "layout";
@import "pages/members";
@import "pages/board";
@import "pages/social";
/* 높이/너비/마진/패딩 */
@for $i from 2 to 10 {
.H#{$i * 5} {
height: 5px * $i !important;
}
}
@for $i from 2 to 20 {
.W#{$i * 25} {
width: 25px * $i !important;
}
}
@for $i from 1 to 10 {
.M#{$i * 5} {
margin:5px * $i;
}
.MT#{$i * 5} {
margin-top:5px * $i;
}
.MR#{$i*5} {
margin-right:5px * $i;
}
.MB#{$i * 5} {
margin-bottom:5px * $i;
}
.ML#{$i * 5} {
margin-left:5px * $i;
}
.PT#{$i * 5} {
padding-top:5px * $i;
}
.PR#{$i * 5} {
padding-right:5px * $i;
}
.PB#{$i * 5} {
padding-bottom:5px * $i;
}
.PL#{$i * 5} {
padding-left:5px * $i;
}
.P#{$i * 5} {
padding:5px * $i;
}
}

79
_src/desktop/scss/pages/_board.scss

@ -0,0 +1,79 @@
// BASIC 게시판 스킨
#skin-board-basic {
// 게시판 카테고리
.board-category {
margin:0;
padding:0;
list-style:none;
font-size:0px;
padding:15px;
background:#fff;
border:1px solid #ccc;
> li {
display:inline-block;
vertical-align:top;
+ li {
margin-left:15px;
}
a {
color:#282828;
text-decoration:none;
text-align:center;
display:block;
&:hover {
color:#989898;
}
}
> a {
font-size:16px;
border-bottom:1px solid #ccc;
padding:5px 12px;
}
> ul {
margin:0;
padding:0;
list-style:none;
> li {
display:block;
> a {
font-size:14px;
padding:3px 6px;;
}
}
}
}
} // 게시판 카테고리
// 상세보기 항목들
.post-info {
dl {
display:inline-block;
dt,dd {
display:inline-block;
}
+ dl {
&:before {
display:inline-block;
content : '';
width:1px;
height:8px;
background:#ccc;
margin:0px 5px;
}
}
}
}
}

116
_src/desktop/scss/pages/_members.scss

@ -0,0 +1,116 @@
#login-form {
&, * {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
width:100%;
height:100%;
padding:20px 0;
.login-wrap {
width:300px;
margin: 20px auto;
border:1px solid $primary-color;
.login {
background-color: #FFF;
padding: 20px;
border-radius: 5px;
header h1 {
text-align: center;
color: #777;
font-size:1.67em;
margin:0.67em 0;
}
legend {
display:none;
}
.login-form {
text-align:center;
.control-group {
margin-bottom: 10px;
&:after {
@include clearfix;
}
> label {
display:none;
}
> input {
text-align: center;
background-color: #ECF0F1;
border: 2px solid transparent;
border-radius: 3px;
font-size: 16px;
font-weight: 200;
padding: 10px 0;
width: 250px;
transition: border .5s;
&:focus {
border: 2px solid $primary-color;
box-shadow: none;
}
}
.checkbox {
text-align:left;
}
}
.btn {
border: 2px solid transparent;
background: $primary-color;
color: #ffffff;
font-size: 16px;
line-height: 25px;
padding: 10px 0;
text-decoration: none;
text-shadow: none;
border-radius: 3px;
box-shadow: none;
transition: 0.25s;
display: block;
width: 250px;
margin: 0 auto;
cursor:pointer;
&:hover {
background-color: $primary-hover-color;
}
}
.social-login {
margin:15px 0px 0px 0px;
padding:0;
list-style:none;
&, li {
font-size:0px;
}
li {
&, a {
display:inline-block;
}
a > img {
display:block; margin:0 auto;
}
+ li {
margin-left:5px;
}
}
}
}
}
}
}

61
_src/desktop/scss/pages/_social.scss

@ -0,0 +1,61 @@
// 소셜 공유 버튼
.sns-share-wrap {
overflow:hidden;
padding:20px 0;
background-color:#fff;
.sns-share-list {
margin:0;
padding:0px;
list-style:none;
white-space:nowrap;
display:inline-block;
vertical-align:middle;
height:32px;
float:right;
&:after {
clear:both; content:''; display:table;
}
li {
display:block; width:32px; height:32px; float:left;
+ li {
margin-left:5px;
}
a {
display:block;
width:32px;
height:32px;
text-indent:-9999px;
overflow:hidden;
background-image:url('../images/social/sns_buttons.png');
background-repeat:no-repeat;
background-size:cover;
&[data-service="facebook"] {
background-position-x:0px;
}
&[data-service="google"] {
background-position-x:-32px;
}
&[data-service="kakaostory"] {
background-position-x:-64px;
}
&[data-service="band"] {
background-position-x:-96px;
}
&[data-service="naver"] {
background-position-x:-128px;
}
} // a
} // li
} // .sns-share-list
} //.sns-share-wrap

20
_src/plugins/fontawesome5/_animated.scss

@ -0,0 +1,20 @@
// Animated Icons
// --------------------------
.#{$fa-css-prefix}-spin {
animation: fa-spin 2s infinite linear;
}
.#{$fa-css-prefix}-pulse {
animation: fa-spin 1s infinite steps(8);
}
@keyframes fa-spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}

20
_src/plugins/fontawesome5/_bordered-pulled.scss

@ -0,0 +1,20 @@
// Bordered & Pulled
// -------------------------
.#{$fa-css-prefix}-border {
border: solid .08em $fa-border-color;
border-radius: .1em;
padding: .2em .25em .15em;
}
.#{$fa-css-prefix}-pull-left { float: left; }
.#{$fa-css-prefix}-pull-right { float: right; }
.#{$fa-css-prefix},
.fas,
.far,
.fal,
.fab {
&.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
&.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
}

16
_src/plugins/fontawesome5/_core.scss

@ -0,0 +1,16 @@
// Base Class Definition
// -------------------------
.#{$fa-css-prefix},
.fas,
.far,
.fal,
.fab {
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: inline-block;
font-style: normal;
font-variant: normal;
text-rendering: auto;
line-height: 1;
}

6
_src/plugins/fontawesome5/_fixed-width.scss

@ -0,0 +1,6 @@
// Fixed Width Icons
// -------------------------
.#{$fa-css-prefix}-fw {
text-align: center;
width: (20em / 16);
}

995
_src/plugins/fontawesome5/_icons.scss

@ -0,0 +1,995 @@
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */
.#{$fa-css-prefix}-500px:before { content: fa-content($fa-var-500px); }
.#{$fa-css-prefix}-accessible-icon:before { content: fa-content($fa-var-accessible-icon); }
.#{$fa-css-prefix}-accusoft:before { content: fa-content($fa-var-accusoft); }
.#{$fa-css-prefix}-address-book:before { content: fa-content($fa-var-address-book); }
.#{$fa-css-prefix}-address-card:before { content: fa-content($fa-var-address-card); }
.#{$fa-css-prefix}-adjust:before { content: fa-content($fa-var-adjust); }
.#{$fa-css-prefix}-adn:before { content: fa-content($fa-var-adn); }
.#{$fa-css-prefix}-adversal:before { content: fa-content($fa-var-adversal); }
.#{$fa-css-prefix}-affiliatetheme:before { content: fa-content($fa-var-affiliatetheme); }
.#{$fa-css-prefix}-alarm-clock:before { content: fa-content($fa-var-alarm-clock); }
.#{$fa-css-prefix}-algolia:before { content: fa-content($fa-var-algolia); }
.#{$fa-css-prefix}-align-center:before { content: fa-content($fa-var-align-center); }
.#{$fa-css-prefix}-align-justify:before { content: fa-content($fa-var-align-justify); }
.#{$fa-css-prefix}-align-left:before { content: fa-content($fa-var-align-left); }
.#{$fa-css-prefix}-align-right:before { content: fa-content($fa-var-align-right); }
.#{$fa-css-prefix}-amazon:before { content: fa-content($fa-var-amazon); }
.#{$fa-css-prefix}-amazon-pay:before { content: fa-content($fa-var-amazon-pay); }
.#{$fa-css-prefix}-ambulance:before { content: fa-content($fa-var-ambulance); }
.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: fa-content($fa-var-american-sign-language-interpreting); }
.#{$fa-css-prefix}-amilia:before { content: fa-content($fa-var-amilia); }
.#{$fa-css-prefix}-anchor:before { content: fa-content($fa-var-anchor); }
.#{$fa-css-prefix}-android:before { content: fa-content($fa-var-android); }
.#{$fa-css-prefix}-angellist:before { content: fa-content($fa-var-angellist); }
.#{$fa-css-prefix}-angle-double-down:before { content: fa-content($fa-var-angle-double-down); }
.#{$fa-css-prefix}-angle-double-left:before { content: fa-content($fa-var-angle-double-left); }
.#{$fa-css-prefix}-angle-double-right:before { content: fa-content($fa-var-angle-double-right); }
.#{$fa-css-prefix}-angle-double-up:before { content: fa-content($fa-var-angle-double-up); }
.#{$fa-css-prefix}-angle-down:before { content: fa-content($fa-var-angle-down); }
.#{$fa-css-prefix}-angle-left:before { content: fa-content($fa-var-angle-left); }
.#{$fa-css-prefix}-angle-right:before { content: fa-content($fa-var-angle-right); }
.#{$fa-css-prefix}-angle-up:before { content: fa-content($fa-var-angle-up); }
.#{$fa-css-prefix}-angrycreative:before { content: fa-content($fa-var-angrycreative); }
.#{$fa-css-prefix}-angular:before { content: fa-content($fa-var-angular); }
.#{$fa-css-prefix}-app-store:before { content: fa-content($fa-var-app-store); }
.#{$fa-css-prefix}-app-store-ios:before { content: fa-content($fa-var-app-store-ios); }
.#{$fa-css-prefix}-apper:before { content: fa-content($fa-var-apper); }
.#{$fa-css-prefix}-apple:before { content: fa-content($fa-var-apple); }
.#{$fa-css-prefix}-apple-pay:before { content: fa-content($fa-var-apple-pay); }
.#{$fa-css-prefix}-archive:before { content: fa-content($fa-var-archive); }
.#{$fa-css-prefix}-arrow-alt-circle-down:before { content: fa-content($fa-var-arrow-alt-circle-down); }
.#{$fa-css-prefix}-arrow-alt-circle-left:before { content: fa-content($fa-var-arrow-alt-circle-left); }
.#{$fa-css-prefix}-arrow-alt-circle-right:before { content: fa-content($fa-var-arrow-alt-circle-right); }
.#{$fa-css-prefix}-arrow-alt-circle-up:before { content: fa-content($fa-var-arrow-alt-circle-up); }
.#{$fa-css-prefix}-arrow-alt-down:before { content: fa-content($fa-var-arrow-alt-down); }
.#{$fa-css-prefix}-arrow-alt-from-bottom:before { content: fa-content($fa-var-arrow-alt-from-bottom); }
.#{$fa-css-prefix}-arrow-alt-from-left:before { content: fa-content($fa-var-arrow-alt-from-left); }
.#{$fa-css-prefix}-arrow-alt-from-right:before { content: fa-content($fa-var-arrow-alt-from-right); }
.#{$fa-css-prefix}-arrow-alt-from-top:before { content: fa-content($fa-var-arrow-alt-from-top); }
.#{$fa-css-prefix}-arrow-alt-left:before { content: fa-content($fa-var-arrow-alt-left); }
.#{$fa-css-prefix}-arrow-alt-right:before { content: fa-content($fa-var-arrow-alt-right); }
.#{$fa-css-prefix}-arrow-alt-square-down:before { content: fa-content($fa-var-arrow-alt-square-down); }
.#{$fa-css-prefix}-arrow-alt-square-left:before { content: fa-content($fa-var-arrow-alt-square-left); }
.#{$fa-css-prefix}-arrow-alt-square-right:before { content: fa-content($fa-var-arrow-alt-square-right); }
.#{$fa-css-prefix}-arrow-alt-square-up:before { content: fa-content($fa-var-arrow-alt-square-up); }
.#{$fa-css-prefix}-arrow-alt-to-bottom:before { content: fa-content($fa-var-arrow-alt-to-bottom); }
.#{$fa-css-prefix}-arrow-alt-to-left:before { content: fa-content($fa-var-arrow-alt-to-left); }
.#{$fa-css-prefix}-arrow-alt-to-right:before { content: fa-content($fa-var-arrow-alt-to-right); }
.#{$fa-css-prefix}-arrow-alt-to-top:before { content: fa-content($fa-var-arrow-alt-to-top); }
.#{$fa-css-prefix}-arrow-alt-up:before { content: fa-content($fa-var-arrow-alt-up); }
.#{$fa-css-prefix}-arrow-circle-down:before { content: fa-content($fa-var-arrow-circle-down); }
.#{$fa-css-prefix}-arrow-circle-left:before { content: fa-content($fa-var-arrow-circle-left); }
.#{$fa-css-prefix}-arrow-circle-right:before { content: fa-content($fa-var-arrow-circle-right); }
.#{$fa-css-prefix}-arrow-circle-up:before { content: fa-content($fa-var-arrow-circle-up); }
.#{$fa-css-prefix}-arrow-down:before { content: fa-content($fa-var-arrow-down); }
.#{$fa-css-prefix}-arrow-from-bottom:before { content: fa-content($fa-var-arrow-from-bottom); }
.#{$fa-css-prefix}-arrow-from-left:before { content: fa-content($fa-var-arrow-from-left); }
.#{$fa-css-prefix}-arrow-from-right:before { content: fa-content($fa-var-arrow-from-right); }
.#{$fa-css-prefix}-arrow-from-top:before { content: fa-content($fa-var-arrow-from-top); }
.#{$fa-css-prefix}-arrow-left:before { content: fa-content($fa-var-arrow-left); }
.#{$fa-css-prefix}-arrow-right:before { content: fa-content($fa-var-arrow-right); }
.#{$fa-css-prefix}-arrow-square-down:before { content: fa-content($fa-var-arrow-square-down); }
.#{$fa-css-prefix}-arrow-square-left:before { content: fa-content($fa-var-arrow-square-left); }
.#{$fa-css-prefix}-arrow-square-right:before { content: fa-content($fa-var-arrow-square-right); }
.#{$fa-css-prefix}-arrow-square-up:before { content: fa-content($fa-var-arrow-square-up); }
.#{$fa-css-prefix}-arrow-to-bottom:before { content: fa-content($fa-var-arrow-to-bottom); }
.#{$fa-css-prefix}-arrow-to-left:before { content: fa-content($fa-var-arrow-to-left); }
.#{$fa-css-prefix}-arrow-to-right:before { content: fa-content($fa-var-arrow-to-right); }
.#{$fa-css-prefix}-arrow-to-top:before { content: fa-content($fa-var-arrow-to-top); }
.#{$fa-css-prefix}-arrow-up:before { content: fa-content($fa-var-arrow-up); }
.#{$fa-css-prefix}-arrows:before { content: fa-content($fa-var-arrows); }
.#{$fa-css-prefix}-arrows-alt:before { content: fa-content($fa-var-arrows-alt); }
.#{$fa-css-prefix}-arrows-alt-h:before { content: fa-content($fa-var-arrows-alt-h); }
.#{$fa-css-prefix}-arrows-alt-v:before { content: fa-content($fa-var-arrows-alt-v); }
.#{$fa-css-prefix}-arrows-h:before { content: fa-content($fa-var-arrows-h); }
.#{$fa-css-prefix}-arrows-v:before { content: fa-content($fa-var-arrows-v); }
.#{$fa-css-prefix}-assistive-listening-systems:before { content: fa-content($fa-var-assistive-listening-systems); }
.#{$fa-css-prefix}-asterisk:before { content: fa-content($fa-var-asterisk); }
.#{$fa-css-prefix}-asymmetrik:before { content: fa-content($fa-var-asymmetrik); }
.#{$fa-css-prefix}-at:before { content: fa-content($fa-var-at); }
.#{$fa-css-prefix}-audible:before { content: fa-content($fa-var-audible); }
.#{$fa-css-prefix}-audio-description:before { content: fa-content($fa-var-audio-description); }
.#{$fa-css-prefix}-autoprefixer:before { content: fa-content($fa-var-autoprefixer); }
.#{$fa-css-prefix}-avianex:before { content: fa-content($fa-var-avianex); }
.#{$fa-css-prefix}-aviato:before { content: fa-content($fa-var-aviato); }
.#{$fa-css-prefix}-aws:before { content: fa-content($fa-var-aws); }
.#{$fa-css-prefix}-backward:before { content: fa-content($fa-var-backward); }
.#{$fa-css-prefix}-badge:before { content: fa-content($fa-var-badge); }
.#{$fa-css-prefix}-badge-check:before { content: fa-content($fa-var-badge-check); }
.#{$fa-css-prefix}-balance-scale:before { content: fa-content($fa-var-balance-scale); }
.#{$fa-css-prefix}-ban:before { content: fa-content($fa-var-ban); }
.#{$fa-css-prefix}-bandcamp:before { content: fa-content($fa-var-bandcamp); }
.#{$fa-css-prefix}-barcode:before { content: fa-content($fa-var-barcode); }
.#{$fa-css-prefix}-bars:before { content: fa-content($fa-var-bars); }
.#{$fa-css-prefix}-baseball:before { content: fa-content($fa-var-baseball); }
.#{$fa-css-prefix}-baseball-ball:before { content: fa-content($fa-var-baseball-ball); }
.#{$fa-css-prefix}-basketball-ball:before { content: fa-content($fa-var-basketball-ball); }
.#{$fa-css-prefix}-basketball-hoop:before { content: fa-content($fa-var-basketball-hoop); }
.#{$fa-css-prefix}-bath:before { content: fa-content($fa-var-bath); }
.#{$fa-css-prefix}-battery-bolt:before { content: fa-content($fa-var-battery-bolt); }
.#{$fa-css-prefix}-battery-empty:before { content: fa-content($fa-var-battery-empty); }
.#{$fa-css-prefix}-battery-full:before { content: fa-content($fa-var-battery-full); }
.#{$fa-css-prefix}-battery-half:before { content: fa-content($fa-var-battery-half); }
.#{$fa-css-prefix}-battery-quarter:before { content: fa-content($fa-var-battery-quarter); }
.#{$fa-css-prefix}-battery-slash:before { content: fa-content($fa-var-battery-slash); }
.#{$fa-css-prefix}-battery-three-quarters:before { content: fa-content($fa-var-battery-three-quarters); }
.#{$fa-css-prefix}-bed:before { content: fa-content($fa-var-bed); }
.#{$fa-css-prefix}-beer:before { content: fa-content($fa-var-beer); }
.#{$fa-css-prefix}-behance:before { content: fa-content($fa-var-behance); }
.#{$fa-css-prefix}-behance-square:before { content: fa-content($fa-var-behance-square); }
.#{$fa-css-prefix}-bell:before { content: fa-content($fa-var-bell); }
.#{$fa-css-prefix}-bell-slash:before { content: fa-content($fa-var-bell-slash); }
.#{$fa-css-prefix}-bicycle:before { content: fa-content($fa-var-bicycle); }
.#{$fa-css-prefix}-bimobject:before { content: fa-content($fa-var-bimobject); }
.#{$fa-css-prefix}-binoculars:before { content: fa-content($fa-var-binoculars); }
.#{$fa-css-prefix}-birthday-cake:before { content: fa-content($fa-var-birthday-cake); }
.#{$fa-css-prefix}-bitbucket:before { content: fa-content($fa-var-bitbucket); }
.#{$fa-css-prefix}-bitcoin:before { content: fa-content($fa-var-bitcoin); }
.#{$fa-css-prefix}-bity:before { content: fa-content($fa-var-bity); }
.#{$fa-css-prefix}-black-tie:before { content: fa-content($fa-var-black-tie); }
.#{$fa-css-prefix}-blackberry:before { content: fa-content($fa-var-blackberry); }
.#{$fa-css-prefix}-blind:before { content: fa-content($fa-var-blind); }
.#{$fa-css-prefix}-blogger:before { content: fa-content($fa-var-blogger); }
.#{$fa-css-prefix}-blogger-b:before { content: fa-content($fa-var-blogger-b); }
.#{$fa-css-prefix}-bluetooth:before { content: fa-content($fa-var-bluetooth); }
.#{$fa-css-prefix}-bluetooth-b:before { content: fa-content($fa-var-bluetooth-b); }
.#{$fa-css-prefix}-bold:before { content: fa-content($fa-var-bold); }
.#{$fa-css-prefix}-bolt:before { content: fa-content($fa-var-bolt); }
.#{$fa-css-prefix}-bomb:before { content: fa-content($fa-var-bomb); }
.#{$fa-css-prefix}-book:before { content: fa-content($fa-var-book); }
.#{$fa-css-prefix}-bookmark:before { content: fa-content($fa-var-bookmark); }
.#{$fa-css-prefix}-bowling-ball:before { content: fa-content($fa-var-bowling-ball); }
.#{$fa-css-prefix}-bowling-pins:before { content: fa-content($fa-var-bowling-pins); }
.#{$fa-css-prefix}-boxing-glove:before { content: fa-content($fa-var-boxing-glove); }
.#{$fa-css-prefix}-braille:before { content: fa-content($fa-var-braille); }
.#{$fa-css-prefix}-briefcase:before { content: fa-content($fa-var-briefcase); }
.#{$fa-css-prefix}-browser:before { content: fa-content($fa-var-browser); }
.#{$fa-css-prefix}-btc:before { content: fa-content($fa-var-btc); }
.#{$fa-css-prefix}-bug:before { content: fa-content($fa-var-bug); }
.#{$fa-css-prefix}-building:before { content: fa-content($fa-var-building); }
.#{$fa-css-prefix}-bullhorn:before { content: fa-content($fa-var-bullhorn); }
.#{$fa-css-prefix}-bullseye:before { content: fa-content($fa-var-bullseye); }
.#{$fa-css-prefix}-buromobelexperte:before { content: fa-content($fa-var-buromobelexperte); }
.#{$fa-css-prefix}-bus:before { content: fa-content($fa-var-bus); }
.#{$fa-css-prefix}-buysellads:before { content: fa-content($fa-var-buysellads); }
.#{$fa-css-prefix}-calculator:before { content: fa-content($fa-var-calculator); }
.#{$fa-css-prefix}-calendar:before { content: fa-content($fa-var-calendar); }
.#{$fa-css-prefix}-calendar-alt:before { content: fa-content($fa-var-calendar-alt); }
.#{$fa-css-prefix}-calendar-check:before { content: fa-content($fa-var-calendar-check); }
.#{$fa-css-prefix}-calendar-edit:before { content: fa-content($fa-var-calendar-edit); }
.#{$fa-css-prefix}-calendar-exclamation:before { content: fa-content($fa-var-calendar-exclamation); }
.#{$fa-css-prefix}-calendar-minus:before { content: fa-content($fa-var-calendar-minus); }
.#{$fa-css-prefix}-calendar-plus:before { content: fa-content($fa-var-calendar-plus); }
.#{$fa-css-prefix}-calendar-times:before { content: fa-content($fa-var-calendar-times); }
.#{$fa-css-prefix}-camera:before { content: fa-content($fa-var-camera); }
.#{$fa-css-prefix}-camera-alt:before { content: fa-content($fa-var-camera-alt); }
.#{$fa-css-prefix}-camera-retro:before { content: fa-content($fa-var-camera-retro); }
.#{$fa-css-prefix}-car:before { content: fa-content($fa-var-car); }
.#{$fa-css-prefix}-caret-circle-down:before { content: fa-content($fa-var-caret-circle-down); }
.#{$fa-css-prefix}-caret-circle-left:before { content: fa-content($fa-var-caret-circle-left); }
.#{$fa-css-prefix}-caret-circle-right:before { content: fa-content($fa-var-caret-circle-right); }
.#{$fa-css-prefix}-caret-circle-up:before { content: fa-content($fa-var-caret-circle-up); }
.#{$fa-css-prefix}-caret-down:before { content: fa-content($fa-var-caret-down); }
.#{$fa-css-prefix}-caret-left:before { content: fa-content($fa-var-caret-left); }
.#{$fa-css-prefix}-caret-right:before { content: fa-content($fa-var-caret-right); }
.#{$fa-css-prefix}-caret-square-down:before { content: fa-content($fa-var-caret-square-down); }
.#{$fa-css-prefix}-caret-square-left:before { content: fa-content($fa-var-caret-square-left); }
.#{$fa-css-prefix}-caret-square-right:before { content: fa-content($fa-var-caret-square-right); }
.#{$fa-css-prefix}-caret-square-up:before { content: fa-content($fa-var-caret-square-up); }
.#{$fa-css-prefix}-caret-up:before { content: fa-content($fa-var-caret-up); }
.#{$fa-css-prefix}-cart-arrow-down:before { content: fa-content($fa-var-cart-arrow-down); }
.#{$fa-css-prefix}-cart-plus:before { content: fa-content($fa-var-cart-plus); }
.#{$fa-css-prefix}-cc-amazon-pay:before { content: fa-content($fa-var-cc-amazon-pay); }
.#{$fa-css-prefix}-cc-amex:before { content: fa-content($fa-var-cc-amex); }
.#{$fa-css-prefix}-cc-apple-pay:before { content: fa-content($fa-var-cc-apple-pay); }
.#{$fa-css-prefix}-cc-diners-club:before { content: fa-content($fa-var-cc-diners-club); }
.#{$fa-css-prefix}-cc-discover:before { content: fa-content($fa-var-cc-discover); }
.#{$fa-css-prefix}-cc-jcb:before { content: fa-content($fa-var-cc-jcb); }
.#{$fa-css-prefix}-cc-mastercard:before { content: fa-content($fa-var-cc-mastercard); }
.#{$fa-css-prefix}-cc-paypal:before { content: fa-content($fa-var-cc-paypal); }
.#{$fa-css-prefix}-cc-stripe:before { content: fa-content($fa-var-cc-stripe); }
.#{$fa-css-prefix}-cc-visa:before { content: fa-content($fa-var-cc-visa); }
.#{$fa-css-prefix}-centercode:before { content: fa-content($fa-var-centercode); }
.#{$fa-css-prefix}-certificate:before { content: fa-content($fa-var-certificate); }
.#{$fa-css-prefix}-chart-area:before { content: fa-content($fa-var-chart-area); }
.#{$fa-css-prefix}-chart-bar:before { content: fa-content($fa-var-chart-bar); }
.#{$fa-css-prefix}-chart-line:before { content: fa-content($fa-var-chart-line); }
.#{$fa-css-prefix}-chart-pie:before { content: fa-content($fa-var-chart-pie); }
.#{$fa-css-prefix}-check:before { content: fa-content($fa-var-check); }
.#{$fa-css-prefix}-check-circle:before { content: fa-content($fa-var-check-circle); }
.#{$fa-css-prefix}-check-square:before { content: fa-content($fa-var-check-square); }
.#{$fa-css-prefix}-chess:before { content: fa-content($fa-var-chess); }
.#{$fa-css-prefix}-chess-bishop:before { content: fa-content($fa-var-chess-bishop); }
.#{$fa-css-prefix}-chess-bishop-alt:before { content: fa-content($fa-var-chess-bishop-alt); }
.#{$fa-css-prefix}-chess-board:before { content: fa-content($fa-var-chess-board); }
.#{$fa-css-prefix}-chess-clock:before { content: fa-content($fa-var-chess-clock); }
.#{$fa-css-prefix}-chess-clock-alt:before { content: fa-content($fa-var-chess-clock-alt); }
.#{$fa-css-prefix}-chess-king:before { content: fa-content($fa-var-chess-king); }
.#{$fa-css-prefix}-chess-king-alt:before { content: fa-content($fa-var-chess-king-alt); }
.#{$fa-css-prefix}-chess-knight:before { content: fa-content($fa-var-chess-knight); }
.#{$fa-css-prefix}-chess-knight-alt:before { content: fa-content($fa-var-chess-knight-alt); }
.#{$fa-css-prefix}-chess-pawn:before { content: fa-content($fa-var-chess-pawn); }
.#{$fa-css-prefix}-chess-pawn-alt:before { content: fa-content($fa-var-chess-pawn-alt); }
.#{$fa-css-prefix}-chess-queen:before { content: fa-content($fa-var-chess-queen); }
.#{$fa-css-prefix}-chess-queen-alt:before { content: fa-content($fa-var-chess-queen-alt); }
.#{$fa-css-prefix}-chess-rook:before { content: fa-content($fa-var-chess-rook); }
.#{$fa-css-prefix}-chess-rook-alt:before { content: fa-content($fa-var-chess-rook-alt); }
.#{$fa-css-prefix}-chevron-circle-down:before { content: fa-content($fa-var-chevron-circle-down); }
.#{$fa-css-prefix}-chevron-circle-left:before { content: fa-content($fa-var-chevron-circle-left); }
.#{$fa-css-prefix}-chevron-circle-right:before { content: fa-content($fa-var-chevron-circle-right); }
.#{$fa-css-prefix}-chevron-circle-up:before { content: fa-content($fa-var-chevron-circle-up); }
.#{$fa-css-prefix}-chevron-double-down:before { content: fa-content($fa-var-chevron-double-down); }
.#{$fa-css-prefix}-chevron-double-left:before { content: fa-content($fa-var-chevron-double-left); }
.#{$fa-css-prefix}-chevron-double-right:before { content: fa-content($fa-var-chevron-double-right); }
.#{$fa-css-prefix}-chevron-double-up:before { content: fa-content($fa-var-chevron-double-up); }
.#{$fa-css-prefix}-chevron-down:before { content: fa-content($fa-var-chevron-down); }
.#{$fa-css-prefix}-chevron-left:before { content: fa-content($fa-var-chevron-left); }
.#{$fa-css-prefix}-chevron-right:before { content: fa-content($fa-var-chevron-right); }
.#{$fa-css-prefix}-chevron-square-down:before { content: fa-content($fa-var-chevron-square-down); }
.#{$fa-css-prefix}-chevron-square-left:before { content: fa-content($fa-var-chevron-square-left); }
.#{$fa-css-prefix}-chevron-square-right:before { content: fa-content($fa-var-chevron-square-right); }
.#{$fa-css-prefix}-chevron-square-up:before { content: fa-content($fa-var-chevron-square-up); }
.#{$fa-css-prefix}-chevron-up:before { content: fa-content($fa-var-chevron-up); }
.#{$fa-css-prefix}-child:before { content: fa-content($fa-var-child); }
.#{$fa-css-prefix}-chrome:before { content: fa-content($fa-var-chrome); }
.#{$fa-css-prefix}-circle:before { content: fa-content($fa-var-circle); }
.#{$fa-css-prefix}-circle-notch:before { content: fa-content($fa-var-circle-notch); }
.#{$fa-css-prefix}-clipboard:before { content: fa-content($fa-var-clipboard); }
.#{$fa-css-prefix}-clock:before { content: fa-content($fa-var-clock); }
.#{$fa-css-prefix}-clone:before { content: fa-content($fa-var-clone); }
.#{$fa-css-prefix}-closed-captioning:before { content: fa-content($fa-var-closed-captioning); }
.#{$fa-css-prefix}-cloud:before { content: fa-content($fa-var-cloud); }
.#{$fa-css-prefix}-cloud-download:before { content: fa-content($fa-var-cloud-download); }
.#{$fa-css-prefix}-cloud-download-alt:before { content: fa-content($fa-var-cloud-download-alt); }
.#{$fa-css-prefix}-cloud-upload:before { content: fa-content($fa-var-cloud-upload); }
.#{$fa-css-prefix}-cloud-upload-alt:before { content: fa-content($fa-var-cloud-upload-alt); }
.#{$fa-css-prefix}-cloudscale:before { content: fa-content($fa-var-cloudscale); }
.#{$fa-css-prefix}-cloudsmith:before { content: fa-content($fa-var-cloudsmith); }
.#{$fa-css-prefix}-cloudversify:before { content: fa-content($fa-var-cloudversify); }
.#{$fa-css-prefix}-club:before { content: fa-content($fa-var-club); }
.#{$fa-css-prefix}-code:before { content: fa-content($fa-var-code); }
.#{$fa-css-prefix}-code-branch:before { content: fa-content($fa-var-code-branch); }
.#{$fa-css-prefix}-code-commit:before { content: fa-content($fa-var-code-commit); }
.#{$fa-css-prefix}-code-merge:before { content: fa-content($fa-var-code-merge); }
.#{$fa-css-prefix}-codepen:before { content: fa-content($fa-var-codepen); }
.#{$fa-css-prefix}-codiepie:before { content: fa-content($fa-var-codiepie); }
.#{$fa-css-prefix}-coffee:before { content: fa-content($fa-var-coffee); }
.#{$fa-css-prefix}-cog:before { content: fa-content($fa-var-cog); }
.#{$fa-css-prefix}-cogs:before { content: fa-content($fa-var-cogs); }
.#{$fa-css-prefix}-columns:before { content: fa-content($fa-var-columns); }
.#{$fa-css-prefix}-comment:before { content: fa-content($fa-var-comment); }
.#{$fa-css-prefix}-comment-alt:before { content: fa-content($fa-var-comment-alt); }
.#{$fa-css-prefix}-comments:before { content: fa-content($fa-var-comments); }
.#{$fa-css-prefix}-compass:before { content: fa-content($fa-var-compass); }
.#{$fa-css-prefix}-compress:before { content: fa-content($fa-var-compress); }
.#{$fa-css-prefix}-compress-alt:before { content: fa-content($fa-var-compress-alt); }
.#{$fa-css-prefix}-compress-wide:before { content: fa-content($fa-var-compress-wide); }
.#{$fa-css-prefix}-connectdevelop:before { content: fa-content($fa-var-connectdevelop); }
.#{$fa-css-prefix}-contao:before { content: fa-content($fa-var-contao); }
.#{$fa-css-prefix}-copy:before { content: fa-content($fa-var-copy); }
.#{$fa-css-prefix}-copyright:before { content: fa-content($fa-var-copyright); }
.#{$fa-css-prefix}-cpanel:before { content: fa-content($fa-var-cpanel); }
.#{$fa-css-prefix}-creative-commons:before { content: fa-content($fa-var-creative-commons); }
.#{$fa-css-prefix}-credit-card:before { content: fa-content($fa-var-credit-card); }
.#{$fa-css-prefix}-credit-card-blank:before { content: fa-content($fa-var-credit-card-blank); }
.#{$fa-css-prefix}-credit-card-front:before { content: fa-content($fa-var-credit-card-front); }
.#{$fa-css-prefix}-cricket:before { content: fa-content($fa-var-cricket); }
.#{$fa-css-prefix}-crop:before { content: fa-content($fa-var-crop); }
.#{$fa-css-prefix}-crosshairs:before { content: fa-content($fa-var-crosshairs); }
.#{$fa-css-prefix}-css3:before { content: fa-content($fa-var-css3); }
.#{$fa-css-prefix}-css3-alt:before { content: fa-content($fa-var-css3-alt); }
.#{$fa-css-prefix}-cube:before { content: fa-content($fa-var-cube); }
.#{$fa-css-prefix}-cubes:before { content: fa-content($fa-var-cubes); }
.#{$fa-css-prefix}-curling:before { content: fa-content($fa-var-curling); }
.#{$fa-css-prefix}-cut:before { content: fa-content($fa-var-cut); }
.#{$fa-css-prefix}-cuttlefish:before { content: fa-content($fa-var-cuttlefish); }
.#{$fa-css-prefix}-d-and-d:before { content: fa-content($fa-var-d-and-d); }
.#{$fa-css-prefix}-dashcube:before { content: fa-content($fa-var-dashcube); }
.#{$fa-css-prefix}-database:before { content: fa-content($fa-var-database); }
.#{$fa-css-prefix}-deaf:before { content: fa-content($fa-var-deaf); }
.#{$fa-css-prefix}-delicious:before { content: fa-content($fa-var-delicious); }
.#{$fa-css-prefix}-deploydog:before { content: fa-content($fa-var-deploydog); }
.#{$fa-css-prefix}-deskpro:before { content: fa-content($fa-var-deskpro); }
.#{$fa-css-prefix}-desktop:before { content: fa-content($fa-var-desktop); }
.#{$fa-css-prefix}-desktop-alt:before { content: fa-content($fa-var-desktop-alt); }
.#{$fa-css-prefix}-deviantart:before { content: fa-content($fa-var-deviantart); }
.#{$fa-css-prefix}-diamond:before { content: fa-content($fa-var-diamond); }
.#{$fa-css-prefix}-digg:before { content: fa-content($fa-var-digg); }
.#{$fa-css-prefix}-digital-ocean:before { content: fa-content($fa-var-digital-ocean); }
.#{$fa-css-prefix}-discord:before { content: fa-content($fa-var-discord); }
.#{$fa-css-prefix}-discourse:before { content: fa-content($fa-var-discourse); }
.#{$fa-css-prefix}-dochub:before { content: fa-content($fa-var-dochub); }
.#{$fa-css-prefix}-docker:before { content: fa-content($fa-var-docker); }
.#{$fa-css-prefix}-dollar-sign:before { content: fa-content($fa-var-dollar-sign); }
.#{$fa-css-prefix}-dot-circle:before { content: fa-content($fa-var-dot-circle); }
.#{$fa-css-prefix}-download:before { content: fa-content($fa-var-download); }
.#{$fa-css-prefix}-draft2digital:before { content: fa-content($fa-var-draft2digital); }
.#{$fa-css-prefix}-dribbble:before { content: fa-content($fa-var-dribbble); }
.#{$fa-css-prefix}-dribbble-square:before { content: fa-content($fa-var-dribbble-square); }
.#{$fa-css-prefix}-dropbox:before { content: fa-content($fa-var-dropbox); }
.#{$fa-css-prefix}-drupal:before { content: fa-content($fa-var-drupal); }
.#{$fa-css-prefix}-dumbbell:before { content: fa-content($fa-var-dumbbell); }
.#{$fa-css-prefix}-dyalog:before { content: fa-content($fa-var-dyalog); }
.#{$fa-css-prefix}-earlybirds:before { content: fa-content($fa-var-earlybirds); }
.#{$fa-css-prefix}-edge:before { content: fa-content($fa-var-edge); }
.#{$fa-css-prefix}-edit:before { content: fa-content($fa-var-edit); }
.#{$fa-css-prefix}-eject:before { content: fa-content($fa-var-eject); }
.#{$fa-css-prefix}-elementor:before { content: fa-content($fa-var-elementor); }
.#{$fa-css-prefix}-ellipsis-h:before { content: fa-content($fa-var-ellipsis-h); }
.#{$fa-css-prefix}-ellipsis-h-alt:before { content: fa-content($fa-var-ellipsis-h-alt); }
.#{$fa-css-prefix}-ellipsis-v:before { content: fa-content($fa-var-ellipsis-v); }
.#{$fa-css-prefix}-ellipsis-v-alt:before { content: fa-content($fa-var-ellipsis-v-alt); }
.#{$fa-css-prefix}-ember:before { content: fa-content($fa-var-ember); }
.#{$fa-css-prefix}-empire:before { content: fa-content($fa-var-empire); }
.#{$fa-css-prefix}-envelope:before { content: fa-content($fa-var-envelope); }
.#{$fa-css-prefix}-envelope-open:before { content: fa-content($fa-var-envelope-open); }
.#{$fa-css-prefix}-envelope-square:before { content: fa-content($fa-var-envelope-square); }
.#{$fa-css-prefix}-envira:before { content: fa-content($fa-var-envira); }
.#{$fa-css-prefix}-eraser:before { content: fa-content($fa-var-eraser); }
.#{$fa-css-prefix}-erlang:before { content: fa-content($fa-var-erlang); }
.#{$fa-css-prefix}-ethereum:before { content: fa-content($fa-var-ethereum); }
.#{$fa-css-prefix}-etsy:before { content: fa-content($fa-var-etsy); }
.#{$fa-css-prefix}-euro-sign:before { content: fa-content($fa-var-euro-sign); }
.#{$fa-css-prefix}-exchange:before { content: fa-content($fa-var-exchange); }
.#{$fa-css-prefix}-exchange-alt:before { content: fa-content($fa-var-exchange-alt); }
.#{$fa-css-prefix}-exclamation:before { content: fa-content($fa-var-exclamation); }
.#{$fa-css-prefix}-exclamation-circle:before { content: fa-content($fa-var-exclamation-circle); }
.#{$fa-css-prefix}-exclamation-square:before { content: fa-content($fa-var-exclamation-square); }
.#{$fa-css-prefix}-exclamation-triangle:before { content: fa-content($fa-var-exclamation-triangle); }
.#{$fa-css-prefix}-expand:before { content: fa-content($fa-var-expand); }
.#{$fa-css-prefix}-expand-alt:before { content: fa-content($fa-var-expand-alt); }
.#{$fa-css-prefix}-expand-arrows:before { content: fa-content($fa-var-expand-arrows); }
.#{$fa-css-prefix}-expand-arrows-alt:before { content: fa-content($fa-var-expand-arrows-alt); }
.#{$fa-css-prefix}-expand-wide:before { content: fa-content($fa-var-expand-wide); }
.#{$fa-css-prefix}-expeditedssl:before { content: fa-content($fa-var-expeditedssl); }
.#{$fa-css-prefix}-external-link:before { content: fa-content($fa-var-external-link); }
.#{$fa-css-prefix}-external-link-alt:before { content: fa-content($fa-var-external-link-alt); }
.#{$fa-css-prefix}-external-link-square:before { content: fa-content($fa-var-external-link-square); }
.#{$fa-css-prefix}-external-link-square-alt:before { content: fa-content($fa-var-external-link-square-alt); }
.#{$fa-css-prefix}-eye:before { content: fa-content($fa-var-eye); }
.#{$fa-css-prefix}-eye-dropper:before { content: fa-content($fa-var-eye-dropper); }
.#{$fa-css-prefix}-eye-slash:before { content: fa-content($fa-var-eye-slash); }
.#{$fa-css-prefix}-facebook:before { content: fa-content($fa-var-facebook); }
.#{$fa-css-prefix}-facebook-f:before { content: fa-content($fa-var-facebook-f); }
.#{$fa-css-prefix}-facebook-messenger:before { content: fa-content($fa-var-facebook-messenger); }
.#{$fa-css-prefix}-facebook-square:before { content: fa-content($fa-var-facebook-square); }
.#{$fa-css-prefix}-fast-backward:before { content: fa-content($fa-var-fast-backward); }
.#{$fa-css-prefix}-fast-forward:before { content: fa-content($fa-var-fast-forward); }
.#{$fa-css-prefix}-fax:before { content: fa-content($fa-var-fax); }
.#{$fa-css-prefix}-female:before { content: fa-content($fa-var-female); }
.#{$fa-css-prefix}-field-hockey:before { content: fa-content($fa-var-field-hockey); }
.#{$fa-css-prefix}-fighter-jet:before { content: fa-content($fa-var-fighter-jet); }
.#{$fa-css-prefix}-file:before { content: fa-content($fa-var-file); }
.#{$fa-css-prefix}-file-alt:before { content: fa-content($fa-var-file-alt); }
.#{$fa-css-prefix}-file-archive:before { content: fa-content($fa-var-file-archive); }
.#{$fa-css-prefix}-file-audio:before { content: fa-content($fa-var-file-audio); }
.#{$fa-css-prefix}-file-check:before { content: fa-content($fa-var-file-check); }
.#{$fa-css-prefix}-file-code:before { content: fa-content($fa-var-file-code); }
.#{$fa-css-prefix}-file-edit:before { content: fa-content($fa-var-file-edit); }
.#{$fa-css-prefix}-file-excel:before { content: fa-content($fa-var-file-excel); }
.#{$fa-css-prefix}-file-exclamation:before { content: fa-content($fa-var-file-exclamation); }
.#{$fa-css-prefix}-file-image:before { content: fa-content($fa-var-file-image); }
.#{$fa-css-prefix}-file-minus:before { content: fa-content($fa-var-file-minus); }
.#{$fa-css-prefix}-file-pdf:before { content: fa-content($fa-var-file-pdf); }
.#{$fa-css-prefix}-file-plus:before { content: fa-content($fa-var-file-plus); }
.#{$fa-css-prefix}-file-powerpoint:before { content: fa-content($fa-var-file-powerpoint); }
.#{$fa-css-prefix}-file-times:before { content: fa-content($fa-var-file-times); }
.#{$fa-css-prefix}-file-video:before { content: fa-content($fa-var-file-video); }
.#{$fa-css-prefix}-file-word:before { content: fa-content($fa-var-file-word); }
.#{$fa-css-prefix}-film:before { content: fa-content($fa-var-film); }
.#{$fa-css-prefix}-film-alt:before { content: fa-content($fa-var-film-alt); }
.#{$fa-css-prefix}-filter:before { content: fa-content($fa-var-filter); }
.#{$fa-css-prefix}-fire:before { content: fa-content($fa-var-fire); }
.#{$fa-css-prefix}-fire-extinguisher:before { content: fa-content($fa-var-fire-extinguisher); }
.#{$fa-css-prefix}-firefox:before { content: fa-content($fa-var-firefox); }
.#{$fa-css-prefix}-first-order:before { content: fa-content($fa-var-first-order); }
.#{$fa-css-prefix}-firstdraft:before { content: fa-content($fa-var-firstdraft); }
.#{$fa-css-prefix}-flag:before { content: fa-content($fa-var-flag); }
.#{$fa-css-prefix}-flag-checkered:before { content: fa-content($fa-var-flag-checkered); }
.#{$fa-css-prefix}-flask:before { content: fa-content($fa-var-flask); }
.#{$fa-css-prefix}-flickr:before { content: fa-content($fa-var-flickr); }
.#{$fa-css-prefix}-flipboard:before { content: fa-content($fa-var-flipboard); }
.#{$fa-css-prefix}-fly:before { content: fa-content($fa-var-fly); }
.#{$fa-css-prefix}-folder:before { content: fa-content($fa-var-folder); }
.#{$fa-css-prefix}-folder-open:before { content: fa-content($fa-var-folder-open); }
.#{$fa-css-prefix}-font:before { content: fa-content($fa-var-font); }
.#{$fa-css-prefix}-font-awesome:before { content: fa-content($fa-var-font-awesome); }
.#{$fa-css-prefix}-font-awesome-alt:before { content: fa-content($fa-var-font-awesome-alt); }
.#{$fa-css-prefix}-font-awesome-flag:before { content: fa-content($fa-var-font-awesome-flag); }
.#{$fa-css-prefix}-fonticons:before { content: fa-content($fa-var-fonticons); }
.#{$fa-css-prefix}-fonticons-fi:before { content: fa-content($fa-var-fonticons-fi); }
.#{$fa-css-prefix}-football-ball:before { content: fa-content($fa-var-football-ball); }
.#{$fa-css-prefix}-football-helmet:before { content: fa-content($fa-var-football-helmet); }
.#{$fa-css-prefix}-fort-awesome:before { content: fa-content($fa-var-fort-awesome); }
.#{$fa-css-prefix}-fort-awesome-alt:before { content: fa-content($fa-var-fort-awesome-alt); }
.#{$fa-css-prefix}-forumbee:before { content: fa-content($fa-var-forumbee); }
.#{$fa-css-prefix}-forward:before { content: fa-content($fa-var-forward); }
.#{$fa-css-prefix}-foursquare:before { content: fa-content($fa-var-foursquare); }
.#{$fa-css-prefix}-free-code-camp:before { content: fa-content($fa-var-free-code-camp); }
.#{$fa-css-prefix}-freebsd:before { content: fa-content($fa-var-freebsd); }
.#{$fa-css-prefix}-frown:before { content: fa-content($fa-var-frown); }
.#{$fa-css-prefix}-futbol:before { content: fa-content($fa-var-futbol); }
.#{$fa-css-prefix}-gamepad:before { content: fa-content($fa-var-gamepad); }
.#{$fa-css-prefix}-gavel:before { content: fa-content($fa-var-gavel); }
.#{$fa-css-prefix}-gem:before { content: fa-content($fa-var-gem); }
.#{$fa-css-prefix}-genderless:before { content: fa-content($fa-var-genderless); }
.#{$fa-css-prefix}-get-pocket:before { content: fa-content($fa-var-get-pocket); }
.#{$fa-css-prefix}-gg:before { content: fa-content($fa-var-gg); }
.#{$fa-css-prefix}-gg-circle:before { content: fa-content($fa-var-gg-circle); }
.#{$fa-css-prefix}-gift:before { content: fa-content($fa-var-gift); }
.#{$fa-css-prefix}-git:before { content: fa-content($fa-var-git); }
.#{$fa-css-prefix}-git-square:before { content: fa-content($fa-var-git-square); }
.#{$fa-css-prefix}-github:before { content: fa-content($fa-var-github); }
.#{$fa-css-prefix}-github-alt:before { content: fa-content($fa-var-github-alt); }
.#{$fa-css-prefix}-github-square:before { content: fa-content($fa-var-github-square); }
.#{$fa-css-prefix}-gitkraken:before { content: fa-content($fa-var-gitkraken); }
.#{$fa-css-prefix}-gitlab:before { content: fa-content($fa-var-gitlab); }
.#{$fa-css-prefix}-gitter:before { content: fa-content($fa-var-gitter); }
.#{$fa-css-prefix}-glass-martini:before { content: fa-content($fa-var-glass-martini); }
.#{$fa-css-prefix}-glide:before { content: fa-content($fa-var-glide); }
.#{$fa-css-prefix}-glide-g:before { content: fa-content($fa-var-glide-g); }
.#{$fa-css-prefix}-globe:before { content: fa-content($fa-var-globe); }
.#{$fa-css-prefix}-gofore:before { content: fa-content($fa-var-gofore); }
.#{$fa-css-prefix}-golf-ball:before { content: fa-content($fa-var-golf-ball); }
.#{$fa-css-prefix}-golf-club:before { content: fa-content($fa-var-golf-club); }
.#{$fa-css-prefix}-goodreads:before { content: fa-content($fa-var-goodreads); }
.#{$fa-css-prefix}-goodreads-g:before { content: fa-content($fa-var-goodreads-g); }
.#{$fa-css-prefix}-google:before { content: fa-content($fa-var-google); }
.#{$fa-css-prefix}-google-drive:before { content: fa-content($fa-var-google-drive); }
.#{$fa-css-prefix}-google-play:before { content: fa-content($fa-var-google-play); }
.#{$fa-css-prefix}-google-plus:before { content: fa-content($fa-var-google-plus); }
.#{$fa-css-prefix}-google-plus-g:before { content: fa-content($fa-var-google-plus-g); }
.#{$fa-css-prefix}-google-plus-square:before { content: fa-content($fa-var-google-plus-square); }
.#{$fa-css-prefix}-google-wallet:before { content: fa-content($fa-var-google-wallet); }
.#{$fa-css-prefix}-graduation-cap:before { content: fa-content($fa-var-graduation-cap); }
.#{$fa-css-prefix}-gratipay:before { content: fa-content($fa-var-gratipay); }
.#{$fa-css-prefix}-grav:before { content: fa-content($fa-var-grav); }
.#{$fa-css-prefix}-gripfire:before { content: fa-content($fa-var-gripfire); }
.#{$fa-css-prefix}-grunt:before { content: fa-content($fa-var-grunt); }
.#{$fa-css-prefix}-gulp:before { content: fa-content($fa-var-gulp); }
.#{$fa-css-prefix}-h-square:before { content: fa-content($fa-var-h-square); }
.#{$fa-css-prefix}-h1:before { content: fa-content($fa-var-h1); }
.#{$fa-css-prefix}-h2:before { content: fa-content($fa-var-h2); }
.#{$fa-css-prefix}-h3:before { content: fa-content($fa-var-h3); }
.#{$fa-css-prefix}-hacker-news:before { content: fa-content($fa-var-hacker-news); }
.#{$fa-css-prefix}-hacker-news-square:before { content: fa-content($fa-var-hacker-news-square); }
.#{$fa-css-prefix}-hand-lizard:before { content: fa-content($fa-var-hand-lizard); }
.#{$fa-css-prefix}-hand-paper:before { content: fa-content($fa-var-hand-paper); }
.#{$fa-css-prefix}-hand-peace:before { content: fa-content($fa-var-hand-peace); }
.#{$fa-css-prefix}-hand-point-down:before { content: fa-content($fa-var-hand-point-down); }
.#{$fa-css-prefix}-hand-point-left:before { content: fa-content($fa-var-hand-point-left); }
.#{$fa-css-prefix}-hand-point-right:before { content: fa-content($fa-var-hand-point-right); }
.#{$fa-css-prefix}-hand-point-up:before { content: fa-content($fa-var-hand-point-up); }
.#{$fa-css-prefix}-hand-pointer:before { content: fa-content($fa-var-hand-pointer); }
.#{$fa-css-prefix}-hand-rock:before { content: fa-content($fa-var-hand-rock); }
.#{$fa-css-prefix}-hand-scissors:before { content: fa-content($fa-var-hand-scissors); }
.#{$fa-css-prefix}-hand-spock:before { content: fa-content($fa-var-hand-spock); }
.#{$fa-css-prefix}-handshake:before { content: fa-content($fa-var-handshake); }
.#{$fa-css-prefix}-hashtag:before { content: fa-content($fa-var-hashtag); }
.#{$fa-css-prefix}-hdd:before { content: fa-content($fa-var-hdd); }
.#{$fa-css-prefix}-heading:before { content: fa-content($fa-var-heading); }
.#{$fa-css-prefix}-headphones:before { content: fa-content($fa-var-headphones); }
.#{$fa-css-prefix}-heart:before { content: fa-content($fa-var-heart); }
.#{$fa-css-prefix}-heartbeat:before { content: fa-content($fa-var-heartbeat); }
.#{$fa-css-prefix}-hexagon:before { content: fa-content($fa-var-hexagon); }
.#{$fa-css-prefix}-hips:before { content: fa-content($fa-var-hips); }
.#{$fa-css-prefix}-hire-a-helper:before { content: fa-content($fa-var-hire-a-helper); }
.#{$fa-css-prefix}-history:before { content: fa-content($fa-var-history); }
.#{$fa-css-prefix}-hockey-puck:before { content: fa-content($fa-var-hockey-puck); }
.#{$fa-css-prefix}-hockey-sticks:before { content: fa-content($fa-var-hockey-sticks); }
.#{$fa-css-prefix}-home:before { content: fa-content($fa-var-home); }
.#{$fa-css-prefix}-hooli:before { content: fa-content($fa-var-hooli); }
.#{$fa-css-prefix}-hospital:before { content: fa-content($fa-var-hospital); }
.#{$fa-css-prefix}-hotjar:before { content: fa-content($fa-var-hotjar); }
.#{$fa-css-prefix}-hourglass:before { content: fa-content($fa-var-hourglass); }
.#{$fa-css-prefix}-hourglass-end:before { content: fa-content($fa-var-hourglass-end); }
.#{$fa-css-prefix}-hourglass-half:before { content: fa-content($fa-var-hourglass-half); }
.#{$fa-css-prefix}-hourglass-start:before { content: fa-content($fa-var-hourglass-start); }
.#{$fa-css-prefix}-houzz:before { content: fa-content($fa-var-houzz); }
.#{$fa-css-prefix}-html5:before { content: fa-content($fa-var-html5); }
.#{$fa-css-prefix}-hubspot:before { content: fa-content($fa-var-hubspot); }
.#{$fa-css-prefix}-i-cursor:before { content: fa-content($fa-var-i-cursor); }
.#{$fa-css-prefix}-id-badge:before { content: fa-content($fa-var-id-badge); }
.#{$fa-css-prefix}-id-card:before { content: fa-content($fa-var-id-card); }
.#{$fa-css-prefix}-image:before { content: fa-content($fa-var-image); }
.#{$fa-css-prefix}-images:before { content: fa-content($fa-var-images); }
.#{$fa-css-prefix}-imdb:before { content: fa-content($fa-var-imdb); }
.#{$fa-css-prefix}-inbox:before { content: fa-content($fa-var-inbox); }
.#{$fa-css-prefix}-inbox-in:before { content: fa-content($fa-var-inbox-in); }
.#{$fa-css-prefix}-inbox-out:before { content: fa-content($fa-var-inbox-out); }
.#{$fa-css-prefix}-indent:before { content: fa-content($fa-var-indent); }
.#{$fa-css-prefix}-industry:before { content: fa-content($fa-var-industry); }
.#{$fa-css-prefix}-industry-alt:before { content: fa-content($fa-var-industry-alt); }
.#{$fa-css-prefix}-info:before { content: fa-content($fa-var-info); }
.#{$fa-css-prefix}-info-circle:before { content: fa-content($fa-var-info-circle); }
.#{$fa-css-prefix}-info-square:before { content: fa-content($fa-var-info-square); }
.#{$fa-css-prefix}-instagram:before { content: fa-content($fa-var-instagram); }
.#{$fa-css-prefix}-internet-explorer:before { content: fa-content($fa-var-internet-explorer); }
.#{$fa-css-prefix}-ioxhost:before { content: fa-content($fa-var-ioxhost); }
.#{$fa-css-prefix}-italic:before { content: fa-content($fa-var-italic); }
.#{$fa-css-prefix}-itunes:before { content: fa-content($fa-var-itunes); }
.#{$fa-css-prefix}-itunes-note:before { content: fa-content($fa-var-itunes-note); }
.#{$fa-css-prefix}-jack-o-lantern:before { content: fa-content($fa-var-jack-o-lantern); }
.#{$fa-css-prefix}-jenkins:before { content: fa-content($fa-var-jenkins); }
.#{$fa-css-prefix}-joget:before { content: fa-content($fa-var-joget); }
.#{$fa-css-prefix}-joomla:before { content: fa-content($fa-var-joomla); }
.#{$fa-css-prefix}-js:before { content: fa-content($fa-var-js); }
.#{$fa-css-prefix}-js-square:before { content: fa-content($fa-var-js-square); }
.#{$fa-css-prefix}-jsfiddle:before { content: fa-content($fa-var-jsfiddle); }
.#{$fa-css-prefix}-key:before { content: fa-content($fa-var-key); }
.#{$fa-css-prefix}-keyboard:before { content: fa-content($fa-var-keyboard); }
.#{$fa-css-prefix}-keycdn:before { content: fa-content($fa-var-keycdn); }
.#{$fa-css-prefix}-kickstarter:before { content: fa-content($fa-var-kickstarter); }
.#{$fa-css-prefix}-kickstarter-k:before { content: fa-content($fa-var-kickstarter-k); }
.#{$fa-css-prefix}-korvue:before { content: fa-content($fa-var-korvue); }
.#{$fa-css-prefix}-language:before { content: fa-content($fa-var-language); }
.#{$fa-css-prefix}-laptop:before { content: fa-content($fa-var-laptop); }
.#{$fa-css-prefix}-laravel:before { content: fa-content($fa-var-laravel); }
.#{$fa-css-prefix}-lastfm:before { content: fa-content($fa-var-lastfm); }
.#{$fa-css-prefix}-lastfm-square:before { content: fa-content($fa-var-lastfm-square); }
.#{$fa-css-prefix}-leaf:before { content: fa-content($fa-var-leaf); }
.#{$fa-css-prefix}-leanpub:before { content: fa-content($fa-var-leanpub); }
.#{$fa-css-prefix}-lemon:before { content: fa-content($fa-var-lemon); }
.#{$fa-css-prefix}-less:before { content: fa-content($fa-var-less); }
.#{$fa-css-prefix}-level-down:before { content: fa-content($fa-var-level-down); }
.#{$fa-css-prefix}-level-down-alt:before { content: fa-content($fa-var-level-down-alt); }
.#{$fa-css-prefix}-level-up:before { content: fa-content($fa-var-level-up); }
.#{$fa-css-prefix}-level-up-alt:before { content: fa-content($fa-var-level-up-alt); }
.#{$fa-css-prefix}-life-ring:before { content: fa-content($fa-var-life-ring); }
.#{$fa-css-prefix}-lightbulb:before { content: fa-content($fa-var-lightbulb); }
.#{$fa-css-prefix}-line:before { content: fa-content($fa-var-line); }
.#{$fa-css-prefix}-link:before { content: fa-content($fa-var-link); }
.#{$fa-css-prefix}-linkedin:before { content: fa-content($fa-var-linkedin); }
.#{$fa-css-prefix}-linkedin-in:before { content: fa-content($fa-var-linkedin-in); }
.#{$fa-css-prefix}-linode:before { content: fa-content($fa-var-linode); }
.#{$fa-css-prefix}-linux:before { content: fa-content($fa-var-linux); }
.#{$fa-css-prefix}-lira-sign:before { content: fa-content($fa-var-lira-sign); }
.#{$fa-css-prefix}-list:before { content: fa-content($fa-var-list); }
.#{$fa-css-prefix}-list-alt:before { content: fa-content($fa-var-list-alt); }
.#{$fa-css-prefix}-list-ol:before { content: fa-content($fa-var-list-ol); }
.#{$fa-css-prefix}-list-ul:before { content: fa-content($fa-var-list-ul); }
.#{$fa-css-prefix}-location-arrow:before { content: fa-content($fa-var-location-arrow); }
.#{$fa-css-prefix}-lock:before { content: fa-content($fa-var-lock); }
.#{$fa-css-prefix}-lock-alt:before { content: fa-content($fa-var-lock-alt); }
.#{$fa-css-prefix}-lock-open:before { content: fa-content($fa-var-lock-open); }
.#{$fa-css-prefix}-lock-open-alt:before { content: fa-content($fa-var-lock-open-alt); }
.#{$fa-css-prefix}-long-arrow-alt-down:before { content: fa-content($fa-var-long-arrow-alt-down); }
.#{$fa-css-prefix}-long-arrow-alt-left:before { content: fa-content($fa-var-long-arrow-alt-left); }
.#{$fa-css-prefix}-long-arrow-alt-right:before { content: fa-content($fa-var-long-arrow-alt-right); }
.#{$fa-css-prefix}-long-arrow-alt-up:before { content: fa-content($fa-var-long-arrow-alt-up); }
.#{$fa-css-prefix}-long-arrow-down:before { content: fa-content($fa-var-long-arrow-down); }
.#{$fa-css-prefix}-long-arrow-left:before { content: fa-content($fa-var-long-arrow-left); }
.#{$fa-css-prefix}-long-arrow-right:before { content: fa-content($fa-var-long-arrow-right); }
.#{$fa-css-prefix}-long-arrow-up:before { content: fa-content($fa-var-long-arrow-up); }
.#{$fa-css-prefix}-low-vision:before { content: fa-content($fa-var-low-vision); }
.#{$fa-css-prefix}-luchador:before { content: fa-content($fa-var-luchador); }
.#{$fa-css-prefix}-lyft:before { content: fa-content($fa-var-lyft); }
.#{$fa-css-prefix}-magento:before { content: fa-content($fa-var-magento); }
.#{$fa-css-prefix}-magic:before { content: fa-content($fa-var-magic); }
.#{$fa-css-prefix}-magnet:before { content: fa-content($fa-var-magnet); }
.#{$fa-css-prefix}-male:before { content: fa-content($fa-var-male); }
.#{$fa-css-prefix}-map:before { content: fa-content($fa-var-map); }
.#{$fa-css-prefix}-map-marker:before { content: fa-content($fa-var-map-marker); }
.#{$fa-css-prefix}-map-marker-alt:before { content: fa-content($fa-var-map-marker-alt); }
.#{$fa-css-prefix}-map-pin:before { content: fa-content($fa-var-map-pin); }
.#{$fa-css-prefix}-map-signs:before { content: fa-content($fa-var-map-signs); }
.#{$fa-css-prefix}-mars:before { content: fa-content($fa-var-mars); }
.#{$fa-css-prefix}-mars-double:before { content: fa-content($fa-var-mars-double); }
.#{$fa-css-prefix}-mars-stroke:before { content: fa-content($fa-var-mars-stroke); }
.#{$fa-css-prefix}-mars-stroke-h:before { content: fa-content($fa-var-mars-stroke-h); }
.#{$fa-css-prefix}-mars-stroke-v:before { content: fa-content($fa-var-mars-stroke-v); }
.#{$fa-css-prefix}-maxcdn:before { content: fa-content($fa-var-maxcdn); }
.#{$fa-css-prefix}-medapps:before { content: fa-content($fa-var-medapps); }
.#{$fa-css-prefix}-medium:before { content: fa-content($fa-var-medium); }
.#{$fa-css-prefix}-medium-m:before { content: fa-content($fa-var-medium-m); }
.#{$fa-css-prefix}-medkit:before { content: fa-content($fa-var-medkit); }
.#{$fa-css-prefix}-medrt:before { content: fa-content($fa-var-medrt); }
.#{$fa-css-prefix}-meetup:before { content: fa-content($fa-var-meetup); }
.#{$fa-css-prefix}-meh:before { content: fa-content($fa-var-meh); }
.#{$fa-css-prefix}-mercury:before { content: fa-content($fa-var-mercury); }
.#{$fa-css-prefix}-microchip:before { content: fa-content($fa-var-microchip); }
.#{$fa-css-prefix}-microphone:before { content: fa-content($fa-var-microphone); }
.#{$fa-css-prefix}-microphone-alt:before { content: fa-content($fa-var-microphone-alt); }
.#{$fa-css-prefix}-microphone-slash:before { content: fa-content($fa-var-microphone-slash); }
.#{$fa-css-prefix}-microsoft:before { content: fa-content($fa-var-microsoft); }
.#{$fa-css-prefix}-minus:before { content: fa-content($fa-var-minus); }
.#{$fa-css-prefix}-minus-circle:before { content: fa-content($fa-var-minus-circle); }
.#{$fa-css-prefix}-minus-hexagon:before { content: fa-content($fa-var-minus-hexagon); }
.#{$fa-css-prefix}-minus-octagon:before { content: fa-content($fa-var-minus-octagon); }
.#{$fa-css-prefix}-minus-square:before { content: fa-content($fa-var-minus-square); }
.#{$fa-css-prefix}-mix:before { content: fa-content($fa-var-mix); }
.#{$fa-css-prefix}-mixcloud:before { content: fa-content($fa-var-mixcloud); }
.#{$fa-css-prefix}-mizuni:before { content: fa-content($fa-var-mizuni); }
.#{$fa-css-prefix}-mobile:before { content: fa-content($fa-var-mobile); }
.#{$fa-css-prefix}-mobile-alt:before { content: fa-content($fa-var-mobile-alt); }
.#{$fa-css-prefix}-mobile-android:before { content: fa-content($fa-var-mobile-android); }
.#{$fa-css-prefix}-mobile-android-alt:before { content: fa-content($fa-var-mobile-android-alt); }
.#{$fa-css-prefix}-modx:before { content: fa-content($fa-var-modx); }
.#{$fa-css-prefix}-monero:before { content: fa-content($fa-var-monero); }
.#{$fa-css-prefix}-money-bill:before { content: fa-content($fa-var-money-bill); }
.#{$fa-css-prefix}-money-bill-alt:before { content: fa-content($fa-var-money-bill-alt); }
.#{$fa-css-prefix}-moon:before { content: fa-content($fa-var-moon); }
.#{$fa-css-prefix}-motorcycle:before { content: fa-content($fa-var-motorcycle); }
.#{$fa-css-prefix}-mouse-pointer:before { content: fa-content($fa-var-mouse-pointer); }
.#{$fa-css-prefix}-music:before { content: fa-content($fa-var-music); }
.#{$fa-css-prefix}-napster:before { content: fa-content($fa-var-napster); }
.#{$fa-css-prefix}-neuter:before { content: fa-content($fa-var-neuter); }
.#{$fa-css-prefix}-newspaper:before { content: fa-content($fa-var-newspaper); }
.#{$fa-css-prefix}-nintendo-switch:before { content: fa-content($fa-var-nintendo-switch); }
.#{$fa-css-prefix}-node:before { content: fa-content($fa-var-node); }
.#{$fa-css-prefix}-node-js:before { content: fa-content($fa-var-node-js); }
.#{$fa-css-prefix}-npm:before { content: fa-content($fa-var-npm); }
.#{$fa-css-prefix}-ns8:before { content: fa-content($fa-var-ns8); }
.#{$fa-css-prefix}-nutritionix:before { content: fa-content($fa-var-nutritionix); }
.#{$fa-css-prefix}-object-group:before { content: fa-content($fa-var-object-group); }
.#{$fa-css-prefix}-object-ungroup:before { content: fa-content($fa-var-object-ungroup); }
.#{$fa-css-prefix}-octagon:before { content: fa-content($fa-var-octagon); }
.#{$fa-css-prefix}-odnoklassniki:before { content: fa-content($fa-var-odnoklassniki); }
.#{$fa-css-prefix}-odnoklassniki-square:before { content: fa-content($fa-var-odnoklassniki-square); }
.#{$fa-css-prefix}-opencart:before { content: fa-content($fa-var-opencart); }
.#{$fa-css-prefix}-openid:before { content: fa-content($fa-var-openid); }
.#{$fa-css-prefix}-opera:before { content: fa-content($fa-var-opera); }
.#{$fa-css-prefix}-optin-monster:before { content: fa-content($fa-var-optin-monster); }
.#{$fa-css-prefix}-osi:before { content: fa-content($fa-var-osi); }
.#{$fa-css-prefix}-outdent:before { content: fa-content($fa-var-outdent); }
.#{$fa-css-prefix}-page4:before { content: fa-content($fa-var-page4); }
.#{$fa-css-prefix}-pagelines:before { content: fa-content($fa-var-pagelines); }
.#{$fa-css-prefix}-paint-brush:before { content: fa-content($fa-var-paint-brush); }
.#{$fa-css-prefix}-palfed:before { content: fa-content($fa-var-palfed); }
.#{$fa-css-prefix}-paper-plane:before { content: fa-content($fa-var-paper-plane); }
.#{$fa-css-prefix}-paperclip:before { content: fa-content($fa-var-paperclip); }
.#{$fa-css-prefix}-paragraph:before { content: fa-content($fa-var-paragraph); }
.#{$fa-css-prefix}-paste:before { content: fa-content($fa-var-paste); }
.#{$fa-css-prefix}-patreon:before { content: fa-content($fa-var-patreon); }
.#{$fa-css-prefix}-pause:before { content: fa-content($fa-var-pause); }
.#{$fa-css-prefix}-pause-circle:before { content: fa-content($fa-var-pause-circle); }
.#{$fa-css-prefix}-paw:before { content: fa-content($fa-var-paw); }
.#{$fa-css-prefix}-paypal:before { content: fa-content($fa-var-paypal); }
.#{$fa-css-prefix}-pen:before { content: fa-content($fa-var-pen); }
.#{$fa-css-prefix}-pen-alt:before { content: fa-content($fa-var-pen-alt); }
.#{$fa-css-prefix}-pen-square:before { content: fa-content($fa-var-pen-square); }
.#{$fa-css-prefix}-pencil:before { content: fa-content($fa-var-pencil); }
.#{$fa-css-prefix}-pencil-alt:before { content: fa-content($fa-var-pencil-alt); }
.#{$fa-css-prefix}-pennant:before { content: fa-content($fa-var-pennant); }
.#{$fa-css-prefix}-percent:before { content: fa-content($fa-var-percent); }
.#{$fa-css-prefix}-periscope:before { content: fa-content($fa-var-periscope); }
.#{$fa-css-prefix}-phabricator:before { content: fa-content($fa-var-phabricator); }
.#{$fa-css-prefix}-phoenix-framework:before { content: fa-content($fa-var-phoenix-framework); }
.#{$fa-css-prefix}-phone:before { content: fa-content($fa-var-phone); }
.#{$fa-css-prefix}-phone-slash:before { content: fa-content($fa-var-phone-slash); }
.#{$fa-css-prefix}-phone-square:before { content: fa-content($fa-var-phone-square); }
.#{$fa-css-prefix}-phone-volume:before { content: fa-content($fa-var-phone-volume); }
.#{$fa-css-prefix}-php:before { content: fa-content($fa-var-php); }
.#{$fa-css-prefix}-pied-piper:before { content: fa-content($fa-var-pied-piper); }
.#{$fa-css-prefix}-pied-piper-alt:before { content: fa-content($fa-var-pied-piper-alt); }
.#{$fa-css-prefix}-pied-piper-pp:before { content: fa-content($fa-var-pied-piper-pp); }
.#{$fa-css-prefix}-pinterest:before { content: fa-content($fa-var-pinterest); }
.#{$fa-css-prefix}-pinterest-p:before { content: fa-content($fa-var-pinterest-p); }
.#{$fa-css-prefix}-pinterest-square:before { content: fa-content($fa-var-pinterest-square); }
.#{$fa-css-prefix}-plane:before { content: fa-content($fa-var-plane); }
.#{$fa-css-prefix}-plane-alt:before { content: fa-content($fa-var-plane-alt); }
.#{$fa-css-prefix}-play:before { content: fa-content($fa-var-play); }
.#{$fa-css-prefix}-play-circle:before { content: fa-content($fa-var-play-circle); }
.#{$fa-css-prefix}-playstation:before { content: fa-content($fa-var-playstation); }
.#{$fa-css-prefix}-plug:before { content: fa-content($fa-var-plug); }
.#{$fa-css-prefix}-plus:before { content: fa-content($fa-var-plus); }
.#{$fa-css-prefix}-plus-circle:before { content: fa-content($fa-var-plus-circle); }
.#{$fa-css-prefix}-plus-hexagon:before { content: fa-content($fa-var-plus-hexagon); }
.#{$fa-css-prefix}-plus-octagon:before { content: fa-content($fa-var-plus-octagon); }
.#{$fa-css-prefix}-plus-square:before { content: fa-content($fa-var-plus-square); }
.#{$fa-css-prefix}-podcast:before { content: fa-content($fa-var-podcast); }
.#{$fa-css-prefix}-poo:before { content: fa-content($fa-var-poo); }
.#{$fa-css-prefix}-portrait:before { content: fa-content($fa-var-portrait); }
.#{$fa-css-prefix}-pound-sign:before { content: fa-content($fa-var-pound-sign); }
.#{$fa-css-prefix}-power-off:before { content: fa-content($fa-var-power-off); }
.#{$fa-css-prefix}-print:before { content: fa-content($fa-var-print); }
.#{$fa-css-prefix}-product-hunt:before { content: fa-content($fa-var-product-hunt); }
.#{$fa-css-prefix}-pushed:before { content: fa-content($fa-var-pushed); }
.#{$fa-css-prefix}-puzzle-piece:before { content: fa-content($fa-var-puzzle-piece); }
.#{$fa-css-prefix}-python:before { content: fa-content($fa-var-python); }
.#{$fa-css-prefix}-qq:before { content: fa-content($fa-var-qq); }
.#{$fa-css-prefix}-qrcode:before { content: fa-content($fa-var-qrcode); }
.#{$fa-css-prefix}-question:before { content: fa-content($fa-var-question); }
.#{$fa-css-prefix}-question-circle:before { content: fa-content($fa-var-question-circle); }
.#{$fa-css-prefix}-question-square:before { content: fa-content($fa-var-question-square); }
.#{$fa-css-prefix}-quidditch:before { content: fa-content($fa-var-quidditch); }
.#{$fa-css-prefix}-quinscape:before { content: fa-content($fa-var-quinscape); }
.#{$fa-css-prefix}-quora:before { content: fa-content($fa-var-quora); }
.#{$fa-css-prefix}-quote-left:before { content: fa-content($fa-var-quote-left); }
.#{$fa-css-prefix}-quote-right:before { content: fa-content($fa-var-quote-right); }
.#{$fa-css-prefix}-racquet:before { content: fa-content($fa-var-racquet); }
.#{$fa-css-prefix}-random:before { content: fa-content($fa-var-random); }
.#{$fa-css-prefix}-ravelry:before { content: fa-content($fa-var-ravelry); }
.#{$fa-css-prefix}-react:before { content: fa-content($fa-var-react); }
.#{$fa-css-prefix}-rebel:before { content: fa-content($fa-var-rebel); }
.#{$fa-css-prefix}-rectangle-landscape:before { content: fa-content($fa-var-rectangle-landscape); }
.#{$fa-css-prefix}-rectangle-portrait:before { content: fa-content($fa-var-rectangle-portrait); }
.#{$fa-css-prefix}-rectangle-wide:before { content: fa-content($fa-var-rectangle-wide); }
.#{$fa-css-prefix}-recycle:before { content: fa-content($fa-var-recycle); }
.#{$fa-css-prefix}-red-river:before { content: fa-content($fa-var-red-river); }
.#{$fa-css-prefix}-reddit:before { content: fa-content($fa-var-reddit); }
.#{$fa-css-prefix}-reddit-alien:before { content: fa-content($fa-var-reddit-alien); }
.#{$fa-css-prefix}-reddit-square:before { content: fa-content($fa-var-reddit-square); }
.#{$fa-css-prefix}-redo:before { content: fa-content($fa-var-redo); }
.#{$fa-css-prefix}-redo-alt:before { content: fa-content($fa-var-redo-alt); }
.#{$fa-css-prefix}-registered:before { content: fa-content($fa-var-registered); }
.#{$fa-css-prefix}-rendact:before { content: fa-content($fa-var-rendact); }
.#{$fa-css-prefix}-renren:before { content: fa-content($fa-var-renren); }
.#{$fa-css-prefix}-repeat:before { content: fa-content($fa-var-repeat); }
.#{$fa-css-prefix}-repeat-1:before { content: fa-content($fa-var-repeat-1); }
.#{$fa-css-prefix}-repeat-1-alt:before { content: fa-content($fa-var-repeat-1-alt); }
.#{$fa-css-prefix}-repeat-alt:before { content: fa-content($fa-var-repeat-alt); }
.#{$fa-css-prefix}-reply:before { content: fa-content($fa-var-reply); }
.#{$fa-css-prefix}-reply-all:before { content: fa-content($fa-var-reply-all); }
.#{$fa-css-prefix}-replyd:before { content: fa-content($fa-var-replyd); }
.#{$fa-css-prefix}-resolving:before { content: fa-content($fa-var-resolving); }
.#{$fa-css-prefix}-retweet:before { content: fa-content($fa-var-retweet); }
.#{$fa-css-prefix}-retweet-alt:before { content: fa-content($fa-var-retweet-alt); }
.#{$fa-css-prefix}-road:before { content: fa-content($fa-var-road); }
.#{$fa-css-prefix}-rocket:before { content: fa-content($fa-var-rocket); }
.#{$fa-css-prefix}-rocketchat:before { content: fa-content($fa-var-rocketchat); }
.#{$fa-css-prefix}-rockrms:before { content: fa-content($fa-var-rockrms); }
.#{$fa-css-prefix}-rss:before { content: fa-content($fa-var-rss); }
.#{$fa-css-prefix}-rss-square:before { content: fa-content($fa-var-rss-square); }
.#{$fa-css-prefix}-ruble-sign:before { content: fa-content($fa-var-ruble-sign); }
.#{$fa-css-prefix}-rupee-sign:before { content: fa-content($fa-var-rupee-sign); }
.#{$fa-css-prefix}-safari:before { content: fa-content($fa-var-safari); }
.#{$fa-css-prefix}-sass:before { content: fa-content($fa-var-sass); }
.#{$fa-css-prefix}-save:before { content: fa-content($fa-var-save); }
.#{$fa-css-prefix}-schlix:before { content: fa-content($fa-var-schlix); }
.#{$fa-css-prefix}-scribd:before { content: fa-content($fa-var-scribd); }
.#{$fa-css-prefix}-scrubber:before { content: fa-content($fa-var-scrubber); }
.#{$fa-css-prefix}-search:before { content: fa-content($fa-var-search); }
.#{$fa-css-prefix}-search-minus:before { content: fa-content($fa-var-search-minus); }
.#{$fa-css-prefix}-search-plus:before { content: fa-content($fa-var-search-plus); }
.#{$fa-css-prefix}-searchengin:before { content: fa-content($fa-var-searchengin); }
.#{$fa-css-prefix}-sellcast:before { content: fa-content($fa-var-sellcast); }
.#{$fa-css-prefix}-sellsy:before { content: fa-content($fa-var-sellsy); }
.#{$fa-css-prefix}-server:before { content: fa-content($fa-var-server); }
.#{$fa-css-prefix}-servicestack:before { content: fa-content($fa-var-servicestack); }
.#{$fa-css-prefix}-share:before { content: fa-content($fa-var-share); }
.#{$fa-css-prefix}-share-all:before { content: fa-content($fa-var-share-all); }
.#{$fa-css-prefix}-share-alt:before { content: fa-content($fa-var-share-alt); }
.#{$fa-css-prefix}-share-alt-square:before { content: fa-content($fa-var-share-alt-square); }
.#{$fa-css-prefix}-share-square:before { content: fa-content($fa-var-share-square); }
.#{$fa-css-prefix}-shekel-sign:before { content: fa-content($fa-var-shekel-sign); }
.#{$fa-css-prefix}-shield:before { content: fa-content($fa-var-shield); }
.#{$fa-css-prefix}-shield-alt:before { content: fa-content($fa-var-shield-alt); }
.#{$fa-css-prefix}-shield-check:before { content: fa-content($fa-var-shield-check); }
.#{$fa-css-prefix}-ship:before { content: fa-content($fa-var-ship); }
.#{$fa-css-prefix}-shirtsinbulk:before { content: fa-content($fa-var-shirtsinbulk); }
.#{$fa-css-prefix}-shopping-bag:before { content: fa-content($fa-var-shopping-bag); }
.#{$fa-css-prefix}-shopping-basket:before { content: fa-content($fa-var-shopping-basket); }
.#{$fa-css-prefix}-shopping-cart:before { content: fa-content($fa-var-shopping-cart); }
.#{$fa-css-prefix}-shower:before { content: fa-content($fa-var-shower); }
.#{$fa-css-prefix}-shuttlecock:before { content: fa-content($fa-var-shuttlecock); }
.#{$fa-css-prefix}-sign-in:before { content: fa-content($fa-var-sign-in); }
.#{$fa-css-prefix}-sign-in-alt:before { content: fa-content($fa-var-sign-in-alt); }
.#{$fa-css-prefix}-sign-language:before { content: fa-content($fa-var-sign-language); }
.#{$fa-css-prefix}-sign-out:before { content: fa-content($fa-var-sign-out); }
.#{$fa-css-prefix}-sign-out-alt:before { content: fa-content($fa-var-sign-out-alt); }
.#{$fa-css-prefix}-signal:before { content: fa-content($fa-var-signal); }
.#{$fa-css-prefix}-simplybuilt:before { content: fa-content($fa-var-simplybuilt); }
.#{$fa-css-prefix}-sistrix:before { content: fa-content($fa-var-sistrix); }
.#{$fa-css-prefix}-sitemap:before { content: fa-content($fa-var-sitemap); }
.#{$fa-css-prefix}-skyatlas:before { content: fa-content($fa-var-skyatlas); }
.#{$fa-css-prefix}-skype:before { content: fa-content($fa-var-skype); }
.#{$fa-css-prefix}-slack:before { content: fa-content($fa-var-slack); }
.#{$fa-css-prefix}-slack-hash:before { content: fa-content($fa-var-slack-hash); }
.#{$fa-css-prefix}-sliders-h:before { content: fa-content($fa-var-sliders-h); }
.#{$fa-css-prefix}-sliders-h-square:before { content: fa-content($fa-var-sliders-h-square); }
.#{$fa-css-prefix}-sliders-v:before { content: fa-content($fa-var-sliders-v); }
.#{$fa-css-prefix}-sliders-v-square:before { content: fa-content($fa-var-sliders-v-square); }
.#{$fa-css-prefix}-slideshare:before { content: fa-content($fa-var-slideshare); }
.#{$fa-css-prefix}-smile:before { content: fa-content($fa-var-smile); }
.#{$fa-css-prefix}-snapchat:before { content: fa-content($fa-var-snapchat); }
.#{$fa-css-prefix}-snapchat-ghost:before { content: fa-content($fa-var-snapchat-ghost); }
.#{$fa-css-prefix}-snapchat-square:before { content: fa-content($fa-var-snapchat-square); }
.#{$fa-css-prefix}-snowflake:before { content: fa-content($fa-var-snowflake); }
.#{$fa-css-prefix}-sort:before { content: fa-content($fa-var-sort); }
.#{$fa-css-prefix}-sort-alpha-down:before { content: fa-content($fa-var-sort-alpha-down); }
.#{$fa-css-prefix}-sort-alpha-up:before { content: fa-content($fa-var-sort-alpha-up); }
.#{$fa-css-prefix}-sort-amount-down:before { content: fa-content($fa-var-sort-amount-down); }
.#{$fa-css-prefix}-sort-amount-up:before { content: fa-content($fa-var-sort-amount-up); }
.#{$fa-css-prefix}-sort-down:before { content: fa-content($fa-var-sort-down); }
.#{$fa-css-prefix}-sort-numeric-down:before { content: fa-content($fa-var-sort-numeric-down); }
.#{$fa-css-prefix}-sort-numeric-up:before { content: fa-content($fa-var-sort-numeric-up); }
.#{$fa-css-prefix}-sort-up:before { content: fa-content($fa-var-sort-up); }
.#{$fa-css-prefix}-soundcloud:before { content: fa-content($fa-var-soundcloud); }
.#{$fa-css-prefix}-space-shuttle:before { content: fa-content($fa-var-space-shuttle); }
.#{$fa-css-prefix}-spade:before { content: fa-content($fa-var-spade); }
.#{$fa-css-prefix}-speakap:before { content: fa-content($fa-var-speakap); }
.#{$fa-css-prefix}-spinner:before { content: fa-content($fa-var-spinner); }
.#{$fa-css-prefix}-spinner-third:before { content: fa-content($fa-var-spinner-third); }
.#{$fa-css-prefix}-spotify:before { content: fa-content($fa-var-spotify); }
.#{$fa-css-prefix}-square:before { content: fa-content($fa-var-square); }
.#{$fa-css-prefix}-square-full:before { content: fa-content($fa-var-square-full); }
.#{$fa-css-prefix}-stack-exchange:before { content: fa-content($fa-var-stack-exchange); }
.#{$fa-css-prefix}-stack-overflow:before { content: fa-content($fa-var-stack-overflow); }
.#{$fa-css-prefix}-star:before { content: fa-content($fa-var-star); }
.#{$fa-css-prefix}-star-exclamation:before { content: fa-content($fa-var-star-exclamation); }
.#{$fa-css-prefix}-star-half:before { content: fa-content($fa-var-star-half); }
.#{$fa-css-prefix}-staylinked:before { content: fa-content($fa-var-staylinked); }
.#{$fa-css-prefix}-steam:before { content: fa-content($fa-var-steam); }
.#{$fa-css-prefix}-steam-square:before { content: fa-content($fa-var-steam-square); }
.#{$fa-css-prefix}-steam-symbol:before { content: fa-content($fa-var-steam-symbol); }
.#{$fa-css-prefix}-step-backward:before { content: fa-content($fa-var-step-backward); }
.#{$fa-css-prefix}-step-forward:before { content: fa-content($fa-var-step-forward); }
.#{$fa-css-prefix}-stethoscope:before { content: fa-content($fa-var-stethoscope); }
.#{$fa-css-prefix}-sticker-mule:before { content: fa-content($fa-var-sticker-mule); }
.#{$fa-css-prefix}-sticky-note:before { content: fa-content($fa-var-sticky-note); }
.#{$fa-css-prefix}-stop:before { content: fa-content($fa-var-stop); }
.#{$fa-css-prefix}-stop-circle:before { content: fa-content($fa-var-stop-circle); }
.#{$fa-css-prefix}-stopwatch:before { content: fa-content($fa-var-stopwatch); }
.#{$fa-css-prefix}-strava:before { content: fa-content($fa-var-strava); }
.#{$fa-css-prefix}-street-view:before { content: fa-content($fa-var-street-view); }
.#{$fa-css-prefix}-strikethrough:before { content: fa-content($fa-var-strikethrough); }
.#{$fa-css-prefix}-stripe:before { content: fa-content($fa-var-stripe); }
.#{$fa-css-prefix}-stripe-s:before { content: fa-content($fa-var-stripe-s); }
.#{$fa-css-prefix}-studiovinari:before { content: fa-content($fa-var-studiovinari); }
.#{$fa-css-prefix}-stumbleupon:before { content: fa-content($fa-var-stumbleupon); }
.#{$fa-css-prefix}-stumbleupon-circle:before { content: fa-content($fa-var-stumbleupon-circle); }
.#{$fa-css-prefix}-subscript:before { content: fa-content($fa-var-subscript); }
.#{$fa-css-prefix}-subway:before { content: fa-content($fa-var-subway); }
.#{$fa-css-prefix}-suitcase:before { content: fa-content($fa-var-suitcase); }
.#{$fa-css-prefix}-sun:before { content: fa-content($fa-var-sun); }
.#{$fa-css-prefix}-superpowers:before { content: fa-content($fa-var-superpowers); }
.#{$fa-css-prefix}-superscript:before { content: fa-content($fa-var-superscript); }
.#{$fa-css-prefix}-supple:before { content: fa-content($fa-var-supple); }
.#{$fa-css-prefix}-sync:before { content: fa-content($fa-var-sync); }
.#{$fa-css-prefix}-sync-alt:before { content: fa-content($fa-var-sync-alt); }
.#{$fa-css-prefix}-table:before { content: fa-content($fa-var-table); }
.#{$fa-css-prefix}-table-tennis:before { content: fa-content($fa-var-table-tennis); }
.#{$fa-css-prefix}-tablet:before { content: fa-content($fa-var-tablet); }
.#{$fa-css-prefix}-tablet-alt:before { content: fa-content($fa-var-tablet-alt); }
.#{$fa-css-prefix}-tablet-android:before { content: fa-content($fa-var-tablet-android); }
.#{$fa-css-prefix}-tablet-android-alt:before { content: fa-content($fa-var-tablet-android-alt); }
.#{$fa-css-prefix}-tachometer:before { content: fa-content($fa-var-tachometer); }
.#{$fa-css-prefix}-tachometer-alt:before { content: fa-content($fa-var-tachometer-alt); }
.#{$fa-css-prefix}-tag:before { content: fa-content($fa-var-tag); }
.#{$fa-css-prefix}-tags:before { content: fa-content($fa-var-tags); }
.#{$fa-css-prefix}-tasks:before { content: fa-content($fa-var-tasks); }
.#{$fa-css-prefix}-taxi:before { content: fa-content($fa-var-taxi); }
.#{$fa-css-prefix}-telegram:before { content: fa-content($fa-var-telegram); }
.#{$fa-css-prefix}-telegram-plane:before { content: fa-content($fa-var-telegram-plane); }
.#{$fa-css-prefix}-tencent-weibo:before { content: fa-content($fa-var-tencent-weibo); }
.#{$fa-css-prefix}-tennis-ball:before { content: fa-content($fa-var-tennis-ball); }
.#{$fa-css-prefix}-terminal:before { content: fa-content($fa-var-terminal); }
.#{$fa-css-prefix}-text-height:before { content: fa-content($fa-var-text-height); }
.#{$fa-css-prefix}-text-width:before { content: fa-content($fa-var-text-width); }
.#{$fa-css-prefix}-th:before { content: fa-content($fa-var-th); }
.#{$fa-css-prefix}-th-large:before { content: fa-content($fa-var-th-large); }
.#{$fa-css-prefix}-th-list:before { content: fa-content($fa-var-th-list); }
.#{$fa-css-prefix}-themeisle:before { content: fa-content($fa-var-themeisle); }
.#{$fa-css-prefix}-thermometer-empty:before { content: fa-content($fa-var-thermometer-empty); }
.#{$fa-css-prefix}-thermometer-full:before { content: fa-content($fa-var-thermometer-full); }
.#{$fa-css-prefix}-thermometer-half:before { content: fa-content($fa-var-thermometer-half); }
.#{$fa-css-prefix}-thermometer-quarter:before { content: fa-content($fa-var-thermometer-quarter); }
.#{$fa-css-prefix}-thermometer-three-quarters:before { content: fa-content($fa-var-thermometer-three-quarters); }
.#{$fa-css-prefix}-thumbs-down:before { content: fa-content($fa-var-thumbs-down); }
.#{$fa-css-prefix}-thumbs-up:before { content: fa-content($fa-var-thumbs-up); }
.#{$fa-css-prefix}-thumbtack:before { content: fa-content($fa-var-thumbtack); }
.#{$fa-css-prefix}-ticket:before { content: fa-content($fa-var-ticket); }
.#{$fa-css-prefix}-ticket-alt:before { content: fa-content($fa-var-ticket-alt); }
.#{$fa-css-prefix}-times:before { content: fa-content($fa-var-times); }
.#{$fa-css-prefix}-times-circle:before { content: fa-content($fa-var-times-circle); }
.#{$fa-css-prefix}-times-hexagon:before { content: fa-content($fa-var-times-hexagon); }
.#{$fa-css-prefix}-times-octagon:before { content: fa-content($fa-var-times-octagon); }
.#{$fa-css-prefix}-times-square:before { content: fa-content($fa-var-times-square); }
.#{$fa-css-prefix}-tint:before { content: fa-content($fa-var-tint); }
.#{$fa-css-prefix}-toggle-off:before { content: fa-content($fa-var-toggle-off); }
.#{$fa-css-prefix}-toggle-on:before { content: fa-content($fa-var-toggle-on); }
.#{$fa-css-prefix}-trademark:before { content: fa-content($fa-var-trademark); }
.#{$fa-css-prefix}-train:before { content: fa-content($fa-var-train); }
.#{$fa-css-prefix}-transgender:before { content: fa-content($fa-var-transgender); }
.#{$fa-css-prefix}-transgender-alt:before { content: fa-content($fa-var-transgender-alt); }
.#{$fa-css-prefix}-trash:before { content: fa-content($fa-var-trash); }
.#{$fa-css-prefix}-trash-alt:before { content: fa-content($fa-var-trash-alt); }
.#{$fa-css-prefix}-tree:before { content: fa-content($fa-var-tree); }
.#{$fa-css-prefix}-tree-alt:before { content: fa-content($fa-var-tree-alt); }
.#{$fa-css-prefix}-trello:before { content: fa-content($fa-var-trello); }
.#{$fa-css-prefix}-triangle:before { content: fa-content($fa-var-triangle); }
.#{$fa-css-prefix}-tripadvisor:before { content: fa-content($fa-var-tripadvisor); }
.#{$fa-css-prefix}-trophy:before { content: fa-content($fa-var-trophy); }
.#{$fa-css-prefix}-trophy-alt:before { content: fa-content($fa-var-trophy-alt); }
.#{$fa-css-prefix}-truck:before { content: fa-content($fa-var-truck); }
.#{$fa-css-prefix}-tty:before { content: fa-content($fa-var-tty); }
.#{$fa-css-prefix}-tumblr:before { content: fa-content($fa-var-tumblr); }
.#{$fa-css-prefix}-tumblr-square:before { content: fa-content($fa-var-tumblr-square); }
.#{$fa-css-prefix}-tv:before { content: fa-content($fa-var-tv); }
.#{$fa-css-prefix}-tv-retro:before { content: fa-content($fa-var-tv-retro); }
.#{$fa-css-prefix}-twitch:before { content: fa-content($fa-var-twitch); }
.#{$fa-css-prefix}-twitter:before { content: fa-content($fa-var-twitter); }
.#{$fa-css-prefix}-twitter-square:before { content: fa-content($fa-var-twitter-square); }
.#{$fa-css-prefix}-typo3:before { content: fa-content($fa-var-typo3); }
.#{$fa-css-prefix}-uber:before { content: fa-content($fa-var-uber); }
.#{$fa-css-prefix}-uikit:before { content: fa-content($fa-var-uikit); }
.#{$fa-css-prefix}-umbrella:before { content: fa-content($fa-var-umbrella); }
.#{$fa-css-prefix}-underline:before { content: fa-content($fa-var-underline); }
.#{$fa-css-prefix}-undo:before { content: fa-content($fa-var-undo); }
.#{$fa-css-prefix}-undo-alt:before { content: fa-content($fa-var-undo-alt); }
.#{$fa-css-prefix}-uniregistry:before { content: fa-content($fa-var-uniregistry); }
.#{$fa-css-prefix}-universal-access:before { content: fa-content($fa-var-universal-access); }
.#{$fa-css-prefix}-university:before { content: fa-content($fa-var-university); }
.#{$fa-css-prefix}-unlink:before { content: fa-content($fa-var-unlink); }
.#{$fa-css-prefix}-unlock:before { content: fa-content($fa-var-unlock); }
.#{$fa-css-prefix}-unlock-alt:before { content: fa-content($fa-var-unlock-alt); }
.#{$fa-css-prefix}-untappd:before { content: fa-content($fa-var-untappd); }
.#{$fa-css-prefix}-upload:before { content: fa-content($fa-var-upload); }
.#{$fa-css-prefix}-usb:before { content: fa-content($fa-var-usb); }
.#{$fa-css-prefix}-usd-circle:before { content: fa-content($fa-var-usd-circle); }
.#{$fa-css-prefix}-usd-square:before { content: fa-content($fa-var-usd-square); }
.#{$fa-css-prefix}-user:before { content: fa-content($fa-var-user); }
.#{$fa-css-prefix}-user-alt:before { content: fa-content($fa-var-user-alt); }
.#{$fa-css-prefix}-user-circle:before { content: fa-content($fa-var-user-circle); }
.#{$fa-css-prefix}-user-md:before { content: fa-content($fa-var-user-md); }
.#{$fa-css-prefix}-user-plus:before { content: fa-content($fa-var-user-plus); }
.#{$fa-css-prefix}-user-secret:before { content: fa-content($fa-var-user-secret); }
.#{$fa-css-prefix}-user-times:before { content: fa-content($fa-var-user-times); }
.#{$fa-css-prefix}-users:before { content: fa-content($fa-var-users); }
.#{$fa-css-prefix}-ussunnah:before { content: fa-content($fa-var-ussunnah); }
.#{$fa-css-prefix}-utensil-fork:before { content: fa-content($fa-var-utensil-fork); }
.#{$fa-css-prefix}-utensil-knife:before { content: fa-content($fa-var-utensil-knife); }
.#{$fa-css-prefix}-utensil-spoon:before { content: fa-content($fa-var-utensil-spoon); }
.#{$fa-css-prefix}-utensils:before { content: fa-content($fa-var-utensils); }
.#{$fa-css-prefix}-utensils-alt:before { content: fa-content($fa-var-utensils-alt); }
.#{$fa-css-prefix}-vaadin:before { content: fa-content($fa-var-vaadin); }
.#{$fa-css-prefix}-venus:before { content: fa-content($fa-var-venus); }
.#{$fa-css-prefix}-venus-double:before { content: fa-content($fa-var-venus-double); }
.#{$fa-css-prefix}-venus-mars:before { content: fa-content($fa-var-venus-mars); }
.#{$fa-css-prefix}-viacoin:before { content: fa-content($fa-var-viacoin); }
.#{$fa-css-prefix}-viadeo:before { content: fa-content($fa-var-viadeo); }
.#{$fa-css-prefix}-viadeo-square:before { content: fa-content($fa-var-viadeo-square); }
.#{$fa-css-prefix}-viber:before { content: fa-content($fa-var-viber); }
.#{$fa-css-prefix}-video:before { content: fa-content($fa-var-video); }
.#{$fa-css-prefix}-vimeo:before { content: fa-content($fa-var-vimeo); }
.#{$fa-css-prefix}-vimeo-square:before { content: fa-content($fa-var-vimeo-square); }
.#{$fa-css-prefix}-vimeo-v:before { content: fa-content($fa-var-vimeo-v); }
.#{$fa-css-prefix}-vine:before { content: fa-content($fa-var-vine); }
.#{$fa-css-prefix}-vk:before { content: fa-content($fa-var-vk); }
.#{$fa-css-prefix}-vnv:before { content: fa-content($fa-var-vnv); }
.#{$fa-css-prefix}-volleyball-ball:before { content: fa-content($fa-var-volleyball-ball); }
.#{$fa-css-prefix}-volume-down:before { content: fa-content($fa-var-volume-down); }
.#{$fa-css-prefix}-volume-mute:before { content: fa-content($fa-var-volume-mute); }
.#{$fa-css-prefix}-volume-off:before { content: fa-content($fa-var-volume-off); }
.#{$fa-css-prefix}-volume-up:before { content: fa-content($fa-var-volume-up); }
.#{$fa-css-prefix}-vuejs:before { content: fa-content($fa-var-vuejs); }
.#{$fa-css-prefix}-watch:before { content: fa-content($fa-var-watch); }
.#{$fa-css-prefix}-weibo:before { content: fa-content($fa-var-weibo); }
.#{$fa-css-prefix}-weixin:before { content: fa-content($fa-var-weixin); }
.#{$fa-css-prefix}-whatsapp:before { content: fa-content($fa-var-whatsapp); }
.#{$fa-css-prefix}-whatsapp-square:before { content: fa-content($fa-var-whatsapp-square); }
.#{$fa-css-prefix}-wheelchair:before { content: fa-content($fa-var-wheelchair); }
.#{$fa-css-prefix}-whistle:before { content: fa-content($fa-var-whistle); }
.#{$fa-css-prefix}-whmcs:before { content: fa-content($fa-var-whmcs); }
.#{$fa-css-prefix}-wifi:before { content: fa-content($fa-var-wifi); }
.#{$fa-css-prefix}-wikipedia-w:before { content: fa-content($fa-var-wikipedia-w); }
.#{$fa-css-prefix}-window:before { content: fa-content($fa-var-window); }
.#{$fa-css-prefix}-window-alt:before { content: fa-content($fa-var-window-alt); }
.#{$fa-css-prefix}-window-close:before { content: fa-content($fa-var-window-close); }
.#{$fa-css-prefix}-window-maximize:before { content: fa-content($fa-var-window-maximize); }
.#{$fa-css-prefix}-window-minimize:before { content: fa-content($fa-var-window-minimize); }
.#{$fa-css-prefix}-window-restore:before { content: fa-content($fa-var-window-restore); }
.#{$fa-css-prefix}-windows:before { content: fa-content($fa-var-windows); }
.#{$fa-css-prefix}-won-sign:before { content: fa-content($fa-var-won-sign); }
.#{$fa-css-prefix}-wordpress:before { content: fa-content($fa-var-wordpress); }
.#{$fa-css-prefix}-wordpress-simple:before { content: fa-content($fa-var-wordpress-simple); }
.#{$fa-css-prefix}-wpbeginner:before { content: fa-content($fa-var-wpbeginner); }
.#{$fa-css-prefix}-wpexplorer:before { content: fa-content($fa-var-wpexplorer); }
.#{$fa-css-prefix}-wpforms:before { content: fa-content($fa-var-wpforms); }
.#{$fa-css-prefix}-wrench:before { content: fa-content($fa-var-wrench); }
.#{$fa-css-prefix}-xbox:before { content: fa-content($fa-var-xbox); }
.#{$fa-css-prefix}-xing:before { content: fa-content($fa-var-xing); }
.#{$fa-css-prefix}-xing-square:before { content: fa-content($fa-var-xing-square); }
.#{$fa-css-prefix}-y-combinator:before { content: fa-content($fa-var-y-combinator); }
.#{$fa-css-prefix}-yahoo:before { content: fa-content($fa-var-yahoo); }
.#{$fa-css-prefix}-yandex:before { content: fa-content($fa-var-yandex); }
.#{$fa-css-prefix}-yandex-international:before { content: fa-content($fa-var-yandex-international); }
.#{$fa-css-prefix}-yelp:before { content: fa-content($fa-var-yelp); }
.#{$fa-css-prefix}-yen-sign:before { content: fa-content($fa-var-yen-sign); }
.#{$fa-css-prefix}-yoast:before { content: fa-content($fa-var-yoast); }
.#{$fa-css-prefix}-youtube:before { content: fa-content($fa-var-youtube); }
.#{$fa-css-prefix}-youtube-square:before { content: fa-content($fa-var-youtube-square); }

23
_src/plugins/fontawesome5/_larger.scss

@ -0,0 +1,23 @@
// Icon Sizes
// -------------------------
// makes the font 33% larger relative to the icon container
.#{$fa-css-prefix}-lg {
font-size: (4em / 3);
line-height: (3em / 4);
vertical-align: -.0667em;
}
.#{$fa-css-prefix}-xs {
font-size: .75em;
}
.#{$fa-css-prefix}-sm {
font-size: .875em;
}
@for $i from 1 through 10 {
.#{$fa-css-prefix}-#{$i}x {
font-size: $i * 1em;
}
}

18
_src/plugins/fontawesome5/_list.scss

@ -0,0 +1,18 @@
// List Icons
// -------------------------
.#{$fa-css-prefix}-ul {
list-style-type: none;
margin-left: $fa-li-width * 5/4;
padding-left: 0;
> li { position: relative; }
}
.#{$fa-css-prefix}-li {
left: -$fa-li-width;
position: absolute;
text-align: center;
width: $fa-li-width;
line-height: inherit;
}

57
_src/plugins/fontawesome5/_mixins.scss

@ -0,0 +1,57 @@
// Mixins
// --------------------------
@mixin fa-icon {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
display: inline-block;
font-style: normal;
font-variant: normal;
font-weight: normal;
line-height: 1;
vertical-align: -.125em;
}
@mixin fa-icon-rotate($degrees, $rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
transform: rotate($degrees);
}
@mixin fa-icon-flip($horiz, $vert, $rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
transform: scale($horiz, $vert);
}
// Only display content to screen readers. A la Bootstrap 4.
//
// See: http://a11yproject.com/posts/how-to-hide-content/
@mixin sr-only {
border: 0;
clip: rect(0, 0, 0, 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
// Use in conjunction with .sr-only to only display content when it's focused.
//
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
//
// Credit: HTML5 Boilerplate
@mixin sr-only-focusable {
&:active,
&:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto;
}
}

23
_src/plugins/fontawesome5/_rotated-flipped.scss

@ -0,0 +1,23 @@
// Rotated & Flipped Icons
// -------------------------
.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
.#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(-1, -1, 2); }
// Hook for IE8-9
// -------------------------
:root {
.#{$fa-css-prefix}-rotate-90,
.#{$fa-css-prefix}-rotate-180,
.#{$fa-css-prefix}-rotate-270,
.#{$fa-css-prefix}-flip-horizontal,
.#{$fa-css-prefix}-flip-vertical {
filter: none;
}
}

5
_src/plugins/fontawesome5/_screen-reader.scss

@ -0,0 +1,5 @@
// Screen Readers
// -------------------------
.sr-only { @include sr-only; }
.sr-only-focusable { @include sr-only-focusable; }

31
_src/plugins/fontawesome5/_stacked.scss

@ -0,0 +1,31 @@
// Stacked Icons
// -------------------------
.#{$fa-css-prefix}-stack {
display: inline-block;
height: 2em;
line-height: 2em;
position: relative;
vertical-align: middle;
width: 2em;
}
.#{$fa-css-prefix}-stack-1x,
.#{$fa-css-prefix}-stack-2x {
left: 0;
position: absolute;
text-align: center;
width: 100%;
}
.#{$fa-css-prefix}-stack-1x {
line-height: inherit;
}
.#{$fa-css-prefix}-stack-2x {
font-size: 2em;
}
.#{$fa-css-prefix}-inverse {
color: $fa-inverse;
}

1008
_src/plugins/fontawesome5/_variables.scss
File diff suppressed because it is too large
View File

21
_src/plugins/fontawesome5/fa-brands.scss

@ -0,0 +1,21 @@
/*!
* Font Awesome Pro 5.0.6 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Commercial License)
*/
@import 'variables';
@font-face {
font-family: 'Font Awesome 5 Brands';
font-style: normal;
font-weight: normal;
src: url('#{$fa-font-path}/fa-brands-400.eot');
src: url('#{$fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-brands-400.woff') format('woff'),
url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype'),
url('#{$fa-font-path}/fa-brands-400.svg#fontawesome') format('svg');
}
.fab {
font-family: 'Font Awesome 5 Brands';
}

22
_src/plugins/fontawesome5/fa-light.scss

@ -0,0 +1,22 @@
/*!
* Font Awesome Pro 5.0.6 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Commercial License)
*/
@import 'variables';
@font-face {
font-family: 'Font Awesome 5 Pro';
font-style: normal;
font-weight: 300;
src: url('#{$fa-font-path}/fa-light-300.eot');
src: url('#{$fa-font-path}/fa-light-300.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-light-300.woff2') format('woff2'),
url('#{$fa-font-path}/fa-light-300.woff') format('woff'),
url('#{$fa-font-path}/fa-light-300.ttf') format('truetype'),
url('#{$fa-font-path}/fa-light-300.svg#fontawesome') format('svg');
}
.fal {
font-family: 'Font Awesome 5 Pro';
font-weight: 300;
}

22
_src/plugins/fontawesome5/fa-regular.scss

@ -0,0 +1,22 @@
/*!
* Font Awesome Pro 5.0.6 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Commercial License)
*/
@import 'variables';
@font-face {
font-family: 'Font Awesome 5 Pro';
font-style: normal;
font-weight: 400;
src: url('#{$fa-font-path}/fa-regular-400.eot');
src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-regular-400.woff') format('woff'),
url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'),
url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
}
.far {
font-family: 'Font Awesome 5 Pro';
font-weight: 400;
}

23
_src/plugins/fontawesome5/fa-solid.scss

@ -0,0 +1,23 @@
/*!
* Font Awesome Pro 5.0.6 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Commercial License)
*/
@import 'variables';
@font-face {
font-family: 'Font Awesome 5 Pro';
font-style: normal;
font-weight: 900;
src: url('#{$fa-font-path}/fa-solid-900.eot');
src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
url('#{$fa-font-path}/fa-solid-900.woff') format('woff'),
url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'),
url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
}
.fa,
.fas {
font-family: 'Font Awesome 5 Pro';
font-weight: 900;
}

16
_src/plugins/fontawesome5/fontawesome.scss

@ -0,0 +1,16 @@
/*!
* Font Awesome Pro 5.0.6 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Commercial License)
*/
@import 'variables';
@import 'mixins';
@import 'core';
@import 'larger';
@import 'fixed-width';
@import 'list';
@import 'bordered-pulled';
@import 'animated';
@import 'rotated-flipped';
@import 'stacked';
@import 'icons';
@import 'screen-reader';

333
_src/plugins/jquery-ui-1.12.1.custom/AUTHORS.txt

@ -0,0 +1,333 @@
Authors ordered by first contribution
A list of current team members is available at http://jqueryui.com/about
Paul Bakaus <paul.bakaus@gmail.com>
Richard Worth <rdworth@gmail.com>
Yehuda Katz <wycats@gmail.com>
Sean Catchpole <sean@sunsean.com>
John Resig <jeresig@gmail.com>
Tane Piper <piper.tane@gmail.com>
Dmitri Gaskin <dmitrig01@gmail.com>
Klaus Hartl <klaus.hartl@gmail.com>
Stefan Petre <stefan.petre@gmail.com>
Gilles van den Hoven <gilles@webunity.nl>
Micheil Bryan Smith <micheil@brandedcode.com>
Jörn Zaefferer <joern.zaefferer@gmail.com>
Marc Grabanski <m@marcgrabanski.com>
Keith Wood <kbwood@iinet.com.au>
Brandon Aaron <brandon.aaron@gmail.com>
Scott González <scott.gonzalez@gmail.com>
Eduardo Lundgren <eduardolundgren@gmail.com>
Aaron Eisenberger <aaronchi@gmail.com>
Joan Piedra <theneojp@gmail.com>
Bruno Basto <b.basto@gmail.com>
Remy Sharp <remy@leftlogic.com>
Bohdan Ganicky <bohdan.ganicky@gmail.com>
David Bolter <david.bolter@gmail.com>
Chi Cheng <cloudream@gmail.com>
Ca-Phun Ung <pazu2k@gmail.com>
Ariel Flesler <aflesler@gmail.com>
Maggie Wachs <maggie@filamentgroup.com>
Scott Jehl <scottjehl@gmail.com>
Todd Parker <todd@filamentgroup.com>
Andrew Powell <andrew@shellscape.org>
Brant Burnett <btburnett3@gmail.com>
Douglas Neiner <doug@dougneiner.com>
Paul Irish <paul.irish@gmail.com>
Ralph Whitbeck <ralph.whitbeck@gmail.com>
Thibault Duplessis <thibault.duplessis@gmail.com>
Dominique Vincent <dominique.vincent@toitl.com>
Jack Hsu <jack.hsu@gmail.com>
Adam Sontag <ajpiano@ajpiano.com>
Carl Fürstenberg <carl@excito.com>
Kevin Dalman <development@allpro.net>
Alberto Fernández Capel <afcapel@gmail.com>
Jacek Jędrzejewski (http://jacek.jedrzejewski.name)
Ting Kuei <ting@kuei.com>
Samuel Cormier-Iijima <sam@chide.it>
Jon Palmer <jonspalmer@gmail.com>
Ben Hollis <bhollis@amazon.com>
Justin MacCarthy <Justin@Rubystars.biz>
Eyal Kobrigo <kobrigo@hotmail.com>
Tiago Freire <tiago.freire@gmail.com>
Diego Tres <diegotres@gmail.com>
Holger Rüprich <holger@rueprich.de>
Ziling Zhao <zilingzhao@gmail.com>
Mike Alsup <malsup@gmail.com>
Robson Braga Araujo <robsonbraga@gmail.com>
Pierre-Henri Ausseil <ph.ausseil@gmail.com>
Christopher McCulloh <cmcculloh@gmail.com>
Andrew Newcomb <ext.github@preceptsoftware.co.uk>
Lim Chee Aun <cheeaun@gmail.com>
Jorge Barreiro <yortx.barry@gmail.com>
Daniel Steigerwald <daniel@steigerwald.cz>
John Firebaugh <john_firebaugh@bigfix.com>
John Enters <github@darkdark.net>
Andrey Kapitcyn <ru.m157y@gmail.com>
Dmitry Petrov <dpetroff@gmail.com>
Eric Hynds <eric@hynds.net>
Chairat Sunthornwiphat <pipo@sixhead.com>
Josh Varner <josh.varner@gmail.com>
Stéphane Raimbault <stephane.raimbault@gmail.com>
Jay Merrifield <fracmak@gmail.com>
J. Ryan Stinnett <jryans@gmail.com>
Peter Heiberg <peter@heiberg.se>
Alex Dovenmuehle <adovenmuehle@gmail.com>
Jamie Gegerson <git@jamiegegerson.com>
Raymond Schwartz <skeetergraphics@gmail.com>
Phillip Barnes <philbar@gmail.com>
Kyle Wilkinson <kai@wikyd.org>
Khaled AlHourani <me@khaledalhourani.com>
Marian Rudzynski <mr@impaled.org>
Jean-Francois Remy <jeff@melix.org>
Doug Blood <dougblood@gmail.com>
Filippo Cavallarin <filippo.cavallarin@codseq.it>
Heiko Henning <heiko@thehennings.ch>
Aliaksandr Rahalevich <saksmlz@gmail.com>
Mario Visic <mario@mariovisic.com>
Xavi Ramirez <xavi.rmz@gmail.com>
Max Schnur <max.schnur@gmail.com>
Saji Nediyanchath <saji89@gmail.com>
Corey Frang <gnarf37@gmail.com>
Aaron Peterson <aaronp123@yahoo.com>
Ivan Peters <ivan@ivanpeters.com>
Mohamed Cherif Bouchelaghem <cherifbouchelaghem@yahoo.fr>
Marcos Sousa <falecomigo@marcossousa.com>